diff --git a/404.html b/404.html index b658504f9..a47546987 100644 --- a/404.html +++ b/404.html @@ -1,17 +1,14 @@ - + - -Page Not Found | Dappnode - - - + +Page Not Found | Dappnode + + + - -
-
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.

- - + +
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/CNAME b/CNAME deleted file mode 100644 index 521a4ea6f..000000000 --- a/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs.dappnode.io \ No newline at end of file diff --git a/assets/css/styles.32ad77c1.css b/assets/css/styles.32ad77c1.css deleted file mode 100644 index 85a74d488..000000000 --- a/assets/css/styles.32ad77c1.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}pre,table{overflow:auto}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)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}:root,body.dark,body[data-theme=dark]{--aa-icon-color-rgb:119,119,163;--aa-scrollbar-thumb-background-color-rgb:var(--aa-background-color-rgb)}.aa-List,.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--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-white:#fff;--ifm-color-black:#000;--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-gray-1000:var(--ifm-color-black);--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-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--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-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--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-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin: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-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--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-shadow:none;--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-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--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-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--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-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--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-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--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-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-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-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-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--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-shadow:var(--ifm-global-shadow-lw);--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-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--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-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-pills-spacing:0.125rem;--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);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#00b1f4;--ifm-color-primary-dark:#009ed3;--ifm-color-primary-darker:#008cbf;--ifm-color-primary-darkest:#0076a8;--ifm-color-primary-light:#33b8f7;--ifm-color-primary-lighter:#66bff9;--ifm-color-primary-lightest:#99c6fb;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-announcement-bar-height:auto;--aa-search-input-height:44px;--aa-input-icon-size:20px;--aa-base-unit:16;--aa-spacing-factor:1;--aa-spacing:calc(var(--aa-base-unit)*var(--aa-spacing-factor)*1px);--aa-spacing-half:calc(var(--aa-spacing)/2);--aa-panel-max-height:650px;--aa-base-z-index:9999;--aa-font-size:calc(var(--aa-base-unit)*1px);--aa-font-family:inherit;--aa-font-weight-medium:500;--aa-font-weight-semibold:600;--aa-font-weight-bold:700;--aa-icon-size:20px;--aa-icon-stroke-width:1.6;--aa-icon-color-alpha:1;--aa-action-icon-size:20px;--aa-text-color-rgb:38,38,39;--aa-text-color-alpha:1;--aa-primary-color-rgb:62,52,211;--aa-primary-color-alpha:0.2;--aa-muted-color-rgb:128,126,163;--aa-muted-color-alpha:0.6;--aa-panel-border-color-rgb:128,126,163;--aa-panel-border-color-alpha:0.3;--aa-input-border-color-rgb:128,126,163;--aa-input-border-color-alpha:0.8;--aa-background-color-rgb:255,255,255;--aa-background-color-alpha:1;--aa-input-background-color-rgb:255,255,255;--aa-input-background-color-alpha:1;--aa-selected-color-rgb:179,173,214;--aa-selected-color-alpha:0.205;--aa-description-highlight-background-color-rgb:245,223,77;--aa-description-highlight-background-color-alpha:0.5;--aa-detached-media-query:(max-width:680px);--aa-detached-modal-media-query:(min-width:680px);--aa-detached-modal-max-width:680px;--aa-detached-modal-max-height:500px;--aa-overlay-color-rgb:115,114,129;--aa-overlay-color-alpha:0.4;--aa-panel-shadow:0 0 0 1px #23263b1a,0 6px 16px -4px #23263b26;--aa-scrollbar-width:13px;--aa-scrollbar-track-background-color-rgb:234,234,234;--aa-scrollbar-track-background-color-alpha:1;--aa-scrollbar-thumb-background-color-alpha:1;--aa-search-input-height:36px;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.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}*,.aa-Autocomplete *,.aa-DetachedFormContainer *,.aa-Panel *{box-sizing:border-box}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;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);text-rendering:optimizelegibility}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)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.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}.menuExternalLink_NmtK,.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}.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}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);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}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}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))}.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{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{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}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)}table td{color:var(--ifm-table-cell-color)}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]){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_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{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--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{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;white-space:nowrap}.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,body,html{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,.dropdown>.navbar__link:after{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);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;white-space:nowrap}.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)}.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);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);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)}.close:hover{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}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]),.videoOverlay_xzii,.videoThumbnail_Dhao{pointer-events:none}.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;padding:.5rem;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{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.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%)}.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__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.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_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_S0QG>:last-child,.collapsibleContent_i85q>:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[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,.title_f1Hy{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)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.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}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;content:""}.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);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;visibility:hidden}.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);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.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)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.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{-webkit-appearance:none;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:.9rem;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);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;right:0;transition-property:opacity,visibility}.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);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.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)}.card,.card:hover,.pagination__link:hover,.sidebarItemLink_mo7H:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,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);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.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)}.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-scheme: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}#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}[data-theme=dark]{--ifm-color-primary:#33b8f7;--ifm-color-primary-dark:#00b1f4;--ifm-color-primary-darker:#009ed3;--ifm-color-primary-darkest:#008cbf;--ifm-color-primary-light:#66bff9;--ifm-color-primary-lighter:#99c6fb;--ifm-color-primary-lightest:#c6daff;--docusaurus-highlighted-code-line-bg:#0000004d}.button-container{align-items:center;display:flex;justify-content:space-around}.beautiful-big-button{background:linear-gradient(45deg,var(--ifm-color-primary-lighter),var(--ifm-color-primary));border:none;border-radius:5px;box-shadow:0 4px 6px #0000001a;box-shadow:0 10px 20px #0000001a,0 6px 6px #0000001a;color:#fff;cursor:pointer;font-size:20px;padding:16px 32px;transition:background-color .3s,transform .3s}.beautiful-big-button:active{box-shadow:0 6px 12px #0000001a,0 4px 4px #0000001a;transform:scale(.98)}.beautiful-big-button:hover{background:linear-gradient(45deg,var(--ifm-color-primary-dark),var(--ifm-color-primary-darkest));box-shadow:0 14px 28px #00000026,0 10px 10px #0000001f;transform:scale(1.05)}[data-theme=dark] .beautiful-big-button{background:linear-gradient(45deg,var(--ifm-color-primary-light),var(--ifm-color-primary-darker))}[data-theme=dark] .beautiful-big-button:hover{background:linear-gradient(45deg,var(--ifm-color-primary),var(--ifm-color-primary-darkest))}.card-container{align-items:center;display:flex;gap:4rem;justify-content:center;width:100%}.card{border:1px solid #e0e0e0;border-radius:.5rem;box-shadow:0 .25rem .375rem #0000004d;display:flex;flex-direction:column;height:20rem;padding:1rem;text-align:center;transition:transform .3s;width:18rem}.card:hover{transform:translateY(-.5rem)}.card:active{transform:translateY(-.25rem)}.card img{border-radius:.5rem;display:block;margin:0 auto;width:auto}.dappnode-box{height:61%!important}.card h2{font-size:1.25rem;font-weight:700;margin-bottom:.5rem;margin-top:1rem}.card p{color:#777;flex-grow:1;font-size:1rem;margin:0}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.aa-ClearButton[hidden],.aa-ItemContent:empty,.aa-LoadingIndicator[hidden],.aa-Source:empty,.aa-SourceHeader:empty,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.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;text-align:center}.content_knG7 a{color:inherit;text-decoration:underline}.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}.toggle_vylO{height:2rem;width:2rem}.aa-Form,.toggleButton_gllP{align-items:center;width:100%;display:flex}.toggleButton_gllP{border-radius:50%;height:100%;justify-content:center;transition:background var(--ifm-transition-fast)}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}body.dark,body[data-theme=dark]{--aa-text-color-rgb:183,192,199;--aa-primary-color-rgb:146,138,255;--aa-muted-color-rgb:146,138,255;--aa-input-background-color-rgb:0,3,9;--aa-background-color-rgb:21,24,42;--aa-selected-color-rgb:146,138,255;--aa-selected-color-alpha:0.25;--aa-description-highlight-background-color-rgb:0 255 255;--aa-description-highlight-background-color-alpha:0.25;--aa-panel-shadow:inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309;--aa-scrollbar-track-background-color-rgb:44,46,64;--aa-muted-color-alpha:1}.aa-Autocomplete,.aa-DetachedFormContainer,.aa-Panel{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-family:inherit;font-family:var(--aa-font-family);font-size:16px;font-size:var(--aa-font-size);font-weight:400;line-height:1em;margin:0;padding:0;text-align:left}.aa-Form{background-color:#fff;background-color:rgba(var(--aa-input-background-color-rgb),var(--aa-input-background-color-alpha));border:1px solid #807ea3cc;border:1px solid rgba(var(--aa-input-border-color-rgb),var(--aa-input-border-color-alpha));border-radius:3px;line-height:1em;margin:0;position:relative}.aa-ClearButton,.aa-Input,.aa-SubmitButton{border:0;background:none}.aa-Form:focus-within{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 2px #3e34d333,inset 0 0 0 2px #3e34d333;box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px;outline:currentColor}.aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;height:44px;height:var(--aa-search-input-height);order:1}.aa-Label,.aa-LoadingIndicator{cursor:auto;flex-shrink:0;height:100%;padding:0;text-align:left}.aa-Label svg,.aa-LoadingIndicator svg{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);height:auto;max-height:20px;max-height:var(--aa-input-icon-size);width:20px;width:var(--aa-input-icon-size)}.aa-LoadingIndicator,.aa-SubmitButton{height:100%;padding-left:11px;padding-left:calc(var(--aa-spacing)*.75 - 1px);padding-right:8px;padding-right:var(--aa-spacing-half);width:47px;width:calc(var(--aa-spacing)*1.75 + var(--aa-icon-size) - 1px)}.aa-SubmitButton{-webkit-appearance:none;appearance:none;margin:0}.aa-LoadingIndicator,.buttons_AeoN{align-items:center;display:flex;justify-content:center}.aa-InputWrapper{order:3;position:relative;width:100%}.aa-Input{-webkit-appearance:none;appearance:none;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font:inherit;height:44px;height:var(--aa-search-input-height);padding:0;width:100%}.aa-Input::placeholder{color:#807ea399;color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));opacity:1}.aa-Input:focus{border-color:none;box-shadow:none;outline:0}.aa-Input::-webkit-search-cancel-button,.aa-Input::-webkit-search-decoration,.aa-Input::-webkit-search-results-button,.aa-Input::-webkit-search-results-decoration{-webkit-appearance:none;appearance:none}.aa-InputWrapperSuffix{align-items:center;display:flex;height:44px;height:var(--aa-search-input-height);order:4}.aa-ClearButton{align-items:center;color:#807ea399;color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;height:100%;margin:0;padding:0 12.83328px;padding:0 calc(var(--aa-spacing)*.83333 - .5px)}.aa-Item,.aa-ItemIcon{align-items:center;border-radius:3px}.aa-ClearButton:focus,.aa-ClearButton:hover,.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha))}.aa-ClearButton svg{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);width:20px;width:var(--aa-icon-size)}.aa-Panel{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:4px;border-radius:calc(var(--aa-spacing)/4);box-shadow:0 0 0 1px #23263b1a,0 6px 16px -4px #23263b26;box-shadow:var(--aa-panel-shadow);margin:8px 0 0;overflow:hidden;position:absolute;transition:opacity .2s ease-in,filter .2s ease-in}.aa-Panel button{-webkit-appearance:none;appearance:none;background:none;border:0;margin:0;padding:0}.aa-PanelLayout{height:100%;margin:0;max-height:650px;max-height:var(--aa-panel-max-height);overflow-y:auto;padding:0;position:relative;text-align:left}.aa-PanelLayoutColumns--twoGolden{display:grid;grid-template-columns:39.2% auto;overflow:hidden;padding:0}.aa-PanelLayoutColumns--two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));overflow:hidden;padding:0}.aa-PanelLayoutColumns--three{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));overflow:hidden;padding:0}.aa-Panel--stalled .aa-Source{filter:grayscale(1);opacity:.8}.aa-Panel--scrollable{margin:0;max-height:650px;max-height:var(--aa-panel-max-height);overflow-x:hidden;overflow-y:auto;padding:8px;padding:var(--aa-spacing-half);scrollbar-color:#fff #eaeaea;scrollbar-color:rgba(var(--aa-scrollbar-thumb-background-color-rgb),var(--aa-scrollbar-thumb-background-color-alpha)) rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha));scrollbar-width:thin}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem)}.aa-Panel--scrollable::-webkit-scrollbar{width:13px;width:var(--aa-scrollbar-width)}.aa-Panel--scrollable::-webkit-scrollbar-track{background-color:#eaeaea;background-color:rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha))}.aa-Panel--scrollable::-webkit-scrollbar-thumb{background-color:#fff;background-color:rgba(var(--aa-scrollbar-thumb-background-color-rgb),var(--aa-scrollbar-thumb-background-color-alpha));border:3px solid #eaeaea;border:3px solid rgba(var(--aa-scrollbar-track-background-color-rgb),var(--aa-scrollbar-track-background-color-alpha));border-radius:9999px;border-right-width:2px}.aa-Source{margin:0;padding:0;position:relative;width:100%}.aa-SourceNoResults{font-size:1em;margin:0;padding:16px;padding:var(--aa-spacing)}.aa-List{margin:0}.aa-List,.aa-SourceHeader{padding:0;position:relative}.aa-SourceHeader{margin:8px .5em 8px 0;margin:var(--aa-spacing-half) .5em var(--aa-spacing-half) 0}.aa-SourceHeaderTitle{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);display:inline-block;font-size:.8em;font-weight:600;font-weight:var(--aa-font-weight-semibold);margin:0;padding:0 8px 0 0;padding:0 var(--aa-spacing-half) 0 0;position:relative;z-index:9999;z-index:var(--aa-base-z-index)}.aa-SourceHeaderLine{border-bottom:1px solid #3e34d3;border-bottom:1px solid rgba(var(--aa-primary-color-rgb),1);display:block;height:2px;left:0;margin:0;opacity:.3;padding:0;position:absolute;right:0;top:8px;top:var(--aa-spacing-half);z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-SourceFooterSeeAll{background:linear-gradient(180deg,#fff,#807ea324);background:linear-gradient(180deg,rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha)),#807ea324);border:1px solid #807ea399;border:1px solid rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));border-radius:5px;box-shadow:inset 0 0 2px #fff,0 2px 2px -1px #4c455826;color:inherit;font-size:.95em;font-weight:500;font-weight:var(--aa-font-weight-medium);padding:.475em 1em .6em;-webkit-text-decoration:none;text-decoration:none}.aa-SourceFooterSeeAll:focus,.aa-SourceFooterSeeAll:hover{border:1px solid #3e34d3;border:1px solid rgba(var(--aa-primary-color-rgb),1);color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1)}.aa-Item{cursor:pointer;display:grid;min-height:40px;min-height:calc(var(--aa-spacing)*2.5);padding:4px;padding:calc(var(--aa-spacing-half)/2)}.aa-Item[aria-selected=true]{background-color:rgba(179,173,214,.205);background-color:rgba(var(--aa-selected-color-rgb),var(--aa-selected-color-alpha))}.aa-Item[aria-selected=true] .aa-ActiveOnly,.aa-Item[aria-selected=true] .aa-ItemActionButton{visibility:visible}.aa-ItemIcon{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));box-shadow:inset 0 0 0 1px #807ea34d;box-shadow:inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));color:#7777a3;color:rgba(var(--aa-icon-color-rgb),var(--aa-icon-color-alpha));display:flex;flex-shrink:0;font-size:.7em;height:28px;height:calc(var(--aa-icon-size) + var(--aa-spacing-half));justify-content:center;overflow:hidden;text-align:center;width:28px;width:calc(var(--aa-icon-size) + var(--aa-spacing-half))}.aa-ItemIcon img{height:auto;max-height:20px;max-height:calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px);max-width:20px;max-width:calc(var(--aa-icon-size) + var(--aa-spacing-half) - 8px);width:auto}.aa-ItemIcon svg{height:20px;height:var(--aa-icon-size);width:20px;width:var(--aa-icon-size)}.aa-ItemIcon--alignTop{align-self:flex-start}.aa-ItemIcon--noBorder{background:none;box-shadow:none}.aa-ItemIcon--picture{height:96px;width:96px}.aa-ItemIcon--picture img{max-height:100%;max-width:100%;padding:8px;padding:var(--aa-spacing-half)}.aa-ItemContent{grid-gap:8px;grid-gap:var(--aa-spacing-half);align-items:center;cursor:pointer;display:grid;gap:8px;gap:var(--aa-spacing-half);grid-auto-flow:column;line-height:1.25em;overflow:hidden}.aa-ItemContent mark{background:none;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-style:normal;font-weight:700;font-weight:var(--aa-font-weight-bold)}.aa-ItemContent--dual{display:flex;flex-direction:column;justify-content:space-between;text-align:left}.aa-ItemContent--dual .aa-ItemContentSubtitle,.aa-ItemContent--dual .aa-ItemContentTitle,.tocCollapsibleContent_vkbj a{display:block}.aa-ItemContent--indented{padding-left:36px;padding-left:calc(var(--aa-icon-size) + var(--aa-spacing))}.aa-ItemContentBody{grid-gap:4px;grid-gap:calc(var(--aa-spacing-half)/2);display:grid;gap:4px;gap:calc(var(--aa-spacing-half)/2)}.aa-ItemContentTitle{display:inline-block;margin:0 .5em 0 0;max-width:100%;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.aa-ItemContentSubtitle{font-size:.92em}.aa-ItemContentSubtitleIcon:before{border-color:#807ea3a3;border-color:rgba(var(--aa-muted-color-rgb),.64);border-style:solid;content:"";display:inline-block;left:1px;position:relative;top:-3px}.aa-PanelFooter:after,.aa-PanelHeader:after{content:"";position:absolute;pointer-events:none;right:0;left:0}.aa-ItemContentSubtitle--inline .aa-ItemContentSubtitleIcon:before{border-width:0 0 1.5px;margin-left:8px;margin-left:var(--aa-spacing-half);margin-right:4px;margin-right:calc(var(--aa-spacing-half)/2);width:10px;width:calc(var(--aa-spacing-half) + 2px)}.aa-ItemContentSubtitle--standalone{grid-gap:8px;grid-gap:var(--aa-spacing-half);align-items:center;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));display:grid;gap:8px;gap:var(--aa-spacing-half);grid-auto-flow:column;justify-content:start}.aa-ItemContentSubtitle--standalone .aa-ItemContentSubtitleIcon:before{border-radius:0 0 0 3px;border-width:0 0 1.5px 1.5px;height:8px;height:var(--aa-spacing-half);width:8px;width:var(--aa-spacing-half)}.aa-ItemContentSubtitleCategory{color:#807ea3;color:rgba(var(--aa-muted-color-rgb),1);font-weight:500}.aa-ItemContentDescription{color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-size:.85em;max-width:100%;overflow-x:hidden;text-overflow:ellipsis}.aa-DetachedSearchButtonPlaceholder[hidden],.aa-ItemContentDescription:empty,.docSidebarContainer_b6E3,.sidebarLogo_isFc{display:none}.aa-ItemContentDescription mark{background:#f5df4d80;background:rgba(var(--aa-description-highlight-background-color-rgb),var(--aa-description-highlight-background-color-alpha));color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));font-style:normal;font-weight:500;font-weight:var(--aa-font-weight-medium)}.aa-ItemContentDash{color:#807ea399;color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));display:none;opacity:.4}.aa-ItemContentTag{background-color:#3e34d333;background-color:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha));border-radius:3px;margin:0 .4em 0 0;padding:.08em .3em}.aa-ItemLink,.aa-ItemWrapper{grid-gap:4px;grid-gap:calc(var(--aa-spacing-half)/2);align-items:center;color:inherit;display:grid;gap:4px;gap:calc(var(--aa-spacing-half)/2);grid-auto-flow:column;justify-content:space-between;width:100%}.aa-ItemLink{color:inherit;-webkit-text-decoration:none;text-decoration:none}.aa-ItemActions{display:grid;grid-auto-flow:column;height:100%;justify-self:end;margin:0 -5.33333px;margin:0 calc(var(--aa-spacing)/-3);padding:0 2px 0 0}.aa-ItemActionButton{align-items:center;background:none;border:0;color:#807ea399;color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;flex-shrink:0;padding:0}.aa-ItemActionButton svg{stroke-width:1.6;stroke-width:var(--aa-icon-stroke-width);color:#807ea399;color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));margin:5.33333px;margin:calc(var(--aa-spacing)/3);width:20px;width:var(--aa-action-icon-size)}.aa-ActiveOnly{visibility:hidden}.aa-PanelHeader{align-items:center;background:#3e34d3;background:rgba(var(--aa-primary-color-rgb),1);color:#fff;display:grid;height:var(--aa-modal-header-height);margin:0;padding:8px 16px;padding:var(--aa-spacing-half) var(--aa-spacing);position:relative}.aa-PanelHeader:after{background-image:linear-gradient(#fff,#fff0);background-image:linear-gradient(rgba(var(--aa-background-color-rgb),1),rgba(var(--aa-background-color-rgb),0));bottom:-8px;bottom:calc(var(--aa-spacing-half)*-1);height:8px;height:var(--aa-spacing-half)}.aa-PanelFooter,.aa-PanelHeader:after{z-index:9999;z-index:var(--aa-base-z-index)}.aa-PanelFooter{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));box-shadow:inset 0 1px 0 #807ea34d;box-shadow:inset 0 1px 0 rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));display:flex;justify-content:space-between;margin:0;padding:16px;padding:var(--aa-spacing);position:relative}.aa-PanelFooter:after{background-image:linear-gradient(#fff0,#807ea399);background-image:linear-gradient(rgba(var(--aa-background-color-rgb),0),rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha)));height:16px;height:var(--aa-spacing);opacity:.12;top:-16px;top:calc(var(--aa-spacing)*-1);z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-DetachedContainer{background:#fff;background:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));bottom:0;box-shadow:0 0 0 1px #23263b1a,0 6px 16px -4px #23263b26;box-shadow:var(--aa-panel-shadow);display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:9999;z-index:var(--aa-base-z-index)}.aa-DetachedContainer:after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:8px 0 8px 2px;margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;background-color:rgba(var(--aa-background-color-rgb),var(--aa-background-color-alpha));border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{border-bottom:1px solid #807ea34d;border-bottom:1px solid rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha));display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:8px;padding:var(--aa-spacing-half)}.aa-DetachedCancelButton{background:none;border:0;border-radius:3px;color:#262627;color:rgba(var(--aa-text-color-rgb),var(--aa-text-color-alpha));cursor:pointer;font:inherit;margin:0 0 0 8px;margin:0 0 0 var(--aa-spacing-half);padding:0 8px;padding:0 var(--aa-spacing-half)}.aa-DetachedCancelButton:focus,.aa-DetachedCancelButton:hover{box-shadow:inset 0 0 0 1px #807ea34d;box-shadow:inset 0 0 0 1px rgba(var(--aa-panel-border-color-rgb),var(--aa-panel-border-color-alpha))}.aa-DetachedContainer--modal{border-radius:6px;bottom:inherit;height:auto;margin:0 auto;max-width:680px;max-width:var(--aa-detached-modal-max-width);position:absolute;top:3%}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:500px;max-height:var(--aa-detached-modal-max-height);padding-bottom:8px;padding-bottom:var(--aa-spacing-half);position:static}.aa-DetachedSearchButton{align-items:center;background-color:#fff;background-color:rgba(var(--aa-input-background-color-rgb),var(--aa-input-background-color-alpha));border:1px solid #807ea3cc;border:1px solid rgba(var(--aa-input-border-color-rgb),var(--aa-input-border-color-alpha));border-radius:3px;color:#807ea399;color:rgba(var(--aa-muted-color-rgb),var(--aa-muted-color-alpha));cursor:pointer;display:flex;font:inherit;font-family:inherit;font-family:var(--aa-font-family);font-size:16px;font-size:var(--aa-font-size);height:44px;height:var(--aa-search-input-height);margin:0;padding:0 5.5px;padding:0 calc(var(--aa-search-input-height)/8);position:relative;text-align:left;width:100%}.aa-DetachedSearchButton:focus{border-color:#3e34d3;border-color:rgba(var(--aa-primary-color-rgb),1);box-shadow:0 0 0 3px #3e34d333,inset 0 0 0 2px #3e34d333;box-shadow:rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 3px,inset rgba(var(--aa-primary-color-rgb),var(--aa-primary-color-alpha)) 0 0 0 2px;outline:currentColor}.aa-DetachedSearchButtonIcon{align-items:center;color:#3e34d3;color:rgba(var(--aa-primary-color-rgb),1);cursor:auto;display:flex;flex-shrink:0;height:100%;justify-content:center;width:36px;width:calc(var(--aa-icon-size) + var(--aa-spacing))}.aa-DetachedSearchButtonQuery{color:#262627;color:rgba(var(--aa-text-color-rgb),1);line-height:1.25em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:#73728166;background-color:rgba(var(--aa-overlay-color-rgb),var(--aa-overlay-color-alpha));height:100vh;left:0;margin:0;padding:0;position:fixed;right:0;top:0;z-index:9998;z-index:calc(var(--aa-base-z-index) - 1)}.aa-GradientBottom,.aa-GradientTop{height:8px;height:var(--aa-spacing-half);left:0;pointer-events:none;position:absolute;right:0;z-index:9999;z-index:var(--aa-base-z-index)}.aa-GradientTop{background-image:linear-gradient(#fff,#fff0);background-image:linear-gradient(rgba(var(--aa-background-color-rgb),1),rgba(var(--aa-background-color-rgb),0));top:0}.aa-GradientBottom{background-image:linear-gradient(#fff0,#fff);background-image:linear-gradient(rgba(var(--aa-background-color-rgb),0),rgba(var(--aa-background-color-rgb),1));border-bottom-left-radius:4px;border-bottom-left-radius:calc(var(--aa-spacing)/4);border-bottom-right-radius:4px;border-bottom-right-radius:calc(var(--aa-spacing)/4);bottom:0}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size);font-weight:var(--ifm-font-weight-bold)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.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]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.docMainContainer_gTbr,.docPage__5DB{display:flex;width:100%}.docPage__5DB{flex:1 0}.docsWrapper_BCFX{display:flex;flex:1 0 auto}.features_t9lD,.videoModal_mMww{align-items:center;display:flex}.features_t9lD{padding:2rem 0;width:100%}.featureSvg_GfXr{height:200px}.heroBanner_qdFl{overflow:hidden;padding:4rem 0;position:relative;text-align:center}.carousel_qyqS{display:flex;gap:25px;margin:auto;max-width:89%;overflow-x:auto}.videoModal_mMww{background:#00000080;bottom:0;justify-content:center;left:0;position:fixed;right:0;top:0}.closeButton_muHm,.playButton_boOJ{background:none;border:none;cursor:pointer}.videoWrapper_XWWU{height:80vh;position:relative;width:80vw}.closeButton_muHm{font-size:24px;position:absolute;right:10px;top:10px}.videoOverlay_xzii{align-items:center;display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.playButton_boOJ{color:#fff;font-size:50px;pointer-events:auto}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{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)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius: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}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}: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%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH 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}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}.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:"#"}.img_ev3q{height:auto}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.blogPostFooterDetailsFull_mRVl{flex-direction:column}.tableOfContents_bqdL{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}@media screen and (min-width:768px){.button-container{flex-direction:row}}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_m80_{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_BlDH,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_m80_:focus,.expandButton_m80_:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{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);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_m80_{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[dir=rtl] .expandButtonIcon_BlDH{transform:rotate(180deg)}.docSidebarContainer_b6E3{border-right:1px solid var(--ifm-toc-border-color);-webkit-clip-path:inset(0);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_b3ry{cursor:pointer;width:var(--doc-sidebar-hidden-width)}.sidebarViewport_Xe31{height:100%;max-height:100vh;position:sticky;top:0}.docMainContainer_gTbr{flex-grow:1;max-width:calc(100% - var(--doc-sidebar-width))}.docMainContainerEnhanced_Uz_u{max-width:calc(100% - var(--doc-sidebar-hidden-width))}.docItemWrapperEnhanced_czyv{max-width:calc(var(--ifm-container-width) + var(--doc-sidebar-width))!important}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media screen and (max-width:996px){.heroBanner_qdFl{padding:2rem}}@media screen and (max-width:767px){.button-container{flex-direction:column}.beautiful-big-button{margin-bottom:10px}}@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}.title_f1Hy{font-size:2rem}}@media (hover:hover){.backToTopButton_sjWU:hover{background-color:var(--ifm-color-emphasis-300)}.aa-TouchOnly{display:none}}@media (hover:none) and (pointer:coarse){:root{--aa-spacing-factor:1.2;--aa-action-icon-size:22px}.aa-LoadingIndicator,.aa-SubmitButton{padding-left:3px;padding-left:calc(var(--aa-spacing-half)/ 2 - 1px);width:39px;width:calc(var(--aa-icon-size) + var(--aa-spacing)*1.25 - 1px)}.aa-ClearButton{padding:0 10.16672px;padding:0 calc(var(--aa-spacing)*.66667 - .5px)}.aa-ItemActionButton:focus svg,.aa-ItemActionButton:hover svg{color:inherit}.aa-DesktopOnly{display:none}}@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 screen and (prefers-reduced-motion){.aa-Panel{transition:none}}@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.ffd35c04.css b/assets/css/styles.ffd35c04.css new file mode 100644 index 000000000..0898223f4 --- /dev/null +++ b/assets/css/styles.ffd35c04.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}pre,table{overflow:auto}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)}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.loadingRing_RJI3 div{box-sizing:border-box}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}:root{--ifm-color-scheme:light;--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-white:#fff;--ifm-color-black:#000;--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-gray-1000:var(--ifm-color-black);--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-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--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-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--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-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin: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-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--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-shadow:none;--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-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--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-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--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-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--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-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--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-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-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-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-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--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-shadow:var(--ifm-global-shadow-lw);--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-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--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-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-pills-spacing:0.125rem;--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);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#00b1f4;--ifm-color-primary-dark:#009ed3;--ifm-color-primary-darker:#008cbf;--ifm-color-primary-darkest:#0076a8;--ifm-color-primary-light:#33b8f7;--ifm-color-primary-lighter:#66bff9;--ifm-color-primary-lightest:#99c6fb;--ifm-code-font-size:95%;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-announcement-bar-height:auto;--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.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{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;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);text-rendering:optimizelegibility}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)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.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}.menuExternalLink_NmtK,.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}.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}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);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}h1{font-size:var(--ifm-h1-font-size)}h2{font-size:var(--ifm-h2-font-size)}h3{font-size:var(--ifm-h3-font-size)}h4{font-size:var(--ifm-h4-font-size)}h5{font-size:var(--ifm-h5-font-size)}h6{font-size:var(--ifm-h6-font-size)}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))}.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{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{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}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)}table td{color:var(--ifm-table-cell-color)}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]){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_EoeP .wordWrapButtonIcon_Bwma{color:var(--ifm-color-primary)}.text--secondary{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--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_Gvgb,.alert__heading,.text--uppercase{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;white-space:nowrap}.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,body,html{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,.dropdown>.navbar__link:after,.searchBarContainer_NW3z.searchIndexLoading_EJ1f .searchBarLoadingRing_YnHq{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);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;white-space:nowrap}.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)}.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);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);text-decoration:none}.content_knG7 a,.hitFooter_E9YW a,.suggestion_fB_2.cursor_eG29 mark{text-decoration:underline}.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)}.close:hover{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}.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;padding:.5rem;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)}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem)}.menu__caret,.menu__link,.menu__list-item-collapsible{border-radius:.25rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.dropdown__link{border-radius:.25rem;color:var(--ifm-dropdown-link-color);display:block;font-size:.875rem;margin-top:.2rem;padding:.25rem .5rem;white-space:nowrap}.dropdown__link--active,.dropdown__link:hover{background-color:var(--ifm-dropdown-hover-background-color);color:var(--ifm-dropdown-link-color);text-decoration:none}.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%)}.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__logo{margin-top:1rem;max-width:var(--ifm-footer-logo-max-width)}.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_Djhp article>:first-child,.docItemContainer_Djhp header+*,.footer__item{margin-top:0}.admonitionContent_BuS1>:last-child,.collapsibleContent_i85q p:last-child,.details_lb9f>summary>p:last-child,.footer__items,.searchResultItem_U687>h2{margin-bottom:0}.codeBlockStandalone_MEMb,[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,.title_f1Hy{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)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.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}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{content:"";height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;filter:var(--ifm-menu-link-sublist-icon-filter)}.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);height:var(--ifm-navbar-height);padding:var(--ifm-navbar-padding-vertical) var(--ifm-navbar-padding-horizontal)}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{opacity:0;position:fixed;transition-duration:var(--ifm-transition-fast);transition-timing-function:ease-in-out;left:0;top:0;bottom:0;visibility:hidden}.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);text-decoration:none}.announcementBarContent_xLdY,.navbar__title{flex:1 1 auto}.navbar__toggle{display:none;margin-right:.5rem}.navbar__logo{flex:0 0 auto;height:2rem;margin-right:.5rem}.navbar__items{align-items:center;display:flex;flex:1;min-width:0}.navbar__items--center{flex:0 0 auto}.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]),.videoOverlay_xzii,.videoThumbnail_Dhao{pointer-events:none}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.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:.9rem;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);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;right:0;transition-property:opacity,visibility}.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);margin:0 0 .2rem -.5rem;padding:.6rem 1.5rem;position:relative;text-align:left;top:-.5rem;width:calc(100% + 1rem)}.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)}.card,.card:hover,.pagination__link:hover,.sidebarItemLink_mo7H:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,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);text-decoration:none}.pagination-nav__link--next{grid-column:2/3;text-align:right}.card,.content_knG7,.heroBanner_qdFl,.hitFooter_E9YW{text-align:center}.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)}.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;padding-left:0}.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-scheme: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}#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}[data-theme=dark]{--ifm-color-primary:#33b8f7;--ifm-color-primary-dark:#00b1f4;--ifm-color-primary-darker:#009ed3;--ifm-color-primary-darkest:#008cbf;--ifm-color-primary-light:#66bff9;--ifm-color-primary-lighter:#99c6fb;--ifm-color-primary-lightest:#c6daff;--docusaurus-highlighted-code-line-bg:#0000004d}.button-container{align-items:center;display:flex;justify-content:space-around}.beautiful-big-button{background:linear-gradient(45deg,var(--ifm-color-primary-lighter),var(--ifm-color-primary));border:none;border-radius:5px;box-shadow:0 4px 6px #0000001a;box-shadow:0 10px 20px #0000001a,0 6px 6px #0000001a;color:#fff;cursor:pointer;font-size:20px;padding:16px 32px;transition:background-color .3s,transform .3s}.beautiful-big-button:active{box-shadow:0 6px 12px #0000001a,0 4px 4px #0000001a;transform:scale(.98)}.beautiful-big-button:hover{background:linear-gradient(45deg,var(--ifm-color-primary-dark),var(--ifm-color-primary-darkest));box-shadow:0 14px 28px #00000026,0 10px 10px #0000001f;transform:scale(1.05)}[data-theme=dark] .beautiful-big-button{background:linear-gradient(45deg,var(--ifm-color-primary-light),var(--ifm-color-primary-darker))}[data-theme=dark] .beautiful-big-button:hover{background:linear-gradient(45deg,var(--ifm-color-primary),var(--ifm-color-primary-darkest))}.card-container{align-items:center;display:flex;gap:4rem;justify-content:center;width:100%}.card{border:1px solid #e0e0e0;border-radius:.5rem;box-shadow:0 .25rem .375rem #0000004d;display:flex;flex-direction:column;height:20rem;padding:1rem;transition:transform .3s;width:18rem}.card:hover{transform:translateY(-.5rem)}.card:active{transform:translateY(-.25rem)}.card img{border-radius:.5rem;display:block;margin:0 auto;width:auto}.dappnode-box{height:61%!important}.card h2{font-size:1.25rem;font-weight:700;margin-bottom:.5rem;margin-top:1rem}.card p{color:#777;flex-grow:1;font-size:1rem;margin:0}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#__docusaurus-base-url-issue-banner-container,.docSidebarContainer_YfHR,.hideAction_vcyE>svg,.navbarSearchContainer_Bca1:not(:has(>*)),.sidebarLogo_isFc,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.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}.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}.toggle_vylO{height:2rem;width:2rem}.toggleButton_gllP{align-items:center;border-radius:50%;display:flex;height:100%;justify-content:center;transition:background var(--ifm-transition-fast);width:100%}.toggleButton_gllP:hover{background:var(--ifm-color-emphasis-200)}.toggleButtonDisabled_aARS{cursor:not-allowed}.darkNavbarColorModeToggle_X3D1:hover{background:var(--ifm-color-gray-800)}[data-theme=dark] .themedComponent--dark_xIcU,[data-theme=light] .themedComponent--light_NVdE,html:not([data-theme]) .themedComponent--light_NVdE{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,#f5f6f7);border-radius:6px;box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #ffffff80,0 3px 8px 0 #555a64);left:auto!important;margin-top:8px;padding:var(--search-local-spacing,12px);position:relative;right:0!important;width:var(--search-local-modal-width,560px)}html[data-theme=dark] .searchBar_RVTs .dropdownMenu_qbY6{background:var(--search-local-modal-background,var(--ifm-background-color));box-shadow:var(--search-local-modal-shadow,inset 1px 1px 0 0 #2c2e40,0 3px 8px 0 #000309)}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2{align-items:center;background:var(--search-local-hit-background,#fff);border-radius:4px;box-shadow:var(--search-local-hit-shadow,0 1px 3px 0 #d4d9e1);color:var(--search-local-hit-color,#444950);cursor:pointer;display:flex;flex-direction:row;height:var(--search-local-hit-height,56px);padding:0 var(--search-local-spacing,12px);width:100%}.hitTree_kk6K,.noResults_l6Q3{align-items:center;display:flex}html[data-theme=dark] .dropdownMenu_qbY6 .suggestion_fB_2{background:var(--search-local-hit-background,var(--ifm-color-emphasis-100));box-shadow:var(--search-local-hit-shadow,none);color:var(--search-local-hit-color,var(--ifm-font-color-base))}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2:not(:last-child){margin-bottom:4px}.searchBar_RVTs .dropdownMenu_qbY6 .suggestion_fB_2.cursor_eG29{background-color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitFooter_E9YW a,.hitIcon_a7Zy,.hitPath_ieM4,.hitTree_kk6K,.noResultsIcon_EBY5{color:var(--search-local-muted-color,#969faf)}html[data-theme=dark] .hitIcon_a7Zy,html[data-theme=dark] .hitPath_ieM4,html[data-theme=dark] .hitTree_kk6K,html[data-theme=dark] .noResultsIcon_EBY5{color:var(--search-local-muted-color,var(--ifm-color-secondary-darkest))}.hitTree_kk6K>svg{height:var(--search-local-hit-height,56px);opacity:.5;width:24px}.hitIcon_a7Zy,.hitTree_kk6K>svg{stroke-width:var(--search-local-icon-stroke-width,1.4)}.hitAction_NqkB,.hitIcon_a7Zy{height:20px;width:20px}.hitWrapper_sAK8{display:flex;flex:1 1 auto;flex-direction:column;font-weight:500;justify-content:center;margin:0 8px;overflow-x:hidden;width:80%}.hitWrapper_sAK8 mark{background:none;color:var(--search-local-highlight-color,var(--ifm-color-primary))}.hitTitle_vyVt{font-size:.9em}.hitPath_ieM4{font-size:.75em}.hitPath_ieM4,.hitTitle_vyVt{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.noResults_l6Q3{flex-direction:column;justify-content:center;padding:var(--search-local-spacing,12px) 0}.noResultsIcon_EBY5{margin-bottom:var(--search-local-spacing,12px)}.hitFooter_E9YW{font-size:.85em;margin-top:var(--search-local-spacing,12px)}.cursor_eG29 .hideAction_vcyE>svg,.tocCollapsibleContent_vkbj a{display:block}.suggestion_fB_2.cursor_eG29,.suggestion_fB_2.cursor_eG29 .hitIcon_a7Zy,.suggestion_fB_2.cursor_eG29 .hitPath_ieM4,.suggestion_fB_2.cursor_eG29 .hitTree_kk6K,.suggestion_fB_2.cursor_eG29 mark{color:var(--search-local-hit-active-color,var(--ifm-color-white))!important}.searchBarContainer_NW3z{margin-left:16px}.searchBarContainer_NW3z .searchBarLoadingRing_YnHq{display:none;left:10px;position:absolute;top:6px}.searchBarContainer_NW3z .searchClearButton_qk4g{background:none;border:none;line-height:1rem;padding:0;position:absolute;right:.8rem;top:50%;transform:translateY(-50%)}.navbar__search{position:relative}.searchIndexLoading_EJ1f .navbar__search-input{background-image:none}.searchHintContainer_Pkmr{align-items:center;display:flex;gap:4px;height:100%;justify-content:center;pointer-events:none;position:absolute;right:10px;top:0}.searchHint_iIMx{background-color:var(--ifm-navbar-search-input-background-color);border:1px solid var(--ifm-color-emphasis-500);box-shadow:inset 0 -1px 0 var(--ifm-color-emphasis-500);color:var(--ifm-navbar-search-input-placeholder-color)}html[dir=rtl] .searchHintContainer_Pkmr{left:10px;right:auto}html[dir=rtl] .searchBarContainer_NW3z .searchClearButton_qk4g{left:.8rem;right:auto}html[dir=rtl] .searchBarContainer_NW3z .searchBarLoadingRing_YnHq{left:auto;right:10px}html[dir=rtl] .navbar__search-input{padding:0 2.25em 0 .5em}.loadingRing_RJI3{display:inline-block;height:20px;opacity:var(--search-local-loading-icon-opacity,.5);position:relative;width:20px}.loadingRing_RJI3 div{animation:1.2s cubic-bezier(.5,0,.5,1) infinite a;border:2px solid var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color));border-color:var(--search-load-loading-icon-color,var(--ifm-navbar-search-input-color)) #0000 #0000 #0000;border-radius:50%;display:block;height:16px;margin:2px;position:absolute;width:16px}.loadingRing_RJI3 div:first-child{animation-delay:-.45s}.loadingRing_RJI3 div:nth-child(2){animation-delay:-.3s}.loadingRing_RJI3 div:nth-child(3){animation-delay:-.15s}@keyframes a{0%{transform:rotate(0)}to{transform:rotate(1turn)}}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.errorBoundaryError_a6uf{color:red;white-space:pre-wrap}.errorBoundaryFallback_VBag{color:red;padding:.55rem}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.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:"#"}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size);font-weight:var(--ifm-font-weight-bold)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.searchContextInput_mXoe,.searchQueryInput_CFBF{background:var(--ifm-background-color);border:var(--ifm-global-border-width) solid var(--ifm-color-content-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-font-color-base);font-size:var(--ifm-font-size-base);margin-bottom:1rem;padding:.5rem;width:100%}.searchResultItem_U687{border-bottom:1px solid #dfe3e8;padding:1rem 0}.searchResultItemPath_uIbk{color:var(--ifm-color-content-secondary);font-size:.8rem;margin:.5rem 0 0}.searchResultItemSummary_oZHr{font-style:italic;margin:.5rem 0 0}.features_t9lD{align-items:center;display:flex;padding:2rem 0;width:100%}.buttons_AeoN,.videoModal_mMww{align-items:center;display:flex}.featureSvg_GfXr{height:200px}.heroBanner_qdFl{overflow:hidden;padding:4rem 0;position:relative}.buttons_AeoN{justify-content:center}.carousel_qyqS{display:flex;gap:25px;margin:auto;max-width:89%;overflow-x:auto}.videoModal_mMww{background:#00000080;bottom:0;justify-content:center;left:0;position:fixed;right:0;top:0}.closeButton_muHm,.playButton_boOJ{background:none;border:none;cursor:pointer}.videoWrapper_XWWU{height:80vh;position:relative;width:80vw}.closeButton_muHm{font-size:24px;position:absolute;right:10px;top:10px}.videoOverlay_xzii{align-items:center;display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.playButton_boOJ{color:#fff;font-size:50px;pointer-events:auto}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.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)}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.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]:root{--docusaurus-collapse-button-bg:#ffffff0d;--docusaurus-collapse-button-bg-hover:#ffffff1a}.collapseSidebarButton_PEFL{display:none;margin:0}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{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)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius: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}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity var(--ifm-transition-fast) ease-in-out}.buttonGroup__atx button:focus-visible,.buttonGroup__atx button:hover{opacity:1!important}.theme-code-block:hover .buttonGroup__atx button{opacity:.4}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}: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%}.codeLineNumber_Tfdd:before{content:counter(a);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH 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}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:all var(--ifm-transition-fast) ease;width:inherit}.copyButtonSuccessIcon_LjdS{color:#00d600;left:50%;opacity:0;top:50%;transform:translate(-50%,-50%) scale(.33)}.copyButtonCopied_obH4 .copyButtonIcon_y97N{opacity:0;transform:scale(.33)}.copyButtonCopied_obH4 .copyButtonSuccessIcon_LjdS{opacity:1;transform:translate(-50%,-50%) scale(1);transition-delay:75ms}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.lastUpdated_vwxv{font-size:smaller;font-style:italic;margin-top:.2rem}.tocCollapsibleButton_TO0P{align-items:center;display:flex;font-size:inherit;justify-content:space-between;padding:.4rem .8rem;width:100%}.tocCollapsibleButton_TO0P:after{background:var(--ifm-menu-link-sublist-icon) 50% 50%/2rem 2rem no-repeat;content:"";filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast);width:1.25rem}.tocCollapsibleButtonExpanded_MG3E:after,.tocCollapsibleExpanded_sAul{transform:none}.tocCollapsible_ETCw{background-color:var(--ifm-menu-color-background-active);border-radius:var(--ifm-global-radius);margin:1rem 0}.tocCollapsibleContent_vkbj>ul{border-left:none;border-top:1px solid var(--ifm-color-emphasis-300);font-size:15px;padding:.2rem 0}.tocCollapsibleContent_vkbj ul li{margin:.4rem .8rem}.wordWrapButtonIcon_Bwma{height:1.2rem;width:1.2rem}.details_lb9f{--docusaurus-details-summary-arrow-size:0.38rem;--docusaurus-details-transition:transform 200ms ease;--docusaurus-details-decoration-color:grey}.details_lb9f>summary{cursor:pointer;padding-left:1rem;position:relative}.details_lb9f>summary::-webkit-details-marker{display:none}.details_lb9f>summary:before{border-color:#0000 #0000 #0000 var(--docusaurus-details-decoration-color);border-style:solid;border-width:var(--docusaurus-details-summary-arrow-size);content:"";left:0;position:absolute;top:.45rem;transform:rotate(0);transform-origin:calc(var(--docusaurus-details-summary-arrow-size)/2) 50%;transition:var(--docusaurus-details-transition)}.collapsibleContent_i85q{border-top:1px solid var(--docusaurus-details-decoration-color);margin-top:1rem;padding-top:1rem}.details_b_Ee{--docusaurus-details-decoration-color:var(--ifm-alert-border-color);--docusaurus-details-transition:transform var(--ifm-transition-fast) ease;border:1px solid var(--ifm-alert-border-color);margin:0 0 var(--ifm-spacing-vertical)}:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.img_ev3q{height:auto}.admonition_xJq3{margin-bottom:1em}.admonitionHeading_Gvgb{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family)}.admonitionHeading_Gvgb:not(:last-child){margin-bottom:.3rem}.admonitionHeading_Gvgb code{text-transform:none}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.blogPostFooterDetailsFull_mRVl{flex-direction:column}.tableOfContents_bqdL{overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.breadcrumbHomeIcon_YNFT{height:1.1rem;position:relative;top:1px;vertical-align:top;width:1.1rem}.breadcrumbsContainer_Z_bl{--ifm-breadcrumb-size-multiplier:0.8;margin-bottom:.8rem}@media screen and (min-width:768px){.button-container{flex-direction:row}}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.navbarSearchContainer_Bca1{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.collapseSidebarButton_PEFL{border:1px solid var(--ifm-toc-border-color);border-radius:0;bottom:0;display:block!important;height:40px;position:sticky}.collapseSidebarButtonIcon_kv0_{margin-top:4px;transform:rotate(180deg)}.expandButtonIcon_i1dp,[dir=rtl] .collapseSidebarButtonIcon_kv0_{transform:rotate(0)}.collapseSidebarButton_PEFL:focus,.collapseSidebarButton_PEFL:hover,.expandButton_TmdG:focus,.expandButton_TmdG:hover{background-color:var(--docusaurus-collapse-button-bg-hover)}.menuHtmlItem_M9Kj{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu_SIkG{flex-grow:1;padding:.5rem}@supports (scrollbar-gutter:stable){.menu_SIkG{padding:.5rem 0 .5rem .5rem;scrollbar-gutter:stable}}.menuWithAnnouncementBar_GW3s{margin-bottom:var(--docusaurus-announcement-bar-height)}.sidebar_njMd{display:flex;flex-direction:column;height:100%;padding-top:var(--ifm-navbar-height);width:var(--doc-sidebar-width)}.sidebarWithHideableNavbar_wUlq{padding-top:0}.sidebarHidden_VK0M{opacity:0;visibility:hidden}.sidebarLogo_isFc{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);text-decoration:none!important}.sidebarLogo_isFc img{height:2rem;margin-right:.5rem}.expandButton_TmdG{align-items:center;display:flex;height:100%;justify-content:center;position:absolute;right:0;top:0;transition:background-color var(--ifm-transition-fast) ease;width:100%}[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}.lastUpdated_vwxv{text-align:right}.tocMobile_ITEo{display:none}.docItemCol_VOVn{max-width:75%!important}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.navbarSearchContainer_Bca1{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media not (max-width:996px){.searchBar_RVTs.searchBarLeft_MXDe .dropdownMenu_qbY6{left:0!important;right:auto!important}}@media only screen and (max-width:996px){.searchQueryColumn_q7nx{max-width:60%!important}.searchContextColumn_oWAF{max-width:40%!important}}@media screen and (max-width:996px){.heroBanner_qdFl{padding:2rem}}@media screen and (max-width:767px){.button-container{flex-direction:column}.beautiful-big-button{margin-bottom:10px}}@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}.navbar__search-input:not(:focus){width:2rem}.searchBar_RVTs .dropdownMenu_qbY6{max-width:calc(100vw - var(--ifm-navbar-padding-horizontal)*2);width:var(--search-local-modal-width-sm,340px)}.searchBarContainer_NW3z:not(.focused_OWtg) .searchClearButton_qk4g,.searchHintContainer_Pkmr{display:none}.title_f1Hy{font-size:2rem}}@media screen and (max-width:576px){.searchQueryColumn_q7nx{max-width:100%!important}.searchContextColumn_oWAF{max-width:100%!important;padding-left:var(--ifm-spacing-horizontal)!important}}@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/js/0085f636.7bb09368.js b/assets/js/0085f636.7bb09368.js deleted file mode 100644 index 9074dfd0b..000000000 --- a/assets/js/0085f636.7bb09368.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8925],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var r=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var s=r.createContext({}),l=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},c=function(e){var t=l(e.components);return r.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,c=p(e,["components","mdxType","originalType","parentName"]),u=l(n),d=i,h=u["".concat(s,".").concat(d)]||u[d]||m[d]||o;return n?r.createElement(h,a(a({ref:t},c),{},{components:n})):r.createElement(h,a({ref:t},c))}));function h(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,a=new Array(o);a[0]=d;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p[u]="string"==typeof e?e:i,a[1]=p;for(var l=2;l{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>m,frontMatter:()=>o,metadata:()=>p,toc:()=>l});var r=n(7462),i=(n(7294),n(4137));const o={},a="Optimism Rollup",p={unversionedId:"user/rollups/optimism",id:"user/rollups/optimism",title:"Optimism Rollup",description:"Optimism is Ethereum's Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.",source:"@site/docs/user/rollups/optimism.md",sourceDirName:"user/rollups",slug:"/user/rollups/optimism",permalink:"/docs/user/rollups/optimism",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/rollups/optimism.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethereum Rollups: An Overview",permalink:"/docs/user/rollups/overview"},next:{title:"Understanding Dappnode Packages",permalink:"/docs/user/packages/understanding-dappnode-packages"}},s={},l=[{value:"Setting Up an Optimism Node",id:"setting-up-an-optimism-node",level:2}],c={toc:l},u="wrapper";function m(e){let{components:t,...o}=e;return(0,i.kt)(u,(0,r.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"optimism-rollup"},"Optimism Rollup"),(0,i.kt)("p",null,"Optimism is Ethereum's Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"Optimism Rollup",src:n(4015).Z,width:"1732",height:"885"})),(0,i.kt)("h2",{id:"setting-up-an-optimism-node"},"Setting Up an Optimism Node"),(0,i.kt)("p",null,"Optimism stands out as the inaugural choice in the Rollups suite. Initiating an Optimism node on Dappnode parallels the familiar Stakers Menu, yet with some distinctions:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Utilize an ",(0,i.kt)("inlineCode",{parentName:"li"},"op-node")," client to link with the Optimism Mainnet."),(0,i.kt)("li",{parentName:"ul"},"Employ ",(0,i.kt)("inlineCode",{parentName:"li"},"op-geth")," or ",(0,i.kt)("inlineCode",{parentName:"li"},"op-erigon")," to bridge your ",(0,i.kt)("inlineCode",{parentName:"li"},"op-node")," to Ethereum's execution layer, echoing the beacon chain/consensus client's role on the mainnet."),(0,i.kt)("li",{parentName:"ul"},"For archive nodes, ",(0,i.kt)("inlineCode",{parentName:"li"},"op-legacy")," is essential for transactions predating the Bedrock upgrade."),(0,i.kt)("li",{parentName:"ul"},"A connection to an Ethereum Mainnet node is required. If your Dappnode already operates one, the Rollups menu will streamline configuration. Otherwise, integrate a public RPC for Ethereum Mainnet connection.")),(0,i.kt)("p",null,"For a deeper dive, consult Optimism\u2019s documentation:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("a",{parentName:"p",href:"https://op-geth.optimism.io/"},"OP Geth docs"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("a",{parentName:"p",href:"https://github.com/testinprod-io/op-erigon"},"Test In Prod - OP Erigon"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},(0,i.kt)("a",{parentName:"p",href:"https://community.optimism.io/docs/developers/bedrock/node-operator-guide/"},"OP Node Operator")))))}m.isMDXComponent=!0},4015:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/optimism-menu-60612170996d4b9863d79b0a737bb280.png"}}]); \ No newline at end of file diff --git a/assets/js/0085f636.ae384f80.js b/assets/js/0085f636.ae384f80.js new file mode 100644 index 000000000..dff2dc112 --- /dev/null +++ b/assets/js/0085f636.ae384f80.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8925],{9353:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>a});var t=i(5893),s=i(1151);const o={},r="Optimism Rollup",l={id:"user/rollups/optimism",title:"Optimism Rollup",description:"Optimism is Ethereum's Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.",source:"@site/docs/user/rollups/optimism.md",sourceDirName:"user/rollups",slug:"/user/rollups/optimism",permalink:"/docs/user/rollups/optimism",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/rollups/optimism.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethereum Rollups: An Overview",permalink:"/docs/user/rollups/overview"},next:{title:"Understanding Dappnode Packages",permalink:"/docs/user/packages/understanding-dappnode-packages"}},c={},a=[{value:"Setting Up an Optimism Node",id:"setting-up-an-optimism-node",level:2}];function p(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"optimism-rollup",children:"Optimism Rollup"}),"\n",(0,t.jsx)(n.p,{children:"Optimism is Ethereum's Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Optimism Rollup",src:i(4015).Z+"",width:"1732",height:"885"})}),"\n",(0,t.jsx)(n.h2,{id:"setting-up-an-optimism-node",children:"Setting Up an Optimism Node"}),"\n",(0,t.jsx)(n.p,{children:"Optimism stands out as the inaugural choice in the Rollups suite. Initiating an Optimism node on Dappnode parallels the familiar Stakers Menu, yet with some distinctions:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Utilize an ",(0,t.jsx)(n.code,{children:"op-node"})," client to link with the Optimism Mainnet."]}),"\n",(0,t.jsxs)(n.li,{children:["Employ ",(0,t.jsx)(n.code,{children:"op-geth"})," or ",(0,t.jsx)(n.code,{children:"op-erigon"})," to bridge your ",(0,t.jsx)(n.code,{children:"op-node"})," to Ethereum's execution layer, echoing the beacon chain/consensus client's role on the mainnet."]}),"\n",(0,t.jsxs)(n.li,{children:["For archive nodes, ",(0,t.jsx)(n.code,{children:"op-legacy"})," is essential for transactions predating the Bedrock upgrade."]}),"\n",(0,t.jsx)(n.li,{children:"A connection to an Ethereum Mainnet node is required. If your Dappnode already operates one, the Rollups menu will streamline configuration. Otherwise, integrate a public RPC for Ethereum Mainnet connection."}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"For a deeper dive, consult Optimism\u2019s documentation:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"https://op-geth.optimism.io/",children:"OP Geth docs"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"https://github.com/testinprod-io/op-erigon",children:"Test In Prod - OP Erigon"})}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.a,{href:"https://community.optimism.io/docs/developers/bedrock/node-operator-guide/",children:"OP Node Operator"})}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},4015:(e,n,i)=>{i.d(n,{Z:()=>t});const t=i.p+"assets/images/optimism-menu-60612170996d4b9863d79b0a737bb280.png"},1151:(e,n,i)=>{i.d(n,{Z:()=>l,a:()=>r});var t=i(7294);const s={},o=t.createContext(s);function r(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/01a85c17.c921329a.js b/assets/js/01a85c17.c921329a.js new file mode 100644 index 000000000..875a840af --- /dev/null +++ b/assets/js/01a85c17.c921329a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4013],{1460:(e,s,t)=>{t.d(s,{Z:()=>v});var a=t(7294),i=t(6010),r=t(179),l=t(7524),n=t(9960),c=t(5999),o=t(6550),d=t(8596);function m(e){const{pathname:s}=(0,o.TH)();return(0,a.useMemo)((()=>e.filter((e=>function(e,s){return!(e.unlisted&&!(0,d.Mg)(e.permalink,s))}(e,s)))),[e,s])}const u={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};var g=t(5893);function h(e){let{sidebar:s}=e;const t=m(s.items);return(0,g.jsx)("aside",{className:"col col--3",children:(0,g.jsxs)("nav",{className:(0,i.Z)(u.sidebar,"thin-scrollbar"),"aria-label":(0,c.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,g.jsx)("div",{className:(0,i.Z)(u.sidebarItemTitle,"margin-bottom--md"),children:s.title}),(0,g.jsx)("ul",{className:(0,i.Z)(u.sidebarItemList,"clean-list"),children:t.map((e=>(0,g.jsx)("li",{className:u.sidebarItem,children:(0,g.jsx)(n.Z,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var b=t(3102);function p(e){let{sidebar:s}=e;const t=m(s.items);return(0,g.jsx)("ul",{className:"menu__list",children:t.map((e=>(0,g.jsx)("li",{className:"menu__list-item",children:(0,g.jsx)(n.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,g.jsx)(b.Zo,{component:p,props:e})}function x(e){let{sidebar:s}=e;const t=(0,l.i)();return s?.items.length?"mobile"===t?(0,g.jsx)(j,{sidebar:s}):(0,g.jsx)(h,{sidebar:s}):null}function v(e){const{sidebar:s,toc:t,children:a,...l}=e,n=s&&s.items.length>0;return(0,g.jsx)(r.Z,{...l,children:(0,g.jsx)("div",{className:"container margin-vert--lg",children:(0,g.jsxs)("div",{className:"row",children:[(0,g.jsx)(x,{sidebar:s}),(0,g.jsx)("main",{className:(0,i.Z)("col",{"col--7":n,"col--9 col--offset-1":!n}),itemScope:!0,itemType:"https://schema.org/Blog",children:a}),t&&(0,g.jsx)("div",{className:"col col--2",children:t})]})})})}},1223:(e,s,t)=>{t.r(s),t.d(s,{default:()=>p});t(7294);var a=t(6010),i=t(5999);const r=()=>(0,i.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var l=t(1944),n=t(5281),c=t(1460),o=t(3008),d=t(2503);const m={tag:"tag_Nnez"};var u=t(5893);function g(e){let{letterEntry:s}=e;return(0,u.jsxs)("article",{children:[(0,u.jsx)(d.Z,{as:"h2",id:s.letter,children:s.letter}),(0,u.jsx)("ul",{className:"padding--none",children:s.tags.map((e=>(0,u.jsx)("li",{className:m.tag,children:(0,u.jsx)(o.Z,{...e})},e.permalink)))}),(0,u.jsx)("hr",{})]})}function h(e){let{tags:s}=e;const t=function(e){const s={};return Object.values(e).forEach((e=>{const t=function(e){return e[0].toUpperCase()}(e.label);s[t]??=[],s[t].push(e)})),Object.entries(s).sort(((e,s)=>{let[t]=e,[a]=s;return t.localeCompare(a)})).map((e=>{let[s,t]=e;return{letter:s,tags:t.sort(((e,s)=>e.label.localeCompare(s.label)))}}))}(s);return(0,u.jsx)("section",{className:"margin-vert--lg",children:t.map((e=>(0,u.jsx)(g,{letterEntry:e},e.letter)))})}var b=t(197);function p(e){let{tags:s,sidebar:t}=e;const i=r();return(0,u.jsxs)(l.FG,{className:(0,a.Z)(n.k.wrapper.blogPages,n.k.page.blogTagsListPage),children:[(0,u.jsx)(l.d,{title:i}),(0,u.jsx)(b.Z,{tag:"blog_tags_list"}),(0,u.jsxs)(c.Z,{sidebar:t,children:[(0,u.jsx)(d.Z,{as:"h1",children:i}),(0,u.jsx)(h,{tags:s})]})]})}},3008:(e,s,t)=>{t.d(s,{Z:()=>n});t(7294);var a=t(6010),i=t(9960);const r={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var l=t(5893);function n(e){let{permalink:s,label:t,count:n}=e;return(0,l.jsxs)(i.Z,{href:s,className:(0,a.Z)(r.tag,n?r.tagWithCount:r.tagRegular),children:[t,n&&(0,l.jsx)("span",{children:n})]})}}}]); \ No newline at end of file diff --git a/assets/js/01a85c17.ead953d1.js b/assets/js/01a85c17.ead953d1.js deleted file mode 100644 index cb2eaca40..000000000 --- a/assets/js/01a85c17.ead953d1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4013],{2506:(e,t,a)=>{a.d(t,{Z:()=>p});var l=a(7294),r=a(6010),n=a(1009),s=a(3488),i=a(3699),c=a(7325);const m={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};function o(e){let{sidebar:t}=e;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,r.Z)(m.sidebar,"thin-scrollbar"),"aria-label":(0,c.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,r.Z)(m.sidebarItemTitle,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,r.Z)(m.sidebarItemList,"clean-list")},t.items.map((e=>l.createElement("li",{key:e.permalink,className:m.sidebarItem},l.createElement(i.Z,{isNavLink:!0,to:e.permalink,className:m.sidebarItemLink,activeClassName:m.sidebarItemLinkActive},e.title)))))))}var d=a(3086);function u(e){let{sidebar:t}=e;return l.createElement("ul",{className:"menu__list"},t.items.map((e=>l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(i.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function g(e){return l.createElement(d.Zo,{component:u,props:e})}function b(e){let{sidebar:t}=e;const a=(0,s.i)();return t?.items.length?"mobile"===a?l.createElement(g,{sidebar:t}):l.createElement(o,{sidebar:t}):null}function p(e){const{sidebar:t,toc:a,children:s,...i}=e,c=t&&t.items.length>0;return l.createElement(n.Z,i,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(b,{sidebar:t}),l.createElement("main",{className:(0,r.Z)("col",{"col--7":c,"col--9 col--offset-1":!c}),itemScope:!0,itemType:"http://schema.org/Blog"},s),a&&l.createElement("div",{className:"col col--2"},a))))}},2864:(e,t,a)=>{a.r(t),a.d(t,{default:()=>p});var l=a(7294),r=a(6010),n=a(7325);const s=()=>(0,n.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});var i=a(5463),c=a(3702),m=a(2506),o=a(3852);const d={tag:"tag_Nnez"};function u(e){let{letterEntry:t}=e;return l.createElement("article",null,l.createElement("h2",null,t.letter),l.createElement("ul",{className:"padding--none"},t.tags.map((e=>l.createElement("li",{key:e.permalink,className:d.tag},l.createElement(o.Z,e))))),l.createElement("hr",null))}function g(e){let{tags:t}=e;const a=function(e){const t={};return Object.values(e).forEach((e=>{const a=function(e){return e[0].toUpperCase()}(e.label);t[a]??=[],t[a].push(e)})),Object.entries(t).sort(((e,t)=>{let[a]=e,[l]=t;return a.localeCompare(l)})).map((e=>{let[t,a]=e;return{letter:t,tags:a.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}(t);return l.createElement("section",{className:"margin-vert--lg"},a.map((e=>l.createElement(u,{key:e.letter,letterEntry:e}))))}var b=a(3647);function p(e){let{tags:t,sidebar:a}=e;const n=s();return l.createElement(i.FG,{className:(0,r.Z)(c.k.wrapper.blogPages,c.k.page.blogTagsListPage)},l.createElement(i.d,{title:n}),l.createElement(b.Z,{tag:"blog_tags_list"}),l.createElement(m.Z,{sidebar:a},l.createElement("h1",null,n),l.createElement(g,{tags:t})))}},3852:(e,t,a)=>{a.d(t,{Z:()=>i});var l=a(7294),r=a(6010),n=a(3699);const s={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function i(e){let{permalink:t,label:a,count:i}=e;return l.createElement(n.Z,{href:t,className:(0,r.Z)(s.tag,i?s.tagWithCount:s.tagRegular)},a,i&&l.createElement("span",null,i))}}}]); \ No newline at end of file diff --git a/assets/js/027d004c.4eb22b30.js b/assets/js/027d004c.4eb22b30.js new file mode 100644 index 000000000..9fd5d6387 --- /dev/null +++ b/assets/js/027d004c.4eb22b30.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8352],{8470:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>a,contentTitle:()=>d,default:()=>c,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var t=r(5893),i=r(1151);const s={},d="The NODE Economy",o={id:"dao/node-basics",title:"The NODE Economy",description:"NODE Basics",source:"@site/docs/dao/node-basics.md",sourceDirName:"dao",slug:"/dao/node-basics",permalink:"/docs/dao/node-basics",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/node-basics.md",tags:[],version:"current",frontMatter:{},sidebar:"daoSidebar",previous:{title:"DAO",permalink:"/docs/dao"},next:{title:"Liquidity Mining",permalink:"/docs/dao/liquidity-mining"}},a={},l=[{value:"NODE Basics",id:"node-basics",level:3},{value:"NODEdrop",id:"nodedrop",level:3},{value:"NODEstream",id:"nodestream",level:3}];function h(e){const n={a:"a",h1:"h1",h3:"h3",img:"img",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"the-node-economy",children:"The NODE Economy"}),"\n",(0,t.jsx)(n.h3,{id:"node-basics",children:"NODE Basics"}),"\n",(0,t.jsxs)(n.p,{children:["Token Address on Mainnet - ",(0,t.jsx)(n.a,{href:"https://etherscan.io/address/0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0",children:"0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0"})]}),"\n",(0,t.jsxs)(n.p,{children:["Token Address on xDai - ",(0,t.jsx)(n.a,{href:"https://blockscout.com/xdai/mainnet/address/0xc60e38C6352875c051B481Cbe79Dd0383AdB7817/transactions",children:"0xc60e38C6352875c051B481Cbe79Dd0383AdB7817"})]}),"\n",(0,t.jsx)(n.p,{children:"NODE has a total initial supply of 100,000,000 tokens. These tokens have been distributed in accordance with the following chart:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"NODEdrop distribution pie chart",src:r(227).Z+"",width:"869",height:"498"})}),"\n",(0,t.jsx)(n.h3,{id:"nodedrop",children:"NODEdrop"}),"\n",(0,t.jsx)(n.p,{children:"NODE has been airdropped in a NODEdrop to our community of faithful supporters. Recipients of the NODEdrop include:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Dappnode Team Members"}),"\n",(0,t.jsx)(n.li,{children:"Dappnode Founders"}),"\n",(0,t.jsx)(n.li,{children:"Purchasers of Dappnode hardware"}),"\n",(0,t.jsx)(n.li,{children:"Code Contributors"}),"\n",(0,t.jsx)(n.li,{children:"Active community members, ranked by our sourcecred algorithm"}),"\n",(0,t.jsx)(n.li,{children:"Donors to Dappnode in Gitcoin Grants Rounds (with donations above $1)"}),"\n",(0,t.jsx)(n.li,{children:'Eth2 stakers who have self-identified as Dappnode runners by including the word "Dappnode" in their graffiti'}),"\n",(0,t.jsx)(n.li,{children:"Eth2 stakers present in the Genesis of Eth2"}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Check your NODEdrop ",(0,t.jsx)(n.a,{href:"http://app.dappnode.io/nodedrop",children:"here"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"nodestream",children:"NODEstream"}),"\n",(0,t.jsx)(n.p,{children:'90% of the entire initial supply of NODE has been allocated to the "NODEstream" which is set to flow for a period of 3 years (36 months - i.e. until July 2024). This is essentially a continous stream of NODE that flows out of the "Reservoir" and into the "Claimable" section of the dashboard. NODEstream distribution can be roughly tracked as follows:'}),"\n",(0,t.jsx)(n.p,{children:"Table for Eth"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Date"}),(0,t.jsx)(n.th,{children:"Month"}),(0,t.jsx)(n.th,{children:"Claimable"}),(0,t.jsx)(n.th,{children:"Held in Reservoir"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"0"}),(0,t.jsx)(n.td,{children:"10%"}),(0,t.jsx)(n.td,{children:"90%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"9"}),(0,t.jsx)(n.td,{children:"32.5%"}),(0,t.jsx)(n.td,{children:"67.5%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"18"}),(0,t.jsx)(n.td,{children:"55%"}),(0,t.jsx)(n.td,{children:"45%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"27"}),(0,t.jsx)(n.td,{children:"77.5%"}),(0,t.jsx)(n.td,{children:"22.5%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"36"}),(0,t.jsx)(n.td,{children:"100%"}),(0,t.jsx)(n.td,{children:"0%"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"Table for xDai"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Date"}),(0,t.jsx)(n.th,{children:"Month"}),(0,t.jsx)(n.th,{children:"Claimable"}),(0,t.jsx)(n.th,{children:"Held in Reservoir"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"0"}),(0,t.jsx)(n.td,{children:"0%"}),(0,t.jsx)(n.td,{children:"100%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"9"}),(0,t.jsx)(n.td,{children:"25%"}),(0,t.jsx)(n.td,{children:"75%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"18"}),(0,t.jsx)(n.td,{children:"50%"}),(0,t.jsx)(n.td,{children:"50%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"27"}),(0,t.jsx)(n.td,{children:"75%"}),(0,t.jsx)(n.td,{children:"35%"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:"Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time)"}),(0,t.jsx)(n.td,{children:"36"}),(0,t.jsx)(n.td,{children:"100%"}),(0,t.jsx)(n.td,{children:"0%"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"The NODEstream works on a time-based linear function, meaning the reservoir will gradually hold a smaller percentage of your NODE and thus more NODE is made instantly available from your staking rewards. At the end of the NODEstream The reservoir will no longer hold any NODE and 100% of your staking rewards will be instantly claimable."}),"\n",(0,t.jsx)(n.p,{children:"This chart show how the function works in Etherum network."}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{width:"70%",src:"/img/nodestream_vesting.png"})}),"\n",(0,t.jsx)(n.p,{children:"This chart show how the function works in dao network. In Ethereum 10% was available at the beginning. In xdai is different, initally it was not available any % token."}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{width:"70%",src:"../../img/nodestream_vesting_xdai.png"})}),"\n",(0,t.jsx)(n.p,{children:"The NODEstream has been designed to encourage long-term participation in the NODE Economy. As the NODE Economy grows and the Dappnode universe expands, our community is awarded even more NODE to use in DAO governance."}),"\n",(0,t.jsx)("p",{align:"center",children:(0,t.jsx)("img",{src:"../../img/claimNODE.png"})}),"\n",(0,t.jsx)(n.p,{children:"Recipients of the NODEdrop on xDai Network are granted the NODEstream, whereas on Mainnet the NODEdrop does not include the NODEstream automatically. In order to receive and augment the flow of NODE you must provide liquidity in any of the eligible pools. Some part of the rewards earned from NODEstaking are claimable immediately, where as the other part is allocated to the reservoir for NODEstreaming."})]})}function c(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},227:(e,n,r)=>{r.d(n,{Z:()=>t});const t=r.p+"assets/images/node_distribution-48b18d5d9b5d462eb1049d3a8aa33a27.png"},1151:(e,n,r)=>{r.d(n,{Z:()=>o,a:()=>d});var t=r(7294);const i={},s=t.createContext(i);function d(e){const n=t.useContext(s);return t.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(i):e.components||i:d(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/027d004c.a5affc84.js b/assets/js/027d004c.a5affc84.js deleted file mode 100644 index 4c0a8c900..000000000 --- a/assets/js/027d004c.a5affc84.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8352],{4137:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var d=a.createContext({}),p=function(e){var t=a.useContext(d),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(d.Provider,{value:t},e.children)},s="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,d=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),s=p(n),c=r,k=s["".concat(d,".").concat(c)]||s[c]||u[c]||l;return n?a.createElement(k,o(o({ref:t},m),{},{components:n})):a.createElement(k,o({ref:t},m))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,o=new Array(l);o[0]=c;var i={};for(var d in t)hasOwnProperty.call(t,d)&&(i[d]=t[d]);i.originalType=e,i[s]="string"==typeof e?e:r,o[1]=i;for(var p=2;p{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var a=n(7462),r=(n(7294),n(4137));const l={},o="The NODE Economy",i={unversionedId:"dao/node-basics",id:"dao/node-basics",title:"The NODE Economy",description:"NODE Basics",source:"@site/docs/dao/node-basics.md",sourceDirName:"dao",slug:"/dao/node-basics",permalink:"/docs/dao/node-basics",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/node-basics.md",tags:[],version:"current",frontMatter:{},sidebar:"daoSidebar",previous:{title:"DAO",permalink:"/docs/dao"},next:{title:"Liquidity Mining",permalink:"/docs/dao/liquidity-mining"}},d={},p=[{value:"NODE Basics",id:"node-basics",level:3},{value:"NODEdrop",id:"nodedrop",level:3},{value:"NODEstream",id:"nodestream",level:3}],m={toc:p},s="wrapper";function u(e){let{components:t,...l}=e;return(0,r.kt)(s,(0,a.Z)({},m,l,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"the-node-economy"},"The NODE Economy"),(0,r.kt)("h3",{id:"node-basics"},"NODE Basics"),(0,r.kt)("p",null,"Token Address on Mainnet - ",(0,r.kt)("a",{parentName:"p",href:"https://etherscan.io/address/0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0"},"0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0")),(0,r.kt)("p",null,"Token Address on xDai - ",(0,r.kt)("a",{parentName:"p",href:"https://blockscout.com/xdai/mainnet/address/0xc60e38C6352875c051B481Cbe79Dd0383AdB7817/transactions"},"0xc60e38C6352875c051B481Cbe79Dd0383AdB7817")),(0,r.kt)("p",null,"NODE has a total initial supply of 100,000,000 tokens. These tokens have been distributed in accordance with the following chart:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"NODEdrop distribution pie chart",src:n(227).Z,width:"869",height:"498"})),(0,r.kt)("h3",{id:"nodedrop"},"NODEdrop"),(0,r.kt)("p",null,"NODE has been airdropped in a NODEdrop to our community of faithful supporters. Recipients of the NODEdrop include:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Dappnode Team Members"),(0,r.kt)("li",{parentName:"ul"},"Dappnode Founders"),(0,r.kt)("li",{parentName:"ul"},"Purchasers of Dappnode hardware"),(0,r.kt)("li",{parentName:"ul"},"Code Contributors"),(0,r.kt)("li",{parentName:"ul"},"Active community members, ranked by our sourcecred algorithm"),(0,r.kt)("li",{parentName:"ul"},"Donors to Dappnode in Gitcoin Grants Rounds (with donations above $1)"),(0,r.kt)("li",{parentName:"ul"},'Eth2 stakers who have self-identified as Dappnode runners by including the word "Dappnode" in their graffiti'),(0,r.kt)("li",{parentName:"ul"},"Eth2 stakers present in the Genesis of Eth2")),(0,r.kt)("p",null,"Check your NODEdrop ",(0,r.kt)("a",{parentName:"p",href:"http://app.dappnode.io/nodedrop"},"here"),"."),(0,r.kt)("h3",{id:"nodestream"},"NODEstream"),(0,r.kt)("p",null,'90% of the entire initial supply of NODE has been allocated to the "NODEstream" which is set to flow for a period of 3 years (36 months - i.e. until July 2024). This is essentially a continous stream of NODE that flows out of the "Reservoir" and into the "Claimable" section of the dashboard. NODEstream distribution can be roughly tracked as follows:'),(0,r.kt)("p",null,"Table for Eth"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Date"),(0,r.kt)("th",{parentName:"tr",align:null},"Month"),(0,r.kt)("th",{parentName:"tr",align:null},"Claimable"),(0,r.kt)("th",{parentName:"tr",align:null},"Held in Reservoir"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time)"),(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"10%"),(0,r.kt)("td",{parentName:"tr",align:null},"90%")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time)"),(0,r.kt)("td",{parentName:"tr",align:null},"9"),(0,r.kt)("td",{parentName:"tr",align:null},"32.5%"),(0,r.kt)("td",{parentName:"tr",align:null},"67.5%")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)"),(0,r.kt)("td",{parentName:"tr",align:null},"18"),(0,r.kt)("td",{parentName:"tr",align:null},"55%"),(0,r.kt)("td",{parentName:"tr",align:null},"45%")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)"),(0,r.kt)("td",{parentName:"tr",align:null},"27"),(0,r.kt)("td",{parentName:"tr",align:null},"77.5%"),(0,r.kt)("td",{parentName:"tr",align:null},"22.5%")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time)"),(0,r.kt)("td",{parentName:"tr",align:null},"36"),(0,r.kt)("td",{parentName:"tr",align:null},"100%"),(0,r.kt)("td",{parentName:"tr",align:null},"0%")))),(0,r.kt)("p",null,"Table for xDai"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Date"),(0,r.kt)("th",{parentName:"tr",align:null},"Month"),(0,r.kt)("th",{parentName:"tr",align:null},"Claimable"),(0,r.kt)("th",{parentName:"tr",align:null},"Held in Reservoir"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time)"),(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"0%"),(0,r.kt)("td",{parentName:"tr",align:null},"100%")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time)"),(0,r.kt)("td",{parentName:"tr",align:null},"9"),(0,r.kt)("td",{parentName:"tr",align:null},"25%"),(0,r.kt)("td",{parentName:"tr",align:null},"75%")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)"),(0,r.kt)("td",{parentName:"tr",align:null},"18"),(0,r.kt)("td",{parentName:"tr",align:null},"50%"),(0,r.kt)("td",{parentName:"tr",align:null},"50%")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)"),(0,r.kt)("td",{parentName:"tr",align:null},"27"),(0,r.kt)("td",{parentName:"tr",align:null},"75%"),(0,r.kt)("td",{parentName:"tr",align:null},"35%")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time)"),(0,r.kt)("td",{parentName:"tr",align:null},"36"),(0,r.kt)("td",{parentName:"tr",align:null},"100%"),(0,r.kt)("td",{parentName:"tr",align:null},"0%")))),(0,r.kt)("p",null,"The NODEstream works on a time-based linear function, meaning the reservoir will gradually hold a smaller percentage of your NODE and thus more NODE is made instantly available from your staking rewards. At the end of the NODEstream The reservoir will no longer hold any NODE and 100% of your staking rewards will be instantly claimable."),(0,r.kt)("p",null,"This chart show how the function works in Etherum network."),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{width:"70%",src:"/img/nodestream_vesting.png"})),(0,r.kt)("p",null,"This chart show how the function works in dao network. In Ethereum 10% was available at the beginning. In xdai is different, initally it was not available any % token."),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{width:"70%",src:"../../img/nodestream_vesting_xdai.png"})),(0,r.kt)("p",null,"The NODEstream has been designed to encourage long-term participation in the NODE Economy. As the NODE Economy grows and the Dappnode universe expands, our community is awarded even more NODE to use in DAO governance."),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{src:"../../img/claimNODE.png"})),(0,r.kt)("p",null,"Recipients of the NODEdrop on xDai Network are granted the NODEstream, whereas on Mainnet the NODEdrop does not include the NODEstream automatically. In order to receive and augment the flow of NODE you must provide liquidity in any of the eligible pools. Some part of the rewards earned from NODEstaking are claimable immediately, where as the other part is allocated to the reservoir for NODEstreaming."))}u.isMDXComponent=!0},227:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/node_distribution-48b18d5d9b5d462eb1049d3a8aa33a27.png"}}]); \ No newline at end of file diff --git a/assets/js/031793e1.068e542a.js b/assets/js/031793e1.d4fe0f16.js similarity index 78% rename from assets/js/031793e1.068e542a.js rename to assets/js/031793e1.d4fe0f16.js index 70d9e32a3..3847ce08d 100644 --- a/assets/js/031793e1.068e542a.js +++ b/assets/js/031793e1.d4fe0f16.js @@ -1 +1 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1633],{2511:a=>{a.exports=JSON.parse('{"label":"facebook","permalink":"/blog/tags/facebook","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1633],{2511:a=>{a.exports=JSON.parse('{"label":"facebook","permalink":"/blog/tags/facebook","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/0429b4a1.75792dba.js b/assets/js/0429b4a1.75792dba.js deleted file mode 100644 index 099b30064..000000000 --- a/assets/js/0429b4a1.75792dba.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6197],{4137:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>m});var o=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),c=function(e){var n=o.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},l=function(e){var n=c(e.components);return o.createElement(s.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},f=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),d=c(t),f=a,m=d["".concat(s,".").concat(f)]||d[f]||u[f]||r;return t?o.createElement(m,i(i({ref:n},l),{},{components:t})):o.createElement(m,i({ref:n},l))}));function m(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=t.length,i=new Array(r);i[0]=f;var p={};for(var s in n)hasOwnProperty.call(n,s)&&(p[s]=n[s]);p.originalType=e,p[d]="string"==typeof e?e:a,i[1]=p;for(var c=2;c{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>p,toc:()=>c});var o=t(7462),a=(t(7294),t(4137));const r={},i="AWS",p={unversionedId:"user/dappnode-cloud/providers/aws/overview",id:"user/dappnode-cloud/providers/aws/overview",title:"AWS",description:"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.",source:"@site/docs/user/dappnode-cloud/providers/aws/overview.md",sourceDirName:"user/dappnode-cloud/providers/aws",slug:"/user/dappnode-cloud/providers/aws/overview",permalink:"/docs/user/dappnode-cloud/providers/aws/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/providers/aws/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"What is Dappnode Cloud?",permalink:"/docs/user/dappnode-cloud/overview"},next:{title:"How to Set Up an Instance",permalink:"/docs/user/dappnode-cloud/providers/aws/set-up-instance"}},s={},c=[{value:"Dappnode AWS AMI",id:"dappnode-aws-ami",level:2},{value:"Pricing",id:"pricing",level:3},{value:"Dappnode AMI \ud83d\udcc0",id:"dappnode-ami-",level:4},{value:"AWS Machines \ud83d\udda5",id:"aws-machines-",level:4}],l={toc:c},d="wrapper";function u(e){let{components:n,...t}=e;return(0,a.kt)(d,(0,o.Z)({},l,t,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"aws"},"AWS"),(0,a.kt)("p",null,"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently."),(0,a.kt)("h2",{id:"dappnode-aws-ami"},"Dappnode AWS AMI"),(0,a.kt)("p",null,"The Dappnode AMI is an image specifically designed for running Dappnode in the AWS environment. It contains all the pre-installed software and configurations required to deploy a fully functional Dappnode instance. By using the Dappnode AMI, users can quickly launch an instance in the cloud without having to manually set up and configure the Dappnode software, simplifying the deployment process and ensuring consistency across different instances."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"An Amazon Machine Image (AMI) is a pre-configured template used to create a virtual machine within the AWS cloud.")),(0,a.kt)("h3",{id:"pricing"},"Pricing"),(0,a.kt)("p",null,"When using Dappnode Cloud on AWS, there are two main charges to consider:"),(0,a.kt)("h4",{id:"dappnode-ami-"},"Dappnode AMI \ud83d\udcc0"),(0,a.kt)("p",null,"The Dappnode AMI is available for $15 per month. This fee grants you access to the Dappnode image, allowing you to launch as many instances as you need. This cost covers the use of Dappnode's software in the cloud."),(0,a.kt)("h4",{id:"aws-machines-"},"AWS Machines \ud83d\udda5"),(0,a.kt)("p",null,"In addition to the Dappnode AMI fee, you will incur charges for the AWS infrastructure itself. These costs vary based on several factors:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Instance Type:")," The specifications of the machine you choose, such as CPU and memory will affect the pricing.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Storage:")," The amount and type of storage you select for your instance, will also influence the cost.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Region:")," AWS pricing varies by region, so the location where you launch your instance can impact the overall cost."))),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"AWS operates on a pay-as-you-go model, meaning you only pay for the resources you use. Before launching your instance, you can view an estimate of the expected costs on the Dappnode AMI launch page. This estimate provides transparency, helping you plan your budget effectively.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0429b4a1.e2f2a152.js b/assets/js/0429b4a1.e2f2a152.js new file mode 100644 index 000000000..e060d3e69 --- /dev/null +++ b/assets/js/0429b4a1.e2f2a152.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6197],{497:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>l,frontMatter:()=>a,metadata:()=>r,toc:()=>c});var i=o(5893),s=o(1151);const a={},t="AWS",r={id:"user/dappnode-cloud/providers/aws/overview",title:"AWS",description:"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.",source:"@site/docs/user/dappnode-cloud/providers/aws/overview.md",sourceDirName:"user/dappnode-cloud/providers/aws",slug:"/user/dappnode-cloud/providers/aws/overview",permalink:"/docs/user/dappnode-cloud/providers/aws/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/providers/aws/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"What is Dappnode Cloud?",permalink:"/docs/user/dappnode-cloud/overview"},next:{title:"How to Set Up an Instance",permalink:"/docs/user/dappnode-cloud/providers/aws/set-up-instance"}},d={},c=[{value:"Dappnode AWS AMI",id:"dappnode-aws-ami",level:2},{value:"Pricing",id:"pricing",level:3},{value:"Dappnode AMI \ud83d\udcc0",id:"dappnode-ami-",level:4},{value:"AWS Machines \ud83d\udda5",id:"aws-machines-",level:4}];function p(e){const n={admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"aws",children:"AWS"}),"\n",(0,i.jsx)(n.p,{children:"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently."}),"\n",(0,i.jsx)(n.h2,{id:"dappnode-aws-ami",children:"Dappnode AWS AMI"}),"\n",(0,i.jsx)(n.p,{children:"The Dappnode AMI is an image specifically designed for running Dappnode in the AWS environment. It contains all the pre-installed software and configurations required to deploy a fully functional Dappnode instance. By using the Dappnode AMI, users can quickly launch an instance in the cloud without having to manually set up and configure the Dappnode software, simplifying the deployment process and ensuring consistency across different instances."}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"An Amazon Machine Image (AMI) is a pre-configured template used to create a virtual machine within the AWS cloud."})}),"\n",(0,i.jsx)(n.h3,{id:"pricing",children:"Pricing"}),"\n",(0,i.jsx)(n.p,{children:"When using Dappnode Cloud on AWS, there are two main charges to consider:"}),"\n",(0,i.jsx)(n.h4,{id:"dappnode-ami-",children:"Dappnode AMI \ud83d\udcc0"}),"\n",(0,i.jsx)(n.p,{children:"The Dappnode AMI is available for $15 per month. This fee grants you access to the Dappnode image, allowing you to launch as many instances as you need. This cost covers the use of Dappnode's software in the cloud."}),"\n",(0,i.jsx)(n.h4,{id:"aws-machines-",children:"AWS Machines \ud83d\udda5"}),"\n",(0,i.jsx)(n.p,{children:"In addition to the Dappnode AMI fee, you will incur charges for the AWS infrastructure itself. These costs vary based on several factors:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Instance Type:"})," The specifications of the machine you choose, such as CPU and memory will affect the pricing."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Storage:"})," The amount and type of storage you select for your instance, will also influence the cost."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Region:"})," AWS pricing varies by region, so the location where you launch your instance can impact the overall cost."]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"AWS operates on a pay-as-you-go model, meaning you only pay for the resources you use. Before launching your instance, you can view an estimate of the expected costs on the Dappnode AMI launch page. This estimate provides transparency, helping you plan your budget effectively."})})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>r,a:()=>t});var i=o(7294);const s={},a=i.createContext(s);function t(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/058440e4.04f784ff.js b/assets/js/058440e4.04f784ff.js deleted file mode 100644 index 8744c47d8..000000000 --- a/assets/js/058440e4.04f784ff.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3964],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>k});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(n),h=a,k=c["".concat(l,".").concat(h)]||c[h]||d[h]||o;return n?r.createElement(k,i(i({ref:t},u),{},{components:n})):r.createElement(k,i({ref:t},u))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:a,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var r=n(7462),a=(n(7294),n(4137));const o={},i="Earn with Staking in Dappnode",s={unversionedId:"user/staking/overview",id:"user/staking/overview",title:"Earn with Staking in Dappnode",description:"Decentralize Proof-of-Stake chains and earn",source:"@site/docs/user/staking/overview.md",sourceDirName:"user/staking",slug:"/user/staking/overview",permalink:"/docs/user/staking/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Temperature",permalink:"/docs/user/hardware/temperature"},next:{title:"Ethereum mainnet",permalink:"/docs/user/staking/ethereum/solo/mainnet"}},l={},p=[{value:"Decentralize Proof-of-Stake chains and earn",id:"decentralize-proof-of-stake-chains-and-earn",level:2},{value:"The Stakers UI",id:"the-stakers-ui",level:2},{value:"Can I stake without 32 ETH?",id:"can-i-stake-without-32-eth",level:2},{value:"What is Staking?",id:"what-is-staking",level:2},{value:"Why Stake with Dappnode?",id:"why-stake-with-dappnode",level:2}],u={toc:p},c="wrapper";function d(e){let{components:t,...o}=e;return(0,a.kt)(c,(0,r.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"earn-with-staking-in-dappnode"},"Earn with Staking in Dappnode"),(0,a.kt)("h2",{id:"decentralize-proof-of-stake-chains-and-earn"},"Decentralize Proof-of-Stake chains and earn"),(0,a.kt)("p",null,"Dappnode makes it ",(0,a.kt)("strong",{parentName:"p"},"extremely simple")," to stake and validate Proof-of-Stake chains such as Ethereum, Gnosis Chain and LUKSO. ",(0,a.kt)("strong",{parentName:"p"},"Not only do you contribute to the network's security, but you also earn handsome rewards.")),(0,a.kt)("p",null,"Dappnode offers you the best UX, through our Stakers UI, with which you can run a validator node in a few simple steps and without ever needing command line or technical knowledge."),(0,a.kt)("h2",{id:"the-stakers-ui"},"The Stakers UI"),(0,a.kt)("p",null,"You can run all the infrastructure for ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/staking/ethereum/solo/mainnet"},"Ethereum"),", ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/staking/gnosis-chain/solo"},"Gnosis Chain")," and ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/staking/lukso/solo"},"LUKSO")," in 4 steps through the Stakers UI:"),(0,a.kt)("p",null,(0,a.kt)("img",{src:n(9647).Z,width:"1770",height:"1496"})),(0,a.kt)("p",null,'Apart from installing the nodes, you will need to generate the keys for the validator and deposit (or "stake"!) your crypto. Please refer to each section for Ethereum, Gnosis Chain and LUKSO for step-by-step guides.'),(0,a.kt)("h2",{id:"can-i-stake-without-32-eth"},"Can I stake without 32 ETH?"),(0,a.kt)("p",null,"Yes! Thanks to LSDs AND DVT tech, you don't need 32 ETH to stake. Or you can stake in Gnosis Chain or LUKSO, which have more affordable cost for a solo validator. "),(0,a.kt)("p",null,"For more information on LSDs and DVT and how you can stake Ethereum without 32 ETH, please check their dedicated pages on the side menu under Ethereum > LSD Pools or Ethereum > DVT."),(0,a.kt)("h2",{id:"what-is-staking"},"What is Staking?"),(0,a.kt)("p",null,"Staking is the act of allocating a portion of your cryptocurrency holdings as collateral to participate in:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"Validating Blocks:")," Confirming transaction records and adding them to the blockchain."),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"Securing the Chain:")," Ensuring the network remains resistant to malicious intentions."),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("strong",{parentName:"li"},"Earning Rewards:")," As a validator, you get paid for your services in the form of more cryptocurrency.")),(0,a.kt)("h2",{id:"why-stake-with-dappnode"},"Why Stake with Dappnode?"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Simplicity is our mantra!")," We've streamlined the staking process, so all you need to do is:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Select your desired blockchain."),(0,a.kt)("li",{parentName:"ul"},"Dive into our comprehensive documentation for step-by-step guidance."),(0,a.kt)("li",{parentName:"ul"},"Begin your staking journey.")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Happy Staking!")))}d.isMDXComponent=!0},9647:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/stakersnumbers-56800861e56cfac985a15737928b2cc7.png"}}]); \ No newline at end of file diff --git a/assets/js/058440e4.9ea1b92f.js b/assets/js/058440e4.9ea1b92f.js new file mode 100644 index 000000000..dc118a4d5 --- /dev/null +++ b/assets/js/058440e4.9ea1b92f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3964],{6529:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>o,toc:()=>h});var s=t(5893),i=t(1151);const r={},a="Earn with Staking in Dappnode",o={id:"user/staking/overview",title:"Earn with Staking in Dappnode",description:"Decentralize Proof-of-Stake chains and earn",source:"@site/docs/user/staking/overview.md",sourceDirName:"user/staking",slug:"/user/staking/overview",permalink:"/docs/user/staking/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Temperature",permalink:"/docs/user/hardware/temperature"},next:{title:"Ethereum mainnet",permalink:"/docs/user/staking/ethereum/solo/mainnet"}},d={},h=[{value:"Decentralize Proof-of-Stake chains and earn",id:"decentralize-proof-of-stake-chains-and-earn",level:2},{value:"The Stakers UI",id:"the-stakers-ui",level:2},{value:"Can I stake without 32 ETH?",id:"can-i-stake-without-32-eth",level:2},{value:"What is Staking?",id:"what-is-staking",level:2},{value:"Why Stake with Dappnode?",id:"why-stake-with-dappnode",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"earn-with-staking-in-dappnode",children:"Earn with Staking in Dappnode"}),"\n",(0,s.jsx)(n.h2,{id:"decentralize-proof-of-stake-chains-and-earn",children:"Decentralize Proof-of-Stake chains and earn"}),"\n",(0,s.jsxs)(n.p,{children:["Dappnode makes it ",(0,s.jsx)(n.strong,{children:"extremely simple"})," to stake and validate Proof-of-Stake chains such as Ethereum, Gnosis Chain and LUKSO. ",(0,s.jsx)(n.strong,{children:"Not only do you contribute to the network's security, but you also earn handsome rewards."})]}),"\n",(0,s.jsx)(n.p,{children:"Dappnode offers you the best UX, through our Stakers UI, with which you can run a validator node in a few simple steps and without ever needing command line or technical knowledge."}),"\n",(0,s.jsx)(n.h2,{id:"the-stakers-ui",children:"The Stakers UI"}),"\n",(0,s.jsxs)(n.p,{children:["You can run all the infrastructure for ",(0,s.jsx)(n.a,{href:"/docs/user/staking/ethereum/solo/mainnet",children:"Ethereum"}),", ",(0,s.jsx)(n.a,{href:"/docs/user/staking/gnosis-chain/solo",children:"Gnosis Chain"})," and ",(0,s.jsx)(n.a,{href:"/docs/user/staking/lukso/solo",children:"LUKSO"})," in 4 steps through the Stakers UI:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:t(9647).Z+"",width:"1770",height:"1496"})}),"\n",(0,s.jsx)(n.p,{children:'Apart from installing the nodes, you will need to generate the keys for the validator and deposit (or "stake"!) your crypto. Please refer to each section for Ethereum, Gnosis Chain and LUKSO for step-by-step guides.'}),"\n",(0,s.jsx)(n.h2,{id:"can-i-stake-without-32-eth",children:"Can I stake without 32 ETH?"}),"\n",(0,s.jsx)(n.p,{children:"Yes! Thanks to LSDs AND DVT tech, you don't need 32 ETH to stake. Or you can stake in Gnosis Chain or LUKSO, which have more affordable cost for a solo validator."}),"\n",(0,s.jsx)(n.p,{children:"For more information on LSDs and DVT and how you can stake Ethereum without 32 ETH, please check their dedicated pages on the side menu under Ethereum > LSD Pools or Ethereum > DVT."}),"\n",(0,s.jsx)(n.h2,{id:"what-is-staking",children:"What is Staking?"}),"\n",(0,s.jsx)(n.p,{children:"Staking is the act of allocating a portion of your cryptocurrency holdings as collateral to participate in:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Validating Blocks:"})," Confirming transaction records and adding them to the blockchain."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Securing the Chain:"})," Ensuring the network remains resistant to malicious intentions."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Earning Rewards:"})," As a validator, you get paid for your services in the form of more cryptocurrency."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"why-stake-with-dappnode",children:"Why Stake with Dappnode?"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Simplicity is our mantra!"})," We've streamlined the staking process, so all you need to do is:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Select your desired blockchain."}),"\n",(0,s.jsx)(n.li,{children:"Dive into our comprehensive documentation for step-by-step guidance."}),"\n",(0,s.jsx)(n.li,{children:"Begin your staking journey."}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Happy Staking!"})})]})}function l(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},9647:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/stakersnumbers-56800861e56cfac985a15737928b2cc7.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>a});var s=t(7294);const i={},r=s.createContext(i);function a(e){const n=s.useContext(r);return s.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(i):e.components||i:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/090ba480.3d806478.js b/assets/js/090ba480.3d806478.js deleted file mode 100644 index f00db8c59..000000000 --- a/assets/js/090ba480.3d806478.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5788],{4137:(e,t,o)=>{o.d(t,{Zo:()=>m,kt:()=>u});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var p=n.createContext({}),d=function(e){var t=n.useContext(p),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},m=function(e){var t=d(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,m=s(e,["components","mdxType","originalType","parentName"]),c=d(o),h=r,u=c["".concat(p,".").concat(h)]||c[h]||l[h]||a;return o?n.createElement(u,i(i({ref:t},m),{},{components:o})):n.createElement(u,i({ref:t},m))}));function u(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=h;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var d=2;d{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>l,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var n=o(7462),r=(o(7294),o(4137));const a={},i="Deep Dive into Smooth!",s={unversionedId:"smooth/deep-dive-into-smooth/overview",id:"smooth/deep-dive-into-smooth/overview",title:"Deep Dive into Smooth!",description:"In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!",source:"@site/docs/smooth/deep-dive-into-smooth/overview.md",sourceDirName:"smooth/deep-dive-into-smooth",slug:"/smooth/deep-dive-into-smooth/overview",permalink:"/docs/smooth/deep-dive-into-smooth/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/deep-dive-into-smooth/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Smooth",permalink:"/docs/smooth"},next:{title:"Rewards",permalink:"/docs/smooth/deep-dive-into-smooth/rewards"}},p={},d=[],m={toc:d},c="wrapper";function l(e){let{components:t,...o}=e;return(0,r.kt)(c,(0,n.Z)({},m,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"deep-dive-into-smooth"},"Deep Dive into Smooth!"),(0,r.kt)("p",null,"In this section, you will find an in-depth explanation on how ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," works. This includes its different components, all states possible of a subscribed validator, and much more!"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"We recommend reading and understanding the contents of this section before subscribing to ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),".")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"/docs/smooth/deep-dive-into-smooth/rewards"},(0,r.kt)("strong",{parentName:"a"},"Smooth's Rewards")),": Learn how ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," handles incoming rewards and how they are distributed to validators.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"/docs/smooth/deep-dive-into-smooth/states"},(0,r.kt)("strong",{parentName:"a"},"Validator States")),": A detailed explanation of all possible states of a subscribed ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," validator.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"/docs/smooth/deep-dive-into-smooth/oracle-sm"},(0,r.kt)("strong",{parentName:"a"},"Smooth's Oracle and Smart Contract")),": Learn how the two main components of ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),", the Oracle and smart contract work together to track validators and distribute rewards."))))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/090ba480.8980c16f.js b/assets/js/090ba480.8980c16f.js new file mode 100644 index 000000000..60cbdd77e --- /dev/null +++ b/assets/js/090ba480.8980c16f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5788],{2963:(o,e,t)=>{t.r(e),t.d(e,{assets:()=>a,contentTitle:()=>d,default:()=>l,frontMatter:()=>i,metadata:()=>r,toc:()=>h});var n=t(5893),s=t(1151);const i={},d="Deep Dive into Smooth!",r={id:"smooth/deep-dive-into-smooth/overview",title:"Deep Dive into Smooth!",description:"In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!",source:"@site/docs/smooth/deep-dive-into-smooth/overview.md",sourceDirName:"smooth/deep-dive-into-smooth",slug:"/smooth/deep-dive-into-smooth/overview",permalink:"/docs/smooth/deep-dive-into-smooth/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/deep-dive-into-smooth/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Smooth",permalink:"/docs/smooth"},next:{title:"Rewards",permalink:"/docs/smooth/deep-dive-into-smooth/rewards"}},a={},h=[];function c(o){const e={a:"a",admonition:"admonition",h1:"h1",li:"li",ol:"ol",p:"p",strong:"strong",...(0,s.a)(),...o.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.h1,{id:"deep-dive-into-smooth",children:"Deep Dive into Smooth!"}),"\n",(0,n.jsxs)(e.p,{children:["In this section, you will find an in-depth explanation on how ",(0,n.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," works. This includes its different components, all states possible of a subscribed validator, and much more!"]}),"\n",(0,n.jsx)(e.admonition,{type:"info",children:(0,n.jsxs)(e.p,{children:["We recommend reading and understanding the contents of this section before subscribing to ",(0,n.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]})}),"\n",(0,n.jsxs)(e.ol,{children:["\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.a,{href:"/docs/smooth/deep-dive-into-smooth/rewards",children:(0,n.jsx)(e.strong,{children:"Smooth's Rewards"})}),": Learn how ",(0,n.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," handles incoming rewards and how they are distributed to validators."]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.a,{href:"/docs/smooth/deep-dive-into-smooth/states",children:(0,n.jsx)(e.strong,{children:"Validator States"})}),": A detailed explanation of all possible states of a subscribed ",(0,n.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," validator."]}),"\n"]}),"\n",(0,n.jsxs)(e.li,{children:["\n",(0,n.jsxs)(e.p,{children:[(0,n.jsx)(e.a,{href:"/docs/smooth/deep-dive-into-smooth/oracle-sm",children:(0,n.jsx)(e.strong,{children:"Smooth's Oracle and Smart Contract"})}),": Learn how the two main components of ",(0,n.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),", the Oracle and smart contract work together to track validators and distribute rewards."]}),"\n"]}),"\n"]})]})}function l(o={}){const{wrapper:e}={...(0,s.a)(),...o.components};return e?(0,n.jsx)(e,{...o,children:(0,n.jsx)(c,{...o})}):c(o)}},1151:(o,e,t)=>{t.d(e,{Z:()=>r,a:()=>d});var n=t(7294);const s={},i=n.createContext(s);function d(o){const e=n.useContext(i);return n.useMemo((function(){return"function"==typeof o?o(e):{...e,...o}}),[e,o])}function r(o){let e;return e=o.disableParentContext?"function"==typeof o.components?o.components(s):o.components||s:d(o.components),n.createElement(i.Provider,{value:e},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/0af727f1.7cdf92ce.js b/assets/js/0af727f1.7cdf92ce.js new file mode 100644 index 000000000..2e4e8538f --- /dev/null +++ b/assets/js/0af727f1.7cdf92ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8999],{8071:(e,o,s)=>{s.r(o),s.d(o,{assets:()=>i,contentTitle:()=>n,default:()=>h,frontMatter:()=>r,metadata:()=>d,toc:()=>l});var t=s(5893),a=s(1151);const r={},n="FAQ & Glossary",d={id:"smooth/faq-glossary",title:"FAQ & Glossary",description:"FAQ",source:"@site/docs/smooth/faq-glossary.md",sourceDirName:"smooth",slug:"/smooth/faq-glossary",permalink:"/docs/smooth/faq-glossary",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/faq-glossary.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Unsubscribing from Smooth.",permalink:"/docs/smooth/unsubscribe-from-smooth"}},i={},l=[{value:"FAQ",id:"faq",level:2},{value:"Glossary",id:"glossary",level:2}];function c(e){const o={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",...(0,a.a)(),...e.components},{Details:s}=o;return s||function(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"faq--glossary",children:"FAQ & Glossary"}),"\n",(0,t.jsx)(o.h2,{id:"faq",children:"FAQ"}),"\n",(0,t.jsx)(s,{closed:!0,children:(0,t.jsxs)(o.p,{children:[(0,t.jsx)("summary",{children:"What do I need to do to claim my rewards?"}),"\nOnce your pending rewards are transformed into accumulated rewards after your block proposal, a small claim transaction will be required from the withdrawal address to send the ETH rewards to your wallet."]})}),"\n",(0,t.jsx)(s,{closed:!0,children:(0,t.jsxs)(o.p,{children:[(0,t.jsxs)("summary",{children:["Is there a fee that Dappnode takes for participating in ",(0,t.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"}),"?"]}),"\n7% of all the Rewards goes to supporting the development of Dappnode and sustainability of ",(0,t.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"})]})}),"\n",(0,t.jsx)(s,{closed:!0,children:(0,t.jsxs)(o.p,{children:[(0,t.jsxs)("summary",{children:["If I want to unsubscribe my validator from ",(0,t.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"}),", when is the best time to do it?"]}),"\nUnsubscribing a validator from ",(0,t.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"})," causes it to lose all its pending rewards. Hence, the ideal moment to exit ",(0,t.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"})," is just after your last successful block proposal is reflected in Smooth's Smart Contract. A successful block proposal transfers all pending rewards claimable, allowing you to claim them before unsubscribing. This approach minimizes the pending rewards lost when unsubscribing."]})}),"\n",(0,t.jsx)(s,{closed:!0,children:(0,t.jsxs)(o.p,{children:[(0,t.jsxs)("summary",{children:["Does ",(0,t.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"})," take my Consensus Layer (CL) rewards?"]}),"\nNo, ",(0,t.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"})," does not take your CL rewards. CL rewards are always sent directly to your withdrawal address. ",(0,t.jsx)("a",{href:"https://smooth.dappnode.io/",children:"Smooth"})," only takes the execution layer rewards, which are the fees or MEV of the blocks you propose. These are the rewards that are sent to the fee recipient."]})}),"\n",(0,t.jsx)(o.h2,{id:"glossary",children:"Glossary"}),"\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.code,{children:"Reward"}),": Any balance denominated in ETH that is sent to ",(0,t.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". Rewards are detected by the oracle and shared fairly among all the participants in the pool. The oracle will detect all types of rewards and distribute them fairly. All rewards are denominated in ",(0,t.jsx)(o.code,{children:"ETH"})," and other types of tokens such as ERC20 are not considered by the oracle. The vast majority of rewards come from block proposals of Smooth's validators and Donations."]}),"\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.code,{children:"Pending rewards"}),": Pending rewards are those to be owned by the validator but not yet consolidated, rendering them unclaimable. Upon a successful block proposal by the validator, these rewards transition into the 'Accumulated rewards' category, becoming claimable. This mechanism ensures that validators can only claim rewards after contributing to the pool, guarding against cheating or exploiting the system."]}),"\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.code,{children:"Accumulated rewards"}),": All consolidated rewards your validator has generated, i.e. those claimed and claimable."]}),"\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.code,{children:"Claimable rewards"}),": Rewards ready to claim. Claimable rewards are the sum of all your accumulated rewards minus the rewards that have been claimed already. Only the withdrawal address of the validator can claim its rewards."]})]})}function h(e={}){const{wrapper:o}={...(0,a.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1151:(e,o,s)=>{s.d(o,{Z:()=>d,a:()=>n});var t=s(7294);const a={},r=t.createContext(a);function n(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:n(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0af727f1.a8bafb01.js b/assets/js/0af727f1.a8bafb01.js deleted file mode 100644 index a51be4269..000000000 --- a/assets/js/0af727f1.a8bafb01.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8999],{4137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>u});var o=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=o.createContext({}),d=function(e){var t=o.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},c=function(e){var t=d(e.components);return o.createElement(i.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,i=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=d(r),h=a,u=p["".concat(i,".").concat(h)]||p[h]||m[h]||n;return r?o.createElement(u,s(s({ref:t},c),{},{components:r})):o.createElement(u,s({ref:t},c))}));function u(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,s=new Array(n);s[0]=h;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[p]="string"==typeof e?e:a,s[1]=l;for(var d=2;d{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>m,frontMatter:()=>n,metadata:()=>l,toc:()=>d});var o=r(7462),a=(r(7294),r(4137));const n={},s="FAQ & Glossary",l={unversionedId:"smooth/faq-glossary",id:"smooth/faq-glossary",title:"FAQ & Glossary",description:"FAQ",source:"@site/docs/smooth/faq-glossary.md",sourceDirName:"smooth",slug:"/smooth/faq-glossary",permalink:"/docs/smooth/faq-glossary",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/faq-glossary.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Unsubscribing from Smooth.",permalink:"/docs/smooth/unsubscribe-from-smooth"}},i={},d=[{value:"FAQ",id:"faq",level:2},{value:"Glossary",id:"glossary",level:2}],c={toc:d},p="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,o.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"faq--glossary"},"FAQ & Glossary"),(0,a.kt)("h2",{id:"faq"},"FAQ"),(0,a.kt)("details",{closed:!0},(0,a.kt)("summary",null,"What do I need to do to claim my rewards?"),"Once your pending rewards are transformed into accumulated rewards after your block proposal, a small claim transaction will be required from the withdrawal address to send the ETH rewards to your wallet."),(0,a.kt)("details",{closed:!0},(0,a.kt)("summary",null,"Is there a fee that Dappnode takes for participating in ",(0,a.kt)("a",{href:"https://smooth.dappnode.io/"},"Smooth"),"?"),"7% of all the Rewards goes to supporting the development of Dappnode and sustainability of ",(0,a.kt)("a",{href:"https://smooth.dappnode.io/"},"Smooth")),(0,a.kt)("details",{closed:!0},(0,a.kt)("summary",null,"If I want to unsubscribe my validator from ",(0,a.kt)("a",{href:"https://smooth.dappnode.io/"},"Smooth"),", when is the best time to do it?"),"Unsubscribing a validator from ",(0,a.kt)("a",{href:"https://smooth.dappnode.io/"},"Smooth")," causes it to lose all its pending rewards. Hence, the ideal moment to exit ",(0,a.kt)("a",{href:"https://smooth.dappnode.io/"},"Smooth")," is just after your last successful block proposal is reflected in Smooth's Smart Contract. A successful block proposal transfers all pending rewards claimable, allowing you to claim them before unsubscribing. This approach minimizes the pending rewards lost when unsubscribing."),(0,a.kt)("details",{closed:!0},(0,a.kt)("summary",null,"Does ",(0,a.kt)("a",{href:"https://smooth.dappnode.io/"},"Smooth")," take my Consensus Layer (CL) rewards?"),"No, ",(0,a.kt)("a",{href:"https://smooth.dappnode.io/"},"Smooth")," does not take your CL rewards. CL rewards are always sent directly to your withdrawal address. ",(0,a.kt)("a",{href:"https://smooth.dappnode.io/"},"Smooth")," only takes the execution layer rewards, which are the fees or MEV of the blocks you propose. These are the rewards that are sent to the fee recipient."),(0,a.kt)("h2",{id:"glossary"},"Glossary"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Reward"),": Any balance denominated in ETH that is sent to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". Rewards are detected by the oracle and shared fairly among all the participants in the pool. The oracle will detect all types of rewards and distribute them fairly. All rewards are denominated in ",(0,a.kt)("inlineCode",{parentName:"p"},"ETH")," and other types of tokens such as ERC20 are not considered by the oracle. The vast majority of rewards come from block proposals of Smooth's validators and Donations."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Pending rewards"),": Pending rewards are those to be owned by the validator but not yet consolidated, rendering them unclaimable. Upon a successful block proposal by the validator, these rewards transition into the 'Accumulated rewards' category, becoming claimable. This mechanism ensures that validators can only claim rewards after contributing to the pool, guarding against cheating or exploiting the system."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Accumulated rewards"),": All consolidated rewards your validator has generated, i.e. those claimed and claimable."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"Claimable rewards"),": Rewards ready to claim. Claimable rewards are the sum of all your accumulated rewards minus the rewards that have been claimed already. Only the withdrawal address of the validator can claim its rewards."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0f7f07eb.82baa2f7.js b/assets/js/0f7f07eb.82baa2f7.js new file mode 100644 index 000000000..275ef30de --- /dev/null +++ b/assets/js/0f7f07eb.82baa2f7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7675],{4027:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>t,toc:()=>d});var r=s(5893),o=s(1151);const a={},i="Terminal Access to Dappnode",t={id:"user/access-your-dappnode/terminal",title:"Terminal Access to Dappnode",description:"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.",source:"@site/docs/user/access-your-dappnode/terminal.md",sourceDirName:"user/access-your-dappnode",slug:"/user/access-your-dappnode/terminal",permalink:"/docs/user/access-your-dappnode/terminal",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/terminal.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"OpenVPN Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/openvpn"},next:{title:"Local Proxy Access to Dappnode",permalink:"/docs/user/access-your-dappnode/local"}},c={},d=[{value:"SSH Access",id:"ssh-access",level:2},{value:"External SSH Access",id:"external-ssh-access",level:3},{value:"Physical Terminal Access",id:"physical-terminal-access",level:2}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"terminal-access-to-dappnode",children:"Terminal Access to Dappnode"}),"\n",(0,r.jsx)(n.p,{children:"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage."}),"\n",(0,r.jsx)(n.admonition,{type:"caution",children:(0,r.jsx)(n.p,{children:"Proceed with caution when using terminal access. Always understand the implications of commands and configurations before executing them."})}),"\n",(0,r.jsx)(n.h2,{id:"ssh-access",children:"SSH Access"}),"\n",(0,r.jsx)(n.p,{children:"SSH (Secure Shell) allows secure remote access to systems."}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Ensure your device is connected to the same network as the Dappnode."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Open a terminal or command prompt on your device."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Type:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"ssh dappnode@\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Replace ",(0,r.jsx)(n.code,{children:""})," with your Dappnode's actual IP address."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"When prompted, use the following credentials:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Username:"})," dappnode"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"Password:"})," dappnode.s0"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"note",children:(0,r.jsxs)(n.p,{children:['During the onboarding process in Dappmanager, you are prompted to change the default host password for the "dappnode" user. If you have completed this step, the default password ',(0,r.jsx)(n.code,{children:"dappnode.s0"})," might no longer work. Always use the password you set during onboarding."]})}),"\n",(0,r.jsx)(n.h3,{id:"external-ssh-access",children:"External SSH Access"}),"\n",(0,r.jsx)(n.p,{children:"For accessing Dappnode from outside your local network:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"Configure port forwarding on your router. Direct external SSH requests (typically port 22) to your Dappnode's internal IP address."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"For added security, use a strong password or implement SSH keys."}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"To SSH, use:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"ssh dappnode@\n"})}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{type:"caution",children:(0,r.jsx)(n.p,{children:"Exposing SSH to the internet can be risky. Ensure you adopt robust security practices and are aware of potential vulnerabilities."})}),"\n",(0,r.jsx)(n.h2,{id:"physical-terminal-access",children:"Physical Terminal Access"}),"\n",(0,r.jsx)(n.p,{children:"Directly interface with Dappnode using a monitor and keyboard:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Connect a monitor via the HDMI/VGA port."}),"\n",(0,r.jsx)(n.li,{children:"Plug in a USB keyboard."}),"\n",(0,r.jsx)(n.li,{children:"Power on or restart the Dappnode machine."}),"\n",(0,r.jsxs)(n.li,{children:["When prompted, enter the password: ",(0,r.jsx)(n.code,{children:"dappnode.s0"})," (or ",(0,r.jsx)(n.a,{href:"/docs/user/getting-started/setup",children:"the one you've set if changed during onboarding"}),")."]}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>t,a:()=>i});var r=s(7294);const o={},a=r.createContext(o);function i(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/0f7f07eb.f599eb23.js b/assets/js/0f7f07eb.f599eb23.js deleted file mode 100644 index 25eb8002a..000000000 --- a/assets/js/0f7f07eb.f599eb23.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7675],{4137:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>y});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),c=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},l=function(e){var t=c(e.components);return a.createElement(p.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),d=c(n),u=r,y=d["".concat(p,".").concat(u)]||d[u]||m[u]||o;return n?a.createElement(y,s(s({ref:t},l),{},{components:n})):a.createElement(y,s({ref:t},l))}));function y(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,s=new Array(o);s[0]=u;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[d]="string"==typeof e?e:r,s[1]=i;for(var c=2;c{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var a=n(7462),r=(n(7294),n(4137));const o={},s="Terminal Access to Dappnode",i={unversionedId:"user/access-your-dappnode/terminal",id:"user/access-your-dappnode/terminal",title:"Terminal Access to Dappnode",description:"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.",source:"@site/docs/user/access-your-dappnode/terminal.md",sourceDirName:"user/access-your-dappnode",slug:"/user/access-your-dappnode/terminal",permalink:"/docs/user/access-your-dappnode/terminal",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/terminal.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"OpenVPN Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/openvpn"},next:{title:"Local Proxy Access to Dappnode",permalink:"/docs/user/access-your-dappnode/local"}},p={},c=[{value:"SSH Access",id:"ssh-access",level:2},{value:"External SSH Access",id:"external-ssh-access",level:3},{value:"Physical Terminal Access",id:"physical-terminal-access",level:2}],l={toc:c},d="wrapper";function m(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,a.Z)({},l,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"terminal-access-to-dappnode"},"Terminal Access to Dappnode"),(0,r.kt)("p",null,"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Proceed with caution when using terminal access. Always understand the implications of commands and configurations before executing them.")),(0,r.kt)("h2",{id:"ssh-access"},"SSH Access"),(0,r.kt)("p",null,"SSH (Secure Shell) allows secure remote access to systems."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Ensure your device is connected to the same network as the Dappnode.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Open a terminal or command prompt on your device.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Type:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"ssh dappnode@\n")),(0,r.kt)("p",{parentName:"li"},"Replace ",(0,r.kt)("inlineCode",{parentName:"p"},"")," with your Dappnode's actual IP address.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"When prompted, use the following credentials:"),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Username:")," dappnode"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Password:")," dappnode.s0")))),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},'During the onboarding process in Dappmanager, you are prompted to change the default host password for the "dappnode" user. If you have completed this step, the default password ',(0,r.kt)("inlineCode",{parentName:"p"},"dappnode.s0")," might no longer work. Always use the password you set during onboarding.")),(0,r.kt)("h3",{id:"external-ssh-access"},"External SSH Access"),(0,r.kt)("p",null,"For accessing Dappnode from outside your local network:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Configure port forwarding on your router. Direct external SSH requests (typically port 22) to your Dappnode's internal IP address.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"For added security, use a strong password or implement SSH keys.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"To SSH, use:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"ssh dappnode@\n")))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Exposing SSH to the internet can be risky. Ensure you adopt robust security practices and are aware of potential vulnerabilities.")),(0,r.kt)("h2",{id:"physical-terminal-access"},"Physical Terminal Access"),(0,r.kt)("p",null,"Directly interface with Dappnode using a monitor and keyboard:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Connect a monitor via the HDMI/VGA port."),(0,r.kt)("li",{parentName:"ol"},"Plug in a USB keyboard."),(0,r.kt)("li",{parentName:"ol"},"Power on or restart the Dappnode machine."),(0,r.kt)("li",{parentName:"ol"},"When prompted, enter the password: ",(0,r.kt)("inlineCode",{parentName:"li"},"dappnode.s0")," (or ",(0,r.kt)("a",{parentName:"li",href:"/docs/user/getting-started/setup"},"the one you've set if changed during onboarding"),").")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/130.78a0ec64.js b/assets/js/130.78a0ec64.js new file mode 100644 index 000000000..43fde062f --- /dev/null +++ b/assets/js/130.78a0ec64.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[130],{1460:(e,t,s)=>{s.d(t,{Z:()=>b});var r=s(7294),a=s(6010),n=s(179),l=s(7524),i=s(9960),o=s(5999),c=s(6550),m=s(8596);function d(e){const{pathname:t}=(0,c.TH)();return(0,r.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.Mg)(e.permalink,t))}(e,t)))),[e,t])}const u={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};var h=s(5893);function g(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("aside",{className:"col col--3",children:(0,h.jsxs)("nav",{className:(0,a.Z)(u.sidebar,"thin-scrollbar"),"aria-label":(0,o.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,h.jsx)("div",{className:(0,a.Z)(u.sidebarItemTitle,"margin-bottom--md"),children:t.title}),(0,h.jsx)("ul",{className:(0,a.Z)(u.sidebarItemList,"clean-list"),children:s.map((e=>(0,h.jsx)("li",{className:u.sidebarItem,children:(0,h.jsx)(i.Z,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var p=s(3102);function x(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("ul",{className:"menu__list",children:s.map((e=>(0,h.jsx)("li",{className:"menu__list-item",children:(0,h.jsx)(i.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,h.jsx)(p.Zo,{component:x,props:e})}function f(e){let{sidebar:t}=e;const s=(0,l.i)();return t?.items.length?"mobile"===s?(0,h.jsx)(j,{sidebar:t}):(0,h.jsx)(g,{sidebar:t}):null}function b(e){const{sidebar:t,toc:s,children:r,...l}=e,i=t&&t.items.length>0;return(0,h.jsx)(n.Z,{...l,children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsxs)("div",{className:"row",children:[(0,h.jsx)(f,{sidebar:t}),(0,h.jsx)("main",{className:(0,a.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"https://schema.org/Blog",children:r}),s&&(0,h.jsx)("div",{className:"col col--2",children:s})]})})})}},390:(e,t,s)=>{s.d(t,{Z:()=>L});s(7294);var r=s(6010),a=s(9460),n=s(4996),l=s(5893);function i(e){let{children:t,className:s}=e;const{frontMatter:r,assets:i,metadata:{description:o}}=(0,a.C)(),{withBaseUrl:c}=(0,n.C)(),m=i.image??r.image,d=r.keywords??[];return(0,l.jsxs)("article",{className:s,itemProp:"blogPost",itemScope:!0,itemType:"https://schema.org/BlogPosting",children:[o&&(0,l.jsx)("meta",{itemProp:"description",content:o}),m&&(0,l.jsx)("link",{itemProp:"image",href:c(m,{absolute:!0})}),d.length>0&&(0,l.jsx)("meta",{itemProp:"keywords",content:d.join(",")}),t]})}var o=s(9960);const c={title:"title_f1Hy"};function m(e){let{className:t}=e;const{metadata:s,isBlogPostPage:n}=(0,a.C)(),{permalink:i,title:m}=s,d=n?"h1":"h2";return(0,l.jsx)(d,{className:(0,r.Z)(c.title,t),itemProp:"headline",children:n?m:(0,l.jsx)(o.Z,{itemProp:"url",to:i,children:m})})}var d=s(5999),u=s(8824);const h={container:"container_mt6G"};function g(e){let{readingTime:t}=e;const s=function(){const{selectMessage:e}=(0,u.c)();return t=>{const s=Math.ceil(t);return e(s,(0,d.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:s}))}}();return(0,l.jsx)(l.Fragment,{children:s(t)})}function p(e){let{date:t,formattedDate:s}=e;return(0,l.jsx)("time",{dateTime:t,itemProp:"datePublished",children:s})}function x(){return(0,l.jsx)(l.Fragment,{children:" \xb7 "})}function j(e){let{className:t}=e;const{metadata:s}=(0,a.C)(),{date:n,formattedDate:i,readingTime:o}=s;return(0,l.jsxs)("div",{className:(0,r.Z)(h.container,"margin-vert--md",t),children:[(0,l.jsx)(p,{date:n,formattedDate:i}),void 0!==o&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(x,{}),(0,l.jsx)(g,{readingTime:o})]})]})}function f(e){return e.href?(0,l.jsx)(o.Z,{...e}):(0,l.jsx)(l.Fragment,{children:e.children})}function b(e){let{author:t,className:s}=e;const{name:a,title:n,url:i,imageURL:o,email:c}=t,m=i||c&&`mailto:${c}`||void 0;return(0,l.jsxs)("div",{className:(0,r.Z)("avatar margin-bottom--sm",s),children:[o&&(0,l.jsx)(f,{href:m,className:"avatar__photo-link",children:(0,l.jsx)("img",{className:"avatar__photo",src:o,alt:a,itemProp:"image"})}),a&&(0,l.jsxs)("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person",children:[(0,l.jsx)("div",{className:"avatar__name",children:(0,l.jsx)(f,{href:m,itemProp:"url",children:(0,l.jsx)("span",{itemProp:"name",children:a})})}),n&&(0,l.jsx)("small",{className:"avatar__subtitle",itemProp:"description",children:n})]})]})}const v={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function P(e){let{className:t}=e;const{metadata:{authors:s},assets:n}=(0,a.C)();if(0===s.length)return null;const i=s.every((e=>{let{name:t}=e;return!t}));return(0,l.jsx)("div",{className:(0,r.Z)("margin-top--md margin-bottom--sm",i?v.imageOnlyAuthorRow:"row",t),children:s.map(((e,t)=>(0,l.jsx)("div",{className:(0,r.Z)(!i&&"col col--6",i?v.imageOnlyAuthorCol:v.authorCol),children:(0,l.jsx)(b,{author:{...e,imageURL:n.authorsImageUrls[t]??e.imageURL}})},t)))})}function N(){return(0,l.jsxs)("header",{children:[(0,l.jsx)(m,{}),(0,l.jsx)(j,{}),(0,l.jsx)(P,{})]})}var _=s(8780),k=s(2459);function Z(e){let{children:t,className:s}=e;const{isBlogPostPage:n}=(0,a.C)();return(0,l.jsx)("div",{id:n?_.blogPostContainerID:void 0,className:(0,r.Z)("markdown",s),itemProp:"articleBody",children:(0,l.jsx)(k.Z,{children:t})})}var I=s(4881),C=s(1526);function w(){return(0,l.jsx)("b",{children:(0,l.jsx)(d.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read More"})})}function T(e){const{blogPostTitle:t,...s}=e;return(0,l.jsx)(o.Z,{"aria-label":(0,d.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...s,children:(0,l.jsx)(w,{})})}const y={blogPostFooterDetailsFull:"blogPostFooterDetailsFull_mRVl"};function F(){const{metadata:e,isBlogPostPage:t}=(0,a.C)(),{tags:s,title:n,editUrl:i,hasTruncateMarker:o}=e,c=!t&&o,m=s.length>0;return m||c||i?(0,l.jsxs)("footer",{className:(0,r.Z)("row docusaurus-mt-lg",t&&y.blogPostFooterDetailsFull),children:[m&&(0,l.jsx)("div",{className:(0,r.Z)("col",{"col--9":c}),children:(0,l.jsx)(C.Z,{tags:s})}),t&&i&&(0,l.jsx)("div",{className:"col margin-top--sm",children:(0,l.jsx)(I.Z,{editUrl:i})}),c&&(0,l.jsx)("div",{className:(0,r.Z)("col text--right",{"col--3":m}),children:(0,l.jsx)(T,{blogPostTitle:n,to:e.permalink})})]}):null}function L(e){let{children:t,className:s}=e;const n=function(){const{isBlogPostPage:e}=(0,a.C)();return e?void 0:"margin-bottom--xl"}();return(0,l.jsxs)(i,{className:(0,r.Z)(n,s),children:[(0,l.jsx)(N,{}),(0,l.jsx)(Z,{children:t}),(0,l.jsx)(F,{})]})}},9460:(e,t,s)=>{s.d(t,{C:()=>o,n:()=>i});var r=s(7294),a=s(902),n=s(5893);const l=r.createContext(null);function i(e){let{children:t,content:s,isBlogPostPage:a=!1}=e;const i=function(e){let{content:t,isBlogPostPage:s}=e;return(0,r.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:s})),[t,s])}({content:s,isBlogPostPage:a});return(0,n.jsx)(l.Provider,{value:i,children:t})}function o(){const e=(0,r.useContext)(l);if(null===e)throw new a.i6("BlogPostProvider");return e}},8824:(e,t,s)=>{s.d(t,{c:()=>c});var r=s(7294),a=s(2263);const n=["zero","one","two","few","many","other"];function l(e){return n.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,a.Z)();return(0,r.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:l(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),i}}),[e])}function c(){const e=o();return{selectMessage:(t,s)=>function(e,t,s){const r=e.split("|");if(1===r.length)return r[0];r.length>s.pluralForms.length&&console.error(`For locale=${s.locale}, a maximum of ${s.pluralForms.length} plural forms are expected (${s.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const a=s.select(t),n=s.pluralForms.indexOf(a);return r[Math.min(n,r.length-1)]}(s,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/14c20d3a.60882400.js b/assets/js/14c20d3a.60882400.js deleted file mode 100644 index 9a63976c1..000000000 --- a/assets/js/14c20d3a.60882400.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[903],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>y});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},k=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(n),k=o,y=c["".concat(l,".").concat(k)]||c[k]||d[k]||a;return n?r.createElement(y,s(s({ref:t},u),{},{components:n})):r.createElement(y,s({ref:t},u))}));function y(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,s=new Array(a);s[0]=k;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:o,s[1]=i;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var r=n(7462),o=(n(7294),n(4137));const a={},s="Holesky Testnet",i={unversionedId:"user/staking/ethereum/solo/holesky",id:"user/staking/ethereum/solo/holesky",title:"Holesky Testnet",description:"The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.",source:"@site/docs/user/staking/ethereum/solo/holesky.md",sourceDirName:"user/staking/ethereum/solo",slug:"/user/staking/ethereum/solo/holesky",permalink:"/docs/user/staking/ethereum/solo/holesky",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/solo/holesky.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethereum mainnet",permalink:"/docs/user/staking/ethereum/solo/mainnet"},next:{title:"Rocketpool",permalink:"/docs/user/staking/ethereum/lsd-pools/rocketpool"}},l={},p=[{value:"Navigating to Holesky in Dappnode",id:"navigating-to-holesky-in-dappnode",level:2},{value:"Why Run a Holesky Testnet Node?",id:"why-run-a-holesky-testnet-node",level:2},{value:"Holesky Faucet",id:"holesky-faucet",level:2}],u={toc:p},c="wrapper";function d(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"holesky-testnet"},"Holesky Testnet"),(0,o.kt)("p",null,"The ",(0,o.kt)("strong",{parentName:"p"},"Holesky testnet")," is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike. "),(0,o.kt)("p",null,"Dappnode paves an easy pathway for enthusiasts to operate a node on the Holesky testnet, ensuring practical experience without the risks associated with the mainnet."),(0,o.kt)("h2",{id:"navigating-to-holesky-in-dappnode"},"Navigating to Holesky in Dappnode"),(0,o.kt)("p",null,"You can locate the Holesky testnet under the ",(0,o.kt)("a",{parentName:"p",href:"http://my.dappnode/stakers/holesky"},(0,o.kt)("strong",{parentName:"a"},"Holesky")," tab")," in the ",(0,o.kt)("strong",{parentName:"p"},"Stakers Menu"),". If you want to run Holesky testnet validators, you'll also need to select Web3Signer Holesky."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Holesky - Stakers Menu",src:n(7849).Z,width:"2554",height:"1302"})),(0,o.kt)("h2",{id:"why-run-a-holesky-testnet-node"},"Why Run a Holesky Testnet Node?"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Hands-on Experience"),": Running a validator on the Holesky testnet offers invaluable practical knowledge. It mimics the mainnet processes, providing a comprehensive understanding of node operation."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Risk-free Exploration"),": As it's a testnet, you're not staking real ETH. This provides an opportunity for experimentation without the financial stakes of the main Ethereum network.")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you're new to Ethereum or wish to familiarize yourself with node operation intricacies, starting with the Holesky testnet is highly recommended. It's the perfect platform for hands-on learning in a risk-free environment.")),(0,o.kt)("h2",{id:"holesky-faucet"},"Holesky Faucet"),(0,o.kt)("p",null,"If you're interested in getting 32 HolETH for running a test validator, you can get it in the ",(0,o.kt)("a",{parentName:"p",href:"https://holesky-faucet.pk910.de/"},"Holesky PoW Faucet"),". Make sure you understand how the faucet works before doing your request, as it will temporarily impact your computer's performance in the claiming process."))}d.isMDXComponent=!0},7849:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/holesky-stakers-9a7c0d4739b3ee492f436d006562126e.png"}}]); \ No newline at end of file diff --git a/assets/js/14c20d3a.61a9193d.js b/assets/js/14c20d3a.61a9193d.js new file mode 100644 index 000000000..41016a97b --- /dev/null +++ b/assets/js/14c20d3a.61a9193d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[903],{8377:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>d});var s=n(5893),o=n(1151);const i={},r="Holesky Testnet",a={id:"user/staking/ethereum/solo/holesky",title:"Holesky Testnet",description:"The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.",source:"@site/docs/user/staking/ethereum/solo/holesky.md",sourceDirName:"user/staking/ethereum/solo",slug:"/user/staking/ethereum/solo/holesky",permalink:"/docs/user/staking/ethereum/solo/holesky",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/solo/holesky.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethereum mainnet",permalink:"/docs/user/staking/ethereum/solo/mainnet"},next:{title:"Rocketpool",permalink:"/docs/user/staking/ethereum/lsd-pools/rocketpool"}},l={},d=[{value:"Navigating to Holesky in Dappnode",id:"navigating-to-holesky-in-dappnode",level:2},{value:"Why Run a Holesky Testnet Node?",id:"why-run-a-holesky-testnet-node",level:2},{value:"Holesky Faucet",id:"holesky-faucet",level:2}];function h(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"holesky-testnet",children:"Holesky Testnet"}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.strong,{children:"Holesky testnet"})," is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike."]}),"\n",(0,s.jsx)(t.p,{children:"Dappnode paves an easy pathway for enthusiasts to operate a node on the Holesky testnet, ensuring practical experience without the risks associated with the mainnet."}),"\n",(0,s.jsx)(t.h2,{id:"navigating-to-holesky-in-dappnode",children:"Navigating to Holesky in Dappnode"}),"\n",(0,s.jsxs)(t.p,{children:["You can locate the Holesky testnet under the ",(0,s.jsxs)(t.a,{href:"http://my.dappnode/stakers/holesky",children:[(0,s.jsx)(t.strong,{children:"Holesky"})," tab"]})," in the ",(0,s.jsx)(t.strong,{children:"Stakers Menu"}),". If you want to run Holesky testnet validators, you'll also need to select Web3Signer Holesky."]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Holesky - Stakers Menu",src:n(7849).Z+"",width:"2554",height:"1302"})}),"\n",(0,s.jsx)(t.h2,{id:"why-run-a-holesky-testnet-node",children:"Why Run a Holesky Testnet Node?"}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Hands-on Experience"}),": Running a validator on the Holesky testnet offers invaluable practical knowledge. It mimics the mainnet processes, providing a comprehensive understanding of node operation."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Risk-free Exploration"}),": As it's a testnet, you're not staking real ETH. This provides an opportunity for experimentation without the financial stakes of the main Ethereum network."]}),"\n"]}),"\n",(0,s.jsx)(t.admonition,{type:"tip",children:(0,s.jsx)(t.p,{children:"If you're new to Ethereum or wish to familiarize yourself with node operation intricacies, starting with the Holesky testnet is highly recommended. It's the perfect platform for hands-on learning in a risk-free environment."})}),"\n",(0,s.jsx)(t.h2,{id:"holesky-faucet",children:"Holesky Faucet"}),"\n",(0,s.jsxs)(t.p,{children:["If you're interested in getting 32 HolETH for running a test validator, you can get it in the ",(0,s.jsx)(t.a,{href:"https://holesky-faucet.pk910.de/",children:"Holesky PoW Faucet"}),". Make sure you understand how the faucet works before doing your request, as it will temporarily impact your computer's performance in the claiming process."]})]})}function c(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},7849:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/holesky-stakers-9a7c0d4739b3ee492f436d006562126e.png"},1151:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>r});var s=n(7294);const o={},i=s.createContext(o);function r(e){const t=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1772.854f594c.js b/assets/js/1772.854f594c.js new file mode 100644 index 000000000..fc834930b --- /dev/null +++ b/assets/js/1772.854f594c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1772],{5658:(e,t,n)=>{n.d(t,{Z:()=>a});n(7294);var o=n(6010),i=n(5999),s=n(2503),d=n(5893);function a(e){let{className:t}=e;return(0,d.jsx)("main",{className:(0,o.Z)("container margin-vert--xl",t),children:(0,d.jsx)("div",{className:"row",children:(0,d.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,d.jsx)(s.Z,{as:"h1",className:"hero__title",children:(0,d.jsx)(i.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,d.jsx)("p",{children:(0,d.jsx)(i.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,d.jsx)("p",{children:(0,d.jsx)(i.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}},1772:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});n(7294);var o=n(5999),i=n(1944),s=n(179),d=n(5658),a=n(5893);function r(){const e=(0,o.I)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(i.d,{title:e}),(0,a.jsx)(s.Z,{children:(0,a.jsx)(d.Z,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/17896441.22fc0779.js b/assets/js/17896441.22fc0779.js new file mode 100644 index 000000000..0a037ed4f --- /dev/null +++ b/assets/js/17896441.22fc0779.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7918],{8945:(e,t,n)=>{n.r(t),n.d(t,{default:()=>de});var s=n(7294),a=n(1944),i=n(902),o=n(5893);const l=s.createContext(null);function r(e){let{children:t,content:n}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return(0,o.jsx)(l.Provider,{value:a,children:t})}function c(){const e=(0,s.useContext)(l);if(null===e)throw new i.i6("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:n}=c();return(0,o.jsx)(a.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var u=n(6010),m=n(7524),h=n(5999),v=n(2244);function b(e){const{previous:t,next:n}=e;return(0,o.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,h.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,o.jsx)(v.Z,{...t,subLabel:(0,o.jsx)(h.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,o.jsx)(v.Z,{...n,subLabel:(0,o.jsx)(h.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}function p(){const{metadata:e}=c();return(0,o.jsx)(b,{previous:e.previous,next:e.next})}var x=n(2263),f=n(9960),g=n(143),j=n(5281),L=n(373),C=n(4477);const N={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,o.jsx)(h.Z,{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,o.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,o.jsx)(h.Z,{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,o.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function _(e){const t=N[e.versionMetadata.banner];return(0,o.jsx)(t,{...e})}function k(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,o.jsx)(h.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,o.jsx)("b",{children:(0,o.jsx)(f.Z,{to:n,onClick:s,children:(0,o.jsx)(h.Z,{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 Z(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:s}}=(0,x.Z)(),{pluginId:a}=(0,g.gA)({failfast:!0}),{savePreferredVersionName:i}=(0,L.J)(a),{latestDocSuggestion:l,latestVersionSuggestion:r}=(0,g.Jo)(a),c=l??(d=r).docs.find((e=>e.id===d.mainDocId));var d;return(0,o.jsxs)("div",{className:(0,u.Z)(t,j.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,o.jsx)("div",{children:(0,o.jsx)(_,{siteTitle:s,versionMetadata:n})}),(0,o.jsx)("div",{className:"margin-top--md",children:(0,o.jsx)(k,{versionLabel:r.label,to:c.path,onClick:()=>i(r.name)})})]})}function T(e){let{className:t}=e;const n=(0,C.E)();return n.banner?(0,o.jsx)(Z,{className:t,versionMetadata:n}):null}function U(e){let{className:t}=e;const n=(0,C.E)();return n.badge?(0,o.jsx)("span",{className:(0,u.Z)(t,j.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,o.jsx)(h.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}function H(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return(0,o.jsx)(h.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,o.jsx)("b",{children:(0,o.jsx)("time",{dateTime:new Date(1e3*t).toISOString(),children:n})})},children:" on {date}"})}function y(e){let{lastUpdatedBy:t}=e;return(0,o.jsx)(h.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,o.jsx)("b",{children:t})},children:" by {user}"})}function A(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:s}=e;return(0,o.jsxs)("span",{className:j.k.common.lastUpdated,children:[(0,o.jsx)(h.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?(0,o.jsx)(H,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:s?(0,o.jsx)(y,{lastUpdatedBy:s}):""},children:"Last updated{atDate}{byUser}"}),!1]})}var w=n(4881),M=n(1526);const I={lastUpdated:"lastUpdated_vwxv"};function B(e){return(0,o.jsx)("div",{className:(0,u.Z)(j.k.docs.docFooterTagsRow,"row margin-bottom--sm"),children:(0,o.jsx)("div",{className:"col",children:(0,o.jsx)(M.Z,{...e})})})}function E(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s,formattedLastUpdatedAt:a}=e;return(0,o.jsxs)("div",{className:(0,u.Z)(j.k.docs.docFooterEditMetaRow,"row"),children:[(0,o.jsx)("div",{className:"col",children:t&&(0,o.jsx)(w.Z,{editUrl:t})}),(0,o.jsx)("div",{className:(0,u.Z)("col",I.lastUpdated),children:(n||s)&&(0,o.jsx)(A,{lastUpdatedAt:n,formattedLastUpdatedAt:a,lastUpdatedBy:s})})]})}function O(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:s,lastUpdatedBy:a,tags:i}=e,l=i.length>0,r=!!(t||n||a);return l||r?(0,o.jsxs)("footer",{className:(0,u.Z)(j.k.docs.docFooter,"docusaurus-mt-lg"),children:[l&&(0,o.jsx)(B,{tags:i}),r&&(0,o.jsx)(E,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:a,formattedLastUpdatedAt:s})]}):null}var S=n(6043),V=n(3743);const P={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function D(e){let{collapsed:t,...n}=e;return(0,o.jsx)("button",{type:"button",...n,className:(0,u.Z)("clean-btn",P.tocCollapsibleButton,!t&&P.tocCollapsibleButtonExpanded,n.className),children:(0,o.jsx)(h.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const R={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function F(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:a}=e;const{collapsed:i,toggleCollapsed:l}=(0,S.u)({initialState:!0});return(0,o.jsxs)("div",{className:(0,u.Z)(R.tocCollapsible,!i&&R.tocCollapsibleExpanded,n),children:[(0,o.jsx)(D,{collapsed:i,onClick:l}),(0,o.jsx)(S.z,{lazy:!0,className:R.tocCollapsibleContent,collapsed:i,children:(0,o.jsx)(V.Z,{toc:t,minHeadingLevel:s,maxHeadingLevel:a})})]})}const z={tocMobile:"tocMobile_ITEo"};function q(){const{toc:e,frontMatter:t}=c();return(0,o.jsx)(F,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.Z)(j.k.docs.docTocMobile,z.tocMobile)})}var $=n(9407);function G(){const{toc:e,frontMatter:t}=c();return(0,o.jsx)($.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:j.k.docs.docTocDesktop})}var J=n(2503),Y=n(2459);function K(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return(0,o.jsxs)("div",{className:(0,u.Z)(j.k.docs.docMarkdown,"markdown"),children:[n&&(0,o.jsx)("header",{children:(0,o.jsx)(J.Z,{as:"h1",children:n})}),(0,o.jsx)(Y.Z,{children:t})]})}var Q=n(2802),W=n(8596),X=n(4996);function ee(e){return(0,o.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,o.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const te={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function ne(){const e=(0,X.Z)("/");return(0,o.jsx)("li",{className:"breadcrumbs__item",children:(0,o.jsx)(f.Z,{"aria-label":(0,h.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,o.jsx)(ee,{className:te.breadcrumbHomeIcon})})})}const se={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function ae(e){let{children:t,href:n,isLast:s}=e;const a="breadcrumbs__link";return s?(0,o.jsx)("span",{className:a,itemProp:"name",children:t}):n?(0,o.jsx)(f.Z,{className:a,href:n,itemProp:"item",children:(0,o.jsx)("span",{itemProp:"name",children:t})}):(0,o.jsx)("span",{className:a,children:t})}function ie(e){let{children:t,active:n,index:s,addMicrodata:a}=e;return(0,o.jsxs)("li",{...a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,u.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,o.jsx)("meta",{itemProp:"position",content:String(s+1)})]})}function oe(){const e=(0,Q.s1)(),t=(0,W.Ns)();return e?(0,o.jsx)("nav",{className:(0,u.Z)(j.k.docs.docBreadcrumbs,se.breadcrumbsContainer),"aria-label":(0,h.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,o.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,o.jsx)(ne,{}),e.map(((t,n)=>{const s=n===e.length-1,a="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,o.jsx)(ie,{active:s,index:n,addMicrodata:!!a,children:(0,o.jsx)(ae,{href:a,isLast:s,children:t.label})},n)}))]})}):null}var le=n(2212);const re={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function ce(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),s=e.hide_table_of_contents,a=!s&&t.length>0;return{hidden:s,mobile:a?(0,o.jsx)(q,{}):void 0,desktop:!a||"desktop"!==n&&"ssr"!==n?void 0:(0,o.jsx)(G,{})}}(),{metadata:{unlisted:s}}=c();return(0,o.jsxs)("div",{className:"row",children:[(0,o.jsxs)("div",{className:(0,u.Z)("col",!n.hidden&&re.docItemCol),children:[s&&(0,o.jsx)(le.Z,{}),(0,o.jsx)(T,{}),(0,o.jsxs)("div",{className:re.docItemContainer,children:[(0,o.jsxs)("article",{children:[(0,o.jsx)(oe,{}),(0,o.jsx)(U,{}),n.mobile,(0,o.jsx)(K,{children:t}),(0,o.jsx)(O,{})]}),(0,o.jsx)(p,{})]})]}),n.desktop&&(0,o.jsx)("div",{className:"col col--3",children:n.desktop})]})}function de(e){const t=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,o.jsx)(r,{content:e.content,children:(0,o.jsxs)(a.FG,{className:t,children:[(0,o.jsx)(d,{}),(0,o.jsx)(ce,{children:(0,o.jsx)(n,{})})]})})}},9407:(e,t,n)=>{n.d(t,{Z:()=>c});n(7294);var s=n(6010),a=n(3743);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var o=n(5893);const l="table-of-contents__link toc-highlight",r="table-of-contents__link--active";function c(e){let{className:t,...n}=e;return(0,o.jsx)("div",{className:(0,s.Z)(i.tableOfContents,"thin-scrollbar",t),children:(0,o.jsx)(a.Z,{...n,linkClassName:l,linkActiveClassName:r})})}},3743:(e,t,n)=>{n.d(t,{Z:()=>b});var s=n(7294),a=n(6668);function i(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const s=n.slice(2,e.level);e.parentIndex=Math.max(...s),n[e.level]=t}));const s=[];return t.forEach((e=>{const{parentIndex:n,...a}=e;n>=0?t[n].children.push(a):s.push(a)})),s}function o(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return t.flatMap((e=>{const t=o({toc:e.children,minHeadingLevel:n,maxHeadingLevel:s});return function(e){return e.level>=n&&e.level<=s}(e)?[{...e,children:t}]:t}))}function l(e){const t=e.getBoundingClientRect();return t.top===t.bottom?l(e.parentNode):t}function r(e,t){let{anchorTopOffset:n}=t;const s=e.find((e=>l(e).top>=n));if(s){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,s.useRef)(void 0),n=c();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:a,minHeadingLevel:i,maxHeadingLevel:o}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),l=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const s=[];for(let a=t;a<=n;a+=1)s.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(s.join()))}({minHeadingLevel:i,maxHeadingLevel:o}),c=r(l,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(a),e.classList.add(a),t.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,n])}var u=n(9960),m=n(5893);function h(e){let{toc:t,className:n,linkClassName:s,isChild:a}=e;return t.length?(0,m.jsx)("ul",{className:a?void 0:n,children:t.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.Z,{to:`#${e.id}`,className:s??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(h,{isChild:!0,toc:e.children,className:n,linkClassName:s})]},e.id)))}):null}const v=s.memo(h);function b(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:c,maxHeadingLevel:u,...h}=e;const b=(0,a.L)(),p=c??b.tableOfContents.minHeadingLevel,x=u??b.tableOfContents.maxHeadingLevel,f=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,s.useMemo)((()=>o({toc:i(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:p,maxHeadingLevel:x});return d((0,s.useMemo)((()=>{if(l&&r)return{linkClassName:l,linkActiveClassName:r,minHeadingLevel:p,maxHeadingLevel:x}}),[l,r,p,x])),(0,m.jsx)(v,{toc:f,className:n,linkClassName:l,...h})}},2212:(e,t,n)=>{n.d(t,{Z:()=>h});n(7294);var s=n(6010),a=n(5999),i=n(5742),o=n(5893);function l(){return(0,o.jsx)(a.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,o.jsx)(a.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,o.jsx)(i.Z,{children:(0,o.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=n(5281),u=n(9047);function m(e){let{className:t}=e;return(0,o.jsx)(u.Z,{type:"caution",title:(0,o.jsx)(l,{}),className:(0,s.Z)(t,d.k.common.unlistedBanner),children:(0,o.jsx)(r,{})})}function h(e){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(c,{}),(0,o.jsx)(m,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/17896441.bdf97490.js b/assets/js/17896441.bdf97490.js deleted file mode 100644 index dd6a34f4b..000000000 --- a/assets/js/17896441.bdf97490.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7918],{2692:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ie});var a=n(7294),l=n(5463),o=n(3768);const r=a.createContext(null);function s(e){let{children:t,content:n}=e;const l=function(e){return(0,a.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return a.createElement(r.Provider,{value:l},t)}function c(){const e=(0,a.useContext)(r);if(null===e)throw new o.i6("DocProvider");return e}function i(){const{metadata:e,frontMatter:t,assets:n}=c();return a.createElement(l.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var d=n(6010),m=n(3488),u=n(7462),v=n(7325),b=n(3672);function p(e){const{previous:t,next:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,v.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"})},t&&a.createElement(b.Z,(0,u.Z)({},t,{subLabel:a.createElement(v.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),n&&a.createElement(b.Z,(0,u.Z)({},n,{subLabel:a.createElement(v.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:!0})))}function h(){const{metadata:e}=c();return a.createElement(p,{previous:e.previous,next:e.next})}var f=n(9962),E=n(3699),g=n(868),L=n(3702),C=n(6409),N=n(8801);const _={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(v.Z,{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:a.createElement("b",null,n.label)}},"This is unreleased documentation for {siteTitle} {versionLabel} version.")},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return a.createElement(v.Z,{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:a.createElement("b",null,n.label)}},"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.")}};function k(e){const t=_[e.versionMetadata.banner];return a.createElement(t,e)}function Z(e){let{versionLabel:t,to:n,onClick:l}=e;return a.createElement(v.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:a.createElement("b",null,a.createElement(E.Z,{to:n,onClick:l},a.createElement(v.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).")}function x(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:l}}=(0,f.Z)(),{pluginId:o}=(0,g.gA)({failfast:!0}),{savePreferredVersionName:r}=(0,C.J)(o),{latestDocSuggestion:s,latestVersionSuggestion:c}=(0,g.Jo)(o),i=s??(m=c).docs.find((e=>e.id===m.mainDocId));var m;return a.createElement("div",{className:(0,d.Z)(t,L.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert"},a.createElement("div",null,a.createElement(k,{siteTitle:l,versionMetadata:n})),a.createElement("div",{className:"margin-top--md"},a.createElement(Z,{versionLabel:c.label,to:i.path,onClick:()=>r(c.name)})))}function T(e){let{className:t}=e;const n=(0,N.E)();return n.banner?a.createElement(x,{className:t,versionMetadata:n}):null}function H(e){let{className:t}=e;const n=(0,N.E)();return n.badge?a.createElement("span",{className:(0,d.Z)(t,L.k.docs.docVersionBadge,"badge badge--secondary")},a.createElement(v.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label}},"Version: {versionLabel}")):null}function U(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return a.createElement(v.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:a.createElement("b",null,a.createElement("time",{dateTime:new Date(1e3*t).toISOString()},n))}}," on {date}")}function y(e){let{lastUpdatedBy:t}=e;return a.createElement(v.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:a.createElement("b",null,t)}}," by {user}")}function A(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:l}=e;return a.createElement("span",{className:L.k.common.lastUpdated},a.createElement(v.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?a.createElement(U,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:l?a.createElement(y,{lastUpdatedBy:l}):""}},"Last updated{atDate}{byUser}"),!1)}var w=n(4850),M=n(4597);const I={lastUpdated:"lastUpdated_vwxv"};function B(e){return a.createElement("div",{className:(0,d.Z)(L.k.docs.docFooterTagsRow,"row margin-bottom--sm")},a.createElement("div",{className:"col"},a.createElement(M.Z,e)))}function O(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:l,formattedLastUpdatedAt:o}=e;return a.createElement("div",{className:(0,d.Z)(L.k.docs.docFooterEditMetaRow,"row")},a.createElement("div",{className:"col"},t&&a.createElement(w.Z,{editUrl:t})),a.createElement("div",{className:(0,d.Z)("col",I.lastUpdated)},(n||l)&&a.createElement(A,{lastUpdatedAt:n,formattedLastUpdatedAt:o,lastUpdatedBy:l})))}function V(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:l,lastUpdatedBy:o,tags:r}=e,s=r.length>0,i=!!(t||n||o);return s||i?a.createElement("footer",{className:(0,d.Z)(L.k.docs.docFooter,"docusaurus-mt-lg")},s&&a.createElement(B,{tags:r}),i&&a.createElement(O,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:o,formattedLastUpdatedAt:l})):null}var P=n(4639),S=n(2728);const D={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function R(e){let{collapsed:t,...n}=e;return a.createElement("button",(0,u.Z)({type:"button"},n,{className:(0,d.Z)("clean-btn",D.tocCollapsibleButton,!t&&D.tocCollapsibleButtonExpanded,n.className)}),a.createElement(v.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page"))}const F={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function z(e){let{toc:t,className:n,minHeadingLevel:l,maxHeadingLevel:o}=e;const{collapsed:r,toggleCollapsed:s}=(0,P.u)({initialState:!0});return a.createElement("div",{className:(0,d.Z)(F.tocCollapsible,!r&&F.tocCollapsibleExpanded,n)},a.createElement(R,{collapsed:r,onClick:s}),a.createElement(P.z,{lazy:!0,className:F.tocCollapsibleContent,collapsed:r},a.createElement(S.Z,{toc:t,minHeadingLevel:l,maxHeadingLevel:o})))}const q={tocMobile:"tocMobile_ITEo"};function j(){const{toc:e,frontMatter:t}=c();return a.createElement(z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,d.Z)(L.k.docs.docTocMobile,q.tocMobile)})}var $=n(7086);function G(){const{toc:e,frontMatter:t}=c();return a.createElement($.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:L.k.docs.docTocDesktop})}var J=n(3899),Y=n(8505);function K(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return a.createElement("div",{className:(0,d.Z)(L.k.docs.docMarkdown,"markdown")},n&&a.createElement("header",null,a.createElement(J.Z,{as:"h1"},n)),a.createElement(Y.Z,null,t))}var Q=n(3734),W=n(9003),X=n(9524);function ee(e){return a.createElement("svg",(0,u.Z)({viewBox:"0 0 24 24"},e),a.createElement("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"}))}const te={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function ne(){const e=(0,X.Z)("/");return a.createElement("li",{className:"breadcrumbs__item"},a.createElement(E.Z,{"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e},a.createElement(ee,{className:te.breadcrumbHomeIcon})))}const ae={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function le(e){let{children:t,href:n,isLast:l}=e;const o="breadcrumbs__link";return l?a.createElement("span",{className:o,itemProp:"name"},t):n?a.createElement(E.Z,{className:o,href:n,itemProp:"item"},a.createElement("span",{itemProp:"name"},t)):a.createElement("span",{className:o},t)}function oe(e){let{children:t,active:n,index:l,addMicrodata:o}=e;return a.createElement("li",(0,u.Z)({},o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},{className:(0,d.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n})}),t,a.createElement("meta",{itemProp:"position",content:String(l+1)}))}function re(){const e=(0,Q.s1)(),t=(0,W.Ns)();return e?a.createElement("nav",{className:(0,d.Z)(L.k.docs.docBreadcrumbs,ae.breadcrumbsContainer),"aria-label":(0,v.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"})},a.createElement("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList"},t&&a.createElement(ne,null),e.map(((t,n)=>{const l=n===e.length-1;return a.createElement(oe,{key:n,active:l,index:n,addMicrodata:!!t.href},a.createElement(le,{href:t.href,isLast:l},t.label))})))):null}const se={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function ce(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),l=e.hide_table_of_contents,o=!l&&t.length>0;return{hidden:l,mobile:o?a.createElement(j,null):void 0,desktop:!o||"desktop"!==n&&"ssr"!==n?void 0:a.createElement(G,null)}}();return a.createElement("div",{className:"row"},a.createElement("div",{className:(0,d.Z)("col",!n.hidden&&se.docItemCol)},a.createElement(T,null),a.createElement("div",{className:se.docItemContainer},a.createElement("article",null,a.createElement(re,null),a.createElement(H,null),n.mobile,a.createElement(K,null,t),a.createElement(V,null)),a.createElement(h,null))),n.desktop&&a.createElement("div",{className:"col col--3"},n.desktop))}function ie(e){const t=`docs-doc-id-${e.content.metadata.unversionedId}`,n=e.content;return a.createElement(s,{content:e.content},a.createElement(l.FG,{className:t},a.createElement(i,null),a.createElement(ce,null,a.createElement(n,null))))}},7086:(e,t,n)=>{n.d(t,{Z:()=>d});var a=n(7462),l=n(7294),o=n(6010),r=n(2728);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",i="table-of-contents__link--active";function d(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,o.Z)(s.tableOfContents,"thin-scrollbar",t)},l.createElement(r.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:i})))}},2728:(e,t,n)=>{n.d(t,{Z:()=>b});var a=n(7462),l=n(7294),o=n(107);function r(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function s(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=s({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function i(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function m(e){const t=(0,l.useRef)(void 0),n=d();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:o,maxHeadingLevel:r}=e;function s(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),s=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:o,maxHeadingLevel:r}),c=i(s,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===d)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:o}=e;return t.length?l.createElement("ul",{className:o?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const v=l.memo(u);function b(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:i,minHeadingLevel:d,maxHeadingLevel:u,...b}=e;const p=(0,o.L)(),h=d??p.tableOfContents.minHeadingLevel,f=u??p.tableOfContents.maxHeadingLevel,E=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>s({toc:r(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:h,maxHeadingLevel:f});return m((0,l.useMemo)((()=>{if(c&&i)return{linkClassName:c,linkActiveClassName:i,minHeadingLevel:h,maxHeadingLevel:f}}),[c,i,h,f])),l.createElement(v,(0,a.Z)({toc:E,className:n,linkClassName:c},b))}},8801:(e,t,n)=>{n.d(t,{E:()=>s,q:()=>r});var a=n(7294),l=n(3768);const o=a.createContext(null);function r(e){let{children:t,version:n}=e;return a.createElement(o.Provider,{value:n},t)}function s(){const e=(0,a.useContext)(o);if(null===e)throw new l.i6("DocsVersionProvider");return e}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.99395fd0.js b/assets/js/1a4e3797.99395fd0.js new file mode 100644 index 000000000..0f931ca6e --- /dev/null +++ b/assets/js/1a4e3797.99395fd0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7920],{8824:(e,t,r)=>{r.d(t,{c:()=>u});var s=r(7294),a=r(2263);const n=["zero","one","two","few","many","other"];function c(e){return n.filter((t=>e.includes(t)))}const l={locale:"en",pluralForms:c(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,a.Z)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:c(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),l}}),[e])}function u(){const e=o();return{selectMessage:(t,r)=>function(e,t,r){const s=e.split("|");if(1===s.length)return s[0];s.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${s.length}: ${e}`);const a=r.select(t),n=r.pluralForms.indexOf(a);return s[Math.min(n,s.length-1)]}(r,t,e)}}},1473:(e,t,r)=>{r.r(t),r.d(t,{default:()=>b});var s=r(7294),a=r(2263),n=r(179),c=r(5742),l=r(9960),o=r(5999),u=r(8824),h=r(6010),i=r(6550),m=r(2389),d=r(1029);const p=function(){const e=(0,m.Z)(),t=(0,i.k6)(),r=(0,i.TH)(),{siteConfig:{baseUrl:s}}=(0,a.Z)(),n=e?new URLSearchParams(r.search):null,c=n?.get("q")||"",l=n?.get("ctx")||"",o=n?.get("version")||"",u=e=>{const t=new URLSearchParams(r.search);return e?t.set("q",e):t.delete("q"),t};return{searchValue:c,searchContext:l&&Array.isArray(d.Kc)&&d.Kc.some((e=>"string"==typeof e?e===l:e.path===l))?l:"",searchVersion:o,updateSearchPath:e=>{const r=u(e);t.replace({search:r.toString()})},updateSearchContext:e=>{const s=new URLSearchParams(r.search);s.set("ctx",e),t.replace({search:s.toString()})},generateSearchPageLink:e=>{const t=u(e);return`${s}search?${t.toString()}`}}};var g=r(22),x=r(8202),f=r(3545),y=r(2539),C=r(726),S=r(1073),j=r(311),I=r(3926);const v={searchContextInput:"searchContextInput_mXoe",searchQueryInput:"searchQueryInput_CFBF",searchResultItem:"searchResultItem_U687",searchResultItemPath:"searchResultItemPath_uIbk",searchResultItemSummary:"searchResultItemSummary_oZHr",searchQueryColumn:"searchQueryColumn_q7nx",searchContextColumn:"searchContextColumn_oWAF"};var w=r(51),P=r(5893);function _(){const{siteConfig:{baseUrl:e},i18n:{currentLocale:t}}=(0,a.Z)(),{selectMessage:r}=(0,u.c)(),{searchValue:n,searchContext:l,searchVersion:i,updateSearchPath:m,updateSearchContext:f}=p(),[y,C]=(0,s.useState)(n),[S,I]=(0,s.useState)(),[_,b]=(0,s.useState)(),F=`${e}${i}`,A=(0,s.useMemo)((()=>y?(0,o.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:y}):(0,o.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"})),[y]);(0,s.useEffect)((()=>{m(y),S&&(y?S(y,(e=>{b(e)})):b(void 0))}),[y,S]);const $=(0,s.useCallback)((e=>{C(e.target.value)}),[]);return(0,s.useEffect)((()=>{n&&n!==y&&C(n)}),[n]),(0,s.useEffect)((()=>{!async function(){const{wrappedIndexes:e,zhDictionary:t}=!Array.isArray(d.Kc)||l||d.pQ?await(0,g.w)(F,l):{wrappedIndexes:[],zhDictionary:[]};I((()=>(0,x.v)(e,t,100)))}()}),[l,F]),(0,P.jsxs)(s.Fragment,{children:[(0,P.jsxs)(c.Z,{children:[(0,P.jsx)("meta",{property:"robots",content:"noindex, follow"}),(0,P.jsx)("title",{children:A})]}),(0,P.jsxs)("div",{className:"container margin-vert--lg",children:[(0,P.jsx)("h1",{children:A}),(0,P.jsxs)("div",{className:"row",children:[(0,P.jsx)("div",{className:(0,h.Z)("col",{[v.searchQueryColumn]:Array.isArray(d.Kc),"col--9":Array.isArray(d.Kc),"col--12":!Array.isArray(d.Kc)}),children:(0,P.jsx)("input",{type:"search",name:"q",className:v.searchQueryInput,"aria-label":"Search",onChange:$,value:y,autoComplete:"off",autoFocus:!0})}),Array.isArray(d.Kc)?(0,P.jsx)("div",{className:(0,h.Z)("col","col--3","padding-left--none",v.searchContextColumn),children:(0,P.jsxs)("select",{name:"search-context",className:v.searchContextInput,id:"context-selector",value:l,onChange:e=>f(e.target.value),children:[d.pQ&&(0,P.jsx)("option",{value:"",children:(0,o.I)({id:"theme.SearchPage.searchContext.everywhere",message:"Everywhere"})}),d.Kc.map((e=>{const{label:r,path:s}=(0,w._)(e,t);return(0,P.jsx)("option",{value:s,children:r},s)}))]})}):null]}),!S&&y&&(0,P.jsx)("div",{children:(0,P.jsx)(j.Z,{})}),_&&(_.length>0?(0,P.jsx)("p",{children:r(_.length,(0,o.I)({id:"theme.SearchPage.documentsFound.plurals",message:"1 document found|{count} documents found",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)'},{count:_.length}))}):(0,P.jsx)("p",{children:(0,o.I)({id:"theme.SearchPage.noResultsText",message:"No documents were found",description:"The paragraph for empty search result"})})),(0,P.jsx)("section",{children:_&&_.map((e=>(0,P.jsx)(R,{searchResult:e},e.document.i)))})]})]})}function R(e){let{searchResult:{document:t,type:r,page:s,tokens:a,metadata:n}}=e;const c=r===f.P.Title,o=r===f.P.Keywords,u=r===f.P.Description,h=u||o,i=c||h,m=r===f.P.Content,p=(c?t.b:s.b).slice(),g=m||h?t.s:t.t;i||p.push(s.t);let x="";if(d.vc&&a.length>0){const e=new URLSearchParams;for(const t of a)e.append("_highlight",t);x=`?${e.toString()}`}return(0,P.jsxs)("article",{className:v.searchResultItem,children:[(0,P.jsx)("h2",{children:(0,P.jsx)(l.Z,{to:t.u+x+(t.h||""),dangerouslySetInnerHTML:{__html:m||h?(0,y.C)(g,a):(0,C.o)(g,(0,S.m)(n,"t"),a,100)}})}),p.length>0&&(0,P.jsx)("p",{className:v.searchResultItemPath,children:(0,I.e)(p)}),(m||u)&&(0,P.jsx)("p",{className:v.searchResultItemSummary,dangerouslySetInnerHTML:{__html:(0,C.o)(t.t,(0,S.m)(n,"t"),a,100)}})]})}const b=function(){return(0,P.jsx)(n.Z,{children:(0,P.jsx)(_,{})})}}}]); \ No newline at end of file diff --git a/assets/js/1be78505.b1c6e321.js b/assets/js/1be78505.b1c6e321.js deleted file mode 100644 index 1bbad6bc4..000000000 --- a/assets/js/1be78505.b1c6e321.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9514,4248],{1299:(e,t,n)=>{n.r(t),n.d(t,{default:()=>ge});var a=n(7294),o=n(6010),l=n(5463),r=n(3702),c=n(246),i=n(3734),s=n(8801),d=n(4432),m=n(1009),u=n(7325),b=n(2957),p=n(3266);const h={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};function E(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),l=(0,a.useRef)(!1),{startScroll:r,cancelScroll:c}=(0,b.Ct)();return(0,b.RF)(((e,n)=>{let{scrollY:a}=e;const r=n?.scrollY;r&&(l.current?l.current=!1:a>=r?(c(),o(!1)):a{e.location.hash&&(l.current=!0,o(!1))})),{shown:n,scrollToTop:()=>r(0)}}({threshold:300});return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",r.k.common.backToTopButton,h.backToTopButton,e&&h.backToTopButtonShow),type:"button",onClick:t})}var f=n(8986),g=n(6550),v=n(3488),_=n(107),k=n(6811),C=n(7462);function S(e){return a.createElement("svg",(0,C.Z)({width:"20",height:"20","aria-hidden":"true"},e),a.createElement("g",{fill:"#7a7a7a"},a.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),a.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})))}const I={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function N(e){let{onClick:t}=e;return a.createElement("button",{type:"button",title:(0,u.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",I.collapseSidebarButton),onClick:t},a.createElement(S,{className:I.collapseSidebarButtonIcon}))}var T=n(5830),x=n(3768);const Z=Symbol("EmptyContext"),B=a.createContext(Z);function y(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),l=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return a.createElement(B.Provider,{value:l},t)}var w=n(4639),L=n(9003),A=n(3699),M=n(1048);function F(e){let{categoryLabel:t,onClick:n}=e;return a.createElement("button",{"aria-label":(0,u.I)({id:"theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel",message:"Toggle the collapsible sidebar category '{label}'",description:"The ARIA label to toggle the collapsible sidebar category"},{label:t}),type:"button",className:"clean-btn menu__caret",onClick:n})}function H(e){let{item:t,onItemClick:n,activePath:l,level:c,index:s,...d}=e;const{items:m,label:u,collapsible:b,className:p,href:h}=t,{docs:{sidebar:{autoCollapseCategories:E}}}=(0,_.L)(),f=function(e){const t=(0,M.Z)();return(0,a.useMemo)((()=>e.href?e.href:!t&&e.collapsible?(0,i.Wl)(e):void 0),[e,t])}(t),g=(0,i._F)(t,l),v=(0,L.Mg)(h,l),{collapsed:k,setCollapsed:S}=(0,w.u)({initialState:()=>!!b&&(!g&&t.collapsed)}),{expandedItem:I,setExpandedItem:N}=function(){const e=(0,a.useContext)(B);if(e===Z)throw new x.i6("DocSidebarItemsExpandedStateProvider");return e}(),T=function(e){void 0===e&&(e=!k),N(e?null:s),S(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const l=(0,x.D9)(t);(0,a.useEffect)((()=>{t&&!l&&n&&o(!1)}),[t,l,n,o])}({isActive:g,collapsed:k,updateCollapsed:T}),(0,a.useEffect)((()=>{b&&null!=I&&I!==s&&E&&S(!0)}),[b,I,s,S,E]),a.createElement("li",{className:(0,o.Z)(r.k.docs.docSidebarItemCategory,r.k.docs.docSidebarItemCategoryLevel(c),"menu__list-item",{"menu__list-item--collapsed":k},p)},a.createElement("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v})},a.createElement(A.Z,(0,C.Z)({className:(0,o.Z)("menu__link",{"menu__link--sublist":b,"menu__link--sublist-caret":!h&&b,"menu__link--active":g}),onClick:b?e=>{n?.(t),h?T(!1):(e.preventDefault(),T())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":b?!k:void 0,href:b?f??"#":f},d),u),h&&b&&a.createElement(F,{categoryLabel:u,onClick:e=>{e.preventDefault(),T()}})),a.createElement(w.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:k},a.createElement(j,{items:m,tabIndex:k?-1:0,onItemClick:n,activePath:l,level:c+1})))}var P=n(2735),W=n(4082);const D={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:l,level:c,index:s,...d}=e;const{href:m,label:u,className:b,autoAddBaseUrl:p}=t,h=(0,i._F)(t,l),E=(0,P.Z)(m);return a.createElement("li",{className:(0,o.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(c),"menu__list-item",b),key:u},a.createElement(A.Z,(0,C.Z)({className:(0,o.Z)("menu__link",!E&&D.menuExternalLink,{"menu__link--active":h}),autoAddBaseUrl:p,"aria-current":h?"page":void 0,to:m},E&&{onClick:n?()=>n(t):void 0},d),u,!E&&a.createElement(W.Z,null)))}const V={menuHtmlItem:"menuHtmlItem_M9Kj"};function z(e){let{item:t,level:n,index:l}=e;const{value:c,defaultStyle:i,className:s}=t;return a.createElement("li",{className:(0,o.Z)(r.k.docs.docSidebarItemLink,r.k.docs.docSidebarItemLinkLevel(n),i&&[V.menuHtmlItem,"menu__list-item"],s),key:l,dangerouslySetInnerHTML:{__html:c}})}function U(e){let{item:t,...n}=e;switch(t.type){case"category":return a.createElement(H,(0,C.Z)({item:t},n));case"html":return a.createElement(z,(0,C.Z)({item:t},n));default:return a.createElement(R,(0,C.Z)({item:t},n))}}function K(e){let{items:t,...n}=e;return a.createElement(y,null,t.map(((e,t)=>a.createElement(U,(0,C.Z)({key:t,item:e,index:t},n)))))}const j=(0,a.memo)(K),q={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function G(e){let{path:t,sidebar:n,className:l}=e;const c=function(){const{isActive:e}=(0,T.nT)(),[t,n]=(0,a.useState)(e);return(0,b.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return a.createElement("nav",{"aria-label":(0,u.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",q.menu,c&&q.menuWithAnnouncementBar,l)},a.createElement("ul",{className:(0,o.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(j,{items:n,activePath:t,level:1})))}const Y="sidebar_njMd",O="sidebarWithHideableNavbar_wUlq",X="sidebarHidden_VK0M",J="sidebarLogo_isFc";function Q(e){let{path:t,sidebar:n,onCollapse:l,isHidden:r}=e;const{navbar:{hideOnScroll:c},docs:{sidebar:{hideable:i}}}=(0,_.L)();return a.createElement("div",{className:(0,o.Z)(Y,c&&O,r&&X)},c&&a.createElement(k.Z,{tabIndex:-1,className:J}),a.createElement(G,{path:t,sidebar:n}),i&&a.createElement(N,{onClick:l}))}const $=a.memo(Q);var ee=n(3086),te=n(2600);const ne=e=>{let{sidebar:t,path:n}=e;const l=(0,te.e)();return a.createElement("ul",{className:(0,o.Z)(r.k.docs.docSidebarMenu,"menu__list")},a.createElement(j,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&l.toggle(),"link"===e.type&&l.toggle()},level:1}))};function ae(e){return a.createElement(ee.Zo,{component:ne,props:e})}const oe=a.memo(ae);function le(e){const t=(0,v.i)(),n="desktop"===t||"ssr"===t,o="mobile"===t;return a.createElement(a.Fragment,null,n&&a.createElement($,e),o&&a.createElement(oe,e))}const re={expandButton:"expandButton_m80_",expandButtonIcon:"expandButtonIcon_BlDH"};function ce(e){let{toggleSidebar:t}=e;return a.createElement("div",{className:re.expandButton,title:(0,u.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,u.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t},a.createElement(S,{className:re.expandButtonIcon}))}const ie={docSidebarContainer:"docSidebarContainer_b6E3",docSidebarContainerHidden:"docSidebarContainerHidden_b3ry",sidebarViewport:"sidebarViewport_Xe31"};function se(e){let{children:t}=e;const n=(0,d.V)();return a.createElement(a.Fragment,{key:n?.name??"noSidebar"},t)}function de(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:l}=e;const{pathname:c}=(0,g.TH)(),[i,s]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{i&&s(!1),!i&&(0,f.n)()&&s(!0),l((e=>!e))}),[l,i]);return a.createElement("aside",{className:(0,o.Z)(r.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&s(!0)}},a.createElement(se,null,a.createElement("div",{className:(0,o.Z)(ie.sidebarViewport,i&&ie.sidebarViewportHidden)},a.createElement(le,{sidebar:t,path:c,onCollapse:d,isHidden:i}),i&&a.createElement(ce,{toggleSidebar:d}))))}const me={docMainContainer:"docMainContainer_gTbr",docMainContainerEnhanced:"docMainContainerEnhanced_Uz_u",docItemWrapperEnhanced:"docItemWrapperEnhanced_czyv"};function ue(e){let{hiddenSidebarContainer:t,children:n}=e;const l=(0,d.V)();return a.createElement("main",{className:(0,o.Z)(me.docMainContainer,(t||!l)&&me.docMainContainerEnhanced)},a.createElement("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",me.docItemWrapper,t&&me.docItemWrapperEnhanced)},n))}const be={docPage:"docPage__5DB",docsWrapper:"docsWrapper_BCFX"};function pe(e){let{children:t}=e;const n=(0,d.V)(),[o,l]=(0,a.useState)(!1);return a.createElement(m.Z,{wrapperClassName:be.docsWrapper},a.createElement(E,null),a.createElement("div",{className:be.docPage},n&&a.createElement(de,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:l}),a.createElement(ue,{hiddenSidebarContainer:o},t)))}var he=n(4248),Ee=n(3647);function fe(e){const{versionMetadata:t}=e;return a.createElement(a.Fragment,null,a.createElement(Ee.Z,{version:t.version,tag:(0,c.os)(t.pluginId,t.version)}),a.createElement(l.d,null,t.noIndex&&a.createElement("meta",{name:"robots",content:"noindex, nofollow"})))}function ge(e){const{versionMetadata:t}=e,n=(0,i.hI)(e);if(!n)return a.createElement(he.default,null);const{docElement:c,sidebarName:m,sidebarItems:u}=n;return a.createElement(a.Fragment,null,a.createElement(fe,e),a.createElement(l.FG,{className:(0,o.Z)(r.k.wrapper.docsPages,r.k.page.docsDocPage,e.versionMetadata.className)},a.createElement(s.q,{version:t},a.createElement(d.b,{name:m,items:u},a.createElement(pe,null,c)))))}},4248:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(7294),o=n(7325),l=n(5463),r=n(1009);function c(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,o.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.")))))))}},8801:(e,t,n)=>{n.d(t,{E:()=>c,q:()=>r});var a=n(7294),o=n(3768);const l=a.createContext(null);function r(e){let{children:t,version:n}=e;return a.createElement(l.Provider,{value:n},t)}function c(){const e=(0,a.useContext)(l);if(null===e)throw new o.i6("DocsVersionProvider");return e}}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.85070d01.js b/assets/js/1df93b7f.85070d01.js new file mode 100644 index 000000000..e5f6798f0 --- /dev/null +++ b/assets/js/1df93b7f.85070d01.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3237],{9805:(e,t,o)=>{o.d(t,{Z:()=>n});var a,r,i=o(7294);function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:o,...n}=e;return i.createElement("svg",s({width:134,height:134,viewBox:"0 0 134 134",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":o},n),t?i.createElement("title",{id:o},t):null,a||(a=i.createElement("g",{clipPath:"url(#a)"},i.createElement("path",{d:"M64.88 111.756 9.811 56.688C3.27 50.147 0 41.574 0 33c0-4.364.847-8.727 2.542-12.823A33.4 33.4 0 0 0 0 33v67c0 18.502 14.998 33.5 33.5 33.5 14.365 0 26.618-9.042 31.38-21.744Z",fill:"#007DFC"}),i.createElement("path",{d:"M67 33v67c0 18.502 14.999 33.5 33.5 33.5 18.502 0 33.5-14.998 33.5-33.5V33c0 18.502-14.998 33.5-33.5 33.5C81.999 66.5 67 51.502 67 33Z",fill:"#FC9E22"}),i.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.812 9.312c13.083-13.083 34.294-13.083 47.376 0l67 67c13.083 13.082 13.083 34.294 0 47.376-13.082 13.083-34.294 13.083-47.376 0l-67-67c-13.083-13.083-13.083-34.294 0-47.376Z",fill:"url(#b)"}),i.createElement("path",{d:"M64.88 111.756 21.743 68.621A33.428 33.428 0 0 1 33.5 66.5C52 66.5 67 81.499 67 100c0 4.136-.75 8.098-2.12 11.756Z",fill:"#06D4E7"}),i.createElement("path",{d:"m69.12 21.244 43.136 43.135A33.433 33.433 0 0 1 100.5 66.5C81.999 66.5 67 51.502 67 33c0-4.136.75-8.098 2.12-11.756Z",fill:"#FF397F"}),i.createElement("path",{d:"M112.256 64.38C124.958 59.617 134 47.364 134 33c0-18.502-14.998-33.5-33.5-33.5-14.365 0-26.618 9.042-31.38 21.744l43.136 43.135Z",fill:"#FFB900"}),i.createElement("path",{d:"M21.744 68.62C9.042 73.383 0 85.636 0 100c0 18.502 14.998 33.5 33.5 33.5 14.365 0 26.618-9.042 31.38-21.744L21.744 68.621Z",fill:"#00B1F4"}))),r||(r=i.createElement("defs",null,i.createElement("linearGradient",{id:"b",x1:2.345,y1:5.53,x2:129.31,y2:126.8,gradientUnits:"userSpaceOnUse"},i.createElement("stop",{stopColor:"#5231C6"}),i.createElement("stop",{offset:1,stopColor:"#E60AF6"})),i.createElement("clipPath",{id:"a"},i.createElement("path",{fill:"#fff",d:"M0 0h134v134H0z"})))))}},8391:(e,t,o)=>{o.r(t),o.d(t,{default:()=>f});var a=o(7294),r=o(6010),i=o(2263),s=o(179);const n={features:"features_t9lD",featureSvg:"featureSvg_GfXr"};var l=o(6550),c=o(5893);const d=[{title:"Getting started",Image:o(1510).Z,description:(0,c.jsx)(c.Fragment,{children:"Kickstart your blockchain journey with Dappnode. Our straightforward setup guides you to deploy and manage your decentralized applications easily. No more technical jargon, just a seamless blockchain experience. With Dappnode, diving into decentralization has never been simpler. Start now!"}),url:"/docs/user/getting-started/choose-your-path"},{title:"Solo staking",Image:o(8886).Z,description:(0,c.jsx)(c.Fragment,{children:"Experience the future of Ethereum with Dappnode. Simplify your solo staking journey with our user-friendly platform, empowering you to run your own Ethereum 2.0 validator node with ease and security. With Dappnode, you're in control. Stake smarter, stake with Dappnode."}),url:"/docs/user/staking/overview"},{title:"Driving School",Image:o(2485).Z,description:(0,c.jsx)(c.Fragment,{children:"Dappnode Driving School is a collection of tutorial videos that provide all the tools you need for a successful Dappnode journey. From initial installation to advanced VPN setups, exploring hardware essentials, and expanding functionalities, each video offers step-by-step instructions tailored for both beginners and seasoned users."}),url:"/docs/user/videos-and-tutorials/driving-school/initial-setup"},{title:"Rocketpool",Image:o(10).Z,description:(0,c.jsx)(c.Fragment,{children:"How Rocket Pool Works. Unlike solo stakers, who are required to put 32 ETH up for deposit to create a new validator, Rocket Pool nodes only need to deposit 8/16 ETH per validator. This will be coupled with 16 ETH from the staking pool (which stakers deposited in exchange for rETH) to create a new Ethereum validator. This new validator is called a minipool."}),url:"/docs/user/staking/ethereum/lsd-pools/rocketpool"},{title:"Ethical metrics",Image:o(267).Z,description:(0,c.jsx)(c.Fragment,{children:"Ethical metrics is privacy-ensured solution for monitoring your Dappnode. This service alerts you about your Dappnode's status, using Tor hidden services to maintain the privacy of your IP address. Setting up is straightforward, requiring only an email address to receive alerts."}),url:"/docs/user/ethical-metrics/overview"},{title:"Smooth",Image:o(9805).Z,description:(0,c.jsx)(c.Fragment,{children:"Smooth is a opt-in feature that enables solo stakers to earn higher MEV rewards. Joining Smooth is easier than ever with Dappnode. Simply set your Fee Recipient Address to Smooth and claim your rewards after proposing a slot!"}),url:"/docs/smooth"}];function u(e){let{title:t,Image:o,description:a,url:i}=e;const s="string"!=typeof o,d=(0,l.k6)();return(0,c.jsxs)("div",{className:(0,r.Z)("col col--4"),onClick:()=>{i&&d.push(i)},style:{cursor:"pointer"},children:[(0,c.jsx)("div",{className:"text--center",children:s?(0,c.jsx)(o,{className:n.featureSvg,role:"img"}):(0,c.jsx)("img",{src:o,className:n.featureSvg,alt:t})}),(0,c.jsxs)("div",{className:"text--center padding-horiz--md",children:[(0,c.jsx)("h3",{children:t}),(0,c.jsx)("p",{children:a})]})]})}function p(){return(0,c.jsx)("section",{className:n.features,children:(0,c.jsx)("div",{className:"container",children:(0,c.jsx)("div",{className:"row",children:d.map(((e,t)=>(0,c.jsx)(u,{...e},t)))})})})}const h={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN",carousel:"carousel_qyqS",videoModal:"videoModal_mMww",videoWrapper:"videoWrapper_XWWU",closeButton:"closeButton_muHm",videoThumbnail:"videoThumbnail_Dhao",videoOverlay:"videoOverlay_xzii",playButton:"playButton_boOJ"},m=[{title:"Booting from the Dappnode ISO",url:"https://www.youtube.com/embed/lh5hADm1Iuk",featured:!0},{title:"Accessing the Dappnode User Interface or Dashboard",url:"https://www.youtube.com/embed/Z1uDv_J7wlg",featured:!0},{title:"Setting up Dappnode Security",url:"https://www.youtube.com/embed/TZUK39yiZ30",featured:!0},{title:"Configuring your Dappnode VPN",url:"https://www.youtube.com/embed/qB0sMaNpXpU",featured:!0},{title:"Syncing your clients/An overview on node running",url:"https://www.youtube.com/embed/zJowD3X-MUc",featured:!0},{title:"Understanding your Dappnode's Hardware",url:"https://www.youtube.com/embed/1GW-GbGKs7o?si=DZVO185qWNWiXFl4",featured:!0}];function g(){const{siteConfig:e}=(0,i.Z)(),[t,o]=(0,a.useState)(null);(0,a.useEffect)((()=>{const e=e=>{"Escape"===e.key&&o(null)};return window.addEventListener("keydown",e),()=>{window.removeEventListener("keydown",e)}}),[]);return(0,c.jsx)("header",{className:(0,r.Z)("hero hero--primary",h.heroBanner),children:(0,c.jsxs)("div",{className:"container",children:[(0,c.jsx)("h1",{className:"hero__title",children:e.title}),(0,c.jsx)("p",{className:"hero__subtitle",children:e.tagline}),(0,c.jsx)("div",{className:(0,r.Z)("carousel",h.carousel),children:m.filter((e=>e.featured)).map(((e,t)=>(0,c.jsxs)("div",{className:(0,r.Z)("carousel__item",h.carouselItem),onClick:()=>(e=>{o(e.url)})(e),children:[(0,c.jsx)("iframe",{className:h.videoThumbnail,width:"560",height:"315",src:e.url,allowFullScreen:!0}),(0,c.jsx)("div",{className:h.videoOverlay})]},t)))}),t&&(0,c.jsx)("div",{className:h.videoModal,children:(0,c.jsxs)("div",{className:h.videoWrapper,children:[(0,c.jsx)("button",{className:h.closeButton,onClick:()=>{o(null)},children:"X"}),(0,c.jsx)("iframe",{width:"100%",height:"100%",src:t,allowFullScreen:!0})]})})]})})}function f(){const{siteConfig:e}=(0,i.Z)();return(0,c.jsxs)(s.Z,{title:`Hello from ${e.title}`,description:"Description will go into a meta tag in ",children:[(0,c.jsx)(g,{}),(0,c.jsx)("main",{children:(0,c.jsx)(p,{})})]})}},2485:(e,t,o)=>{o.d(t,{Z:()=>a});const a=o.p+"assets/images/driving-school-logo-95fc32d66ea6db05037bd37a5ae77b9f.png"},267:(e,t,o)=>{o.d(t,{Z:()=>a});const a=o.p+"assets/images/ethical-metrics-logo-d0514fa034eae1b9bd5c57a2250d4515.png"},1510:(e,t,o)=>{o.d(t,{Z:()=>a});const a=o.p+"assets/images/getting-started-0b96ec65495a5b2b8d1c08feafa4b171.png"},10:(e,t,o)=>{o.d(t,{Z:()=>a});const a=o.p+"assets/images/rocketpool-b58a9096fceb354093092b52031ad31a.png"},8886:(e,t,o)=>{o.d(t,{Z:()=>a});const a=o.p+"assets/images/solo-staking-ethereum-d4f9cd76d07ba97523a818af09c1a4a5.png"}}]); \ No newline at end of file diff --git a/assets/js/1df93b7f.93141e84.js b/assets/js/1df93b7f.93141e84.js deleted file mode 100644 index eb6163726..000000000 --- a/assets/js/1df93b7f.93141e84.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3237],{2618:(e,t,a)=>{a.d(t,{Z:()=>i});var o,r,n=a(7294);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t{let{title:t,titleId:a,...i}=e;return n.createElement("svg",l({width:134,height:134,viewBox:"0 0 134 134",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-labelledby":a},i),t?n.createElement("title",{id:a},t):null,o||(o=n.createElement("g",{clipPath:"url(#a)"},n.createElement("path",{d:"M64.88 111.756 9.811 56.688C3.27 50.147 0 41.574 0 33c0-4.364.847-8.727 2.542-12.823A33.4 33.4 0 0 0 0 33v67c0 18.502 14.998 33.5 33.5 33.5 14.365 0 26.618-9.042 31.38-21.744Z",fill:"#007DFC"}),n.createElement("path",{d:"M67 33v67c0 18.502 14.999 33.5 33.5 33.5 18.502 0 33.5-14.998 33.5-33.5V33c0 18.502-14.998 33.5-33.5 33.5C81.999 66.5 67 51.502 67 33Z",fill:"#FC9E22"}),n.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.812 9.312c13.083-13.083 34.294-13.083 47.376 0l67 67c13.083 13.082 13.083 34.294 0 47.376-13.082 13.083-34.294 13.083-47.376 0l-67-67c-13.083-13.083-13.083-34.294 0-47.376Z",fill:"url(#b)"}),n.createElement("path",{d:"M64.88 111.756 21.743 68.621A33.428 33.428 0 0 1 33.5 66.5C52 66.5 67 81.499 67 100c0 4.136-.75 8.098-2.12 11.756Z",fill:"#06D4E7"}),n.createElement("path",{d:"m69.12 21.244 43.136 43.135A33.433 33.433 0 0 1 100.5 66.5C81.999 66.5 67 51.502 67 33c0-4.136.75-8.098 2.12-11.756Z",fill:"#FF397F"}),n.createElement("path",{d:"M112.256 64.38C124.958 59.617 134 47.364 134 33c0-18.502-14.998-33.5-33.5-33.5-14.365 0-26.618 9.042-31.38 21.744l43.136 43.135Z",fill:"#FFB900"}),n.createElement("path",{d:"M21.744 68.62C9.042 73.383 0 85.636 0 100c0 18.502 14.998 33.5 33.5 33.5 14.365 0 26.618-9.042 31.38-21.744L21.744 68.621Z",fill:"#00B1F4"}))),r||(r=n.createElement("defs",null,n.createElement("linearGradient",{id:"b",x1:2.345,y1:5.53,x2:129.31,y2:126.8,gradientUnits:"userSpaceOnUse"},n.createElement("stop",{stopColor:"#5231C6"}),n.createElement("stop",{offset:1,stopColor:"#E60AF6"})),n.createElement("clipPath",{id:"a"},n.createElement("path",{fill:"#fff",d:"M0 0h134v134H0z"})))))}},2833:(e,t,a)=>{a.r(t),a.d(t,{default:()=>f});var o=a(7294),r=a(6010),n=a(9962),l=a(1009),i=a(7462);const s={features:"features_t9lD",featureSvg:"featureSvg_GfXr"};var c=a(6550);const d=[{title:"Getting started",Image:a(4043).Z,description:o.createElement(o.Fragment,null,"Kickstart your blockchain journey with Dappnode. Our straightforward setup guides you to deploy and manage your decentralized applications easily. No more technical jargon, just a seamless blockchain experience. With Dappnode, diving into decentralization has never been simpler. Start now!"),url:"/docs/user/getting-started/choose-your-path"},{title:"Solo staking",Image:a(7926).Z,description:o.createElement(o.Fragment,null,"Experience the future of Ethereum with Dappnode. Simplify your solo staking journey with our user-friendly platform, empowering you to run your own Ethereum 2.0 validator node with ease and security. With Dappnode, you're in control. Stake smarter, stake with Dappnode."),url:"/docs/user/staking/overview"},{title:"Driving School",Image:a(5200).Z,description:o.createElement(o.Fragment,null,"Dappnode Driving School is a collection of tutorial videos that provide all the tools you need for a successful Dappnode journey. From initial installation to advanced VPN setups, exploring hardware essentials, and expanding functionalities, each video offers step-by-step instructions tailored for both beginners and seasoned users."),url:"/docs/user/videos-and-tutorials/driving-school/initial-setup"},{title:"Rocketpool",Image:a(2267).Z,description:o.createElement(o.Fragment,null,"How Rocket Pool Works. Unlike solo stakers, who are required to put 32 ETH up for deposit to create a new validator, Rocket Pool nodes only need to deposit 8/16 ETH per validator. This will be coupled with 16 ETH from the staking pool (which stakers deposited in exchange for rETH) to create a new Ethereum validator. This new validator is called a minipool."),url:"/docs/user/staking/ethereum/lsd-pools/rocketpool"},{title:"Ethical metrics",Image:a(7505).Z,description:o.createElement(o.Fragment,null,"Ethical metrics is privacy-ensured solution for monitoring your Dappnode. This service alerts you about your Dappnode's status, using Tor hidden services to maintain the privacy of your IP address. Setting up is straightforward, requiring only an email address to receive alerts."),url:"/docs/user/ethical-metrics/overview"},{title:"Smooth",Image:a(2618).Z,description:o.createElement(o.Fragment,null,"Smooth is a opt-in feature that enables solo stakers to earn higher MEV rewards. Joining Smooth is easier than ever with Dappnode. Simply set your Fee Recipient Address to Smooth and claim your rewards after proposing a slot!"),url:"/docs/smooth"}];function u(e){let{title:t,Image:a,description:n,url:l}=e;const i="string"!=typeof a,d=(0,c.k6)();return o.createElement("div",{className:(0,r.Z)("col col--4"),onClick:()=>{l&&d.push(l)},style:{cursor:"pointer"}},o.createElement("div",{className:"text--center"},i?o.createElement(a,{className:s.featureSvg,role:"img"}):o.createElement("img",{src:a,className:s.featureSvg,alt:t})),o.createElement("div",{className:"text--center padding-horiz--md"},o.createElement("h3",null,t),o.createElement("p",null,n)))}function m(){return o.createElement("section",{className:s.features},o.createElement("div",{className:"container"},o.createElement("div",{className:"row"},d.map(((e,t)=>o.createElement(u,(0,i.Z)({key:t},e)))))))}const p={heroBanner:"heroBanner_qdFl",buttons:"buttons_AeoN",carousel:"carousel_qyqS",videoModal:"videoModal_mMww",videoWrapper:"videoWrapper_XWWU",closeButton:"closeButton_muHm",videoThumbnail:"videoThumbnail_Dhao",videoOverlay:"videoOverlay_xzii",playButton:"playButton_boOJ"},h=[{title:"Booting from the Dappnode ISO",url:"https://www.youtube.com/embed/lh5hADm1Iuk",featured:!0},{title:"Accessing the Dappnode User Interface or Dashboard",url:"https://www.youtube.com/embed/Z1uDv_J7wlg",featured:!0},{title:"Setting up Dappnode Security",url:"https://www.youtube.com/embed/TZUK39yiZ30",featured:!0},{title:"Configuring your Dappnode VPN",url:"https://www.youtube.com/embed/qB0sMaNpXpU",featured:!0},{title:"Syncing your clients/An overview on node running",url:"https://www.youtube.com/embed/zJowD3X-MUc",featured:!0},{title:"Understanding your Dappnode's Hardware",url:"https://www.youtube.com/embed/1GW-GbGKs7o?si=DZVO185qWNWiXFl4",featured:!0}];function g(){const{siteConfig:e}=(0,n.Z)(),[t,a]=(0,o.useState)(null);(0,o.useEffect)((()=>{const e=e=>{"Escape"===e.key&&a(null)};return window.addEventListener("keydown",e),()=>{window.removeEventListener("keydown",e)}}),[]);return o.createElement("header",{className:(0,r.Z)("hero hero--primary",p.heroBanner)},o.createElement("div",{className:"container"},o.createElement("h1",{className:"hero__title"},e.title),o.createElement("p",{className:"hero__subtitle"},e.tagline),o.createElement("div",{className:(0,r.Z)("carousel",p.carousel)},h.filter((e=>e.featured)).map(((e,t)=>o.createElement("div",{key:t,className:(0,r.Z)("carousel__item",p.carouselItem),onClick:()=>(e=>{a(e.url)})(e)},o.createElement("iframe",{className:p.videoThumbnail,width:"560",height:"315",src:e.url,allowFullScreen:!0}),o.createElement("div",{className:p.videoOverlay}))))),t&&o.createElement("div",{className:p.videoModal},o.createElement("div",{className:p.videoWrapper},o.createElement("button",{className:p.closeButton,onClick:()=>{a(null)}},"X"),o.createElement("iframe",{width:"100%",height:"100%",src:t,allowFullScreen:!0})))))}function f(){const{siteConfig:e}=(0,n.Z)();return o.createElement(l.Z,{title:`Hello from ${e.title}`,description:"Description will go into a meta tag in "},o.createElement(g,null),o.createElement("main",null,o.createElement(m,null)))}},5200:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/driving-school-logo-95fc32d66ea6db05037bd37a5ae77b9f.png"},7505:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/ethical-metrics-logo-d0514fa034eae1b9bd5c57a2250d4515.png"},4043:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/getting-started-0b96ec65495a5b2b8d1c08feafa4b171.png"},2267:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/rocketpool-b58a9096fceb354093092b52031ad31a.png"},7926:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/solo-staking-ethereum-d4f9cd76d07ba97523a818af09c1a4a5.png"}}]); \ No newline at end of file diff --git a/assets/js/1e4f1bb9.bbb2152c.js b/assets/js/1e4f1bb9.bbb2152c.js deleted file mode 100644 index d471f5e95..000000000 --- a/assets/js/1e4f1bb9.bbb2152c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1323],{4137:(e,a,t)=>{t.d(a,{Zo:()=>l,kt:()=>m});var n=t(7294);function o(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function s(e){for(var a=1;a=0||(o[t]=e[t]);return o}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var p=n.createContext({}),c=function(e){var a=n.useContext(p),t=a;return e&&(t="function"==typeof e?e(a):s(s({},a),e)),t},l=function(e){var a=c(e.components);return n.createElement(p.Provider,{value:a},e.children)},d="mdxType",h={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var t=e.components,o=e.mdxType,r=e.originalType,p=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),d=c(t),u=o,m=d["".concat(p,".").concat(u)]||d[u]||h[u]||r;return t?n.createElement(m,s(s({ref:a},l),{},{components:t})):n.createElement(m,s({ref:a},l))}));function m(e,a){var t=arguments,o=a&&a.mdxType;if("string"==typeof e||o){var r=t.length,s=new Array(r);s[0]=u;var i={};for(var p in a)hasOwnProperty.call(a,p)&&(i[p]=a[p]);i.originalType=e,i[d]="string"==typeof e?e:o,s[1]=i;for(var c=2;c{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var n=t(7462),o=(t(7294),t(4137));const r={},s="Dappnode Monitoring Service (DMS)",i={unversionedId:"user/packages/dms",id:"user/packages/dms",title:"Dappnode Monitoring Service (DMS)",description:'As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or "health" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.',source:"@site/docs/user/packages/dms.md",sourceDirName:"user/packages",slug:"/user/packages/dms",permalink:"/docs/user/packages/dms",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/dms.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Packages' Signature",permalink:"/docs/user/packages/signature"},next:{title:"Bitcoin",permalink:"/docs/user/packages/bitcoin"}},p={},c=[{value:"How It All Works",id:"how-it-all-works",level:2},{value:"Installing and accessing DMS",id:"installing-and-accessing-dms",level:2},{value:"Monitoring through Dashboards",id:"monitoring-through-dashboards",level:2}],l={toc:c},d="wrapper";function h(e){let{components:a,...r}=e;return(0,o.kt)(d,(0,n.Z)({},l,r,{components:a,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"dappnode-monitoring-service-dms"},"Dappnode Monitoring Service (DMS)"),(0,o.kt)("p",null,'As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or "health" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.'),(0,o.kt)("h2",{id:"how-it-all-works"},"How It All Works"),(0,o.kt)("p",null,"DMS acts as a strong monitoring solution, simplifying the complex task of monitoring your packages and system by automatically collecting all available data and visualizing it for you. But how does it achieve this? DMS primarily comprises two key components: Prometheus and Grafana. Let's break it down"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Prometheus Integration:")," DMS seamlessly incorporates ",(0,o.kt)("a",{parentName:"p",href:"https://prometheus.io/"},"Prometheus"),", a comprehensive monitoring toolkit. Prometheus is responsible of gathering all data coming from other Dappnode packages. This information is the foundation for understanding your package's performance.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Grafana Dashboards:")," To transform raw data coming from Prometheus into meaningful insights, DMS brings in ",(0,o.kt)("a",{parentName:"p",href:"https://grafana.com/"},"Grafana"),", renowned for its exceptional data visualization capabilities. Through customizable dashboards, you gain instant access to both real-time and historical perspectives on how your packages are functioning. "))),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udca1 While DMS can monitor data from your installed packages on its own, we highly recommend installing the ",(0,o.kt)("strong",{parentName:"p"},"Dappnode Exporter")," package as well. This package expands DMS's capabilities to monitor critical Dappnode system metrics, such as network traffic, CPU, RAM, and disk usage. Moreover, it unlocks new Grafana dashboards that visualize this data for your convenience. You can easily find the Dappnode Exporter in your DAppStore.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Your Privacy Matters:")),(0,o.kt)("p",null,"At Dappnode, we respect your privacy. Rest assured that all the metrics collected by DMS are stored locally, ensuring your information remains private and secure."),(0,o.kt)("h2",{id:"installing-and-accessing-dms"},"Installing and accessing DMS"),(0,o.kt)("p",null,"Locate DMS in your DAppStore, listed among the Featured packages. The installation process is straightforward, much like any other Dappnode package. After installation, you can access DMS Grafana and explore all its dashboards by visiting ",(0,o.kt)("a",{parentName:"p",href:"http://dms.dappnode"},"http://dms.dappnode"),"."),(0,o.kt)("h2",{id:"monitoring-through-dashboards"},"Monitoring through Dashboards"),(0,o.kt)("p",null,"As explained in the ",(0,o.kt)("a",{parentName:"p",href:"https://grafana.com/docs/grafana/latest/dashboards/"},"official Grafana documentation"),", Grafana simplifies data visualization through organized views known as dashboards. In the context of Dappnode, many packages, especially our staker packages, come equipped with pre-built Grafana dashboards that seamlessly integrate into DMS upon installation. These dashboards are designed to provide specific insights into the performance of the corresponding packages. To explore the range of available Grafana dashboards within DMS, follow these simple steps:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Accessing Dashboards:"),' Find the "Dashboards" icon on the left-hand side of the DMS interface and hover your mouse over it. Click on "Browse" to proceed.'),(0,o.kt)("div",{style:{textAlign:"center"}},(0,o.kt)("p",{parentName:"li"}," ",(0,o.kt)("img",{alt:"Browse Dashboards",src:t(3248).Z,width:"500",height:"500"})))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Dashboard Folders:")," In the dashboard browsing view, you'll see different dashboard folders. Each folder contains one or more dashboards related to specific aspects of your Dappnode environment. For instance, let's click on the \"Docker\" dashboard provided by the ",(0,o.kt)("strong",{parentName:"p"},"Dappnode Exporter")," package."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Dashboard Folders",src:t(5519).Z,width:"1618",height:"725"}))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Exploring a Dashboard:")," That's it! You are now within the chosen dashboard, such as the \"Docker\" dashboard. Here, you'll find valuable information about all your installed packages, including relevant metrics and performance indicators."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Docker Dashboard",src:t(8043).Z,width:"2549",height:"1303"})))),(0,o.kt)("p",null,"As you navigate through these Grafana dashboards, it's worth mentioning that the ",(0,o.kt)("a",{parentName:"p",href:"https://grafana.com/docs/grafana/latest/"},"official Grafana documentation")," provides a wealth of information about dashboards, visualization techniques, and best practices. Exploring this documentation can greatly enhance your ability to interpret and utilize the data presented in DMS dashboards. Whether you're new to Grafana or seeking advanced tips, the official documentation is a valuable resource for maximizing your monitoring experience."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udca1 If you're looking for specific dashboards beyond what comes pre-installed, ",(0,o.kt)("a",{parentName:"p",href:"https://grafana.com/grafana/dashboards/"},"Grafana's dashboard repository")," makes it easy to search and import dashboards created by the community.")),(0,o.kt)("p",null,"Feel free to check out the different dashboard folders and adjust how things look based on what you like. Grafana offers a bunch of cool features, so have fun exploring and making the dashboards work just right for you!"))}h.isMDXComponent=!0},3248:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dms-browse-dashboards-37ab051b363a523366fc70f93df38cae.png"},5519:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dms-dashboards-page-3e8a37465fa70b4a9da2a0fb31b0258b.png"},8043:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dms-docker-dashboard-37854c47052a09ff034780a00a42588b.png"}}]); \ No newline at end of file diff --git a/assets/js/1e4f1bb9.c1e680f7.js b/assets/js/1e4f1bb9.c1e680f7.js new file mode 100644 index 000000000..d7f3a6739 --- /dev/null +++ b/assets/js/1e4f1bb9.c1e680f7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1323],{5381:(e,a,s)=>{s.r(a),s.d(a,{assets:()=>d,contentTitle:()=>t,default:()=>l,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var n=s(5893),o=s(1151);const i={},t="Dappnode Monitoring Service (DMS)",r={id:"user/packages/dms",title:"Dappnode Monitoring Service (DMS)",description:'As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or "health" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.',source:"@site/docs/user/packages/dms.md",sourceDirName:"user/packages",slug:"/user/packages/dms",permalink:"/docs/user/packages/dms",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/dms.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Packages' Signature",permalink:"/docs/user/packages/signature"},next:{title:"Bitcoin",permalink:"/docs/user/packages/bitcoin"}},d={},c=[{value:"How It All Works",id:"how-it-all-works",level:2},{value:"Installing and accessing DMS",id:"installing-and-accessing-dms",level:2},{value:"Monitoring through Dashboards",id:"monitoring-through-dashboards",level:2}];function h(e){const a={a:"a",admonition:"admonition",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.h1,{id:"dappnode-monitoring-service-dms",children:"Dappnode Monitoring Service (DMS)"}),"\n",(0,n.jsx)(a.p,{children:'As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or "health" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.'}),"\n",(0,n.jsx)(a.h2,{id:"how-it-all-works",children:"How It All Works"}),"\n",(0,n.jsx)(a.p,{children:"DMS acts as a strong monitoring solution, simplifying the complex task of monitoring your packages and system by automatically collecting all available data and visualizing it for you. But how does it achieve this? DMS primarily comprises two key components: Prometheus and Grafana. Let's break it down"}),"\n",(0,n.jsxs)(a.ol,{children:["\n",(0,n.jsxs)(a.li,{children:["\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.strong,{children:"Prometheus Integration:"})," DMS seamlessly incorporates ",(0,n.jsx)(a.a,{href:"https://prometheus.io/",children:"Prometheus"}),", a comprehensive monitoring toolkit. Prometheus is responsible of gathering all data coming from other Dappnode packages. This information is the foundation for understanding your package's performance."]}),"\n"]}),"\n",(0,n.jsxs)(a.li,{children:["\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.strong,{children:"Grafana Dashboards:"})," To transform raw data coming from Prometheus into meaningful insights, DMS brings in ",(0,n.jsx)(a.a,{href:"https://grafana.com/",children:"Grafana"}),", renowned for its exceptional data visualization capabilities. Through customizable dashboards, you gain instant access to both real-time and historical perspectives on how your packages are functioning."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(a.admonition,{type:"info",children:(0,n.jsxs)(a.p,{children:["\ud83d\udca1 While DMS can monitor data from your installed packages on its own, we highly recommend installing the ",(0,n.jsx)(a.strong,{children:"Dappnode Exporter"})," package as well. This package expands DMS's capabilities to monitor critical Dappnode system metrics, such as network traffic, CPU, RAM, and disk usage. Moreover, it unlocks new Grafana dashboards that visualize this data for your convenience. You can easily find the Dappnode Exporter in your DAppStore."]})}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.strong,{children:"Your Privacy Matters:"})}),"\n",(0,n.jsx)(a.p,{children:"At Dappnode, we respect your privacy. Rest assured that all the metrics collected by DMS are stored locally, ensuring your information remains private and secure."}),"\n",(0,n.jsx)(a.h2,{id:"installing-and-accessing-dms",children:"Installing and accessing DMS"}),"\n",(0,n.jsxs)(a.p,{children:["Locate DMS in your DAppStore, listed among the Featured packages. The installation process is straightforward, much like any other Dappnode package. After installation, you can access DMS Grafana and explore all its dashboards by visiting ",(0,n.jsx)(a.a,{href:"http://dms.dappnode",children:"http://dms.dappnode"}),"."]}),"\n",(0,n.jsx)(a.h2,{id:"monitoring-through-dashboards",children:"Monitoring through Dashboards"}),"\n",(0,n.jsxs)(a.p,{children:["As explained in the ",(0,n.jsx)(a.a,{href:"https://grafana.com/docs/grafana/latest/dashboards/",children:"official Grafana documentation"}),", Grafana simplifies data visualization through organized views known as dashboards. In the context of Dappnode, many packages, especially our staker packages, come equipped with pre-built Grafana dashboards that seamlessly integrate into DMS upon installation. These dashboards are designed to provide specific insights into the performance of the corresponding packages. To explore the range of available Grafana dashboards within DMS, follow these simple steps:"]}),"\n",(0,n.jsxs)(a.ol,{children:["\n",(0,n.jsxs)(a.li,{children:[(0,n.jsx)(a.strong,{children:"Accessing Dashboards:"}),' Find the "Dashboards" icon on the left-hand side of the DMS interface and hover your mouse over it. Click on "Browse" to proceed.']}),"\n"]}),"\n",(0,n.jsx)("div",{style:{textAlign:"center"},children:(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Browse Dashboards",src:s(3248).Z+"",width:"500",height:"500"})})}),"\n",(0,n.jsxs)(a.ol,{start:"2",children:["\n",(0,n.jsxs)(a.li,{children:["\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.strong,{children:"Dashboard Folders:"})," In the dashboard browsing view, you'll see different dashboard folders. Each folder contains one or more dashboards related to specific aspects of your Dappnode environment. For instance, let's click on the \"Docker\" dashboard provided by the ",(0,n.jsx)(a.strong,{children:"Dappnode Exporter"})," package."]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Dashboard Folders",src:s(5519).Z+"",width:"1618",height:"725"})}),"\n"]}),"\n",(0,n.jsxs)(a.li,{children:["\n",(0,n.jsxs)(a.p,{children:[(0,n.jsx)(a.strong,{children:"Exploring a Dashboard:"})," That's it! You are now within the chosen dashboard, such as the \"Docker\" dashboard. Here, you'll find valuable information about all your installed packages, including relevant metrics and performance indicators."]}),"\n",(0,n.jsx)(a.p,{children:(0,n.jsx)(a.img,{alt:"Docker Dashboard",src:s(8043).Z+"",width:"2549",height:"1303"})}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(a.p,{children:["As you navigate through these Grafana dashboards, it's worth mentioning that the ",(0,n.jsx)(a.a,{href:"https://grafana.com/docs/grafana/latest/",children:"official Grafana documentation"})," provides a wealth of information about dashboards, visualization techniques, and best practices. Exploring this documentation can greatly enhance your ability to interpret and utilize the data presented in DMS dashboards. Whether you're new to Grafana or seeking advanced tips, the official documentation is a valuable resource for maximizing your monitoring experience."]}),"\n",(0,n.jsx)(a.admonition,{type:"info",children:(0,n.jsxs)(a.p,{children:["\ud83d\udca1 If you're looking for specific dashboards beyond what comes pre-installed, ",(0,n.jsx)(a.a,{href:"https://grafana.com/grafana/dashboards/",children:"Grafana's dashboard repository"})," makes it easy to search and import dashboards created by the community."]})}),"\n",(0,n.jsx)(a.p,{children:"Feel free to check out the different dashboard folders and adjust how things look based on what you like. Grafana offers a bunch of cool features, so have fun exploring and making the dashboards work just right for you!"})]})}function l(e={}){const{wrapper:a}={...(0,o.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},3248:(e,a,s)=>{s.d(a,{Z:()=>n});const n=s.p+"assets/images/dms-browse-dashboards-37ab051b363a523366fc70f93df38cae.png"},5519:(e,a,s)=>{s.d(a,{Z:()=>n});const n=s.p+"assets/images/dms-dashboards-page-3e8a37465fa70b4a9da2a0fb31b0258b.png"},8043:(e,a,s)=>{s.d(a,{Z:()=>n});const n=s.p+"assets/images/dms-docker-dashboard-37854c47052a09ff034780a00a42588b.png"},1151:(e,a,s)=>{s.d(a,{Z:()=>r,a:()=>t});var n=s(7294);const o={},i=n.createContext(o);function t(e){const a=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:t(e.components),n.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1ee5c5d2.e1d4fcd8.js b/assets/js/1ee5c5d2.e1d4fcd8.js deleted file mode 100644 index 939251713..000000000 --- a/assets/js/1ee5c5d2.e1d4fcd8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3389],{4137:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>u});var r=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function s(e){for(var t=1;t=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var l=r.createContext({}),c=function(e){var t=r.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):s(s({},t),e)),o},p=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},h="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var o=e.components,a=e.mdxType,n=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),h=c(o),m=a,u=h["".concat(l,".").concat(m)]||h[m]||d[m]||n;return o?r.createElement(u,s(s({ref:t},p),{},{components:o})):r.createElement(u,s({ref:t},p))}));function u(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=o.length,s=new Array(n);s[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[h]="string"==typeof e?e:a,s[1]=i;for(var c=2;c{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var r=o(7462),a=(o(7294),o(4137));const n={},s="Smooth's architecture",i={unversionedId:"smooth/deep-dive-into-smooth/oracle-sm",id:"smooth/deep-dive-into-smooth/oracle-sm",title:"Smooth's architecture",description:"Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible of computing the rewards of each validator.",source:"@site/docs/smooth/deep-dive-into-smooth/oracle-sm.md",sourceDirName:"smooth/deep-dive-into-smooth",slug:"/smooth/deep-dive-into-smooth/oracle-sm",permalink:"/docs/smooth/deep-dive-into-smooth/oracle-sm",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/deep-dive-into-smooth/oracle-sm.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Smooth Validator States",permalink:"/docs/smooth/deep-dive-into-smooth/states"},next:{title:"Subscribing to Smooth",permalink:"/docs/smooth/subscribe-to-smooth/overview"}},l={},c=[{value:"The Smart Contract",id:"the-smart-contract",level:2},{value:"The Oracle",id:"the-oracle",level:2}],p={toc:c},h="wrapper";function d(e){let{components:t,...o}=e;return(0,a.kt)(h,(0,r.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"smooths-architecture"},"Smooth's architecture"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," is composed of two main components: the ",(0,a.kt)("strong",{parentName:"p"},"Oracle")," and the ",(0,a.kt)("strong",{parentName:"p"},"Smart Contract"),". These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible of computing the rewards of each validator."),(0,a.kt)("h2",{id:"the-smart-contract"},"The Smart Contract"),(0,a.kt)("p",null,'Smooth\'s Smart Contract is deployed on the Ethereum mainnet and is responsible for "receiving" all the events related to the pool onchain. This includes subscriptions, unsubscriptions, block proposals, and more. Since it is the Smart Contract the one who holds all the ETH collected by the pool, it is from the Smart Contract where all ',(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," users will claim their rewards."),(0,a.kt)("p",null,"Computing and storing all rewards calculations onchain would be almost impossible and very expensive, so merkle trees are used to summarize the state of all validators. This allows the Smart Contract to store a single hash onchain that represents the state of all validators subscribed to the pool. This hash is called the ",(0,a.kt)("strong",{parentName:"p"},"Merkle Root")," and ",(0,a.kt)("strong",{parentName:"p"},"is computed by the Oracle"),"."),(0,a.kt)("h2",{id:"the-oracle"},"The Oracle"),(0,a.kt)("p",null,"As mentioned before, ",(0,a.kt)("strong",{parentName:"p"},"the Oracle is responsible for computing the rewards of each validator"),". It does so by computing a merkle tree that summarizes the state of all validators subscribed to the pool. This merkle tree, computed offchain, is summarized into a ",(0,a.kt)("strong",{parentName:"p"},"Merkle Root"),"."),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Oracle works only with finalized data. This means that Oracle will effectively work with data from a few epochs ago. This is done to ensure that the data Oracle processes is non-reversible and no reorgs are possible.")),(0,a.kt)("p",null,"Once every 28800 slots (4 days), the Oracle sends a transaction to the Smart Contract with the updated Merkle Root. "),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"It is not untill the Oracle sends the transaction to the Smart Contract with the updated Merkle Root that the rewards are available to be claimed by the validators. This means that if a validator correctly proposes a block, it will not be able to claim its rewards until the Oracle sends the transaction to the Smart Contract with the updated Merkle Root.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1ee5c5d2.fb280457.js b/assets/js/1ee5c5d2.fb280457.js new file mode 100644 index 000000000..255a3a86d --- /dev/null +++ b/assets/js/1ee5c5d2.fb280457.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3389],{6030:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>h,contentTitle:()=>n,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var s=o(5893),r=o(1151);const a={},n="Smooth's architecture",i={id:"smooth/deep-dive-into-smooth/oracle-sm",title:"Smooth's architecture",description:"Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible of computing the rewards of each validator.",source:"@site/docs/smooth/deep-dive-into-smooth/oracle-sm.md",sourceDirName:"smooth/deep-dive-into-smooth",slug:"/smooth/deep-dive-into-smooth/oracle-sm",permalink:"/docs/smooth/deep-dive-into-smooth/oracle-sm",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/deep-dive-into-smooth/oracle-sm.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Smooth Validator States",permalink:"/docs/smooth/deep-dive-into-smooth/states"},next:{title:"Subscribing to Smooth",permalink:"/docs/smooth/subscribe-to-smooth/overview"}},h={},c=[{value:"The Smart Contract",id:"the-smart-contract",level:2},{value:"The Oracle",id:"the-oracle",level:2}];function l(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"smooths-architecture",children:"Smooth's architecture"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," is composed of two main components: the ",(0,s.jsx)(t.strong,{children:"Oracle"})," and the ",(0,s.jsx)(t.strong,{children:"Smart Contract"}),". These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible of computing the rewards of each validator."]}),"\n",(0,s.jsx)(t.h2,{id:"the-smart-contract",children:"The Smart Contract"}),"\n",(0,s.jsxs)(t.p,{children:['Smooth\'s Smart Contract is deployed on the Ethereum mainnet and is responsible for "receiving" all the events related to the pool onchain. This includes subscriptions, unsubscriptions, block proposals, and more. Since it is the Smart Contract the one who holds all the ETH collected by the pool, it is from the Smart Contract where all ',(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," users will claim their rewards."]}),"\n",(0,s.jsxs)(t.p,{children:["Computing and storing all rewards calculations onchain would be almost impossible and very expensive, so merkle trees are used to summarize the state of all validators. This allows the Smart Contract to store a single hash onchain that represents the state of all validators subscribed to the pool. This hash is called the ",(0,s.jsx)(t.strong,{children:"Merkle Root"})," and ",(0,s.jsx)(t.strong,{children:"is computed by the Oracle"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"the-oracle",children:"The Oracle"}),"\n",(0,s.jsxs)(t.p,{children:["As mentioned before, ",(0,s.jsx)(t.strong,{children:"the Oracle is responsible for computing the rewards of each validator"}),". It does so by computing a merkle tree that summarizes the state of all validators subscribed to the pool. This merkle tree, computed offchain, is summarized into a ",(0,s.jsx)(t.strong,{children:"Merkle Root"}),"."]}),"\n",(0,s.jsx)(t.admonition,{type:"caution",children:(0,s.jsx)(t.p,{children:"Oracle works only with finalized data. This means that Oracle will effectively work with data from a few epochs ago. This is done to ensure that the data Oracle processes is non-reversible and no reorgs are possible."})}),"\n",(0,s.jsx)(t.p,{children:"Once every 28800 slots (4 days), the Oracle sends a transaction to the Smart Contract with the updated Merkle Root."}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsx)(t.p,{children:"It is not untill the Oracle sends the transaction to the Smart Contract with the updated Merkle Root that the rewards are available to be claimed by the validators. This means that if a validator correctly proposes a block, it will not be able to claim its rewards until the Oracle sends the transaction to the Smart Contract with the updated Merkle Root."})})]})}function d(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},1151:(e,t,o)=>{o.d(t,{Z:()=>i,a:()=>n});var s=o(7294);const r={},a=s.createContext(r);function n(e){const t=s.useContext(a);return s.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:n(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/20034248.2920c117.js b/assets/js/20034248.2920c117.js deleted file mode 100644 index 00a6e7ca6..000000000 --- a/assets/js/20034248.2920c117.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3743],{4137:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>h});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),p=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},l=function(e){var t=p(e.components);return r.createElement(c.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),d=p(n),m=o,h=d["".concat(c,".").concat(m)]||d[m]||u[m]||i;return n?r.createElement(h,a(a({ref:t},l),{},{components:n})):r.createElement(h,a({ref:t},l))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[d]="string"==typeof e?e:o,a[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var r=n(7462),o=(n(7294),n(4137));const i={},a="Ethical Metrics",s={unversionedId:"user/ethical-metrics/overview",id:"user/ethical-metrics/overview",title:"Ethical Metrics",description:"Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.",source:"@site/docs/user/ethical-metrics/overview.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/overview",permalink:"/docs/user/ethical-metrics/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Dappnode commands",permalink:"/docs/user/install/dappnode-commands"},next:{title:"Setting up Ethical Metrics",permalink:"/docs/user/ethical-metrics/setup"}},c={},p=[{value:"Introduction",id:"introduction",level:2}],l={toc:p},d="wrapper";function u(e){let{components:t,...i}=e;return(0,o.kt)(d,(0,r.Z)({},l,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ethical-metrics"},"Ethical Metrics"),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Ethical Metrics requires the ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/packages/dms"},"Dappnode Monitoring Service (DMS)")," and Dappnode Exporter as dependencies.")),(0,o.kt)("h2",{id:"introduction"},"Introduction"),(0,o.kt)("p",null,"When it comes to monitoring your Dappnode, the ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/packages/dms"},"Dappnode Monitoring Service (DMS)")," offers valuable insights into the health and performance of your packages and system. Yet, there's a key thing that DMS can't do: ",(0,o.kt)("strong",{parentName:"p"},"DMS can't notify you when your Dappnode goes offline"),". This limitation arises because DMS operates from within your Dappnode, so it can't help when it experiences downtime."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Ethical Metrics solves this DMS limitation.")," It is a service that allows for external monitoring of your Dappnode ",(0,o.kt)("strong",{parentName:"p"},"without leaking any identifying information"),". This way, you will be able to recieve notifications when your Dappnode goes offline."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Ethical Metrics comes from the request of the users to have useful alerts and the strict compromise of Dappnode of preserving privacy for its users.")),(0,o.kt)("p",null,"So, how did we manage to overcome the difficulty of monitoring your Dappnode without compromising your privacy? In order to keep your privacy intact, ",(0,o.kt)("strong",{parentName:"p"},"all the communication between your Dappnode and our monitoring servers is done through the TOR network"),". The TOR network enables anonymous communication by directing Internet traffic through a free, worldwide, volunteered overlay network that consists of more than seven thousand relays."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"In a nutshell, your Dappnode signals that it's alive via a private channel so we don't know where it comes from. If it stops sending this signal, we can assume that it's offline and send an alert to the Email or Telegram associated with that particular Dappnode. This way, your Dappnode's IP address remains hidden and nobody (not even us) can identify which metrics belong to who.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"To put it simply:")," Ethical Metrics enables us to monitor a group of Dappnode metrics for you. In the event that your Dappnode goes offline, Ethical Metrics can send notifications to an email address or Telegram handle that you provide during configuration. All this communication occurs via the TOR network, which guarantees the protection of your Dappnode's IP address and the confidentiality of your metrics."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-5",src:n(142).Z,width:"1872",height:"1001"})),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Ethical metrics is one of our newest packages and it is still under constant improvement. Please come back to this page to check for updates.")))}u.isMDXComponent=!0},142:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/ethical-metrics-5c8cad2d72b6475a0294c8f482a49b3a.png"}}]); \ No newline at end of file diff --git a/assets/js/20034248.a521b89e.js b/assets/js/20034248.a521b89e.js new file mode 100644 index 000000000..cc4290c41 --- /dev/null +++ b/assets/js/20034248.a521b89e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3743],{2627:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>a,toc:()=>d});var o=n(5893),i=n(1151);const s={},r="Ethical Metrics",a={id:"user/ethical-metrics/overview",title:"Ethical Metrics",description:"Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.",source:"@site/docs/user/ethical-metrics/overview.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/overview",permalink:"/docs/user/ethical-metrics/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Dappnode commands",permalink:"/docs/user/install/dappnode-commands"},next:{title:"Setting up Ethical Metrics",permalink:"/docs/user/ethical-metrics/setup"}},c={},d=[{value:"Introduction",id:"introduction",level:2}];function h(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",img:"img",p:"p",strong:"strong",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"ethical-metrics",children:"Ethical Metrics"}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsxs)(t.p,{children:["Ethical Metrics requires the ",(0,o.jsx)(t.a,{href:"/docs/user/packages/dms",children:"Dappnode Monitoring Service (DMS)"})," and Dappnode Exporter as dependencies."]})}),"\n",(0,o.jsx)(t.h2,{id:"introduction",children:"Introduction"}),"\n",(0,o.jsxs)(t.p,{children:["When it comes to monitoring your Dappnode, the ",(0,o.jsx)(t.a,{href:"/docs/user/packages/dms",children:"Dappnode Monitoring Service (DMS)"})," offers valuable insights into the health and performance of your packages and system. Yet, there's a key thing that DMS can't do: ",(0,o.jsx)(t.strong,{children:"DMS can't notify you when your Dappnode goes offline"}),". This limitation arises because DMS operates from within your Dappnode, so it can't help when it experiences downtime."]}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"Ethical Metrics solves this DMS limitation."})," It is a service that allows for external monitoring of your Dappnode ",(0,o.jsx)(t.strong,{children:"without leaking any identifying information"}),". This way, you will be able to recieve notifications when your Dappnode goes offline."]}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"Ethical Metrics comes from the request of the users to have useful alerts and the strict compromise of Dappnode of preserving privacy for its users."})}),"\n",(0,o.jsxs)(t.p,{children:["So, how did we manage to overcome the difficulty of monitoring your Dappnode without compromising your privacy? In order to keep your privacy intact, ",(0,o.jsx)(t.strong,{children:"all the communication between your Dappnode and our monitoring servers is done through the TOR network"}),". The TOR network enables anonymous communication by directing Internet traffic through a free, worldwide, volunteered overlay network that consists of more than seven thousand relays."]}),"\n",(0,o.jsx)(t.admonition,{type:"tip",children:(0,o.jsx)(t.p,{children:"In a nutshell, your Dappnode signals that it's alive via a private channel so we don't know where it comes from. If it stops sending this signal, we can assume that it's offline and send an alert to the Email or Telegram associated with that particular Dappnode. This way, your Dappnode's IP address remains hidden and nobody (not even us) can identify which metrics belong to who."})}),"\n",(0,o.jsxs)(t.p,{children:[(0,o.jsx)(t.strong,{children:"To put it simply:"})," Ethical Metrics enables us to monitor a group of Dappnode metrics for you. In the event that your Dappnode goes offline, Ethical Metrics can send notifications to an email address or Telegram handle that you provide during configuration. All this communication occurs via the TOR network, which guarantees the protection of your Dappnode's IP address and the confidentiality of your metrics."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"setup-5",src:n(142).Z+"",width:"1872",height:"1001"})}),"\n",(0,o.jsx)(t.admonition,{type:"info",children:(0,o.jsx)(t.p,{children:"Ethical metrics is one of our newest packages and it is still under constant improvement. Please come back to this page to check for updates."})})]})}function p(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},142:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/ethical-metrics-5c8cad2d72b6475a0294c8f482a49b3a.png"},1151:(e,t,n)=>{n.d(t,{Z:()=>a,a:()=>r});var o=n(7294);const i={},s=o.createContext(i);function r(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2057bc77.17692e27.js b/assets/js/2057bc77.17692e27.js deleted file mode 100644 index 4ba7abf9c..000000000 --- a/assets/js/2057bc77.17692e27.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5091],{4137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=a.createContext({}),c=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),d=n,m=u["".concat(l,".").concat(d)]||u[d]||h[d]||o;return r?a.createElement(m,i(i({ref:t},p),{},{components:r})):a.createElement(m,i({ref:t},p))}));function m(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,i=new Array(o);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=r(7462),n=(r(7294),r(4137));const o={},i="Maintenance",s={unversionedId:"user/hardware/maintenance",id:"user/hardware/maintenance",title:"Maintenance",description:"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they're always welcome in our Discord server.",source:"@site/docs/user/hardware/maintenance.md",sourceDirName:"user/hardware",slug:"/user/hardware/maintenance",permalink:"/docs/user/hardware/maintenance",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/hardware/maintenance.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Hardware",permalink:"/docs/user/hardware/overview"},next:{title:"Temperature",permalink:"/docs/user/hardware/temperature"}},l={},c=[{value:"1. Air Flow",id:"1-air-flow",level:3},{value:"2. Dust cleaning",id:"2-dust-cleaning",level:3},{value:"3. Thermal Paste Change",id:"3-thermal-paste-change",level:2}],p={toc:c},u="wrapper";function h(e){let{components:t,...r}=e;return(0,n.kt)(u,(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"maintenance"},"Maintenance"),(0,n.kt)("p",null,"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they're always welcome in our ",(0,n.kt)("a",{parentName:"p",href:"https://discord.gg/dappnode"},"Discord server"),"."),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"\ud83d\udca1 Keep in mind these have different levels of difficulty, and if you're hesitant about trying them you should find a professional to give you a hand. Hardware is delicate and if mishandled it can cause permanent damage to your Dappnode, so proceed with caution.")),(0,n.kt)("h3",{id:"1-air-flow"},"1. Air Flow"),(0,n.kt)("p",null,"One of the key elements to keep your Dappnode's performance optimal is where you place it. There's this myth about air conditioning or cool air being able to lower your devices' temperatures, however constant ",(0,n.kt)("strong",{parentName:"p"},"air flow")," is much more important than the temperature of the air itself. We recommend picking a place for your Dappnode that will favor this, and where the heat it produces won't stay in the same room and raise the atmosphere temperature. An open room with windows is great for this, so you should avoid closets or small storage rooms. If your Dappnode is still struggling to keep its temperature low, try removing the upper lid. It won't look as pretty, but it'll get the job done!"),(0,n.kt)("h3",{id:"2-dust-cleaning"},"2. Dust cleaning"),(0,n.kt)("p",null,"Dust is the enemy of electronics. It can cause overheating and short circuits, so it's important to keep your Dappnode clean. The best way to do this is by using a can of compressed air (also called air dusters), which you can find in any hardware store."),(0,n.kt)("p",null,"These cans are very helpful to get your Dappnode's insides clean. You can do this by carefully oppening the bottom metal lid. Loosen its four screws and be specially careful when lifting it, as there's a SATA ribbon cable attached to the NUC's board and the metal lid that can be damaged if handled roughly."),(0,n.kt)("p",null,"For diving into the actual cleaning of your Dappnode, try to be in an outside location when performing this dust cleaning process. Keep your Dappnode safe from humidity or extreme direct temperatures. Carefuly place the can of duster in a vertical position for starting the cleaning process. Always point the airstream somewhere other than your device when starting to use it, as these release liquid for a brief period of time sometimes. After you've made sure the duster is working as expected, start blowing at the smaller spaces in the board and gradually moving to the more general area of your hardware without getting the tip of the duster to close to the circuits. Make sure the fans don't have big chunks of dust that prevent them from working properly."),(0,n.kt)("p",null,"When done, put the bottom metal lid back on and screw it back without leaving it too tight."),(0,n.kt)("h2",{id:"3-thermal-paste-change"},"3. Thermal Paste Change"),(0,n.kt)("p",null,"Your CPU has a heatsink right above it that helps dissipate heat. To facilitate this transfer of heat effectively, thermal paste is applied between the CPU's top plate and the heatsink. Over time, the thermal paste can degrade or dry out, leading to reduced thermal conductivity and potentially higher operating temperatures for the CPU."),(0,n.kt)("p",null,"To replace the thermal paste, start by powering down your dappnode, removing the heatsink, and cleaning both the CPU surface and the heatsink thoroughly with rubbing alcohol. Then, apply a small amount of fresh thermal paste onto the center of the CPU (Be careful not to use too much, as excess paste can lead to inefficient heat transfer), reattach the heatsink carefully, and ensure all connections are secure before powering it back on. Monitoring temperatures post-replacement ensures optimal performance and cooling efficiency. You can learn how to monitor it in ",(0,n.kt)("a",{parentName:"p",href:"/docs/user/hardware/temperature"},(0,n.kt)("strong",{parentName:"a"},"Temperature"))," section."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2057bc77.a5570a8f.js b/assets/js/2057bc77.a5570a8f.js new file mode 100644 index 000000000..0c154e8cf --- /dev/null +++ b/assets/js/2057bc77.a5570a8f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5091],{4386:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>h,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var r=a(5893),n=a(1151);const o={},i="Maintenance",s={id:"user/hardware/maintenance",title:"Maintenance",description:"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they're always welcome in our Discord server.",source:"@site/docs/user/hardware/maintenance.md",sourceDirName:"user/hardware",slug:"/user/hardware/maintenance",permalink:"/docs/user/hardware/maintenance",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/hardware/maintenance.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Hardware",permalink:"/docs/user/hardware/overview"},next:{title:"Temperature",permalink:"/docs/user/hardware/temperature"}},h={},d=[{value:"1. Air Flow",id:"1-air-flow",level:3},{value:"2. Dust cleaning",id:"2-dust-cleaning",level:3},{value:"3. Thermal Paste Change",id:"3-thermal-paste-change",level:2}];function c(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",p:"p",strong:"strong",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"maintenance",children:"Maintenance"}),"\n",(0,r.jsxs)(t.p,{children:["This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they're always welcome in our ",(0,r.jsx)(t.a,{href:"https://discord.gg/dappnode",children:"Discord server"}),"."]}),"\n",(0,r.jsx)(t.admonition,{type:"info",children:(0,r.jsx)(t.p,{children:"\ud83d\udca1 Keep in mind these have different levels of difficulty, and if you're hesitant about trying them you should find a professional to give you a hand. Hardware is delicate and if mishandled it can cause permanent damage to your Dappnode, so proceed with caution."})}),"\n",(0,r.jsx)(t.h3,{id:"1-air-flow",children:"1. Air Flow"}),"\n",(0,r.jsxs)(t.p,{children:["One of the key elements to keep your Dappnode's performance optimal is where you place it. There's this myth about air conditioning or cool air being able to lower your devices' temperatures, however constant ",(0,r.jsx)(t.strong,{children:"air flow"})," is much more important than the temperature of the air itself. We recommend picking a place for your Dappnode that will favor this, and where the heat it produces won't stay in the same room and raise the atmosphere temperature. An open room with windows is great for this, so you should avoid closets or small storage rooms. If your Dappnode is still struggling to keep its temperature low, try removing the upper lid. It won't look as pretty, but it'll get the job done!"]}),"\n",(0,r.jsx)(t.h3,{id:"2-dust-cleaning",children:"2. Dust cleaning"}),"\n",(0,r.jsx)(t.p,{children:"Dust is the enemy of electronics. It can cause overheating and short circuits, so it's important to keep your Dappnode clean. The best way to do this is by using a can of compressed air (also called air dusters), which you can find in any hardware store."}),"\n",(0,r.jsx)(t.p,{children:"These cans are very helpful to get your Dappnode's insides clean. You can do this by carefully oppening the bottom metal lid. Loosen its four screws and be specially careful when lifting it, as there's a SATA ribbon cable attached to the NUC's board and the metal lid that can be damaged if handled roughly."}),"\n",(0,r.jsx)(t.p,{children:"For diving into the actual cleaning of your Dappnode, try to be in an outside location when performing this dust cleaning process. Keep your Dappnode safe from humidity or extreme direct temperatures. Carefuly place the can of duster in a vertical position for starting the cleaning process. Always point the airstream somewhere other than your device when starting to use it, as these release liquid for a brief period of time sometimes. After you've made sure the duster is working as expected, start blowing at the smaller spaces in the board and gradually moving to the more general area of your hardware without getting the tip of the duster to close to the circuits. Make sure the fans don't have big chunks of dust that prevent them from working properly."}),"\n",(0,r.jsx)(t.p,{children:"When done, put the bottom metal lid back on and screw it back without leaving it too tight."}),"\n",(0,r.jsx)(t.h2,{id:"3-thermal-paste-change",children:"3. Thermal Paste Change"}),"\n",(0,r.jsx)(t.p,{children:"Your CPU has a heatsink right above it that helps dissipate heat. To facilitate this transfer of heat effectively, thermal paste is applied between the CPU's top plate and the heatsink. Over time, the thermal paste can degrade or dry out, leading to reduced thermal conductivity and potentially higher operating temperatures for the CPU."}),"\n",(0,r.jsxs)(t.p,{children:["To replace the thermal paste, start by powering down your dappnode, removing the heatsink, and cleaning both the CPU surface and the heatsink thoroughly with rubbing alcohol. Then, apply a small amount of fresh thermal paste onto the center of the CPU (Be careful not to use too much, as excess paste can lead to inefficient heat transfer), reattach the heatsink carefully, and ensure all connections are secure before powering it back on. Monitoring temperatures post-replacement ensures optimal performance and cooling efficiency. You can learn how to monitor it in ",(0,r.jsx)(t.a,{href:"/docs/user/hardware/temperature",children:(0,r.jsx)(t.strong,{children:"Temperature"})})," section."]})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},1151:(e,t,a)=>{a.d(t,{Z:()=>s,a:()=>i});var r=a(7294);const n={},o=r.createContext(n);function i(e){const t=r.useContext(o);return r.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(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/207.234b8fdf.js b/assets/js/207.234b8fdf.js deleted file mode 100644 index a49649aee..000000000 --- a/assets/js/207.234b8fdf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[207],{2506:(e,t,a)=>{a.d(t,{Z:()=>h});var l=a(7294),r=a(6010),n=a(1009),o=a(3488),s=a(3699),i=a(7325);const m={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};function c(e){let{sidebar:t}=e;return l.createElement("aside",{className:"col col--3"},l.createElement("nav",{className:(0,r.Z)(m.sidebar,"thin-scrollbar"),"aria-label":(0,i.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"})},l.createElement("div",{className:(0,r.Z)(m.sidebarItemTitle,"margin-bottom--md")},t.title),l.createElement("ul",{className:(0,r.Z)(m.sidebarItemList,"clean-list")},t.items.map((e=>l.createElement("li",{key:e.permalink,className:m.sidebarItem},l.createElement(s.Z,{isNavLink:!0,to:e.permalink,className:m.sidebarItemLink,activeClassName:m.sidebarItemLinkActive},e.title)))))))}var u=a(3086);function d(e){let{sidebar:t}=e;return l.createElement("ul",{className:"menu__list"},t.items.map((e=>l.createElement("li",{key:e.permalink,className:"menu__list-item"},l.createElement(s.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active"},e.title)))))}function g(e){return l.createElement(u.Zo,{component:d,props:e})}function p(e){let{sidebar:t}=e;const a=(0,o.i)();return t?.items.length?"mobile"===a?l.createElement(g,{sidebar:t}):l.createElement(c,{sidebar:t}):null}function h(e){const{sidebar:t,toc:a,children:o,...s}=e,i=t&&t.items.length>0;return l.createElement(n.Z,s,l.createElement("div",{className:"container margin-vert--lg"},l.createElement("div",{className:"row"},l.createElement(p,{sidebar:t}),l.createElement("main",{className:(0,r.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"http://schema.org/Blog"},o),a&&l.createElement("div",{className:"col col--2"},a))))}},1116:(e,t,a)=>{a.d(t,{Z:()=>A});var l=a(7294),r=a(6010),n=a(9107),o=a(9524);function s(e){let{children:t,className:a}=e;const{frontMatter:r,assets:s}=(0,n.C)(),{withBaseUrl:i}=(0,o.C)(),m=s.image??r.image;return l.createElement("article",{className:a,itemProp:"blogPost",itemScope:!0,itemType:"http://schema.org/BlogPosting"},m&&l.createElement("meta",{itemProp:"image",content:i(m,{absolute:!0})}),t)}var i=a(3699);const m={title:"title_f1Hy"};function c(e){let{className:t}=e;const{metadata:a,isBlogPostPage:o}=(0,n.C)(),{permalink:s,title:c}=a,u=o?"h1":"h2";return l.createElement(u,{className:(0,r.Z)(m.title,t),itemProp:"headline"},o?c:l.createElement(i.Z,{itemProp:"url",to:s},c))}var u=a(7325),d=a(3777);const g={container:"container_mt6G"};function p(e){let{readingTime:t}=e;const a=function(){const{selectMessage:e}=(0,d.c)();return t=>{const a=Math.ceil(t);return e(a,(0,u.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:a}))}}();return l.createElement(l.Fragment,null,a(t))}function h(e){let{date:t,formattedDate:a}=e;return l.createElement("time",{dateTime:t,itemProp:"datePublished"},a)}function E(){return l.createElement(l.Fragment,null," \xb7 ")}function b(e){let{className:t}=e;const{metadata:a}=(0,n.C)(),{date:o,formattedDate:s,readingTime:i}=a;return l.createElement("div",{className:(0,r.Z)(g.container,"margin-vert--md",t)},l.createElement(h,{date:o,formattedDate:s}),void 0!==i&&l.createElement(l.Fragment,null,l.createElement(E,null),l.createElement(p,{readingTime:i})))}function f(e){return e.href?l.createElement(i.Z,e):l.createElement(l.Fragment,null,e.children)}function v(e){let{author:t,className:a}=e;const{name:n,title:o,url:s,imageURL:i,email:m}=t,c=s||m&&`mailto:${m}`||void 0;return l.createElement("div",{className:(0,r.Z)("avatar margin-bottom--sm",a)},i&&l.createElement(f,{href:c,className:"avatar__photo-link"},l.createElement("img",{className:"avatar__photo",src:i,alt:n})),n&&l.createElement("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person"},l.createElement("div",{className:"avatar__name"},l.createElement(f,{href:c,itemProp:"url"},l.createElement("span",{itemProp:"name"},n))),o&&l.createElement("small",{className:"avatar__subtitle",itemProp:"description"},o)))}const P={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function N(e){let{className:t}=e;const{metadata:{authors:a},assets:o}=(0,n.C)();if(0===a.length)return null;const s=a.every((e=>{let{name:t}=e;return!t}));return l.createElement("div",{className:(0,r.Z)("margin-top--md margin-bottom--sm",s?P.imageOnlyAuthorRow:"row",t)},a.map(((e,t)=>l.createElement("div",{className:(0,r.Z)(!s&&"col col--6",s?P.imageOnlyAuthorCol:P.authorCol),key:t},l.createElement(v,{author:{...e,imageURL:o.authorsImageUrls[t]??e.imageURL}})))))}function _(){return l.createElement("header",null,l.createElement(c,null),l.createElement(b,null),l.createElement(N,null))}var Z=a(3905),k=a(8505);function I(e){let{children:t,className:a}=e;const{isBlogPostPage:o}=(0,n.C)();return l.createElement("div",{id:o?Z.blogPostContainerID:void 0,className:(0,r.Z)("markdown",a),itemProp:"articleBody"},l.createElement(k.Z,null,t))}var C=a(4850),w=a(4597),T=a(7462);function y(){return l.createElement("b",null,l.createElement(u.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts"},"Read More"))}function F(e){const{blogPostTitle:t,...a}=e;return l.createElement(i.Z,(0,T.Z)({"aria-label":(0,u.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t})},a),l.createElement(y,null))}const L={blogPostFooterDetailsFull:"blogPostFooterDetailsFull_mRVl"};function B(){const{metadata:e,isBlogPostPage:t}=(0,n.C)(),{tags:a,title:o,editUrl:s,hasTruncateMarker:i}=e,m=!t&&i,c=a.length>0;return c||m||s?l.createElement("footer",{className:(0,r.Z)("row docusaurus-mt-lg",t&&L.blogPostFooterDetailsFull)},c&&l.createElement("div",{className:(0,r.Z)("col",{"col--9":m})},l.createElement(w.Z,{tags:a})),t&&s&&l.createElement("div",{className:"col margin-top--sm"},l.createElement(C.Z,{editUrl:s})),m&&l.createElement("div",{className:(0,r.Z)("col text--right",{"col--3":c})},l.createElement(F,{blogPostTitle:o,to:e.permalink}))):null}function A(e){let{children:t,className:a}=e;const o=function(){const{isBlogPostPage:e}=(0,n.C)();return e?void 0:"margin-bottom--xl"}();return l.createElement(s,{className:(0,r.Z)(o,a)},l.createElement(_,null),l.createElement(I,null,t),l.createElement(B,null))}},9107:(e,t,a)=>{a.d(t,{C:()=>s,n:()=>o});var l=a(7294),r=a(3768);const n=l.createContext(null);function o(e){let{children:t,content:a,isBlogPostPage:r=!1}=e;const o=function(e){let{content:t,isBlogPostPage:a}=e;return(0,l.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:a})),[t,a])}({content:a,isBlogPostPage:r});return l.createElement(n.Provider,{value:o},t)}function s(){const e=(0,l.useContext)(n);if(null===e)throw new r.i6("BlogPostProvider");return e}},3777:(e,t,a)=>{a.d(t,{c:()=>m});var l=a(7294),r=a(9962);const n=["zero","one","two","few","many","other"];function o(e){return n.filter((t=>e.includes(t)))}const s={locale:"en",pluralForms:o(["one","other"]),select:e=>1===e?"one":"other"};function i(){const{i18n:{currentLocale:e}}=(0,r.Z)();return(0,l.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:o(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),s}}),[e])}function m(){const e=i();return{selectMessage:(t,a)=>function(e,t,a){const l=e.split("|");if(1===l.length)return l[0];l.length>a.pluralForms.length&&console.error(`For locale=${a.locale}, a maximum of ${a.pluralForms.length} plural forms are expected (${a.pluralForms.join(",")}), but the message contains ${l.length}: ${e}`);const r=a.select(t),n=a.pluralForms.indexOf(r);return l[Math.min(n,l.length-1)]}(a,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/22a3df87.0556e798.js b/assets/js/22a3df87.0556e798.js deleted file mode 100644 index 4bd368544..000000000 --- a/assets/js/22a3df87.0556e798.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2559],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),p=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(n),m=a,h=c["".concat(i,".").concat(m)]||c[m]||d[m]||o;return n?r.createElement(h,l(l({ref:t},u),{},{components:n})):r.createElement(h,l({ref:t},u))}));function h(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[c]="string"==typeof e?e:a,l[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var r=n(7462),a=(n(7294),n(4137));const o={},l="Script installation",s={unversionedId:"user/install/script",id:"user/install/script",title:"Script installation",description:"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.",source:"@site/docs/user/install/script.md",sourceDirName:"user/install",slug:"/user/install/script",permalink:"/docs/user/install/script",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/script.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"ISO Installation",permalink:"/docs/user/install/iso"},next:{title:"Install - ARM",permalink:"/docs/user/install/arm"}},i={},p=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Install Dappnode",id:"install-dappnode",level:2},{value:"Reboot",id:"reboot",level:2},{value:"Restore to the latest version",id:"restore-to-the-latest-version",level:2},{value:"Uninstall",id:"uninstall",level:2}],u={toc:p},c="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"script-installation"},"Script installation"),(0,a.kt)("p",null,"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system."),(0,a.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,a.kt)("p",null,"Before installing Dappnode, you need to install some prerequisites:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/install/"},"Docker")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://docs.docker.com/compose/install/"},"Docker-compose")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://packages.debian.org/sid/xz-utils"},"xz"))),(0,a.kt)("p",null,"To install all the above prerequisites, execute the command below in the terminal of the machine you want to install Dappnode. If you already have the dependencies installed or you want to install them on your own you can skip this step."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo wget -O - https://prerequisites.dappnode.io | sudo bash\n")),(0,a.kt)("h2",{id:"install-dappnode"},"Install Dappnode"),(0,a.kt)("p",null,"To install Dappnode, execute the next script:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo wget -O - https://installer.dappnode.io | sudo bash\n")),(0,a.kt)("h2",{id:"reboot"},"Reboot"),(0,a.kt)("p",null,"To finalize the installation once it has finished completing, reboot your machine (you might need to do this twice):"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"shutdown -r now\n")),(0,a.kt)("h2",{id:"restore-to-the-latest-version"},"Restore to the latest version"),(0,a.kt)("p",null,"If you are experiencing any problem or just want to make sure you are running the latest Dappnode versions, execute this command in the Dappnode terminal. This will update the core packages to the latest versions without erasing any data from your volumes."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo wget -O - https://installer.dappnode.io | sudo UPDATE=true bash\n")),(0,a.kt)("h2",{id:"uninstall"},"Uninstall"),(0,a.kt)("p",null,"This command will uninstall Dappnode components (but not docker et al.)."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"wget -qO - https://uninstaller.dappnode.io | sudo bash\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/22a3df87.08c71103.js b/assets/js/22a3df87.08c71103.js new file mode 100644 index 000000000..303f35922 --- /dev/null +++ b/assets/js/22a3df87.08c71103.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2559],{3585:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>p,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var s=t(5893),i=t(1151);const o={},a="Script installation",l={id:"user/install/script",title:"Script installation",description:"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.",source:"@site/docs/user/install/script.md",sourceDirName:"user/install",slug:"/user/install/script",permalink:"/docs/user/install/script",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/script.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"ISO Installation",permalink:"/docs/user/install/iso"},next:{title:"Install - ARM",permalink:"/docs/user/install/arm"}},r={},d=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Install Dappnode",id:"install-dappnode",level:2},{value:"Reboot",id:"reboot",level:2},{value:"Restore to the latest version",id:"restore-to-the-latest-version",level:2},{value:"Uninstall",id:"uninstall",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"script-installation",children:"Script installation"}),"\n",(0,s.jsx)(n.p,{children:"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system."}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsx)(n.p,{children:"Before installing Dappnode, you need to install some prerequisites:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://docs.docker.com/install/",children:"Docker"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://docs.docker.com/compose/install/",children:"Docker-compose"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://packages.debian.org/sid/xz-utils",children:"xz"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"To install all the above prerequisites, execute the command below in the terminal of the machine you want to install Dappnode. If you already have the dependencies installed or you want to install them on your own you can skip this step."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo wget -O - https://prerequisites.dappnode.io | sudo bash\n"})}),"\n",(0,s.jsx)(n.h2,{id:"install-dappnode",children:"Install Dappnode"}),"\n",(0,s.jsx)(n.p,{children:"To install Dappnode, execute the next script:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo wget -O - https://installer.dappnode.io | sudo bash\n"})}),"\n",(0,s.jsx)(n.h2,{id:"reboot",children:"Reboot"}),"\n",(0,s.jsx)(n.p,{children:"To finalize the installation once it has finished completing, reboot your machine (you might need to do this twice):"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"shutdown -r now\n"})}),"\n",(0,s.jsx)(n.h2,{id:"restore-to-the-latest-version",children:"Restore to the latest version"}),"\n",(0,s.jsx)(n.p,{children:"If you are experiencing any problem or just want to make sure you are running the latest Dappnode versions, execute this command in the Dappnode terminal. This will update the core packages to the latest versions without erasing any data from your volumes."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo wget -O - https://installer.dappnode.io | sudo UPDATE=true bash\n"})}),"\n",(0,s.jsx)(n.h2,{id:"uninstall",children:"Uninstall"}),"\n",(0,s.jsx)(n.p,{children:"This command will uninstall Dappnode components (but not docker et al.)."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"wget -qO - https://uninstaller.dappnode.io | sudo bash\n"})})]})}function p(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>a});var s=t(7294);const i={},o=s.createContext(i);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2410.19858f3e.js b/assets/js/2410.19858f3e.js deleted file mode 100644 index 79d88f785..000000000 --- a/assets/js/2410.19858f3e.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2410],{4137:(e,t,n)=>{"use strict";n.d(t,{Zo:()=>u,kt:()=>f});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function c(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=o.createContext({}),s=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},u=function(e){var t=s(e.components);return o.createElement(i.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},p=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=s(n),p=a,f=m["".concat(i,".").concat(p)]||m[p]||d[p]||r;return n?o.createElement(f,c(c({ref:t},u),{},{components:n})):o.createElement(f,c({ref:t},u))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,c=new Array(r);c[0]=p;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[m]="string"==typeof e?e:a,c[1]=l;for(var s=2;s{"use strict";n.d(t,{Z:()=>u});var o=n(7294),a=n(7325),r=n(3702),c=n(7462),l=n(6010);const i={iconEdit:"iconEdit_Z9Sw"};function s(e){let{className:t,...n}=e;return o.createElement("svg",(0,c.Z)({fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,l.Z)(i.iconEdit,t),"aria-hidden":"true"},n),o.createElement("g",null,o.createElement("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})))}function u(e){let{editUrl:t}=e;return o.createElement("a",{href:t,target:"_blank",rel:"noreferrer noopener",className:r.k.common.editThisPage},o.createElement(s,null),o.createElement(a.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page"))}},3899:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var o=n(7462),a=n(7294),r=n(6010),c=n(7325),l=n(107),i=n(3699);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};function u(e){let{as:t,id:n,...u}=e;const{navbar:{hideOnScroll:m}}=(0,l.L)();if("h1"===t||!n)return a.createElement(t,(0,o.Z)({},u,{id:void 0}));const d=(0,c.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return a.createElement(t,(0,o.Z)({},u,{className:(0,r.Z)("anchor",m?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,u.className),id:n}),u.children,a.createElement(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":d,title:d},"\u200b"))}},8505:(e,t,n)=>{"use strict";n.d(t,{Z:()=>he});var o=n(7294),a=n(4137),r=n(7462),c=n(1514);var l=n(1048),i=n(6010),s=n(9200),u=n(107);function m(){const{prism:e}=(0,u.L)(),{colorMode:t}=(0,s.I)(),n=e.theme,o=e.darkTheme||n;return"dark"===t?o:n}var d=n(3702),p=n(7594),f=n.n(p);const g=/title=(?["'])(?.*?)\1/,h=/\{(?<range>[\d,-]+)\}/,y={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function b(e,t){const n=e.map((e=>{const{start:n,end:o}=y[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${o})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function v(e,t){let n=e.replace(/\n$/,"");const{language:o,magicComments:a,metastring:r}=t;if(r&&h.test(r)){const e=r.match(h).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${r}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,o=f()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(o),code:n}}if(void 0===o)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return b(["js","jsBlock"],t);case"jsx":case"tsx":return b(["js","jsBlock","jsx"],t);case"html":return b(["js","jsBlock","html"],t);case"python":case"py":case"bash":return b(["bash"],t);case"markdown":case"md":return b(["html","jsx","bash"],t);default:return b(Object.keys(y),t)}}(o,a),l=n.split("\n"),i=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),s=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),u=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),m=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let p=0;p<l.length;){const e=l[p].match(c);if(!e){p+=1;continue}const t=e.slice(1).find((e=>void 0!==e));s[t]?i[s[t]].range+=`${p},`:u[t]?i[u[t]].start=p:m[t]&&(i[m[t]].range+=`${i[m[t]].start}-${p-1},`),l.splice(p,1)}n=l.join("\n");const d={};return Object.entries(i).forEach((e=>{let[t,{range:n}]=e;f()(n).forEach((e=>{d[e]??=[],d[e].push(t)}))})),{lineClassNames:d,code:n}}const E={codeBlockContainer:"codeBlockContainer_Ckt0"};function k(e){let{as:t,...n}=e;const a=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[o,a]=e;const r=t[o];r&&"string"==typeof a&&(n[r]=a)})),n}(m());return o.createElement(t,(0,r.Z)({},n,{style:a,className:(0,i.Z)(n.className,E.codeBlockContainer,d.k.common.codeBlock)}))}const N={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function C(e){let{children:t,className:n}=e;return o.createElement(k,{as:"pre",tabIndex:0,className:(0,i.Z)(N.codeBlockStandalone,"thin-scrollbar",n)},o.createElement("code",{className:N.codeBlockLines},t))}var w=n(3768);const B={attributes:!0,characterData:!0,childList:!0,subtree:!0};function Z(e,t){const[n,a]=(0,o.useState)(),r=(0,o.useCallback)((()=>{a(e.current?.closest("[role=tabpanel][hidden]"))}),[e,a]);(0,o.useEffect)((()=>{r()}),[r]),function(e,t,n){void 0===n&&(n=B);const a=(0,w.zX)(t),r=(0,w.Ql)(n);(0,o.useEffect)((()=>{const t=new MutationObserver(a);return e&&t.observe(e,r),()=>t.disconnect()}),[e,a,r])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),r())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}const T={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]};var L={Prism:n(7410).Z,theme:T};function _(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function j(){return j=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},j.apply(this,arguments)}var x=/\r\n|\r|\n/,O=function(e){0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},S=function(e,t){var n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)};function P(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&-1===t.indexOf(o)&&(n[o]=e[o]);return n}var z=function(e){function t(){for(var t=this,n=[],o=arguments.length;o--;)n[o]=arguments[o];e.apply(this,n),_(this,"getThemeDict",(function(e){if(void 0!==t.themeDict&&e.theme===t.prevTheme&&e.language===t.prevLanguage)return t.themeDict;t.prevTheme=e.theme,t.prevLanguage=e.language;var n=e.theme?function(e,t){var n=e.plain,o=Object.create(null),a=e.styles.reduce((function(e,n){var o=n.languages,a=n.style;return o&&!o.includes(t)||n.types.forEach((function(t){var n=j({},e[t],a);e[t]=n})),e}),o);return a.root=n,a.plain=j({},n,{backgroundColor:null}),a}(e.theme,e.language):void 0;return t.themeDict=n})),_(this,"getLineProps",(function(e){var n=e.key,o=e.className,a=e.style,r=j({},P(e,["key","className","style","line"]),{className:"token-line",style:void 0,key:void 0}),c=t.getThemeDict(t.props);return void 0!==c&&(r.style=c.plain),void 0!==a&&(r.style=void 0!==r.style?j({},r.style,a):a),void 0!==n&&(r.key=n),o&&(r.className+=" "+o),r})),_(this,"getStyleForToken",(function(e){var n=e.types,o=e.empty,a=n.length,r=t.getThemeDict(t.props);if(void 0!==r){if(1===a&&"plain"===n[0])return o?{display:"inline-block"}:void 0;if(1===a&&!o)return r[n[0]];var c=o?{display:"inline-block"}:{},l=n.map((function(e){return r[e]}));return Object.assign.apply(Object,[c].concat(l))}})),_(this,"getTokenProps",(function(e){var n=e.key,o=e.className,a=e.style,r=e.token,c=j({},P(e,["key","className","style","token"]),{className:"token "+r.types.join(" "),children:r.content,style:t.getStyleForToken(r),key:void 0});return void 0!==a&&(c.style=void 0!==c.style?j({},c.style,a):a),void 0!==n&&(c.key=n),o&&(c.className+=" "+o),c})),_(this,"tokenize",(function(e,t,n,o){var a={code:t,grammar:n,language:o,tokens:[]};e.hooks.run("before-tokenize",a);var r=a.tokens=e.tokenize(a.code,a.grammar,a.language);return e.hooks.run("after-tokenize",a),r}))}return e&&(t.__proto__=e),t.prototype=Object.create(e&&e.prototype),t.prototype.constructor=t,t.prototype.render=function(){var e=this.props,t=e.Prism,n=e.language,o=e.code,a=e.children,r=this.getThemeDict(this.props),c=t.languages[n];return a({tokens:function(e){for(var t=[[]],n=[e],o=[0],a=[e.length],r=0,c=0,l=[],i=[l];c>-1;){for(;(r=o[c]++)<a[c];){var s=void 0,u=t[c],m=n[c][r];if("string"==typeof m?(u=c>0?u:["plain"],s=m):(u=S(u,m.type),m.alias&&(u=S(u,m.alias)),s=m.content),"string"==typeof s){var d=s.split(x),p=d.length;l.push({types:u,content:d[0]});for(var f=1;f<p;f++)O(l),i.push(l=[]),l.push({types:u,content:d[f]})}else c++,t.push(u),n.push(s),o.push(0),a.push(s.length)}c--,t.pop(),n.pop(),o.pop(),a.pop()}return O(l),i}(void 0!==c?this.tokenize(t,o,c,n):[o]),className:"prism-code language-"+n,style:void 0!==r?r.root:{},getLineProps:this.getLineProps,getTokenProps:this.getTokenProps})},t}(o.Component);const A=z,I={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function W(e){let{line:t,classNames:n,showLineNumbers:a,getLineProps:c,getTokenProps:l}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const s=c({line:t,className:(0,i.Z)(n,a&&I.codeLine)}),u=t.map(((e,t)=>o.createElement("span",(0,r.Z)({key:t},l({token:e,key:t})))));return o.createElement("span",s,a?o.createElement(o.Fragment,null,o.createElement("span",{className:I.codeLineNumber}),o.createElement("span",{className:I.codeLineContent},u)):u,o.createElement("br",null))}var M=n(7325);function H(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("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 D(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}))}const V={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function R(e){let{code:t,className:n}=e;const[a,r]=(0,o.useState)(!1),c=(0,o.useRef)(void 0),l=(0,o.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const o=document.createElement("textarea"),a=document.activeElement;o.value=e,o.setAttribute("readonly",""),o.style.contain="strict",o.style.position="absolute",o.style.left="-9999px",o.style.fontSize="12pt";const r=document.getSelection(),c=r.rangeCount>0&&r.getRangeAt(0);n.append(o),o.select(),o.selectionStart=0,o.selectionEnd=e.length;let l=!1;try{l=document.execCommand("copy")}catch{}o.remove(),c&&(r.removeAllRanges(),r.addRange(c)),a&&a.focus()}(t),r(!0),c.current=window.setTimeout((()=>{r(!1)}),1e3)}),[t]);return(0,o.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),o.createElement("button",{type:"button","aria-label":a?(0,M.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,M.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,M.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,V.copyButton,a&&V.copyButtonCopied),onClick:l},o.createElement("span",{className:V.copyButtonIcons,"aria-hidden":"true"},o.createElement(H,{className:V.copyButtonIcon}),o.createElement(D,{className:V.copyButtonSuccessIcon})))}function $(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24"},e),o.createElement("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 F={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function q(e){let{className:t,onClick:n,isEnabled:a}=e;const r=(0,M.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return o.createElement("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",t,a&&F.wordWrapButtonEnabled),"aria-label":r,title:r},o.createElement($,{className:F.wordWrapButtonIcon,"aria-hidden":"true"}))}function G(e){let{children:t,className:n="",metastring:a,title:c,showLineNumbers:l,language:s}=e;const{prism:{defaultLanguage:d,magicComments:p}}=(0,u.L)(),f=s??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??d,h=m(),y=function(){const[e,t]=(0,o.useState)(!1),[n,a]=(0,o.useState)(!1),r=(0,o.useRef)(null),c=(0,o.useCallback)((()=>{const n=r.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[r,e]),l=(0,o.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=r.current,n=e>t||r.current.querySelector("code").hasAttribute("style");a(n)}),[r]);return Z(r,l),(0,o.useEffect)((()=>{l()}),[e,l]),(0,o.useEffect)((()=>(window.addEventListener("resize",l,{passive:!0}),()=>{window.removeEventListener("resize",l)})),[l]),{codeBlockRef:r,isEnabled:e,isCodeScrollable:n,toggle:c}}(),b=function(e){return e?.match(g)?.groups.title??""}(a)||c,{lineClassNames:E,code:C}=v(t,{metastring:a,language:f,magicComments:p}),w=l??function(e){return Boolean(e?.includes("showLineNumbers"))}(a);return o.createElement(k,{as:"div",className:(0,i.Z)(n,f&&!n.includes(`language-${f}`)&&`language-${f}`)},b&&o.createElement("div",{className:N.codeBlockTitle},b),o.createElement("div",{className:N.codeBlockContent},o.createElement(A,(0,r.Z)({},L,{theme:h,code:C,language:f??"text"}),(e=>{let{className:t,tokens:n,getLineProps:a,getTokenProps:r}=e;return o.createElement("pre",{tabIndex:0,ref:y.codeBlockRef,className:(0,i.Z)(t,N.codeBlock,"thin-scrollbar")},o.createElement("code",{className:(0,i.Z)(N.codeBlockLines,w&&N.codeBlockLinesWithNumbering)},n.map(((e,t)=>o.createElement(W,{key:t,line:e,getLineProps:a,getTokenProps:r,classNames:E[t],showLineNumbers:w})))))})),o.createElement("div",{className:N.buttonGroup},(y.isEnabled||y.isCodeScrollable)&&o.createElement(q,{className:N.codeButton,onClick:()=>y.toggle(),isEnabled:y.isEnabled}),o.createElement(R,{className:N.codeButton,code:C}))))}function U(e){let{children:t,...n}=e;const a=(0,l.Z)(),c=function(e){return o.Children.toArray(e).some((e=>(0,o.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof c?G:C;return o.createElement(i,(0,r.Z)({key:String(a)},n),c)}var Q=n(3699);var X=n(4639);const Y={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function J(e){return!!e&&("SUMMARY"===e.tagName||J(e.parentElement))}function K(e,t){return!!e&&(e===t||K(e.parentElement,t))}function ee(e){let{summary:t,children:n,...a}=e;const c=(0,l.Z)(),s=(0,o.useRef)(null),{collapsed:u,setCollapsed:m}=(0,X.u)({initialState:!a.open}),[d,p]=(0,o.useState)(a.open),f=o.isValidElement(t)?t:o.createElement("summary",null,t??"Details");return o.createElement("details",(0,r.Z)({},a,{ref:s,open:d,"data-collapsed":u,className:(0,i.Z)(Y.details,c&&Y.isBrowser,a.className),onMouseDown:e=>{J(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;J(t)&&K(t,s.current)&&(e.preventDefault(),u?(m(!1),p(!0)):m(!0))}}),f,o.createElement(X.z,{lazy:!1,collapsed:u,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{m(e),p(!e)}},o.createElement("div",{className:Y.collapsibleContent},n)))}const te={details:"details_b_Ee"},ne="alert alert--info";function oe(e){let{...t}=e;return o.createElement(ee,(0,r.Z)({},t,{className:(0,i.Z)(ne,te.details,t.className)}))}var ae=n(3899);function re(e){return o.createElement(ae.Z,e)}const ce={containsTaskList:"containsTaskList_mC6p"};const le={img:"img_ev3q"};const ie="admonition_LlT9",se="admonitionHeading_tbUL",ue="admonitionIcon_kALy",me="admonitionContent_S0QG";const de={note:{infimaClassName:"secondary",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 14 16"},o.createElement("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"}))},label:o.createElement(M.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:"success",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 12 16"},o.createElement("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"}))},label:o.createElement(M.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:"danger",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 12 16"},o.createElement("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"}))},label:o.createElement(M.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:"info",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 14 16"},o.createElement("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"}))},label:o.createElement(M.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:"warning",iconComponent:function(){return o.createElement("svg",{viewBox:"0 0 16 16"},o.createElement("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"}))},label:o.createElement(M.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}},pe={secondary:"note",important:"info",success:"tip",warning:"danger"};function fe(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=o.Children.toArray(e),n=t.find((e=>o.isValidElement(e)&&"mdxAdmonitionTitle"===e.props?.mdxType)),a=o.createElement(o.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:n,rest:a}}(e.children);return{...e,title:e.title??t,children:n}}const ge={head:function(e){const t=o.Children.map(e.children,(e=>o.isValidElement(e)?function(e){if(e.props?.mdxType&&e.props.originalType){const{mdxType:t,originalType:n,...a}=e.props;return o.createElement(e.props.originalType,a)}return e}(e):e));return o.createElement(c.Z,e,t)},code:function(e){const t=["a","abbr","b","br","button","cite","code","del","dfn","em","i","img","input","ins","kbd","label","object","output","q","ruby","s","small","span","strong","sub","sup","time","u","var","wbr"];return o.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")||(0,o.isValidElement)(e)&&t.includes(e.props?.mdxType)))?o.createElement("code",e):o.createElement(U,e)},a:function(e){return o.createElement(Q.Z,e)},pre:function(e){return o.createElement(U,(0,o.isValidElement)(e.children)&&"code"===e.children.props?.originalType?e.children.props:{...e})},details:function(e){const t=o.Children.toArray(e.children),n=t.find((e=>o.isValidElement(e)&&"summary"===e.props?.mdxType)),a=o.createElement(o.Fragment,null,t.filter((e=>e!==n)));return o.createElement(oe,(0,r.Z)({},e,{summary:n}),a)},ul:function(e){return o.createElement("ul",(0,r.Z)({},e,{className:(t=e.className,(0,i.Z)(t,t?.includes("contains-task-list")&&ce.containsTaskList))}));var t},img:function(e){return o.createElement("img",(0,r.Z)({loading:"lazy"},e,{className:(t=e.className,(0,i.Z)(t,le.img))}));var t},h1:e=>o.createElement(re,(0,r.Z)({as:"h1"},e)),h2:e=>o.createElement(re,(0,r.Z)({as:"h2"},e)),h3:e=>o.createElement(re,(0,r.Z)({as:"h3"},e)),h4:e=>o.createElement(re,(0,r.Z)({as:"h4"},e)),h5:e=>o.createElement(re,(0,r.Z)({as:"h5"},e)),h6:e=>o.createElement(re,(0,r.Z)({as:"h6"},e)),admonition:function(e){const{children:t,type:n,title:a,icon:r}=fe(e),c=function(e){const t=pe[e]??e,n=de[t];return n||(console.warn(`No admonition config found for admonition type "${t}". Using Info as fallback.`),de.info)}(n),l=a??c.label,{iconComponent:s}=c,u=r??o.createElement(s,null);return o.createElement("div",{className:(0,i.Z)(d.k.common.admonition,d.k.common.admonitionType(e.type),"alert",`alert--${c.infimaClassName}`,ie)},o.createElement("div",{className:se},o.createElement("span",{className:ue},u),l),o.createElement("div",{className:me},t))},mermaid:()=>null};function he(e){let{children:t}=e;return o.createElement(a.Zo,{components:ge},t)}},3672:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var o=n(7294),a=n(6010),r=n(3699);function c(e){const{permalink:t,title:n,subLabel:c,isNext:l}=e;return o.createElement(r.Z,{className:(0,a.Z)("pagination-nav__link",l?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t},c&&o.createElement("div",{className:"pagination-nav__sublabel"},c),o.createElement("div",{className:"pagination-nav__label"},n))}},3852:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l});var o=n(7294),a=n(6010),r=n(3699);const c={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function l(e){let{permalink:t,label:n,count:l}=e;return o.createElement(r.Z,{href:t,className:(0,a.Z)(c.tag,l?c.tagWithCount:c.tagRegular)},n,l&&o.createElement("span",null,l))}},4597:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var o=n(7294),a=n(6010),r=n(7325),c=n(3852);const l={tags:"tags_jXut",tag:"tag_QGVx"};function i(e){let{tags:t}=e;return o.createElement(o.Fragment,null,o.createElement("b",null,o.createElement(r.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),o.createElement("ul",{className:(0,a.Z)(l.tags,"padding--none","margin-left--sm")},t.map((e=>{let{label:t,permalink:n}=e;return o.createElement("li",{key:n,className:l.tag},o.createElement(c.Z,{label:t,permalink:n}))}))))}},7594:(e,t)=>{function n(e){let t,n=[];for(let o of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(o))n.push(parseInt(o,10));else if(t=o.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,o,a,r]=t;if(o&&r){o=parseInt(o),r=parseInt(r);const e=o<r?1:-1;"-"!==a&&".."!==a&&"\u2025"!==a||(r+=e);for(let t=o;t!==r;t+=e)n.push(t)}}return n}t.default=n,e.exports=n}}]); \ No newline at end of file diff --git a/assets/js/25229465.87285cfa.js b/assets/js/25229465.87285cfa.js deleted file mode 100644 index 492819ed4..000000000 --- a/assets/js/25229465.87285cfa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4952],{4137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>k});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,i,a=function(e,t){if(null==e)return{};var n,i,a={},r=Object.keys(e);for(i=0;i<r.length;i++)n=r[i],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i<r.length;i++)n=r[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=i.createContext({}),c=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},m="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},d=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=c(n),d=a,k=m["".concat(s,".").concat(d)]||m[d]||u[d]||r;return n?i.createElement(k,o(o({ref:t},p),{},{components:n})):i.createElement(k,o({ref:t},p))}));function k(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:a,o[1]=l;for(var c=2;c<r;c++)o[c]=n[c];return i.createElement.apply(null,o)}return i.createElement.apply(null,n)}d.displayName="MDXCreateElement"},3579:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var i=n(7462),a=(n(7294),n(4137));const r={},o="Metrics Collected by Ethical Metrics",l={unversionedId:"user/ethical-metrics/metrics",id:"user/ethical-metrics/metrics",title:"Metrics Collected by Ethical Metrics",description:"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy.",source:"@site/docs/user/ethical-metrics/metrics.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/metrics",permalink:"/docs/user/ethical-metrics/metrics",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/metrics.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Setting up Ethical Metrics",permalink:"/docs/user/ethical-metrics/setup"},next:{title:"Troubleshooting",permalink:"/docs/user/ethical-metrics/troubleshooting"}},s={},c=[{value:"Dappnode host metrics",id:"dappnode-host-metrics",level:2},{value:"Dappmanager metrics",id:"dappmanager-metrics",level:2},{value:"Staking Metrics",id:"staking-metrics",level:2}],p={toc:c},m="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(m,(0,i.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"metrics-collected-by-ethical-metrics"},"Metrics Collected by Ethical Metrics"),(0,a.kt)("p",null,"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy."),(0,a.kt)("p",null,"Even if we can't link the metrics from your Dappnode to your identity, ",(0,a.kt)("strong",{parentName:"p"},"we are fully committed to maintain total transparency about the metrics we collect from your Dappnode when using Ethical Metrics"),". We want you to have a clear understanding of the information that is being monitored. The metrics we collect fall into several categories. Here's an overview of the metrics we gather."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"These metrics also help us better allocate resources by knowing what our users are running on their Dappnodes. This way, we can better understand which packages are the most popular and which ones need improvement.")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Ethical Metrics is one of our newest packages and it is still under constant improvement. This section will be updated as we add or remove metrics.")),(0,a.kt)("h2",{id:"dappnode-host-metrics"},"Dappnode host metrics"),(0,a.kt)("p",null,"These are all the metrics related directly to the host machine running your Dappnode. All of these metrics are collected by the Dappnode Exporter package."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_cpu_seconds_total"),": Total CPU usage in seconds by the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"container_memory_usage_bytes"),": Memory usage in bytes by containers."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"container_memory_cache"),": Memory cache usage by containers."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_memory_MemTotal_bytes"),": Total memory available in bytes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_memory_MemFree_bytes"),": Free memory in bytes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_memory_Buffers_bytes"),": Memory used for buffers in bytes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_memory_Cached_bytes"),": Cached memory in bytes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_disk_io_time_seconds_total"),": Total disk I/O time in seconds on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_disk_reads_completed_total"),": Total completed disk reads on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_disk_writes_completed_total"),": Total completed disk writes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"container_fs_usage_bytes"),": Filesystem usage by containers in bytes."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_filesystem_size_bytes"),": Total size of the filesystem in bytes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"node_filesystem_free_bytes"),": Free space in the filesystem in bytes on the node."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"container_last_seen"),": Timestamp of the last seen container."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"cadvisor_version_info"),": Information about the cAdvisor version."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"container_cpu_usage_seconds_total"),": Total CPU usage in seconds by containers.")),(0,a.kt)("h2",{id:"dappmanager-metrics"},"Dappmanager metrics"),(0,a.kt)("p",null,"The following are all the metrics related to your Dappnode's configuration. These are all stored in your Dappmanager."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmmanager_staker_config"),": Your current staking package."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmanager_ipfs_client_target_local"),": Wether IPFS client is in local or remote mode."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmanager_eth_fallback_enabled"),": Wether the ethereum fallback client is enabled."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmanager_eth_client_target_local"),": Wether ethereum client is in local or remote mode."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmanager_auto_updates_user_packages"),": Wether auto updates for user packages is enabled."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmanager_auto_updates_system_packages"),": Wether auto updates for system packages is enabled."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"dappmanager_host_info"),": Details including Docker and Docker Compose versions, kernel version, operating system version, and architecture type.")),(0,a.kt)("h2",{id:"staking-metrics"},"Staking Metrics"),(0,a.kt)("p",null,"The following metrics are all related directly to the staking packages, including Web3Signer."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"eth2_slashingprotection_prevented_signings"),": Number of prevented slashing signings."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"signing_signers_loaded_count"),": Count of loaded validators signing in web3signer."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"signing_bls_signing_duration"),": Duration of BLS signing."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"signing_bls_signing_duration_count"),": Count of BLS signing durations."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"signing_bls_signing_duration_sum"),": Sum of BLS signing durations."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"signing_bls_missing_identifier_count"),": Count of missing BLS identifier."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"api_rpc_cons_peers"),": Number of connected peers to your staking execution clients."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"api_rpc_exec_peers"),": Number of connected peers to your staking consensus clients."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"api_rpc_cons_syncing"),": Wether your staking execution clients are syncing."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"api_rpc_exec_syncing"),": Wether your staking consensus clients are syncing.")),(0,a.kt)("p",null,"To sum it up, the metrics we collect give us a peek into how your Dappnode is doing overall, how it allocates resources, memory, disk, and even info related to staking performance."),(0,a.kt)("p",null,"Your privacy is of utmost importance to us. Remember that all this data transmission occurs through the TOR network to protect your privacy."),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"For any questions or concerns about the metrics collected by Ethical Metrics, feel free to reach out to our support team.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/25229465.91651391.js b/assets/js/25229465.91651391.js new file mode 100644 index 000000000..265a6235c --- /dev/null +++ b/assets/js/25229465.91651391.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4952],{6639:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var i=s(5893),t=s(1151);const o={},r="Metrics Collected by Ethical Metrics",c={id:"user/ethical-metrics/metrics",title:"Metrics Collected by Ethical Metrics",description:"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy.",source:"@site/docs/user/ethical-metrics/metrics.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/metrics",permalink:"/docs/user/ethical-metrics/metrics",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/metrics.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Setting up Ethical Metrics",permalink:"/docs/user/ethical-metrics/setup"},next:{title:"Troubleshooting",permalink:"/docs/user/ethical-metrics/troubleshooting"}},a={},l=[{value:"Dappnode host metrics",id:"dappnode-host-metrics",level:2},{value:"Dappmanager metrics",id:"dappmanager-metrics",level:2},{value:"Staking Metrics",id:"staking-metrics",level:2}];function d(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"metrics-collected-by-ethical-metrics",children:"Metrics Collected by Ethical Metrics"}),"\n",(0,i.jsx)(n.p,{children:"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy."}),"\n",(0,i.jsxs)(n.p,{children:["Even if we can't link the metrics from your Dappnode to your identity, ",(0,i.jsx)(n.strong,{children:"we are fully committed to maintain total transparency about the metrics we collect from your Dappnode when using Ethical Metrics"}),". We want you to have a clear understanding of the information that is being monitored. The metrics we collect fall into several categories. Here's an overview of the metrics we gather."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"These metrics also help us better allocate resources by knowing what our users are running on their Dappnodes. This way, we can better understand which packages are the most popular and which ones need improvement."})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Ethical Metrics is one of our newest packages and it is still under constant improvement. This section will be updated as we add or remove metrics."})}),"\n",(0,i.jsx)(n.h2,{id:"dappnode-host-metrics",children:"Dappnode host metrics"}),"\n",(0,i.jsx)(n.p,{children:"These are all the metrics related directly to the host machine running your Dappnode. All of these metrics are collected by the Dappnode Exporter package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_cpu_seconds_total"}),": Total CPU usage in seconds by the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"container_memory_usage_bytes"}),": Memory usage in bytes by containers."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"container_memory_cache"}),": Memory cache usage by containers."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_memory_MemTotal_bytes"}),": Total memory available in bytes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_memory_MemFree_bytes"}),": Free memory in bytes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_memory_Buffers_bytes"}),": Memory used for buffers in bytes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_memory_Cached_bytes"}),": Cached memory in bytes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_disk_io_time_seconds_total"}),": Total disk I/O time in seconds on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_disk_reads_completed_total"}),": Total completed disk reads on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_disk_writes_completed_total"}),": Total completed disk writes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"container_fs_usage_bytes"}),": Filesystem usage by containers in bytes."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_filesystem_size_bytes"}),": Total size of the filesystem in bytes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"node_filesystem_free_bytes"}),": Free space in the filesystem in bytes on the node."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"container_last_seen"}),": Timestamp of the last seen container."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"cadvisor_version_info"}),": Information about the cAdvisor version."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"container_cpu_usage_seconds_total"}),": Total CPU usage in seconds by containers."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"dappmanager-metrics",children:"Dappmanager metrics"}),"\n",(0,i.jsx)(n.p,{children:"The following are all the metrics related to your Dappnode's configuration. These are all stored in your Dappmanager."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmmanager_staker_config"}),": Your current staking package."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmanager_ipfs_client_target_local"}),": Wether IPFS client is in local or remote mode."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmanager_eth_fallback_enabled"}),": Wether the ethereum fallback client is enabled."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmanager_eth_client_target_local"}),": Wether ethereum client is in local or remote mode."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmanager_auto_updates_user_packages"}),": Wether auto updates for user packages is enabled."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmanager_auto_updates_system_packages"}),": Wether auto updates for system packages is enabled."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"dappmanager_host_info"}),": Details including Docker and Docker Compose versions, kernel version, operating system version, and architecture type."]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"staking-metrics",children:"Staking Metrics"}),"\n",(0,i.jsx)(n.p,{children:"The following metrics are all related directly to the staking packages, including Web3Signer."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"eth2_slashingprotection_prevented_signings"}),": Number of prevented slashing signings."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"signing_signers_loaded_count"}),": Count of loaded validators signing in web3signer."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"signing_bls_signing_duration"}),": Duration of BLS signing."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"signing_bls_signing_duration_count"}),": Count of BLS signing durations."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"signing_bls_signing_duration_sum"}),": Sum of BLS signing durations."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"signing_bls_missing_identifier_count"}),": Count of missing BLS identifier."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"api_rpc_cons_peers"}),": Number of connected peers to your staking execution clients."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"api_rpc_exec_peers"}),": Number of connected peers to your staking consensus clients."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"api_rpc_cons_syncing"}),": Wether your staking execution clients are syncing."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"api_rpc_exec_syncing"}),": Wether your staking consensus clients are syncing."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"To sum it up, the metrics we collect give us a peek into how your Dappnode is doing overall, how it allocates resources, memory, disk, and even info related to staking performance."}),"\n",(0,i.jsx)(n.p,{children:"Your privacy is of utmost importance to us. Remember that all this data transmission occurs through the TOR network to protect your privacy."}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"For any questions or concerns about the metrics collected by Ethical Metrics, feel free to reach out to our support team."})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>r});var i=s(7294);const t={},o=i.createContext(t);function r(e){const n=i.useContext(o);return i.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(t):e.components||t:r(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2a82f816.85cb16f8.js b/assets/js/2a82f816.85cb16f8.js new file mode 100644 index 000000000..14ad7bb6f --- /dev/null +++ b/assets/js/2a82f816.85cb16f8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[437],{1469:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>t,contentTitle:()=>d,default:()=>o,frontMatter:()=>l,metadata:()=>c,toc:()=>h});var i=s(5893),r=s(1151);const l={},d="Dappnode Package (DNP) manifest",c={id:"dev/references/manifest",title:"Dappnode Package (DNP) manifest",description:"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:",source:"@site/docs/dev/references/manifest.md",sourceDirName:"dev/references",slug:"/dev/references/manifest",permalink:"/docs/dev/references/manifest",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/references/manifest.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Docker compose file",permalink:"/docs/dev/references/docker-compose"},next:{title:"Wizard Reference",permalink:"/docs/dev/references/setup-wizard"}},t={},h=[{value:"Example",id:"example",level:2},{value:"Properties reference",id:"properties-reference",level:2},{value:"name",id:"name",level:3},{value:"version",id:"version",level:3},{value:"upstreamVersion",id:"upstreamversion",level:3},{value:"shortDescription",id:"shortdescription",level:3},{value:"description",id:"description",level:3},{value:"type",id:"type",level:3},{value:"chain",id:"chain",level:3},{value:"mainService",id:"mainservice",level:3},{value:"dockerTimeout",id:"dockertimeout",level:3},{value:"dependencies",id:"dependencies",level:3},{value:"requirements",id:"requirements",level:3},{value:"minimumDappnodeVersion",id:"minimumdappnodeversion",level:4},{value:"globalEnvs",id:"globalenvs",level:3},{value:"all",id:"all",level:4},{value:"architectures",id:"architectures",level:3},{value:"backup",id:"backup",level:3},{value:"name",id:"name-1",level:4},{value:"path",id:"path",level:4},{value:"service",id:"service",level:4},{value:"changelog",id:"changelog",level:3},{value:"warnings",id:"warnings",level:3},{value:"onInstall",id:"oninstall",level:4},{value:"onUpdate",id:"onupdate",level:4},{value:"onReset",id:"onreset",level:4},{value:"onRemove",id:"onremove",level:4},{value:"updateAlerts",id:"updatealerts",level:3},{value:"from",id:"from",level:4},{value:"to",id:"to",level:4},{value:"message",id:"message",level:4},{value:"disclaimer",id:"disclaimer",level:3},{value:"message",id:"message-1",level:4},{value:"style",id:"style",level:3},{value:"featuredBackground",id:"featuredbackground",level:4},{value:"featuredColor",id:"featuredcolor",level:4},{value:"featuredAvatarFilter",id:"featuredavatarfilter",level:4},{value:"exposable",id:"exposable",level:3},{value:"name",id:"name-2",level:4},{value:"description",id:"description-1",level:4},{value:"serviceName",id:"servicename",level:4},{value:"port",id:"port",level:4},{value:"author",id:"author",level:3},{value:"contributors",id:"contributors",level:3},{value:"categories",id:"categories",level:3},{value:"keywords",id:"keywords",level:3},{value:"links",id:"links",level:3},{value:"homepage",id:"homepage",level:4},{value:"ui",id:"ui",level:4},{value:"api",id:"api",level:4},{value:"gateway",id:"gateway",level:4},{value:"repository",id:"repository",level:3},{value:"type",id:"type-1",level:4},{value:"url",id:"url",level:4},{value:"directory",id:"directory",level:4},{value:"bugs",id:"bugs",level:3},{value:"url",id:"url-1",level:4},{value:"license",id:"license",level:3}];function a(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"dappnode-package-dnp-manifest",children:"Dappnode Package (DNP) manifest"}),"\n",(0,i.jsx)(n.p,{children:"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"IPFS of BZZ hashes to download its docker image"}),"\n",(0,i.jsx)(n.li,{children:"Docker related data to configure and run its container"}),"\n",(0,i.jsx)(n.li,{children:"Metadata to control how the package is shown in the admin UI."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "name": "ipfs.dnp.dappnode.eth",\n "version": "0.2.0",\n "upstreamVersion": "2.6.0-beta",\n "shortDescription": "Distributed file system for storing and accessing data.",\n "description": "Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you\u2019re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API.",\n "type": "service",\n "chain": "ethereum",\n "mainService": "webserver",\n "dockerTimeout": "5min",\n "dependencies": {\n "bitcoin.dnp.dappnode.eth": "^0.1.2",\n "swarm.dnp.dappnode.eth": "latest"\n },\n "requirements": {\n "minimumDappnodeVersion": "0.2.0"\n },\n "globalEnvs": {\n "all": "true"\n },\n "architectures": ["linux/amd64", "linux/arm64"],\n "backup": [\n {\n "name": "keystore",\n "path": "/root/.raiden/secret/keystore",\n "service": "validator"\n }\n ],\n "changelog": "Brief summary of the most relevant changes that the user must known before installing",\n "warnings": {\n "onInstall": "You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly.",\n "onUpdate": "Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site.",\n "onReset": "You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds.",\n "onRemove": "You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."\n },\n "updateAlerts": [\n {\n "from": "0.1.x",\n "to": "0.1.x",\n "message": "Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"\n }\n ],\n "disclaimer": {\n "message": "This software is experimental, presented \u201cas is\u201d and inherently carries risks."\n },\n "style": {\n "featuredBackground": "linear-gradient(to right, #323131, #395353)",\n "featuredColor": "white",\n "featuredAvatarFilter": "invert(1)"\n },\n "exposable": [\n {\n "name": "Geth JSON RPC",\n "description": "JSON RPC endpoint for Geth mainnet",\n "serviceName": "beacon_chain",\n "port": 80\n }\n ],\n "author": "Dappnode Association <admin@dappnode.io> (https://github.com/dappnode)",\n "contributors": [\n "Michael First <developerHanlder@project.io> (https://github.com/developerHanlder)",\n "Michael Second <developerHanlder@project.io> (https://github.com/developerHanlder)"\n ],\n "categories": ["Developer tools", "Blockchain"],\n "keywords": ["DappnodeCore"],\n "links": {\n "homepage": "https://github.com/dappnode/DNP_IPFS#readme",\n "ui": "http://ipfs.dappnode:5001/webui",\n "api": "http://ipfs.dappnode:5001/api/v0",\n "gateway": "http://ipfs.dappnode:8080/ipfs"\n },\n "repository": {\n "type": "git",\n "url": "https://github.com/dappnode/DNP_IPFS.git",\n "directory": "packages/react-dom"\n },\n "bugs": {\n "url": "https://github.com/dappnode/DNP_IPFS/issues"\n },\n "license": "GPL-3.0"\n}\n'})}),"\n",(0,i.jsx)(n.h2,{id:"properties-reference",children:"Properties reference"}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#name",children:"name"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#version",children:"version"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#upstreamversion",children:"upstreamVersion"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#shortdescription",children:"shortDescription"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#description",children:"description"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#type",children:"type"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"enum"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#chain",children:"chain"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"enum"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#mainservice",children:"mainService"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#dockertimeout",children:"dockerTimeout"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#dependencies",children:"dependencies"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#requirements",children:"requirements"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#globalenvs",children:"globalEnvs"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#architectures",children:"architectures"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"enum[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#backup",children:"backup"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#changelog",children:"changelog"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#warnings",children:"warnings"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#updatealerts",children:"updateAlerts"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#disclaimer",children:"disclaimer"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#style",children:"style"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#exposable",children:"exposable"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#author",children:"author"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#contributors",children:"contributors"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#categories",children:"categories"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"enum[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#keywords",children:"keywords"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string[]"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#links",children:"links"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#repository",children:"repository"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#bugs",children:"bugs"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"object"})}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.a,{href:"#license",children:"license"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"string"})}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]})]})]}),"\n",(0,i.jsx)(n.h3,{id:"name",children:"name"}),"\n",(0,i.jsx)(n.p,{children:"Dappnode Package ENS name."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"ipfs.dnp.dappnode.eth"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"version",children:"version"}),"\n",(0,i.jsx)(n.p,{children:"Dappnode Package semantic version (semver)."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"All instances must conform to this regular expression"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-regex",children:"^((([0-9]+).([0-9]+).([0-9]+)))$\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["test example:\n",(0,i.jsx)(n.a,{href:"https://regexr.com/?expression=%5E(((%5B0-9%5D%2B).(%5B0-9%5D%2B).(%5B0-9%5D%2B)))%24&text=0.2.0",children:"0.2.0"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"0.2.0"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"upstreamversion",children:"upstreamVersion"}),"\n",(0,i.jsxs)(n.p,{children:["For Dappnode Packages that only wrap existing software (i.e. Bitcoin node, Ethereum node), the underlying software\nversion can be specified here. It will be shown in the admin UI alongside the field ",(0,i.jsx)(n.code,{children:"version"}),"."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"2.6.0-beta"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"any-text"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"shortdescription",children:"shortDescription"}),"\n",(0,i.jsx)(n.p,{children:"Short Dappnode Package description, 6-8 words sentence briefly describing the purpose of this Dappnode Package. The\npurpose is to quickly grab users' attention and clearly define its purpose. Markdown is discouraged as it will NOT be\nrendered on the Dappnode Package store view."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Distributed file system for storing and accessing data."\n'})}),"\n",(0,i.jsx)(n.h3,{id:"description",children:"description"}),"\n",(0,i.jsx)(n.p,{children:"Dappnode Package description. Markdown and links are allowed and ecouraged to give users the option to read more\ninformation about this Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you\u2019re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API."\n'})}),"\n",(0,i.jsx)(n.h3,{id:"type",children:"type"}),"\n",(0,i.jsx)(n.p,{children:"Type of this Dappnode Package. It is used to trigger some special features such as core functionality."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["default: ",(0,i.jsx)(n.code,{children:'"service"'})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The value of this property ",(0,i.jsx)(n.strong,{children:"must"})," be equal to one of the known values below."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Value"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"service"})}),(0,i.jsx)(n.td,{children:"Can have ENVs a depend on library Dappnode Packages"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"library"})}),(0,i.jsx)(n.td,{children:"Should not have ENVs and cannot depend on service Dappnode Packages"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"dncore"})}),(0,i.jsx)(n.td,{children:"Dappnode Packages that are part of the Dappnode core and have special permissions"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"service"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"dncore"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"chain",children:"chain"}),"\n",(0,i.jsx)(n.p,{children:"Indicate that this Dappnode Package is a blockchain node so the admin UI shows its syncing status"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["The value of this property ",(0,i.jsx)(n.strong,{children:"must"})," be equal to one of the known values below."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Value"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"ethereum"})}),(0,i.jsx)(n.td,{children:"Must have an Ethereum JSON RPC exposed internally at port 8545"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"bitcoin"})}),(0,i.jsxs)(n.td,{children:["Must have a standard Bitcoin JSON API exposed at the default port (8332). Uses the NPM package ",(0,i.jsx)(n.code,{children:"bitcoin-core"})]})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"monero"})}),(0,i.jsxs)(n.td,{children:["Must have a Monero API exposed internally at port 18081. Uses the NPM package ",(0,i.jsx)(n.code,{children:"monero-rpc"})]})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"ethereum"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"bitcoin"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"monero"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"mainservice",children:"mainService"}),"\n",(0,i.jsx)(n.p,{children:"For multi-service packages, indicate which service is the main one. The root ENS domain of this package will be mapped\nto this service IP."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"webserver"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"backend"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"service1"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"dockertimeout",children:"dockerTimeout"}),"\n",(0,i.jsxs)(n.p,{children:["Modify the default Docker timeout of 10 seconds. It affects package updates, removals, container restarts, start and\nstop, updating config environments and port mappings. You can either pass a numerical value in seconds or a string\nrepresentation parsed with ",(0,i.jsx)(n.a,{href:"http://npmjs.com/package/timestring",children:"timestring"}),". Available from DAPPMANAGER v0.2.36"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"5min"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"60"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"dependencies",children:"dependencies"}),"\n",(0,i.jsxs)(n.p,{children:["Dappnode Package dependencies. Must be an object where the keys are the Dappnode Package's ENS. The values must be a\nsemantic range, i.e. ",(0,i.jsx)(n.code,{children:"'0.2.0'"}),", ",(0,i.jsx)(n.code,{children:"'^0.2.1'"}),", ",(0,i.jsx)(n.code,{children:"'*'"}),", ",(0,i.jsx)(n.code,{children:"'latest'"}),",\n",(0,i.jsx)(n.code,{children:"'/ipfs/QmWwMb3XhuCH6JnCF6m6EQzA4mW9pHHtg7rqAfhDr2ofi8'"}),"."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsx)(n.table,{children:(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})})}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "bitcoin.dnp.dappnode.eth": "^0.1.2",\n "swarm.dnp.dappnode.eth": "latest"\n}\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "only-for-dev-1.dappnode.eth": "/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o",\n "only-for-dev-2.dappnode.eth": "/ipfs/zdj7WWeQ43G6JJvLWQWZpyHuAMq6uYWRjkBXFad11vE2LHhQ7"\n}\n'})}),"\n",(0,i.jsx)(n.h3,{id:"requirements",children:"requirements"}),"\n",(0,i.jsx)(n.p,{children:"Specify requirements to be met before allowing users to install this Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"minimumDappnodeVersion"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})})]}),"\n",(0,i.jsx)(n.h4,{id:"minimumdappnodeversion",children:"minimumDappnodeVersion"}),"\n",(0,i.jsx)(n.p,{children:"Minimum Dappnode version that includes all the features necessary to run this Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"All instances must conform to this regular expression"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-regex",children:"^((([0-9]+).([0-9]+).([0-9]+)))$\n"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["test example:\n",(0,i.jsx)(n.a,{href:"https://regexr.com/?expression=%5E(((%5B0-9%5D%2B).(%5B0-9%5D%2B).(%5B0-9%5D%2B)))%24&text=0.2.0",children:"0.2.0"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"0.2.0"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"globalenvs",children:"globalEnvs"}),"\n",(0,i.jsx)(n.p,{children:"Request the DAPPMANAGER to inject global ENVs to this package's containers"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"all"})}),(0,i.jsx)(n.td,{children:"boolean"}),(0,i.jsx)(n.td,{children:"Optional"})]})})]}),"\n",(0,i.jsx)(n.h4,{id:"all",children:"all"}),"\n",(0,i.jsx)(n.p,{children:"Request the DAPPMANAGER to inject all available global ENVs"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"boolean"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"true"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"architectures",children:"architectures"}),"\n",(0,i.jsxs)(n.p,{children:["Build and distribute this package in multiple architectures using\n",(0,i.jsx)(n.a,{href:"https://docs.docker.com/buildx/working-with-buildx/",children:"Docker's buildx plugin"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"enum[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsxs)(n.p,{children:["The value of this property ",(0,i.jsx)(n.strong,{children:"must"})," be equal to one of the known values below."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Value"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"linux/amd64"})}),(0,i.jsx)(n.td,{children:"Default architecture, x86-64"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"linux/arm64"})}),(0,i.jsx)(n.td,{children:"ARM architecture"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'["linux/amd64", "linux/arm64"]\n'})}),"\n",(0,i.jsx)(n.h3,{id:"backup",children:"backup"}),"\n",(0,i.jsxs)(n.p,{children:["Allows users to download and restore a backup of key files of this package. If this property is non-empty array, a new\nview will be available in the admin UI for this Dappnode Package. The files or directories specified in the array will\nbe bundled in a tarball. As long as the name properties stay the same, their associated paths can change in future\nversions. Then, when restoring an old backup, the new paths will be associated to files stored under the same name\nkeys. ",(0,i.jsx)(n.strong,{children:"Note:"})," it is recommended to only backup lightweight files such as configs, keys or passwords."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"object[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"name"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"path"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"service"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"name-1",children:"name"}),"\n",(0,i.jsx)(n.p,{children:"A key identifier of this file or directory. Its purpose is to allow the path to change in the future."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"keystore"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"config"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"keys"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"path",children:"path"}),"\n",(0,i.jsxs)(n.p,{children:["Path to the file or directory to backup. It ",(0,i.jsx)(n.strong,{children:"MUST"})," be an absolute path (do not use the ",(0,i.jsx)(n.code,{children:"~"})," character) for the backup\ntool to work correctly."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"/root/.raiden/secret/keystore"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"/usr/src/app/config.json"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"service",children:"service"}),"\n",(0,i.jsx)(n.p,{children:"Service to which the path belongs to. Must be equal to the name used in the docker-compose services object"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"validator"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"service1"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"changelog",children:"changelog"}),"\n",(0,i.jsx)(n.p,{children:"Description of relevant changes of this specific version. Supports markdown and links."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Brief summary of the most relevant changes that the user must known before installing"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"warnings",children:"warnings"}),"\n",(0,i.jsx)(n.p,{children:"Very relevant information that MUST be shown to the user BEFORE executing a specific action in the Dappnode Package's\nlifecycle."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"onInstall"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"onUpdate"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"onReset"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"onRemove"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"oninstall",children:"onInstall"}),"\n",(0,i.jsx)(n.p,{children:"Will be shown before installing the Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly."\n'})}),"\n",(0,i.jsx)(n.h4,{id:"onupdate",children:"onUpdate"}),"\n",(0,i.jsx)(n.p,{children:"Will be shown before updating the Dappnode Package, not in the first installation."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site."\n'})}),"\n",(0,i.jsx)(n.h4,{id:"onreset",children:"onReset"}),"\n",(0,i.jsx)(n.p,{children:"Will be shown before resetting the Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds."\n'})}),"\n",(0,i.jsx)(n.h4,{id:"onremove",children:"onRemove"}),"\n",(0,i.jsx)(n.p,{children:"Will be shown before removing the Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."\n'})}),"\n",(0,i.jsx)(n.h3,{id:"updatealerts",children:"updateAlerts"}),"\n",(0,i.jsx)(n.p,{children:"Alerts targeted to a specific update jump."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"object[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"}),(0,i.jsx)(n.th,{children:"Default"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"from"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})}),(0,i.jsx)(n.td,{})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"to"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:'"*"'})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"message"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})}),(0,i.jsx)(n.td,{})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"from",children:"from"}),"\n",(0,i.jsx)(n.p,{children:"Semver range, show this message when a user updates this Dappnode Package FROM a version that satisfies this range."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"0.1.x"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"^0.2.0"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"to",children:"to"}),"\n",(0,i.jsx)(n.p,{children:"Semver range, show this message when a user updates this Dappnode Package TO a version that satisfies this range."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["default: ",(0,i.jsx)(n.code,{children:'"*"'})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"0.1.x"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"^0.2.0"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"*"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"message",children:"message"}),"\n",(0,i.jsxs)(n.p,{children:["Alert message to be shown when ",(0,i.jsx)(n.code,{children:"from"})," and ",(0,i.jsx)(n.code,{children:"to"})," ranges are satisfied."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"\n'})}),"\n",(0,i.jsx)(n.p,{children:"Specific update jump alert."}),"\n",(0,i.jsx)(n.h3,{id:"disclaimer",children:"disclaimer"}),"\n",(0,i.jsx)(n.p,{children:"Disclaimer to be shown to the user on install, and will require the user to approve it."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"message"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]})})]}),"\n",(0,i.jsx)(n.h4,{id:"message-1",children:"message"}),"\n",(0,i.jsx)(n.p,{children:"The message shown in the pop-up. Markdown and links are allowed."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"This software is experimental, presented \u201cas is\u201d and inherently carries risks."\n'})}),"\n",(0,i.jsx)(n.h3,{id:"style",children:"style"}),"\n",(0,i.jsx)(n.p,{children:"Graphic information to control the appearance of Dappnode Package related items in the admin UI."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"featuredBackground"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"featuredColor"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"featuredAvatarFilter"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"featuredbackground",children:"featuredBackground"}),"\n",(0,i.jsxs)(n.p,{children:["CSS background property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the\n",(0,i.jsx)(n.a,{href:"https://developer.mozilla.org/docs/Web/CSS/background",children:"Mozilla CSS background reference"})," for valid values."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"linear-gradient(to right, #323131, #395353)"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"black"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"featuredcolor",children:"featuredColor"}),"\n",(0,i.jsxs)(n.p,{children:["CSS color property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the\n",(0,i.jsx)(n.a,{href:"https://developer.mozilla.org/docs/Web/CSS/color",children:"Mozilla CSS color reference"})," for valid values."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"white"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"#fff"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"featuredavatarfilter",children:"featuredAvatarFilter"}),"\n",(0,i.jsxs)(n.p,{children:["CSS filter property to be applied to ",(0,i.jsx)(n.code,{children:"<img>"})," component (avatar) of the Dappnode Package card in the Dappnode Package\nstore if featured. Go to the ",(0,i.jsx)(n.a,{href:"https://developer.mozilla.org/docs/Web/CSS/filter",children:"Mozilla CSS filter reference"})," for\nvalid values."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"invert(1)"\n'})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"grayscale(80%);"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"exposable",children:"exposable"}),"\n",(0,i.jsx)(n.p,{children:"Exposable services safe to be in the public internet"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"object[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"name"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"description"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"serviceName"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"port"})}),(0,i.jsx)(n.td,{children:"number"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"fromSubdomain"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"name-2",children:"name"}),"\n",(0,i.jsx)(n.p,{children:"Short human readable name of this exposable service"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Geth JSON RPC"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"description-1",children:"description"}),"\n",(0,i.jsx)(n.p,{children:"Description of this exposable service"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"JSON RPC endpoint for Geth mainnet"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"servicename",children:"serviceName"}),"\n",(0,i.jsx)(n.p,{children:"Docker compose service this exposable service belongs to. Defaults to the first service."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"beacon_chain"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"port",children:"port"}),"\n",(0,i.jsx)(n.p,{children:"Port this exposable service listens to"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"number"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Examples:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"80\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"5001\n"})}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"8545\n"})}),"\n",(0,i.jsx)(n.p,{children:"Single exposable service item"}),"\n",(0,i.jsx)(n.h3,{id:"author",children:"author"}),"\n",(0,i.jsxs)(n.p,{children:["Main author of this Dappnode Package. Must follow the structure ",(0,i.jsx)(n.code,{children:"${name} <${email}> (${githubUserLink})"}),"."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"Dappnode Association <admin@dappnode.io> (https://github.com/dappnode)"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"contributors",children:"contributors"}),"\n",(0,i.jsx)(n.p,{children:"Contributing authors of this Dappnode Package."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"string[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Contributor author. Must follow the structure ",(0,i.jsx)(n.code,{children:"${name} <${email}> (${githubUserLink})"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'[\n "Michael First <developerHanlder@project.io> (https://github.com/developerHanlder)",\n "Michael Second <developerHanlder@project.io> (https://github.com/developerHanlder)"\n]\n'})}),"\n",(0,i.jsx)(n.h3,{id:"categories",children:"categories"}),"\n",(0,i.jsxs)(n.p,{children:["Categories to organize and group Dappnode Packages in the Dappnode Package store. Only one or two categories maximum\nshould be specified per package. If you feel that any of the current categories represent the nature of your package,\nplease open an issue requesting a new category ",(0,i.jsx)(n.a,{href:"https://github.com/dappnode/dnp-manifest/issues/new",children:"https://github.com/dappnode/dnp-manifest/issues/new"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"enum[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsxs)(n.p,{children:["The value of this property ",(0,i.jsx)(n.strong,{children:"must"})," be equal to one of the known values below."]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Value"}),(0,i.jsx)(n.th,{children:"Description"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Blockchain"})}),(0,i.jsx)(n.td,{children:"Blockchain nodes, i.e. Bitcoin, Monero"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Communications"})}),(0,i.jsx)(n.td,{children:"Decentralized networking or chat solutions, i.e. Swarm"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Developer tools"})}),(0,i.jsx)(n.td,{children:"Packages that their main purpose is to aid in developing, i.e. testnets"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"ETH2.0"})}),(0,i.jsx)(n.td,{children:"Packages to participate or use the Eth2.0 network"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Economic incentive"})}),(0,i.jsx)(n.td,{children:"Packages that offer an economic incentive or reward to the admin that runs it, i.e. Lightning Network"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Monitoring"})}),(0,i.jsx)(n.td,{children:"Packages that track metrics"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Payment channels"})}),(0,i.jsx)(n.td,{children:"Packages whose main purpose is to manage or control payment channels, i.e. Raiden"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"Storage"})}),(0,i.jsx)(n.td,{children:"Decentralized storage solutions, i.e. Swarm"})]})]})]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'["Developer tools", "Blockchain"]\n'})}),"\n",(0,i.jsx)(n.h3,{id:"keywords",children:"keywords"}),"\n",(0,i.jsx)(n.p,{children:"Keywords, relevant and descriptive of this Dappnode Package. They will be shown in the admin UI Dappnode Package store."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: Array type: ",(0,i.jsx)(n.code,{children:"string[]"})]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["All items must be of the type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Single keyword."}),"\n",(0,i.jsx)(n.h3,{id:"links",children:"links"}),"\n",(0,i.jsx)(n.p,{children:"Various links (URLs) useful for the user of this package. All links will be shown in the dedicated view of this package\nin the admin UI. The predefined links properties below will be shown with concept related icons. Other links will be\nshown as well but with their plain name instead of an icon."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"homepage"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"ui"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"api"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"gateway"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"homepage",children:"homepage"}),"\n",(0,i.jsx)(n.p,{children:"Url to an informative homepage for this Dappnode Package. Should be a README or landing website."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"https://github.com/dappnode/DNP_IPFS#readme"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"ui",children:"ui"}),"\n",(0,i.jsx)(n.p,{children:"Url to this DNP's Dappnode local UI."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"http://ipfs.dappnode:5001/webui"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"api",children:"api"}),"\n",(0,i.jsx)(n.p,{children:"Url to this DNP's Dappnode local HTTP API endpoint."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"http://ipfs.dappnode:5001/api/v0"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"gateway",children:"gateway"}),"\n",(0,i.jsx)(n.p,{children:"Url to this DNP's Dappnode local gateway."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"http://ipfs.dappnode:8080/ipfs"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"repository",children:"repository"}),"\n",(0,i.jsx)(n.p,{children:"Dappnode Package's repository. Must be a publicly available url that can be handed directly to a VCS program."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsxs)(n.tbody,{children:[(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"type"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"url"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]}),(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"directory"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:"Optional"})]})]})]}),"\n",(0,i.jsx)(n.h4,{id:"type-1",children:"type"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"git"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"url",children:"url"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"https://github.com/dappnode/DNP_IPFS.git"\n'})}),"\n",(0,i.jsx)(n.h4,{id:"directory",children:"directory"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"packages/react-dom"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"bugs",children:"bugs"}),"\n",(0,i.jsx)(n.p,{children:"Url to your project\u2019s issue tracker."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"is optional"}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n"]}),"\n",(0,i.jsxs)(n.table,{children:[(0,i.jsx)(n.thead,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.th,{children:"Property"}),(0,i.jsx)(n.th,{children:"Type"}),(0,i.jsx)(n.th,{children:"Required"})]})}),(0,i.jsx)(n.tbody,{children:(0,i.jsxs)(n.tr,{children:[(0,i.jsx)(n.td,{children:(0,i.jsx)(n.code,{children:"url"})}),(0,i.jsx)(n.td,{children:"string"}),(0,i.jsx)(n.td,{children:(0,i.jsx)(n.strong,{children:"Required"})})]})})]}),"\n",(0,i.jsx)(n.h4,{id:"url-1",children:"url"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"https://github.com/dappnode/DNP_IPFS/issues"\n'})}),"\n",(0,i.jsx)(n.h3,{id:"license",children:"license"}),"\n",(0,i.jsx)(n.p,{children:"Dappnode Package's License."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["is ",(0,i.jsx)(n.strong,{children:"required"})]}),"\n",(0,i.jsxs)(n.li,{children:["type: ",(0,i.jsx)(n.code,{children:"string"})]}),"\n",(0,i.jsx)(n.li,{children:"minimum length: 1 characters"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'"GPL-3.0"\n'})})]})}function o(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(a,{...e})}):a(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>d});var i=s(7294);const r={},l=i.createContext(r);function d(e){const n=i.useContext(l);return i.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:d(e.components),i.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2a82f816.ddd74d96.js b/assets/js/2a82f816.ddd74d96.js deleted file mode 100644 index 653f237e8..000000000 --- a/assets/js/2a82f816.ddd74d96.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[437],{4137:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>N});var n=a(7294);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){l(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function p(e,t){if(null==e)return{};var a,n,l=function(e,t){if(null==e)return{};var a,n,l={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||(l[a]=e[a]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(l[a]=e[a])}return l}var o=n.createContext({}),d=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},s=function(e){var t=d(e.components);return n.createElement(o.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,l=e.mdxType,r=e.originalType,o=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=d(a),k=l,N=u["".concat(o,".").concat(k)]||u[k]||m[k]||r;return a?n.createElement(N,i(i({ref:t},s),{},{components:a})):n.createElement(N,i({ref:t},s))}));function N(e,t){var a=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=a.length,i=new Array(r);i[0]=k;var p={};for(var o in t)hasOwnProperty.call(t,o)&&(p[o]=t[o]);p.originalType=e,p[u]="string"==typeof e?e:l,i[1]=p;for(var d=2;d<r;d++)i[d]=a[d];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}k.displayName="MDXCreateElement"},6267:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>m,frontMatter:()=>r,metadata:()=>p,toc:()=>d});var n=a(7462),l=(a(7294),a(4137));const r={},i="Dappnode Package (DNP) manifest",p={unversionedId:"dev/references/manifest",id:"dev/references/manifest",title:"Dappnode Package (DNP) manifest",description:"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:",source:"@site/docs/dev/references/manifest.md",sourceDirName:"dev/references",slug:"/dev/references/manifest",permalink:"/docs/dev/references/manifest",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/references/manifest.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Docker compose file",permalink:"/docs/dev/references/docker-compose"},next:{title:"Wizard Reference",permalink:"/docs/dev/references/setup-wizard"}},o={},d=[{value:"Example",id:"example",level:2},{value:"Properties reference",id:"properties-reference",level:2},{value:"name",id:"name",level:3},{value:"version",id:"version",level:3},{value:"upstreamVersion",id:"upstreamversion",level:3},{value:"shortDescription",id:"shortdescription",level:3},{value:"description",id:"description",level:3},{value:"type",id:"type",level:3},{value:"chain",id:"chain",level:3},{value:"mainService",id:"mainservice",level:3},{value:"dockerTimeout",id:"dockertimeout",level:3},{value:"dependencies",id:"dependencies",level:3},{value:"requirements",id:"requirements",level:3},{value:"minimumDappnodeVersion",id:"minimumdappnodeversion",level:4},{value:"globalEnvs",id:"globalenvs",level:3},{value:"all",id:"all",level:4},{value:"architectures",id:"architectures",level:3},{value:"backup",id:"backup",level:3},{value:"name",id:"name-1",level:4},{value:"path",id:"path",level:4},{value:"service",id:"service",level:4},{value:"changelog",id:"changelog",level:3},{value:"warnings",id:"warnings",level:3},{value:"onInstall",id:"oninstall",level:4},{value:"onUpdate",id:"onupdate",level:4},{value:"onReset",id:"onreset",level:4},{value:"onRemove",id:"onremove",level:4},{value:"updateAlerts",id:"updatealerts",level:3},{value:"from",id:"from",level:4},{value:"to",id:"to",level:4},{value:"message",id:"message",level:4},{value:"disclaimer",id:"disclaimer",level:3},{value:"message",id:"message-1",level:4},{value:"style",id:"style",level:3},{value:"featuredBackground",id:"featuredbackground",level:4},{value:"featuredColor",id:"featuredcolor",level:4},{value:"featuredAvatarFilter",id:"featuredavatarfilter",level:4},{value:"exposable",id:"exposable",level:3},{value:"name",id:"name-2",level:4},{value:"description",id:"description-1",level:4},{value:"serviceName",id:"servicename",level:4},{value:"port",id:"port",level:4},{value:"author",id:"author",level:3},{value:"contributors",id:"contributors",level:3},{value:"categories",id:"categories",level:3},{value:"keywords",id:"keywords",level:3},{value:"links",id:"links",level:3},{value:"homepage",id:"homepage",level:4},{value:"ui",id:"ui",level:4},{value:"api",id:"api",level:4},{value:"gateway",id:"gateway",level:4},{value:"repository",id:"repository",level:3},{value:"type",id:"type-1",level:4},{value:"url",id:"url",level:4},{value:"directory",id:"directory",level:4},{value:"bugs",id:"bugs",level:3},{value:"url",id:"url-1",level:4},{value:"license",id:"license",level:3}],s={toc:d},u="wrapper";function m(e){let{components:t,...a}=e;return(0,l.kt)(u,(0,n.Z)({},s,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"dappnode-package-dnp-manifest"},"Dappnode Package (DNP) manifest"),(0,l.kt)("p",null,"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"IPFS of BZZ hashes to download its docker image"),(0,l.kt)("li",{parentName:"ul"},"Docker related data to configure and run its container"),(0,l.kt)("li",{parentName:"ul"},"Metadata to control how the package is shown in the admin UI.")),(0,l.kt)("h2",{id:"example"},"Example"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{\n "name": "ipfs.dnp.dappnode.eth",\n "version": "0.2.0",\n "upstreamVersion": "2.6.0-beta",\n "shortDescription": "Distributed file system for storing and accessing data.",\n "description": "Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you\u2019re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API.",\n "type": "service",\n "chain": "ethereum",\n "mainService": "webserver",\n "dockerTimeout": "5min",\n "dependencies": {\n "bitcoin.dnp.dappnode.eth": "^0.1.2",\n "swarm.dnp.dappnode.eth": "latest"\n },\n "requirements": {\n "minimumDappnodeVersion": "0.2.0"\n },\n "globalEnvs": {\n "all": "true"\n },\n "architectures": ["linux/amd64", "linux/arm64"],\n "backup": [\n {\n "name": "keystore",\n "path": "/root/.raiden/secret/keystore",\n "service": "validator"\n }\n ],\n "changelog": "Brief summary of the most relevant changes that the user must known before installing",\n "warnings": {\n "onInstall": "You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly.",\n "onUpdate": "Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site.",\n "onReset": "You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds.",\n "onRemove": "You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."\n },\n "updateAlerts": [\n {\n "from": "0.1.x",\n "to": "0.1.x",\n "message": "Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"\n }\n ],\n "disclaimer": {\n "message": "This software is experimental, presented \u201cas is\u201d and inherently carries risks."\n },\n "style": {\n "featuredBackground": "linear-gradient(to right, #323131, #395353)",\n "featuredColor": "white",\n "featuredAvatarFilter": "invert(1)"\n },\n "exposable": [\n {\n "name": "Geth JSON RPC",\n "description": "JSON RPC endpoint for Geth mainnet",\n "serviceName": "beacon_chain",\n "port": 80\n }\n ],\n "author": "Dappnode Association <admin@dappnode.io> (https://github.com/dappnode)",\n "contributors": [\n "Michael First <developerHanlder@project.io> (https://github.com/developerHanlder)",\n "Michael Second <developerHanlder@project.io> (https://github.com/developerHanlder)"\n ],\n "categories": ["Developer tools", "Blockchain"],\n "keywords": ["DappnodeCore"],\n "links": {\n "homepage": "https://github.com/dappnode/DNP_IPFS#readme",\n "ui": "http://ipfs.dappnode:5001/webui",\n "api": "http://ipfs.dappnode:5001/api/v0",\n "gateway": "http://ipfs.dappnode:8080/ipfs"\n },\n "repository": {\n "type": "git",\n "url": "https://github.com/dappnode/DNP_IPFS.git",\n "directory": "packages/react-dom"\n },\n "bugs": {\n "url": "https://github.com/dappnode/DNP_IPFS/issues"\n },\n "license": "GPL-3.0"\n}\n')),(0,l.kt)("h2",{id:"properties-reference"},"Properties reference"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#name"},"name")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#version"},"version")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#upstreamversion"},"upstreamVersion")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#shortdescription"},"shortDescription")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#description"},"description")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#type"},"type")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"enum")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#chain"},"chain")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"enum")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#mainservice"},"mainService")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#dockertimeout"},"dockerTimeout")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#dependencies"},"dependencies")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#requirements"},"requirements")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#globalenvs"},"globalEnvs")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#architectures"},"architectures")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"enum[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#backup"},"backup")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#changelog"},"changelog")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#warnings"},"warnings")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#updatealerts"},"updateAlerts")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#disclaimer"},"disclaimer")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#style"},"style")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#exposable"},"exposable")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#author"},"author")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#contributors"},"contributors")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#categories"},"categories")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"enum[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#keywords"},"keywords")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string[]")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#links"},"links")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#repository"},"repository")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#bugs"},"bugs")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"object")),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("a",{parentName:"td",href:"#license"},"license")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"string")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))))),(0,l.kt)("h3",{id:"name"},"name"),(0,l.kt)("p",null,"Dappnode Package ENS name."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"ipfs.dnp.dappnode.eth"\n')),(0,l.kt)("h3",{id:"version"},"version"),(0,l.kt)("p",null,"Dappnode Package semantic version (semver)."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"All instances must conform to this regular expression"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-regex"},"^((([0-9]+).([0-9]+).([0-9]+)))$\n")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"test example:\n",(0,l.kt)("a",{parentName:"li",href:"https://regexr.com/?expression=%5E(((%5B0-9%5D%2B).(%5B0-9%5D%2B).(%5B0-9%5D%2B)))%24&text=0.2.0"},"0.2.0"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"0.2.0"\n')),(0,l.kt)("h3",{id:"upstreamversion"},"upstreamVersion"),(0,l.kt)("p",null,"For Dappnode Packages that only wrap existing software (i.e. Bitcoin node, Ethereum node), the underlying software\nversion can be specified here. It will be shown in the admin UI alongside the field ",(0,l.kt)("inlineCode",{parentName:"p"},"version"),"."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"2.6.0-beta"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"any-text"\n')),(0,l.kt)("h3",{id:"shortdescription"},"shortDescription"),(0,l.kt)("p",null,"Short Dappnode Package description, 6-8 words sentence briefly describing the purpose of this Dappnode Package. The\npurpose is to quickly grab users' attention and clearly define its purpose. Markdown is discouraged as it will NOT be\nrendered on the Dappnode Package store view."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Distributed file system for storing and accessing data."\n')),(0,l.kt)("h3",{id:"description"},"description"),(0,l.kt)("p",null,"Dappnode Package description. Markdown and links are allowed and ecouraged to give users the option to read more\ninformation about this Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you\u2019re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API."\n')),(0,l.kt)("h3",{id:"type"},"type"),(0,l.kt)("p",null,"Type of this Dappnode Package. It is used to trigger some special features such as core functionality."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"default: ",(0,l.kt)("inlineCode",{parentName:"li"},'"service"')),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"The value of this property ",(0,l.kt)("strong",{parentName:"p"},"must")," be equal to one of the known values below."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"service")),(0,l.kt)("td",{parentName:"tr",align:null},"Can have ENVs a depend on library Dappnode Packages")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"library")),(0,l.kt)("td",{parentName:"tr",align:null},"Should not have ENVs and cannot depend on service Dappnode Packages")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"dncore")),(0,l.kt)("td",{parentName:"tr",align:null},"Dappnode Packages that are part of the Dappnode core and have special permissions")))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"service"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"dncore"\n')),(0,l.kt)("h3",{id:"chain"},"chain"),(0,l.kt)("p",null,"Indicate that this Dappnode Package is a blockchain node so the admin UI shows its syncing status"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"The value of this property ",(0,l.kt)("strong",{parentName:"p"},"must")," be equal to one of the known values below."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"ethereum")),(0,l.kt)("td",{parentName:"tr",align:null},"Must have an Ethereum JSON RPC exposed internally at port 8545")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"bitcoin")),(0,l.kt)("td",{parentName:"tr",align:null},"Must have a standard Bitcoin JSON API exposed at the default port (8332). Uses the NPM package ",(0,l.kt)("inlineCode",{parentName:"td"},"bitcoin-core"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"monero")),(0,l.kt)("td",{parentName:"tr",align:null},"Must have a Monero API exposed internally at port 18081. Uses the NPM package ",(0,l.kt)("inlineCode",{parentName:"td"},"monero-rpc"))))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"ethereum"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"bitcoin"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"monero"\n')),(0,l.kt)("h3",{id:"mainservice"},"mainService"),(0,l.kt)("p",null,"For multi-service packages, indicate which service is the main one. The root ENS domain of this package will be mapped\nto this service IP."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"webserver"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"backend"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"service1"\n')),(0,l.kt)("h3",{id:"dockertimeout"},"dockerTimeout"),(0,l.kt)("p",null,"Modify the default Docker timeout of 10 seconds. It affects package updates, removals, container restarts, start and\nstop, updating config environments and port mappings. You can either pass a numerical value in seconds or a string\nrepresentation parsed with ",(0,l.kt)("a",{parentName:"p",href:"http://npmjs.com/package/timestring"},"timestring"),". Available from DAPPMANAGER v0.2.36"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"5min"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"60"\n')),(0,l.kt)("h3",{id:"dependencies"},"dependencies"),(0,l.kt)("p",null,"Dappnode Package dependencies. Must be an object where the keys are the Dappnode Package's ENS. The values must be a\nsemantic range, i.e. ",(0,l.kt)("inlineCode",{parentName:"p"},"'0.2.0'"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"'^0.2.1'"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"'*'"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"'latest'"),",\n",(0,l.kt)("inlineCode",{parentName:"p"},"'/ipfs/QmWwMb3XhuCH6JnCF6m6EQzA4mW9pHHtg7rqAfhDr2ofi8'"),"."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required")))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{\n "bitcoin.dnp.dappnode.eth": "^0.1.2",\n "swarm.dnp.dappnode.eth": "latest"\n}\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'{\n "only-for-dev-1.dappnode.eth": "/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o",\n "only-for-dev-2.dappnode.eth": "/ipfs/zdj7WWeQ43G6JJvLWQWZpyHuAMq6uYWRjkBXFad11vE2LHhQ7"\n}\n')),(0,l.kt)("h3",{id:"requirements"},"requirements"),(0,l.kt)("p",null,"Specify requirements to be met before allowing users to install this Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"minimumDappnodeVersion")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"minimumdappnodeversion"},"minimumDappnodeVersion"),(0,l.kt)("p",null,"Minimum Dappnode version that includes all the features necessary to run this Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"All instances must conform to this regular expression"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-regex"},"^((([0-9]+).([0-9]+).([0-9]+)))$\n")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"test example:\n",(0,l.kt)("a",{parentName:"li",href:"https://regexr.com/?expression=%5E(((%5B0-9%5D%2B).(%5B0-9%5D%2B).(%5B0-9%5D%2B)))%24&text=0.2.0"},"0.2.0"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"0.2.0"\n')),(0,l.kt)("h3",{id:"globalenvs"},"globalEnvs"),(0,l.kt)("p",null,"Request the DAPPMANAGER to inject global ENVs to this package's containers"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"all")),(0,l.kt)("td",{parentName:"tr",align:null},"boolean"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"all"},"all"),(0,l.kt)("p",null,"Request the DAPPMANAGER to inject all available global ENVs"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"boolean"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"true"\n')),(0,l.kt)("h3",{id:"architectures"},"architectures"),(0,l.kt)("p",null,"Build and distribute this package in multiple architectures using\n",(0,l.kt)("a",{parentName:"p",href:"https://docs.docker.com/buildx/working-with-buildx/"},"Docker's buildx plugin")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"enum[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"string")),(0,l.kt)("p",null,"The value of this property ",(0,l.kt)("strong",{parentName:"p"},"must")," be equal to one of the known values below."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"linux/amd64")),(0,l.kt)("td",{parentName:"tr",align:null},"Default architecture, x86-64")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"linux/arm64")),(0,l.kt)("td",{parentName:"tr",align:null},"ARM architecture")))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'["linux/amd64", "linux/arm64"]\n')),(0,l.kt)("h3",{id:"backup"},"backup"),(0,l.kt)("p",null,"Allows users to download and restore a backup of key files of this package. If this property is non-empty array, a new\nview will be available in the admin UI for this Dappnode Package. The files or directories specified in the array will\nbe bundled in a tarball. As long as the name properties stay the same, their associated paths can change in future\nversions. Then, when restoring an old backup, the new paths will be associated to files stored under the same name\nkeys. ",(0,l.kt)("strong",{parentName:"p"},"Note:")," it is recommended to only backup lightweight files such as configs, keys or passwords."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"object")," with the following properties:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"name")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"path")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"service")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"name-1"},"name"),(0,l.kt)("p",null,"A key identifier of this file or directory. Its purpose is to allow the path to change in the future."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"keystore"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"config"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"keys"\n')),(0,l.kt)("h4",{id:"path"},"path"),(0,l.kt)("p",null,"Path to the file or directory to backup. It ",(0,l.kt)("strong",{parentName:"p"},"MUST")," be an absolute path (do not use the ",(0,l.kt)("inlineCode",{parentName:"p"},"~")," character) for the backup\ntool to work correctly."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"/root/.raiden/secret/keystore"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"/usr/src/app/config.json"\n')),(0,l.kt)("h4",{id:"service"},"service"),(0,l.kt)("p",null,"Service to which the path belongs to. Must be equal to the name used in the docker-compose services object"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"validator"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"service1"\n')),(0,l.kt)("h3",{id:"changelog"},"changelog"),(0,l.kt)("p",null,"Description of relevant changes of this specific version. Supports markdown and links."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Brief summary of the most relevant changes that the user must known before installing"\n')),(0,l.kt)("h3",{id:"warnings"},"warnings"),(0,l.kt)("p",null,"Very relevant information that MUST be shown to the user BEFORE executing a specific action in the Dappnode Package's\nlifecycle."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"onInstall")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"onUpdate")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"onReset")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"onRemove")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"oninstall"},"onInstall"),(0,l.kt)("p",null,"Will be shown before installing the Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly."\n')),(0,l.kt)("h4",{id:"onupdate"},"onUpdate"),(0,l.kt)("p",null,"Will be shown before updating the Dappnode Package, not in the first installation."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site."\n')),(0,l.kt)("h4",{id:"onreset"},"onReset"),(0,l.kt)("p",null,"Will be shown before resetting the Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds."\n')),(0,l.kt)("h4",{id:"onremove"},"onRemove"),(0,l.kt)("p",null,"Will be shown before removing the Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."\n')),(0,l.kt)("h3",{id:"updatealerts"},"updateAlerts"),(0,l.kt)("p",null,"Alerts targeted to a specific update jump."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"object")," with the following properties:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"from")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required")),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"to")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},'"*"'))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"message")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required")),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("h4",{id:"from"},"from"),(0,l.kt)("p",null,"Semver range, show this message when a user updates this Dappnode Package FROM a version that satisfies this range."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"0.1.x"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"^0.2.0"\n')),(0,l.kt)("h4",{id:"to"},"to"),(0,l.kt)("p",null,"Semver range, show this message when a user updates this Dappnode Package TO a version that satisfies this range."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"default: ",(0,l.kt)("inlineCode",{parentName:"li"},'"*"')),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"0.1.x"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"^0.2.0"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"*"\n')),(0,l.kt)("h4",{id:"message"},"message"),(0,l.kt)("p",null,"Alert message to be shown when ",(0,l.kt)("inlineCode",{parentName:"p"},"from")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"to")," ranges are satisfied."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"\n')),(0,l.kt)("p",null,"Specific update jump alert."),(0,l.kt)("h3",{id:"disclaimer"},"disclaimer"),(0,l.kt)("p",null,"Disclaimer to be shown to the user on install, and will require the user to approve it."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"message")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))))),(0,l.kt)("h4",{id:"message-1"},"message"),(0,l.kt)("p",null,"The message shown in the pop-up. Markdown and links are allowed."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"This software is experimental, presented \u201cas is\u201d and inherently carries risks."\n')),(0,l.kt)("h3",{id:"style"},"style"),(0,l.kt)("p",null,"Graphic information to control the appearance of Dappnode Package related items in the admin UI."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"featuredBackground")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"featuredColor")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"featuredAvatarFilter")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"featuredbackground"},"featuredBackground"),(0,l.kt)("p",null,"CSS background property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the\n",(0,l.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/docs/Web/CSS/background"},"Mozilla CSS background reference")," for valid values."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"linear-gradient(to right, #323131, #395353)"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"black"\n')),(0,l.kt)("h4",{id:"featuredcolor"},"featuredColor"),(0,l.kt)("p",null,"CSS color property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the\n",(0,l.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/docs/Web/CSS/color"},"Mozilla CSS color reference")," for valid values."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"white"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"#fff"\n')),(0,l.kt)("h4",{id:"featuredavatarfilter"},"featuredAvatarFilter"),(0,l.kt)("p",null,"CSS filter property to be applied to ",(0,l.kt)("inlineCode",{parentName:"p"},"<img>")," component (avatar) of the Dappnode Package card in the Dappnode Package\nstore if featured. Go to the ",(0,l.kt)("a",{parentName:"p",href:"https://developer.mozilla.org/docs/Web/CSS/filter"},"Mozilla CSS filter reference")," for\nvalid values."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"invert(1)"\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"grayscale(80%);"\n')),(0,l.kt)("h3",{id:"exposable"},"exposable"),(0,l.kt)("p",null,"Exposable services safe to be in the public internet"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"object")," with the following properties:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"name")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"description")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"serviceName")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"port")),(0,l.kt)("td",{parentName:"tr",align:null},"number"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"fromSubdomain")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"name-2"},"name"),(0,l.kt)("p",null,"Short human readable name of this exposable service"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Geth JSON RPC"\n')),(0,l.kt)("h4",{id:"description-1"},"description"),(0,l.kt)("p",null,"Description of this exposable service"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"JSON RPC endpoint for Geth mainnet"\n')),(0,l.kt)("h4",{id:"servicename"},"serviceName"),(0,l.kt)("p",null,"Docker compose service this exposable service belongs to. Defaults to the first service."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"beacon_chain"\n')),(0,l.kt)("h4",{id:"port"},"port"),(0,l.kt)("p",null,"Port this exposable service listens to"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"number"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"80\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"5001\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"8545\n")),(0,l.kt)("p",null,"Single exposable service item"),(0,l.kt)("h3",{id:"author"},"author"),(0,l.kt)("p",null,"Main author of this Dappnode Package. Must follow the structure ",(0,l.kt)("inlineCode",{parentName:"p"},"${name} <${email}> (${githubUserLink})"),"."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"Dappnode Association <admin@dappnode.io> (https://github.com/dappnode)"\n')),(0,l.kt)("h3",{id:"contributors"},"contributors"),(0,l.kt)("p",null,"Contributing authors of this Dappnode Package."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"string")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Contributor author. Must follow the structure ",(0,l.kt)("inlineCode",{parentName:"p"},"${name} <${email}> (${githubUserLink})"),"."),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'[\n "Michael First <developerHanlder@project.io> (https://github.com/developerHanlder)",\n "Michael Second <developerHanlder@project.io> (https://github.com/developerHanlder)"\n]\n')),(0,l.kt)("h3",{id:"categories"},"categories"),(0,l.kt)("p",null,"Categories to organize and group Dappnode Packages in the Dappnode Package store. Only one or two categories maximum\nshould be specified per package. If you feel that any of the current categories represent the nature of your package,\nplease open an issue requesting a new category ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/dappnode/dnp-manifest/issues/new"},"https://github.com/dappnode/dnp-manifest/issues/new")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"enum[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"string")),(0,l.kt)("p",null,"The value of this property ",(0,l.kt)("strong",{parentName:"p"},"must")," be equal to one of the known values below."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Value"),(0,l.kt)("th",{parentName:"tr",align:null},"Description"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Blockchain")),(0,l.kt)("td",{parentName:"tr",align:null},"Blockchain nodes, i.e. Bitcoin, Monero")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Communications")),(0,l.kt)("td",{parentName:"tr",align:null},"Decentralized networking or chat solutions, i.e. Swarm")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Developer tools")),(0,l.kt)("td",{parentName:"tr",align:null},"Packages that their main purpose is to aid in developing, i.e. testnets")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"ETH2.0")),(0,l.kt)("td",{parentName:"tr",align:null},"Packages to participate or use the Eth2.0 network")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Economic incentive")),(0,l.kt)("td",{parentName:"tr",align:null},"Packages that offer an economic incentive or reward to the admin that runs it, i.e. Lightning Network")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Monitoring")),(0,l.kt)("td",{parentName:"tr",align:null},"Packages that track metrics")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Payment channels")),(0,l.kt)("td",{parentName:"tr",align:null},"Packages whose main purpose is to manage or control payment channels, i.e. Raiden")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Storage")),(0,l.kt)("td",{parentName:"tr",align:null},"Decentralized storage solutions, i.e. Swarm")))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'["Developer tools", "Blockchain"]\n')),(0,l.kt)("h3",{id:"keywords"},"keywords"),(0,l.kt)("p",null,"Keywords, relevant and descriptive of this Dappnode Package. They will be shown in the admin UI Dappnode Package store."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"string")),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Single keyword."),(0,l.kt)("h3",{id:"links"},"links"),(0,l.kt)("p",null,"Various links (URLs) useful for the user of this package. All links will be shown in the dedicated view of this package\nin the admin UI. The predefined links properties below will be shown with concept related icons. Other links will be\nshown as well but with their plain name instead of an icon."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"homepage")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"ui")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"api")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"gateway")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"homepage"},"homepage"),(0,l.kt)("p",null,"Url to an informative homepage for this Dappnode Package. Should be a README or landing website."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"https://github.com/dappnode/DNP_IPFS#readme"\n')),(0,l.kt)("h4",{id:"ui"},"ui"),(0,l.kt)("p",null,"Url to this DNP's Dappnode local UI."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"http://ipfs.dappnode:5001/webui"\n')),(0,l.kt)("h4",{id:"api"},"api"),(0,l.kt)("p",null,"Url to this DNP's Dappnode local HTTP API endpoint."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"http://ipfs.dappnode:5001/api/v0"\n')),(0,l.kt)("h4",{id:"gateway"},"gateway"),(0,l.kt)("p",null,"Url to this DNP's Dappnode local gateway."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"http://ipfs.dappnode:8080/ipfs"\n')),(0,l.kt)("h3",{id:"repository"},"repository"),(0,l.kt)("p",null,"Dappnode Package's repository. Must be a publicly available url that can be handed directly to a VCS program."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"type")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"url")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"directory")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional")))),(0,l.kt)("h4",{id:"type-1"},"type"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"git"\n')),(0,l.kt)("h4",{id:"url"},"url"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"https://github.com/dappnode/DNP_IPFS.git"\n')),(0,l.kt)("h4",{id:"directory"},"directory"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"packages/react-dom"\n')),(0,l.kt)("h3",{id:"bugs"},"bugs"),(0,l.kt)("p",null,"Url to your project\u2019s issue tracker."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object")," with the following properties:")),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"url")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required"))))),(0,l.kt)("h4",{id:"url-1"},"url"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"https://github.com/dappnode/DNP_IPFS/issues"\n')),(0,l.kt)("h3",{id:"license"},"license"),(0,l.kt)("p",null,"Dappnode Package's License."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"minimum length: 1 characters")),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-json"},'"GPL-3.0"\n')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2c509ddc.7435ed98.js b/assets/js/2c509ddc.7435ed98.js new file mode 100644 index 000000000..5f90d57a2 --- /dev/null +++ b/assets/js/2c509ddc.7435ed98.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4840],{4550:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>n,toc:()=>h});var i=o(5893),s=o(1151);const r={},a="Manual Subscription",n={id:"smooth/subscribe-to-smooth/manual",title:"Manual Subscription",description:"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from Smooth.",source:"@site/docs/smooth/subscribe-to-smooth/manual.md",sourceDirName:"smooth/subscribe-to-smooth",slug:"/smooth/subscribe-to-smooth/manual",permalink:"/docs/smooth/subscribe-to-smooth/manual",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/subscribe-to-smooth/manual.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Automatic Subscription",permalink:"/docs/smooth/subscribe-to-smooth/automatic"},next:{title:"Unsubscribing from Smooth.",permalink:"/docs/smooth/unsubscribe-from-smooth"}},d={},h=[{value:"Step 1: Change your fee recipient to Smooth's address.",id:"step-1-change-your-fee-recipient-to-smooths-address",level:3},{value:"Step 2: Log in to Smooth's website.",id:"step-2-log-in-to-smooths-website",level:3},{value:"Step 3: Select your validator.",id:"step-3-select-your-validator",level:3},{value:"Scenario 1: Validator is not registered to any MEV relay.",id:"scenario-1-validator-is-not-registered-to-any-mev-relay",level:4},{value:"Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay.",id:"scenario-2-validator-registered-to-mev-relays-but-without-smooths-address-as-fee-recipient-in-any-relay",level:4},{value:"Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays.",id:"scenario-3-validator-does-not-have-the-smooths-address-as-fee-recipient-in-some-relays",level:4},{value:"Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set.",id:"scenario-4-validator-is-registered-to-at-least-one-mev-relay-and-has-the-correct-fee-recipient-set",level:4},{value:"Step 4: Confirm Relays check.",id:"step-4-confirm-relays-check",level:3},{value:"Step 5: Make the deposit and subscribe!",id:"step-5-make-the-deposit-and-subscribe",level:3},{value:"Troubleshooting.",id:"troubleshooting",level:2}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",p:"p",strong:"strong",...(0,s.a)(),...e.components},{Details:r}=t;return r||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"manual-subscription",children:"Manual Subscription"}),"\n",(0,i.jsxs)(t.p,{children:["Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["The manual subscription is done through ",(0,i.jsx)(t.strong,{children:(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})}),"."]}),"\n",(0,i.jsx)(t.h3,{id:"step-1-change-your-fee-recipient-to-smooths-address",children:"Step 1: Change your fee recipient to Smooth's address."}),"\n",(0,i.jsxs)(t.p,{children:["Change the fee recipient of your validator to Smooth's address, just as if you were subscribing automatically. In Dappnode, this process is as simple as changing the fee recipient in your ",(0,i.jsx)(t.a,{href:"http://brain.web3signer.dappnode/",children:"staking brain"}),"."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"fee_recipient",src:o(4257).Z+"",width:"2728",height:"552"})}),"\n",(0,i.jsxs)(t.p,{children:[(0,i.jsx)(t.strong,{children:"This step is extremely important"}),". Make sure you're changing the fee recipient of the validators you are going to manually subscribe and that the fee recipient is correctly set to Smooth's address (",(0,i.jsx)(t.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),"). If a subscribed validator proposes a block with an incorrect fee recipient, it will be banned from ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and will not be able to participate in it again."]}),"\n",(0,i.jsx)(t.admonition,{title:"Keep the fee recipient set to Smooth's address!",type:"danger",children:(0,i.jsxs)(t.p,{children:["It is crucial that you keep the fee recipient of your validator set to Smooth's address (",(0,i.jsx)(t.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),") as long as it is subscribed to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and will not be able to participate in it again."]})}),"\n",(0,i.jsx)(t.h3,{id:"step-2-log-in-to-smooths-website",children:"Step 2: Log in to Smooth's website."}),"\n",(0,i.jsxs)(t.p,{children:["Go to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear."]}),"\n",(0,i.jsx)(t.h3,{id:"step-3-select-your-validator",children:"Step 3: Select your validator."}),"\n",(0,i.jsxs)(t.p,{children:["Select the validator you want to subscribe to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),' by clicking on the "Subscribe" button.\n',(0,i.jsx)(t.img,{alt:"my_validators",src:o(2824).Z+"",width:"1033",height:"393"})]}),"\n",(0,i.jsxs)(t.p,{children:['When clicking on the "Subscribe" button, ',(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," will check if your validator is registered to any MEV relay. If it is, it will also check if the fee recipient of your validator is set to Smooth's address in each relay. ",(0,i.jsx)(t.strong,{children:"Four different dialogs can appear"}),", depending on the state of your validator and the MEV relays it is registered to."]}),"\n",(0,i.jsx)(t.h4,{id:"scenario-1-validator-is-not-registered-to-any-mev-relay",children:"Scenario 1: Validator is not registered to any MEV relay."}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_no_relays.png",alt:"no_relays",width:"400"})}),"\n",(0,i.jsxs)(t.p,{children:['When doing a manual subscription, it is obligatory to be registered in at least one MEV relay. In Dappnode, registering and using a relay is as simple as selecting the desired relay in the "MEV Boost" Card at the ',(0,i.jsx)(t.a,{href:"http://my.dappnode/stakers/ethereum/",children:"Stakers UI"}),". Once you have selected at least one relay, you can go back to the ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),' website and click on the "Subscribe" button again.']}),"\n",(0,i.jsx)(t.h4,{id:"scenario-2-validator-registered-to-mev-relays-but-without-smooths-address-as-fee-recipient-in-any-relay",children:"Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay."}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_subscription_norelays.png",alt:"incorrect_fee_recipient",width:"400"})}),"\n",(0,i.jsx)(t.p,{children:"Please make sure that you have correctly done the first step of this guide! This dialog means that not a single relay has reflected your fee recipient change to Smooth's address. If running a dappnode, make sure your MEV boost package is running!"}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsx)(t.p,{children:'It can take up to a few minutes for relays to reflect your fee recipient change. If you have already changed your fee recipient but this alert still appears, please check the "Troubleshooting" section down below for more information.'})}),"\n",(0,i.jsx)(t.h4,{id:"scenario-3-validator-does-not-have-the-smooths-address-as-fee-recipient-in-some-relays",children:"Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays."}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_incorrect_fee_recipient.png",alt:"incorrect_fee_recipient",width:"400"})}),"\n",(0,i.jsxs)(t.p,{children:["If this dialog appears, it means that your validator's fee recipient is set to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," in some relays while also being set to an incorrect address in others. This situation likely arises because your validator was registered in a relay it no longer uses, and the fee recipient in that specific relay wasn't updated accordingly."]}),"\n",(0,i.jsx)(t.admonition,{type:"info",children:(0,i.jsx)(t.p,{children:'Relays that you no longer use won\'t reflect the fee recipient changes you did for each validator in your staking brain. If you have already changed your fee recipient but the warning still appears, please check the "Troubleshooting" section down below for more information.'})}),"\n",(0,i.jsx)(t.h4,{id:"scenario-4-validator-is-registered-to-at-least-one-mev-relay-and-has-the-correct-fee-recipient-set",children:"Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set."}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_correct_fee_recipient.png",alt:"correct_fee_recipient",width:"400"})}),"\n",(0,i.jsxs)(t.p,{children:["This is the dialog you want to see! If you see this dialog, it means that your validator is registered to at least one MEV relay, and that the fee recipient of your validator is set to Smooth's address in all relays it has been registered to. In other words, this means that your validator is ready to subscribe to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"!"]}),"\n",(0,i.jsx)(t.h3,{id:"step-4-confirm-relays-check",children:"Step 4: Confirm Relays check."}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_mev_blocks.png",alt:"mev_blocks",width:"400"})}),"\n",(0,i.jsx)(t.p,{children:'This step is just a confirmation of the relays your validator has the correct fee recipient set in. Click on "Next" to continue the subscription process, we\'re almost there!'}),"\n",(0,i.jsx)(t.h3,{id:"step-5-make-the-deposit-and-subscribe",children:"Step 5: Make the deposit and subscribe!"}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_make_deposit.png",alt:"deposit",width:"400"})}),"\n",(0,i.jsxs)(t.p,{children:["This is the last step! Here, you will make the deposit to subscribe your validator to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". The deposit is a one-time upfront payment that will be returned to you as Claimable rewards when proposing your first block to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". The deposit is 0.01 ETH, and it is used to prevent spam and malicious validators from subscribing to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]}),"\n",(0,i.jsxs)(t.p,{children:["Once the deposit transaction is processed by the chain, your validator will be subscribed to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and you will start receiving rewards from other members of the pool!"]}),"\n",(0,i.jsx)("p",{align:"center",children:(0,i.jsx)("img",{src:"/img/smooth_subscribe_success.png",alt:"subscription_success",width:"400"})}),"\n",(0,i.jsx)(t.admonition,{type:"caution",children:(0,i.jsxs)(t.p,{children:['Since the Oracle operates with only finalized data, it will take up to 35 minutes to process your subscription. Your "My Validator" table will be updated instantly, but it may take a while to see how "Total Subscribers" counter increases. To know more, visit the ',(0,i.jsx)(t.a,{href:"/docs/smooth/deep-dive-into-smooth/overview",children:"Deep Dive into Smooth"})," section."]})}),"\n",(0,i.jsx)(t.h2,{id:"troubleshooting",children:"Troubleshooting."}),"\n",(0,i.jsxs)(r,{children:[(0,i.jsx)("summary",{children:(0,i.jsxs)("strong",{children:["I have changed my fee recipient but the ",(0,i.jsx)("i",{children:'"Fee recipient warning"'})," warning still appears!"]})}),(0,i.jsxs)(t.p,{children:["If you have changed your fee recipient to Smooth's address (",(0,i.jsx)("code",{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),") but this warning still appears, it could be because of two reasons:"]}),(0,i.jsxs)("ul",{children:[(0,i.jsx)("li",{children:"The relays you are registered to are not reflecting the change in the fee recipient yet. It can take up to a few minutes for the relays to reflect your fee recipient update. This is something that is out of Smooth's control. We recommend you to wait a few minutes and try again."}),(0,i.jsxs)("li",{children:["The fee recipient is only updated in your current ",(0,i.jsx)("strong",{children:"active"})," relays. This means that if you used to be registered to a relay, but you are not using it anymore, the fee recipient of your validator will not be updated in that relay. This is something expected and that it wont affect your validator's subscription to ",(0,i.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". If you want to update the fee recipient in the relays you are no longer registered to, you can quickly register and unregister again to the outdated relays to force an update the fee recipient there."]})]}),(0,i.jsxs)(t.p,{children:["To clarify: As long as the fee recipient of your validator is set to Smooth's address in your ",(0,i.jsx)("a",{href:"http://brain.web3signer.dappnode/",children:"staking brain"}),", you can continue the subscription process normally."]})]})]})}function l(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},4257:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/smooth_fee_recipient-9a97308ed0c601ccc84b0295efe34cd4.png"},2824:(e,t,o)=>{o.d(t,{Z:()=>i});const i=o.p+"assets/images/smooth_my_validators-72848a79b68c9a1ab67d754537f6e2c9.png"},1151:(e,t,o)=>{o.d(t,{Z:()=>n,a:()=>a});var i=o(7294);const s={},r=i.createContext(s);function a(e){const t=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function n(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/2c509ddc.b72b7b21.js b/assets/js/2c509ddc.b72b7b21.js deleted file mode 100644 index 7ae089431..000000000 --- a/assets/js/2c509ddc.b72b7b21.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4840],{4137:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>m});var a=o(7294);function i(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,a)}return o}function s(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?r(Object(o),!0).forEach((function(t){i(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function n(e,t){if(null==e)return{};var o,a,i=function(e,t){if(null==e)return{};var o,a,i={},r=Object.keys(e);for(a=0;a<r.length;a++)o=r[a],t.indexOf(o)>=0||(i[o]=e[o]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)o=r[a],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(i[o]=e[o])}return i}var l=a.createContext({}),p=function(e){var t=a.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):s(s({},t),e)),o},c=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},d="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var o=e.components,i=e.mdxType,r=e.originalType,l=e.parentName,c=n(e,["components","mdxType","originalType","parentName"]),d=p(o),u=i,m=d["".concat(l,".").concat(u)]||d[u]||h[u]||r;return o?a.createElement(m,s(s({ref:t},c),{},{components:o})):a.createElement(m,s({ref:t},c))}));function m(e,t){var o=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=o.length,s=new Array(r);s[0]=u;var n={};for(var l in t)hasOwnProperty.call(t,l)&&(n[l]=t[l]);n.originalType=e,n[d]="string"==typeof e?e:i,s[1]=n;for(var p=2;p<r;p++)s[p]=o[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,o)}u.displayName="MDXCreateElement"},9700:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>h,frontMatter:()=>r,metadata:()=>n,toc:()=>p});var a=o(7462),i=(o(7294),o(4137));const r={},s="Manual Subscription",n={unversionedId:"smooth/subscribe-to-smooth/manual",id:"smooth/subscribe-to-smooth/manual",title:"Manual Subscription",description:"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from Smooth.",source:"@site/docs/smooth/subscribe-to-smooth/manual.md",sourceDirName:"smooth/subscribe-to-smooth",slug:"/smooth/subscribe-to-smooth/manual",permalink:"/docs/smooth/subscribe-to-smooth/manual",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/subscribe-to-smooth/manual.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Automatic Subscription",permalink:"/docs/smooth/subscribe-to-smooth/automatic"},next:{title:"Unsubscribing from Smooth.",permalink:"/docs/smooth/unsubscribe-from-smooth"}},l={},p=[{value:"Step 1: Change your fee recipient to Smooth's address.",id:"step-1-change-your-fee-recipient-to-smooths-address",level:3},{value:"Step 2: Log in to Smooth's website.",id:"step-2-log-in-to-smooths-website",level:3},{value:"Step 3: Select your validator.",id:"step-3-select-your-validator",level:3},{value:"Scenario 1: Validator is not registered to any MEV relay.",id:"scenario-1-validator-is-not-registered-to-any-mev-relay",level:4},{value:"Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay.",id:"scenario-2-validator-registered-to-mev-relays-but-without-smooths-address-as-fee-recipient-in-any-relay",level:4},{value:"Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays.",id:"scenario-3-validator-does-not-have-the-smooths-address-as-fee-recipient-in-some-relays",level:4},{value:"Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set.",id:"scenario-4-validator-is-registered-to-at-least-one-mev-relay-and-has-the-correct-fee-recipient-set",level:4},{value:"Step 4: Confirm Relays check.",id:"step-4-confirm-relays-check",level:3},{value:"Step 5: Make the deposit and subscribe!",id:"step-5-make-the-deposit-and-subscribe",level:3},{value:"Troubleshooting.",id:"troubleshooting",level:2}],c={toc:p},d="wrapper";function h(e){let{components:t,...r}=e;return(0,i.kt)(d,(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"manual-subscription"},"Manual Subscription"),(0,i.kt)("p",null,"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),"."),(0,i.kt)("p",null,"The manual subscription is done through ",(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("a",{parentName:"strong",href:"https://smooth.dappnode.io/"},"Smooth's website")),". "),(0,i.kt)("h3",{id:"step-1-change-your-fee-recipient-to-smooths-address"},"Step 1: Change your fee recipient to Smooth's address."),(0,i.kt)("p",null,"Change the fee recipient of your validator to Smooth's address, just as if you were subscribing automatically. In Dappnode, this process is as simple as changing the fee recipient in your ",(0,i.kt)("a",{parentName:"p",href:"http://brain.web3signer.dappnode/"},"staking brain"),"."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"fee_recipient",src:o(4257).Z,width:"2728",height:"552"})),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"This step is extremely important"),". Make sure you're changing the fee recipient of the validators you are going to manually subscribe and that the fee recipient is correctly set to Smooth's address (",(0,i.kt)("inlineCode",{parentName:"p"},"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"),"). If a subscribed validator proposes a block with an incorrect fee recipient, it will be banned from ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," and will not be able to participate in it again."),(0,i.kt)("admonition",{title:"Keep the fee recipient set to Smooth's address!",type:"danger"},(0,i.kt)("p",{parentName:"admonition"},"It is crucial that you keep the fee recipient of your validator set to Smooth's address (",(0,i.kt)("inlineCode",{parentName:"p"},"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"),") as long as it is subscribed to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," and will not be able to participate in it again.")),(0,i.kt)("h3",{id:"step-2-log-in-to-smooths-website"},"Step 2: Log in to Smooth's website."),(0,i.kt)("p",null,"Go to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth's website")," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear."),(0,i.kt)("h3",{id:"step-3-select-your-validator"},"Step 3: Select your validator."),(0,i.kt)("p",null,"Select the validator you want to subscribe to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),' by clicking on the "Subscribe" button.\n',(0,i.kt)("img",{alt:"my_validators",src:o(2824).Z,width:"1033",height:"393"})),(0,i.kt)("p",null,'When clicking on the "Subscribe" button, ',(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," will check if your validator is registered to any MEV relay. If it is, it will also check if the fee recipient of your validator is set to Smooth's address in each relay. ",(0,i.kt)("strong",{parentName:"p"},"Four different dialogs can appear"),", depending on the state of your validator and the MEV relays it is registered to."),(0,i.kt)("h4",{id:"scenario-1-validator-is-not-registered-to-any-mev-relay"},"Scenario 1: Validator is not registered to any MEV relay."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_no_relays.png",alt:"no_relays",width:"400"})),(0,i.kt)("p",null,'When doing a manual subscription, it is obligatory to be registered in at least one MEV relay. In Dappnode, registering and using a relay is as simple as selecting the desired relay in the "MEV Boost" Card at the ',(0,i.kt)("a",{parentName:"p",href:"http://my.dappnode/stakers/ethereum/"},"Stakers UI"),". Once you have selected at least one relay, you can go back to the ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),' website and click on the "Subscribe" button again.'),(0,i.kt)("h4",{id:"scenario-2-validator-registered-to-mev-relays-but-without-smooths-address-as-fee-recipient-in-any-relay"},"Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_subscription_norelays.png",alt:"incorrect_fee_recipient",width:"400"})),(0,i.kt)("p",null,"Please make sure that you have correctly done the first step of this guide! This dialog means that not a single relay has reflected your fee recipient change to Smooth's address. If running a dappnode, make sure your MEV boost package is running!"),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},'It can take up to a few minutes for relays to reflect your fee recipient change. If you have already changed your fee recipient but this alert still appears, please check the "Troubleshooting" section down below for more information.')),(0,i.kt)("h4",{id:"scenario-3-validator-does-not-have-the-smooths-address-as-fee-recipient-in-some-relays"},"Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_incorrect_fee_recipient.png",alt:"incorrect_fee_recipient",width:"400"})),(0,i.kt)("p",null,"If this dialog appears, it means that your validator's fee recipient is set to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," in some relays while also being set to an incorrect address in others. This situation likely arises because your validator was registered in a relay it no longer uses, and the fee recipient in that specific relay wasn't updated accordingly."),(0,i.kt)("admonition",{type:"info"},(0,i.kt)("p",{parentName:"admonition"},'Relays that you no longer use won\'t reflect the fee recipient changes you did for each validator in your staking brain. If you have already changed your fee recipient but the warning still appears, please check the "Troubleshooting" section down below for more information.')),(0,i.kt)("h4",{id:"scenario-4-validator-is-registered-to-at-least-one-mev-relay-and-has-the-correct-fee-recipient-set"},"Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_correct_fee_recipient.png",alt:"correct_fee_recipient",width:"400"})),(0,i.kt)("p",null,"This is the dialog you want to see! If you see this dialog, it means that your validator is registered to at least one MEV relay, and that the fee recipient of your validator is set to Smooth's address in all relays it has been registered to. In other words, this means that your validator is ready to subscribe to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),"!"),(0,i.kt)("h3",{id:"step-4-confirm-relays-check"},"Step 4: Confirm Relays check."),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_mev_blocks.png",alt:"mev_blocks",width:"400"})),(0,i.kt)("p",null,'This step is just a confirmation of the relays your validator has the correct fee recipient set in. Click on "Next" to continue the subscription process, we\'re almost there!'),(0,i.kt)("h3",{id:"step-5-make-the-deposit-and-subscribe"},"Step 5: Make the deposit and subscribe!"),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_make_deposit.png",alt:"deposit",width:"400"})),(0,i.kt)("p",null,"This is the last step! Here, you will make the deposit to subscribe your validator to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". The deposit is a one-time upfront payment that will be returned to you as Claimable rewards when proposing your first block to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". The deposit is 0.01 ETH, and it is used to prevent spam and malicious validators from subscribing to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),"."),(0,i.kt)("p",null,"Once the deposit transaction is processed by the chain, your validator will be subscribed to ",(0,i.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," and you will start receiving rewards from other members of the pool!"),(0,i.kt)("p",{align:"center"},(0,i.kt)("img",{src:"/img/smooth_subscribe_success.png",alt:"subscription_success",width:"400"})),(0,i.kt)("admonition",{type:"caution"},(0,i.kt)("p",{parentName:"admonition"},'Since the Oracle operates with only finalized data, it will take up to 35 minutes to process your subscription. Your "My Validator" table will be updated instantly, but it may take a while to see how "Total Subscribers" counter increases. To know more, visit the ',(0,i.kt)("a",{parentName:"p",href:"/docs/smooth/deep-dive-into-smooth/overview"},"Deep Dive into Smooth")," section.")),(0,i.kt)("h2",{id:"troubleshooting"},"Troubleshooting."),(0,i.kt)("details",null,(0,i.kt)("summary",null,(0,i.kt)("strong",null,"I have changed my fee recipient but the ",(0,i.kt)("i",null,'"Fee recipient warning"')," warning still appears!")),"If you have changed your fee recipient to Smooth's address (",(0,i.kt)("code",null,"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"),") but this warning still appears, it could be because of two reasons:",(0,i.kt)("ul",null,(0,i.kt)("li",null,"The relays you are registered to are not reflecting the change in the fee recipient yet. It can take up to a few minutes for the relays to reflect your fee recipient update. This is something that is out of Smooth's control. We recommend you to wait a few minutes and try again."),(0,i.kt)("li",null,"The fee recipient is only updated in your current ",(0,i.kt)("strong",null,"active")," relays. This means that if you used to be registered to a relay, but you are not using it anymore, the fee recipient of your validator will not be updated in that relay. This is something expected and that it wont affect your validator's subscription to [Smooth](https://smooth.dappnode.io/). If you want to update the fee recipient in the relays you are no longer registered to, you can quickly register and unregister again to the outdated relays to force an update the fee recipient there.")),"To clarify: As long as the fee recipient of your validator is set to Smooth's address in your ",(0,i.kt)("a",{href:"http://brain.web3signer.dappnode/"},"staking brain"),", you can continue the subscription process normally."))}h.isMDXComponent=!0},4257:(e,t,o)=>{o.d(t,{Z:()=>a});const a=o.p+"assets/images/smooth_fee_recipient-9a97308ed0c601ccc84b0295efe34cd4.png"},2824:(e,t,o)=>{o.d(t,{Z:()=>a});const a=o.p+"assets/images/smooth_my_validators-72848a79b68c9a1ab67d754537f6e2c9.png"}}]); \ No newline at end of file diff --git a/assets/js/3093fe32.4c5bc10e.js b/assets/js/3093fe32.4c5bc10e.js new file mode 100644 index 000000000..ea3cd5ccc --- /dev/null +++ b/assets/js/3093fe32.4c5bc10e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[641],{9024:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var t=n(5893),i=n(1151);const a={},r="What is Dappnode Cloud?",s={id:"user/dappnode-cloud/overview",title:"What is Dappnode Cloud?",description:"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.",source:"@site/docs/user/dappnode-cloud/overview.md",sourceDirName:"user/dappnode-cloud",slug:"/user/dappnode-cloud/overview",permalink:"/docs/user/dappnode-cloud/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Troubleshooting",permalink:"/docs/user/ethical-metrics/troubleshooting"},next:{title:"AWS",permalink:"/docs/user/dappnode-cloud/providers/aws/overview"}},d={},l=[{value:"Why using Dappnode Cloud?",id:"why-using-dappnode-cloud",level:2},{value:"No Initial Hardware Investment \ud83d\udcb0",id:"no-initial-hardware-investment-",level:3},{value:"Stop when you want \ud83e\uddd1\u200d\ud83d\udd27\ufe0f",id:"stop-when-you-want-\ufe0f",level:3},{value:"Scalability \ud83d\udcc8",id:"scalability-",level:3},{value:"Physical or Cloud?",id:"physical-or-cloud",level:2},{value:"1. Economics \ud83d\udcb2",id:"1-economics-",level:3},{value:"2. Decentralization \ud83d\uddfd",id:"2-decentralization-",level:3},{value:"Use cases",id:"use-cases",level:2},{value:"Blockchain participation & Solo Staking \u26d3\ufe0f",id:"blockchain-participation--solo-staking-\ufe0f",level:3},{value:"Testing \ud83e\uddea",id:"testing-",level:3},{value:"Developing \ud83e\uddd1\u200d\ud83d\udcbb\ufe0f",id:"developing-\ufe0f",level:3}];function c(e){const o={admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",p:"p",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"what-is-dappnode-cloud",children:"What is Dappnode Cloud?"}),"\n",(0,t.jsx)(o.p,{children:"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode."}),"\n",(0,t.jsx)(o.admonition,{type:"tip",children:(0,t.jsx)(o.p,{children:"This allows you to run your decentralized applications more efficiently and cost-effectively, as you can customize your hardware specifications to meet your needs."})}),"\n",(0,t.jsx)(o.h2,{id:"why-using-dappnode-cloud",children:"Why using Dappnode Cloud?"}),"\n",(0,t.jsx)(o.p,{children:"Dappnode Cloud offers numerous advantages over traditional hardware-based setups. By leveraging cloud infrastructure, you can bypass the complexities and limitations associated with physical hardware. Here are the key benefits that make Dappnode Cloud an attractive option:"}),"\n",(0,t.jsx)(o.h3,{id:"no-initial-hardware-investment-",children:"No Initial Hardware Investment \ud83d\udcb0"}),"\n",(0,t.jsx)(o.p,{children:"With Dappnode Cloud, there is no need to purchase an entire new machine every time you need a new Dappnode. This significantly reduces the initial cost barrier, allowing you to test Dappnode before you decide to install it in a physical machine or to quickly deploy a new Dappnode without having to purchase a new machine."}),"\n",(0,t.jsx)(o.h3,{id:"stop-when-you-want-\ufe0f",children:"Stop when you want \ud83e\uddd1\u200d\ud83d\udd27\ufe0f"}),"\n",(0,t.jsx)(o.p,{children:"For short stints, Dappnode Cloud allows you to deploy and also to stop running your Dappnode as soon as you have performed the tasks you wanted to do, with no electronic waste or an unallocated physical machine on your side."}),"\n",(0,t.jsx)(o.h3,{id:"scalability-",children:"Scalability \ud83d\udcc8"}),"\n",(0,t.jsx)(o.p,{children:"With Dappnode Cloud, you can easily scale your resources up or down based on your current needs. Whether you're experiencing a lack of storage or you need a few more nodes quickly, you can adjust your cloud resources accordingly without the constraints of physical hardware limitations."}),"\n",(0,t.jsx)(o.h2,{id:"physical-or-cloud",children:"Physical or Cloud?"}),"\n",(0,t.jsx)(o.p,{children:"It is much better to run a physical Dappnode at your place for these 2 main reasons:"}),"\n",(0,t.jsx)(o.h3,{id:"1-economics-",children:"1. Economics \ud83d\udcb2"}),"\n",(0,t.jsx)(o.p,{children:"A physical machine has a higher initial cost, but leverages your existing internet connection and consumes less energy than your fridge. This initial cost is pretty much the only cost you will have for the lifetime of the hardware you use.\nCloud servers have monthly costs associated with it that never go away, resulting in higher cost in the long term."}),"\n",(0,t.jsx)(o.p,{children:"In summary, you will be better off with a physical machine if you plan to use your Dappnode for a long time, and better off with a Dappnode Cloud if you only want to use the instance for a short period of time."}),"\n",(0,t.jsx)(o.h3,{id:"2-decentralization-",children:"2. Decentralization \ud83d\uddfd"}),"\n",(0,t.jsx)(o.p,{children:"The networks you will run on your Dapppnode become more resilient to corporate capture, government interference and localized events the more decentralized their nodes are. By running a Node in the cloud it is very likely that there is already a node of that network in the same data center, therefore adding no extra value to the decentralization of the network.\nIf instead you run the same node in a home setup from your home, you are adding a node that is much harder to censor, block, locate and subjugate than a node controlled by a big infrastructure corporation."}),"\n",(0,t.jsx)(o.p,{children:'Remember, "The Cloud" is just someone else\'s computer.'}),"\n",(0,t.jsx)(o.h2,{id:"use-cases",children:"Use cases"}),"\n",(0,t.jsx)(o.p,{children:"Dappnode Cloud offers versatile solutions for various users, providing the flexibility and reliability needed to meet your goals. Here are some of the primary use cases:"}),"\n",(0,t.jsx)(o.h3,{id:"blockchain-participation--solo-staking-\ufe0f",children:"Blockchain participation & Solo Staking \u26d3\ufe0f"}),"\n",(0,t.jsx)(o.p,{children:"If obtaining hardware is not an option, Dappnode Cloud allows you to run a full node or even host your Ethereum or Gnosis validators without worrying about hardware requirements, internet connectivity, or power outages. This ensures continuous participation in the blockchain network with minimal hassle."}),"\n",(0,t.jsx)(o.h3,{id:"testing-",children:"Testing \ud83e\uddea"}),"\n",(0,t.jsx)(o.p,{children:"For those considering purchasing their own Dappnode but still uncertain, Dappnode Cloud provides an excellent opportunity to run a temporary Dappnode. This allows you to demo the system without facing the initial cost barrier, helping you make an informed decision."}),"\n",(0,t.jsx)(o.h3,{id:"developing-\ufe0f",children:"Developing \ud83e\uddd1\u200d\ud83d\udcbb\ufe0f"}),"\n",(0,t.jsx)(o.p,{children:"Dappnode Cloud is an excellent choice for developers who need a reliable and scalable environment to test and deploy dApps. Without the constraints of local hardware, developers can quickly iterate and deploy their applications, leveraging the power of cloud computing to simulate real-world conditions."})]})}function p(e={}){const{wrapper:o}={...(0,i.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>s,a:()=>r});var t=n(7294);const i={},a=t.createContext(i);function r(e){const o=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function s(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3093fe32.b5b7438e.js b/assets/js/3093fe32.b5b7438e.js deleted file mode 100644 index e50b47401..000000000 --- a/assets/js/3093fe32.b5b7438e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[641],{4137:(e,o,t)=>{t.d(o,{Zo:()=>c,kt:()=>y});var n=t(7294);function a(e,o,t){return o in e?Object.defineProperty(e,o,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[o]=t,e}function r(e,o){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var o=1;o<arguments.length;o++){var t=null!=arguments[o]?arguments[o]:{};o%2?r(Object(t),!0).forEach((function(o){a(e,o,t[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):r(Object(t)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(t,o))}))}return e}function l(e,o){if(null==e)return{};var t,n,a=function(e,o){if(null==e)return{};var t,n,a={},r=Object.keys(e);for(n=0;n<r.length;n++)t=r[n],o.indexOf(t)>=0||(a[t]=e[t]);return a}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)t=r[n],o.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=n.createContext({}),d=function(e){var o=n.useContext(s),t=o;return e&&(t="function"==typeof e?e(o):i(i({},o),e)),t},c=function(e){var o=d(e.components);return n.createElement(s.Provider,{value:o},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var o=e.children;return n.createElement(n.Fragment,{},o)}},h=n.forwardRef((function(e,o){var t=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=d(t),h=a,y=u["".concat(s,".").concat(h)]||u[h]||p[h]||r;return t?n.createElement(y,i(i({ref:o},c),{},{components:t})):n.createElement(y,i({ref:o},c))}));function y(e,o){var t=arguments,a=o&&o.mdxType;if("string"==typeof e||a){var r=t.length,i=new Array(r);i[0]=h;var l={};for(var s in o)hasOwnProperty.call(o,s)&&(l[s]=o[s]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var d=2;d<r;d++)i[d]=t[d];return n.createElement.apply(null,i)}return n.createElement.apply(null,t)}h.displayName="MDXCreateElement"},8782:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var n=t(7462),a=(t(7294),t(4137));const r={},i="What is Dappnode Cloud?",l={unversionedId:"user/dappnode-cloud/overview",id:"user/dappnode-cloud/overview",title:"What is Dappnode Cloud?",description:"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.",source:"@site/docs/user/dappnode-cloud/overview.md",sourceDirName:"user/dappnode-cloud",slug:"/user/dappnode-cloud/overview",permalink:"/docs/user/dappnode-cloud/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Troubleshooting",permalink:"/docs/user/ethical-metrics/troubleshooting"},next:{title:"AWS",permalink:"/docs/user/dappnode-cloud/providers/aws/overview"}},s={},d=[{value:"Why using Dappnode Cloud?",id:"why-using-dappnode-cloud",level:2},{value:"No Initial Hardware Investment \ud83d\udcb0",id:"no-initial-hardware-investment-",level:3},{value:"Stop when you want \ud83e\uddd1\u200d\ud83d\udd27\ufe0f",id:"stop-when-you-want-\ufe0f",level:3},{value:"Scalability \ud83d\udcc8",id:"scalability-",level:3},{value:"Physical or Cloud?",id:"physical-or-cloud",level:2},{value:"1. Economics \ud83d\udcb2",id:"1-economics-",level:3},{value:"2. Decentralization \ud83d\uddfd",id:"2-decentralization-",level:3},{value:"Use cases",id:"use-cases",level:2},{value:"Blockchain participation & Solo Staking \u26d3\ufe0f",id:"blockchain-participation--solo-staking-\ufe0f",level:3},{value:"Testing \ud83e\uddea",id:"testing-",level:3},{value:"Developing \ud83e\uddd1\u200d\ud83d\udcbb\ufe0f",id:"developing-\ufe0f",level:3}],c={toc:d},u="wrapper";function p(e){let{components:o,...t}=e;return(0,a.kt)(u,(0,n.Z)({},c,t,{components:o,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"what-is-dappnode-cloud"},"What is Dappnode Cloud?"),(0,a.kt)("p",null,"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"This allows you to run your decentralized applications more efficiently and cost-effectively, as you can customize your hardware specifications to meet your needs.")),(0,a.kt)("h2",{id:"why-using-dappnode-cloud"},"Why using Dappnode Cloud?"),(0,a.kt)("p",null,"Dappnode Cloud offers numerous advantages over traditional hardware-based setups. By leveraging cloud infrastructure, you can bypass the complexities and limitations associated with physical hardware. Here are the key benefits that make Dappnode Cloud an attractive option:"),(0,a.kt)("h3",{id:"no-initial-hardware-investment-"},"No Initial Hardware Investment \ud83d\udcb0"),(0,a.kt)("p",null,"With Dappnode Cloud, there is no need to purchase an entire new machine every time you need a new Dappnode. This significantly reduces the initial cost barrier, allowing you to test Dappnode before you decide to install it in a physical machine or to quickly deploy a new Dappnode without having to purchase a new machine."),(0,a.kt)("h3",{id:"stop-when-you-want-\ufe0f"},"Stop when you want \ud83e\uddd1\u200d\ud83d\udd27\ufe0f"),(0,a.kt)("p",null,"For short stints, Dappnode Cloud allows you to deploy and also to stop running your Dappnode as soon as you have performed the tasks you wanted to do, with no electronic waste or an unallocated physical machine on your side."),(0,a.kt)("h3",{id:"scalability-"},"Scalability \ud83d\udcc8"),(0,a.kt)("p",null,"With Dappnode Cloud, you can easily scale your resources up or down based on your current needs. Whether you're experiencing a lack of storage or you need a few more nodes quickly, you can adjust your cloud resources accordingly without the constraints of physical hardware limitations."),(0,a.kt)("h2",{id:"physical-or-cloud"},"Physical or Cloud?"),(0,a.kt)("p",null,"It is much better to run a physical Dappnode at your place for these 2 main reasons:"),(0,a.kt)("h3",{id:"1-economics-"},"1. Economics \ud83d\udcb2"),(0,a.kt)("p",null,"A physical machine has a higher initial cost, but leverages your existing internet connection and consumes less energy than your fridge. This initial cost is pretty much the only cost you will have for the lifetime of the hardware you use.\nCloud servers have monthly costs associated with it that never go away, resulting in higher cost in the long term."),(0,a.kt)("p",null,"In summary, you will be better off with a physical machine if you plan to use your Dappnode for a long time, and better off with a Dappnode Cloud if you only want to use the instance for a short period of time."),(0,a.kt)("h3",{id:"2-decentralization-"},"2. Decentralization \ud83d\uddfd"),(0,a.kt)("p",null,"The networks you will run on your Dapppnode become more resilient to corporate capture, government interference and localized events the more decentralized their nodes are. By running a Node in the cloud it is very likely that there is already a node of that network in the same data center, therefore adding no extra value to the decentralization of the network.\nIf instead you run the same node in a home setup from your home, you are adding a node that is much harder to censor, block, locate and subjugate than a node controlled by a big infrastructure corporation."),(0,a.kt)("p",null,'Remember, "The Cloud" is just someone else\'s computer.'),(0,a.kt)("h2",{id:"use-cases"},"Use cases"),(0,a.kt)("p",null,"Dappnode Cloud offers versatile solutions for various users, providing the flexibility and reliability needed to meet your goals. Here are some of the primary use cases:"),(0,a.kt)("h3",{id:"blockchain-participation--solo-staking-\ufe0f"},"Blockchain participation & Solo Staking \u26d3\ufe0f"),(0,a.kt)("p",null,"If obtaining hardware is not an option, Dappnode Cloud allows you to run a full node or even host your Ethereum or Gnosis validators without worrying about hardware requirements, internet connectivity, or power outages. This ensures continuous participation in the blockchain network with minimal hassle."),(0,a.kt)("h3",{id:"testing-"},"Testing \ud83e\uddea"),(0,a.kt)("p",null,"For those considering purchasing their own Dappnode but still uncertain, Dappnode Cloud provides an excellent opportunity to run a temporary Dappnode. This allows you to demo the system without facing the initial cost barrier, helping you make an informed decision."),(0,a.kt)("h3",{id:"developing-\ufe0f"},"Developing \ud83e\uddd1\u200d\ud83d\udcbb\ufe0f"),(0,a.kt)("p",null,"Dappnode Cloud is an excellent choice for developers who need a reliable and scalable environment to test and deploy dApps. Without the constraints of local hardware, developers can quickly iterate and deploy their applications, leveraging the power of cloud computing to simulate real-world conditions."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/30a24c52.3d4809d1.js b/assets/js/30a24c52.8b6b1c0f.js similarity index 80% rename from assets/js/30a24c52.3d4809d1.js rename to assets/js/30a24c52.8b6b1c0f.js index 8dfaed534..1192bebdd 100644 --- a/assets/js/30a24c52.3d4809d1.js +++ b/assets/js/30a24c52.8b6b1c0f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[453],{8605:e=>{e.exports=JSON.parse('{"label":"hello","permalink":"/blog/tags/hello","allTagsPath":"/blog/tags","count":2}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[453],{8605:e=>{e.exports=JSON.parse('{"label":"hello","permalink":"/blog/tags/hello","allTagsPath":"/blog/tags","count":2,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/34d45c9f.3de4b327.js b/assets/js/34d45c9f.3de4b327.js deleted file mode 100644 index c7af73b08..000000000 --- a/assets/js/34d45c9f.3de4b327.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7089],{4137:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>u});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?a(Object(o),!0).forEach((function(t){r(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function s(e,t){if(null==e)return{};var o,n,r=function(e,t){if(null==e)return{};var o,n,r={},a=Object.keys(e);for(n=0;n<a.length;n++)o=a[n],t.indexOf(o)>=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)o=a[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=n.createContext({}),h=function(e){var t=n.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},p=function(e){var t=h(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=h(o),m=r,u=c["".concat(l,".").concat(m)]||c[m]||d[m]||a;return o?n.createElement(u,i(i({ref:t},p),{},{components:o})):n.createElement(u,i({ref:t},p))}));function u(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var h=2;h<a;h++)i[h]=o[h];return n.createElement.apply(null,i)}return n.createElement.apply(null,o)}m.displayName="MDXCreateElement"},6416:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>h});var n=o(7462),r=(o(7294),o(4137));const a={title:"Smooth",description:"Smooth introduction"},i="Welcome to Smooth, Dappnode's MEV Smoothing Pool!",s={unversionedId:"smooth",id:"smooth",title:"Smooth",description:"Smooth introduction",source:"@site/docs/smooth.md",sourceDirName:".",slug:"/smooth",permalink:"/docs/smooth",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth.md",tags:[],version:"current",frontMatter:{title:"Smooth",description:"Smooth introduction"},sidebar:"smoothSidebar",next:{title:"Deep Dive into Smooth!",permalink:"/docs/smooth/deep-dive-into-smooth/overview"}},l={},h=[{value:"What is Smooth and why should you join it?",id:"what-is-smooth-and-why-should-you-join-it",level:2},{value:"\ud83c\udfb0 Stop Depending on Luck!",id:"-stop-depending-on-luck",level:3},{value:"\ud83d\ude80 Don't miss high fee seasons!",id:"-dont-miss-high-fee-seasons",level:3},{value:"\ud83d\udcb0 Hitting MEV Lottery Blocks",id:"-hitting-mev-lottery-blocks",level:3}],p={toc:h},c="wrapper";function d(e){let{components:t,...o}=e;return(0,r.kt)(c,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"welcome-to-smooth-dappnodes-mev-smoothing-pool"},"Welcome to Smooth, Dappnode's MEV Smoothing Pool!"),(0,r.kt)("p",null,"Welcome to the Smooth Documentation! Here, you'll find detailed insights and essential information to navigate and maximize your experience with Smooth, an MEV Smoothing Pool designed to enhance rewards for Solo Stakers in the Ethereum network. "),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Interested in Smooth? Check out ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("a",{parentName:"strong",href:"/docs/smooth/deep-dive-into-smooth/overview"},"Deep Dive into Smooth"))," to get a general idea of how Smooth works, or check the ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("a",{parentName:"strong",href:"/docs/smooth/subscribe-to-smooth/overview"},"subscription guides"))," to learn how to join!")),(0,r.kt)("h2",{id:"what-is-smooth-and-why-should-you-join-it"},"What is Smooth and why should you join it?"),(0,r.kt)("p",null,"Smooth is a MEV Smoothing Pool designed to elevate the Ethereum solo staking experience. By pooling MEV rewards, ",(0,r.kt)("strong",{parentName:"p"},"Smooth offers Solo Stakers the unique opportunity to earn higher rewards consistently"),", reducing reliance on luck and maximizing the potential of every staked ether. Join Smooth and take your solo staking experience to the next level!"),(0,r.kt)("h3",{id:"-stop-depending-on-luck"},"\ud83c\udfb0 Stop Depending on Luck!"),(0,r.kt)("p",null,"Currently, luck plays a big role in every Solo Staker when it comes to earning rewards. While the average validator will propose 3 blocks per year, some will propose more, some less. A Solo Staker does not have any control over this, and can only hope to get lucky and propose as much blocks as possible to maximize their rewards. "),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Smooth changes this by pooling together the block proposals of all its members, so that every member gets a share of the rewards of every block proposed by the pool"),". This way, you can stop worrying about luck and start earning rewards consistently! "),(0,r.kt)("h3",{id:"-dont-miss-high-fee-seasons"},"\ud83d\ude80 Don't miss high fee seasons!"),(0,r.kt)("p",null,"With an average of only 3 block proposals per year, how likely are you to catch a period of high fees? How much does it hurt to see a NFT sale, or a peak in activity and not catch any of the action? "),(0,r.kt)("p",null,"In Smooth, block proposals are constant, so ",(0,r.kt)("strong",{parentName:"p"},"no matter what happens in the network, you will always be there to get your share of it!")),(0,r.kt)("h3",{id:"-hitting-mev-lottery-blocks"},"\ud83d\udcb0 Hitting MEV Lottery Blocks"),(0,r.kt)("p",null,"Ever since they arrived, MEV rewards are distributed very unevenly. The vast majority of blocks have very low MEV rewards, while only very few blocks have very high rewards. As a Solo Staker, you have a ",(0,r.kt)("em",{parentName:"p"},"very")," low chance of hitting one of these high-reward blocks. The median MEV typically hovers around 0.05 ETH, but certain lottery blocks can reach up to 30, 90, or even 300 ETH!"),(0,r.kt)("p",null,"By adding together all our chances of hitting a lottery block, we have a much higher chance of proposing one! ",(0,r.kt)("strong",{parentName:"p"},"In ",(0,r.kt)("a",{parentName:"strong",href:"https://github.com/htimsk/SPanalysis"},"backtesting simulations"),", rewards of a Smoothing Pool participant are up to 60% higher than those of a Solo Staker!")," "),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"For a detailed comparison between Solo Stakers and Smoothing Pool participants' rewards, explore this ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/htimsk/SPanalysis"},"Smoothing Pool analysis"))),(0,r.kt)("p",null,"Lido, Centralized Exchanges and other pools with lots of validators consistently hit lottery blocks because of the sheer numbers of validators they have. They naturally split these rewards between all their validators, effectively being at an advantage vs the average Solo Staker."),(0,r.kt)("p",null,"This is a centralizing force, as the rich become richer and bigger operations get bigger rewards. ",(0,r.kt)("strong",{parentName:"p"},"Now, Solo Stakers with few validators don't depend on luck to be at par with the big guys!")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/34d45c9f.b2e41baf.js b/assets/js/34d45c9f.b2e41baf.js new file mode 100644 index 000000000..66aac3993 --- /dev/null +++ b/assets/js/34d45c9f.b2e41baf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7089],{1598:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>h,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var n=t(5893),s=t(1151);const i={title:"Smooth",description:"Smooth introduction"},r="Welcome to Smooth, Dappnode's MEV Smoothing Pool!",a={id:"smooth",title:"Smooth",description:"Smooth introduction",source:"@site/docs/smooth.md",sourceDirName:".",slug:"/smooth",permalink:"/docs/smooth",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth.md",tags:[],version:"current",frontMatter:{title:"Smooth",description:"Smooth introduction"},sidebar:"smoothSidebar",next:{title:"Deep Dive into Smooth!",permalink:"/docs/smooth/deep-dive-into-smooth/overview"}},h={},l=[{value:"What is Smooth and why should you join it?",id:"what-is-smooth-and-why-should-you-join-it",level:2},{value:"\ud83c\udfb0 Stop Depending on Luck!",id:"slot_machine-stop-depending-on-luck",level:3},{value:"\ud83d\ude80 Don't miss high fee seasons!",id:"rocket-dont-miss-high-fee-seasons",level:3},{value:"\ud83d\udcb0 Hitting MEV Lottery Blocks",id:"moneybag-hitting-mev-lottery-blocks",level:3}];function d(e){const o={a:"a",admonition:"admonition",em:"em",h1:"h1",h2:"h2",h3:"h3",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",strong:"strong",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.h1,{id:"welcome-to-smooth-dappnodes-mev-smoothing-pool",children:"Welcome to Smooth, Dappnode's MEV Smoothing Pool!"}),"\n",(0,n.jsx)(o.p,{children:"Welcome to the Smooth Documentation! Here, you'll find detailed insights and essential information to navigate and maximize your experience with Smooth, an MEV Smoothing Pool designed to enhance rewards for Solo Stakers in the Ethereum network."}),"\n",(0,n.jsx)(o.admonition,{type:"info",children:(0,n.jsxs)(o.p,{children:["Interested in Smooth? Check out ",(0,n.jsx)(o.strong,{children:(0,n.jsx)(o.a,{href:"/docs/smooth/deep-dive-into-smooth/overview",children:"Deep Dive into Smooth"})})," to get a general idea of how Smooth works, or check the ",(0,n.jsx)(o.strong,{children:(0,n.jsx)(o.a,{href:"/docs/smooth/subscribe-to-smooth/overview",children:"subscription guides"})})," to learn how to join!"]})}),"\n",(0,n.jsx)(o.h2,{id:"what-is-smooth-and-why-should-you-join-it",children:"What is Smooth and why should you join it?"}),"\n",(0,n.jsxs)(o.p,{children:["Smooth is a MEV Smoothing Pool designed to elevate the Ethereum solo staking experience. By pooling MEV rewards, ",(0,n.jsx)(o.strong,{children:"Smooth offers Solo Stakers the unique opportunity to earn higher rewards consistently"}),", reducing reliance on luck and maximizing the potential of every staked ether. Join Smooth and take your solo staking experience to the next level!"]}),"\n",(0,n.jsxs)(o.h3,{id:"slot_machine-stop-depending-on-luck",children:["\ud83c\udfb0"," Stop Depending on Luck!"]}),"\n",(0,n.jsx)(o.p,{children:"Currently, luck plays a big role in every Solo Staker when it comes to earning rewards. While the average validator will propose 3 blocks per year, some will propose more, some less. A Solo Staker does not have any control over this, and can only hope to get lucky and propose as much blocks as possible to maximize their rewards."}),"\n",(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.strong,{children:"Smooth changes this by pooling together the block proposals of all its members, so that every member gets a share of the rewards of every block proposed by the pool"}),". This way, you can stop worrying about luck and start earning rewards consistently!"]}),"\n",(0,n.jsxs)(o.h3,{id:"rocket-dont-miss-high-fee-seasons",children:["\ud83d\ude80"," Don't miss high fee seasons!"]}),"\n",(0,n.jsx)(o.p,{children:"With an average of only 3 block proposals per year, how likely are you to catch a period of high fees? How much does it hurt to see a NFT sale, or a peak in activity and not catch any of the action?"}),"\n",(0,n.jsxs)(o.p,{children:["In Smooth, block proposals are constant, so ",(0,n.jsx)(o.strong,{children:"no matter what happens in the network, you will always be there to get your share of it!"})]}),"\n",(0,n.jsxs)(o.h3,{id:"moneybag-hitting-mev-lottery-blocks",children:["\ud83d\udcb0"," Hitting MEV Lottery Blocks"]}),"\n",(0,n.jsxs)(o.p,{children:["Ever since they arrived, MEV rewards are distributed very unevenly. The vast majority of blocks have very low MEV rewards, while only very few blocks have very high rewards. As a Solo Staker, you have a ",(0,n.jsx)(o.em,{children:"very"})," low chance of hitting one of these high-reward blocks. The median MEV typically hovers around 0.05 ETH, but certain lottery blocks can reach up to 30, 90, or even 300 ETH!"]}),"\n",(0,n.jsxs)(o.p,{children:["By adding together all our chances of hitting a lottery block, we have a much higher chance of proposing one! ",(0,n.jsxs)(o.strong,{children:["In ",(0,n.jsx)(o.a,{href:"https://github.com/htimsk/SPanalysis",children:"backtesting simulations"}),", rewards of a Smoothing Pool participant are up to 60% higher than those of a Solo Staker!"]})]}),"\n",(0,n.jsxs)(o.admonition,{type:"tip",children:[(0,n.jsx)(o.mdxAdmonitionTitle,{}),(0,n.jsxs)(o.p,{children:["For a detailed comparison between Solo Stakers and Smoothing Pool participants' rewards, explore this ",(0,n.jsx)(o.a,{href:"https://github.com/htimsk/SPanalysis",children:"Smoothing Pool analysis"})]})]}),"\n",(0,n.jsx)(o.p,{children:"Lido, Centralized Exchanges and other pools with lots of validators consistently hit lottery blocks because of the sheer numbers of validators they have. They naturally split these rewards between all their validators, effectively being at an advantage vs the average Solo Staker."}),"\n",(0,n.jsxs)(o.p,{children:["This is a centralizing force, as the rich become richer and bigger operations get bigger rewards. ",(0,n.jsx)(o.strong,{children:"Now, Solo Stakers with few validators don't depend on luck to be at par with the big guys!"})]})]})}function c(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,o,t)=>{t.d(o,{Z:()=>a,a:()=>r});var n=t(7294);const s={},i=n.createContext(s);function r(e){const o=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),n.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3f7aee3c.093d03b3.js b/assets/js/3f7aee3c.093d03b3.js new file mode 100644 index 000000000..4c7213e2b --- /dev/null +++ b/assets/js/3f7aee3c.093d03b3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9779],{8801:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>i,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>c,toc:()=>d});var s=o(5893),t=o(1151);const r={},a="\ud83c\udf10 Access your Dappnode",c={id:"user/access-your-dappnode/overview",title:"\ud83c\udf10 Access your Dappnode",description:"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.",source:"@site/docs/user/access-your-dappnode/overview.md",sourceDirName:"user/access-your-dappnode",slug:"/user/access-your-dappnode/overview",permalink:"/docs/user/access-your-dappnode/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Next Steps",permalink:"/docs/user/getting-started/next-steps"},next:{title:"Wi-Fi Access to Dappnode",permalink:"/docs/user/access-your-dappnode/wifi"}},i={},d=[];function p(e){const n={a:"a",admonition:"admonition",h1:"h1",li:"li",ol:"ol",p:"p",strong:"strong",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"-access-your-dappnode",children:"\ud83c\udf10 Access your Dappnode"}),"\n",(0,s.jsxs)(n.p,{children:["Dappnode is made to work on a dedicated computer, and its main control panel, the ",(0,s.jsx)(n.strong,{children:"Dappmanager"}),", is accessed from another device via ",(0,s.jsx)(n.a,{href:"http://my.dappnode/",children:"my.dappnode"})," , as it is meant to be installed over an operating system that does not include a graphical interface."]}),"\n",(0,s.jsxs)(n.p,{children:["Here are ",(0,s.jsx)(n.strong,{children:"four ways"})," you can connect to your Dappnode:"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/docs/user/access-your-dappnode/wifi",children:(0,s.jsx)(n.strong,{children:"\ud83d\udce1 Wifi"})}),": A user-friendly way, especially for those with Dappnode pre-installed on their machines."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/docs/user/access-your-dappnode/vpn/overview",children:(0,s.jsx)(n.strong,{children:"\ud83d\udd10 VPN"})}),": Using either Wireguard or OpenVPN, this method is both secure and versatile. You can connect from inside or outside your local network, but if you're connecting from outside, you might need to adjust some settings."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/docs/user/access-your-dappnode/local",children:(0,s.jsx)(n.strong,{children:"\ud83d\udd17 Local Proxy (Recovery)"})}),": This is a backup connection method. It allows you to connect to Dappmanager when you're on the same local network. It's mainly for recovery purposes because of its limitations."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"/docs/user/access-your-dappnode/terminal",children:(0,s.jsx)(n.strong,{children:"\ud83d\udcbb Terminal (Advanced, Recovery)"})}),": This is for those who know their way around computer commands. It provides complete control but might be complex for some users."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"\ud83d\udca1 To ensure you can always access your Dappnode, it's a smart idea to set up and know more than one connection method. In the coming sections, we'll guide you through setting up each of these connection ways."})})]})}function l(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>c,a:()=>a});var s=o(7294);const t={},r=s.createContext(t);function a(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(t):e.components||t:a(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3f7aee3c.5499c15e.js b/assets/js/3f7aee3c.5499c15e.js deleted file mode 100644 index f6eb5405f..000000000 --- a/assets/js/3f7aee3c.5499c15e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9779],{4137:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>y});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),i=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},d=function(e){var t=i(e.components);return n.createElement(c.Provider,{value:t},e.children)},u="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),u=i(r),m=o,y=u["".concat(c,".").concat(m)]||u[m]||l[m]||a;return r?n.createElement(y,s(s({ref:t},d),{},{components:r})):n.createElement(y,s({ref:t},d))}));function y(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,s=new Array(a);s[0]=m;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p[u]="string"==typeof e?e:o,s[1]=p;for(var i=2;i<a;i++)s[i]=r[i];return n.createElement.apply(null,s)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},4990:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>l,frontMatter:()=>a,metadata:()=>p,toc:()=>i});var n=r(7462),o=(r(7294),r(4137));const a={},s="\ud83c\udf10 Access your Dappnode",p={unversionedId:"user/access-your-dappnode/overview",id:"user/access-your-dappnode/overview",title:"\ud83c\udf10 Access your Dappnode",description:"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.",source:"@site/docs/user/access-your-dappnode/overview.md",sourceDirName:"user/access-your-dappnode",slug:"/user/access-your-dappnode/overview",permalink:"/docs/user/access-your-dappnode/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Next Steps",permalink:"/docs/user/getting-started/next-steps"},next:{title:"Wi-Fi Access to Dappnode",permalink:"/docs/user/access-your-dappnode/wifi"}},c={},i=[],d={toc:i},u="wrapper";function l(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"-access-your-dappnode"},"\ud83c\udf10 Access your Dappnode"),(0,o.kt)("p",null,"Dappnode is made to work on a dedicated computer, and its main control panel, the ",(0,o.kt)("strong",{parentName:"p"},"Dappmanager"),", is accessed from another device via ",(0,o.kt)("a",{parentName:"p",href:"http://my.dappnode/"},"my.dappnode")," , as it is meant to be installed over an operating system that does not include a graphical interface."),(0,o.kt)("p",null,"Here are ",(0,o.kt)("strong",{parentName:"p"},"four ways")," you can connect to your Dappnode:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/wifi"},(0,o.kt)("strong",{parentName:"a"},"\ud83d\udce1 Wifi")),": A user-friendly way, especially for those with Dappnode pre-installed on their machines.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/vpn/overview"},(0,o.kt)("strong",{parentName:"a"},"\ud83d\udd10 VPN")),": Using either Wireguard or OpenVPN, this method is both secure and versatile. You can connect from inside or outside your local network, but if you're connecting from outside, you might need to adjust some settings.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/local"},(0,o.kt)("strong",{parentName:"a"},"\ud83d\udd17 Local Proxy (Recovery)")),": This is a backup connection method. It allows you to connect to Dappmanager when you're on the same local network. It's mainly for recovery purposes because of its limitations.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/terminal"},(0,o.kt)("strong",{parentName:"a"},"\ud83d\udcbb Terminal (Advanced, Recovery)")),": This is for those who know their way around computer commands. It provides complete control but might be complex for some users."))),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udca1 To ensure you can always access your Dappnode, it's a smart idea to set up and know more than one connection method. In the coming sections, we'll guide you through setting up each of these connection ways.")))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3fac1d53.43076377.js b/assets/js/3fac1d53.43076377.js new file mode 100644 index 000000000..763ac478e --- /dev/null +++ b/assets/js/3fac1d53.43076377.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7533],{7771:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>n,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>d});var s=o(5893),i=o(1151);const a={},n="Smooth Validator States",r={id:"smooth/deep-dive-into-smooth/states",title:"Smooth Validator States",description:"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.",source:"@site/docs/smooth/deep-dive-into-smooth/states.md",sourceDirName:"smooth/deep-dive-into-smooth",slug:"/smooth/deep-dive-into-smooth/states",permalink:"/docs/smooth/deep-dive-into-smooth/states",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/deep-dive-into-smooth/states.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Rewards",permalink:"/docs/smooth/deep-dive-into-smooth/rewards"},next:{title:"Smooth's architecture",permalink:"/docs/smooth/deep-dive-into-smooth/oracle-sm"}},l={},d=[{value:"State Machine Overview",id:"state-machine-overview",level:2},{value:"The purpose of the State Machine",id:"the-purpose-of-the-state-machine",level:2}];function c(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"smooth-validator-states",children:"Smooth Validator States"}),"\n",(0,s.jsxs)(t.p,{children:["A ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another."]}),"\n",(0,s.jsx)(t.h2,{id:"state-machine-overview",children:"State Machine Overview"}),"\n",(0,s.jsxs)(t.p,{children:["The oracle employs a ",(0,s.jsx)(t.strong,{children:"state machine"})," to monitor the status of subscribed validators within ",(0,s.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". Various actions trigger state changes, detailed in the following image encompassing all possible transitions. Let's take a look at it:"]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"statemachine",src:o(2060).Z+"",width:"2998",height:"1494"})}),"\n",(0,s.jsx)(t.p,{children:"There are 6 different states a validator can have:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:["\ud83d\udfe2 ",(0,s.jsx)(t.strong,{children:"Active"}),": The validator is active and subscribed to the pool, earning rewards over time."]}),"\n",(0,s.jsxs)(t.li,{children:["\ud83d\udfe1 ",(0,s.jsx)(t.strong,{children:"YellowCard"}),": The validator missed its last block proposal but not two in a row. This validator earns rewards as if it was active."]}),"\n",(0,s.jsxs)(t.li,{children:["\ud83d\udd34 ",(0,s.jsx)(t.strong,{children:"RedCard"}),": The validator missed its latest two block proposals in a row. As a penalty, the validator does not earn rewards until its next block is successfully proposed to the pool. In other words, this validator is not receiving ",(0,s.jsx)(t.code,{children:"Pending Rewards"})," when somebody else contributes to the pool."]}),"\n",(0,s.jsxs)(t.li,{children:["\u26aa ",(0,s.jsx)(t.strong,{children:"NotSubscribed"}),": The validator is no longer subscribed to the pool, but still tracked by the validator. For example, a validator that unsubscribed. Note that this is still tracked because a validator can unsubscribe but it may still have pending balance to claim. In this state, the validator does not earn rewards."]}),"\n",(0,s.jsxs)(t.li,{children:["\u2620\ufe0f ",(0,s.jsx)(t.strong,{children:"Banned"}),": The validator is banned forever from the pool. A validator is banned when it is subscribed to the pool but proposes a block with the wrong fee recipient."]}),"\n",(0,s.jsxs)(t.li,{children:["\u2753",(0,s.jsx)(t.strong,{children:"Untracked"}),": The validator is not tracked by the pool. It has never subscribed to the pool."]}),"\n"]}),"\n",(0,s.jsx)(t.p,{children:"And 6 different actions can trigger a state transition:"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"ProposalOk"}),": The validator proposed a valid block with its rewards correctly sent to the smoothing pool address."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"ProposalMissed"}),": The validator should have proposed a block but missed its proposal."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"ProposalWrongFee"}),": The validator proposes a block but with a wrong fee recipient."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"ManualSubscription"}),": The validator manually subscribes to the pool, depositing collateral for its validator index by calling the smart contract function (see event)."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"AutoSubscription"}),": The validator is automatically subscribed to the pool, by setting as fee recipient the smoothing pool address."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"Unsubscribe"}),": The validator manually unsubscribes to the pool, calling the unsubscribe function from the smart contract (see event)."]}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"the-purpose-of-the-state-machine",children:"The purpose of the State Machine"}),"\n",(0,s.jsx)(t.p,{children:"Beyond tracking validator statuses, the state machine ensures fair reward distribution and encourages correct behavior among validators."}),"\n",(0,s.jsx)(t.p,{children:"Validators consistently proposing blocks receive greater rewards compared to those frequently missing proposals, promoting active participation and contribution to the pool."})]})}function h(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},2060:(e,t,o)=>{o.d(t,{Z:()=>s});const s=o.p+"assets/images/smooth_states-1ba74d83a78fa2e0b740effe50c30ee8.png"},1151:(e,t,o)=>{o.d(t,{Z:()=>r,a:()=>n});var s=o(7294);const i={},a=s.createContext(i);function n(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:n(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/3fac1d53.b395668d.js b/assets/js/3fac1d53.b395668d.js deleted file mode 100644 index d1f948961..000000000 --- a/assets/js/3fac1d53.b395668d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7533],{4137:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>m});var a=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,a)}return o}function i(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?n(Object(o),!0).forEach((function(t){r(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function s(e,t){if(null==e)return{};var o,a,r=function(e,t){if(null==e)return{};var o,a,r={},n=Object.keys(e);for(a=0;a<n.length;a++)o=n[a],t.indexOf(o)>=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a<n.length;a++)o=n[a],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},d=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var o=e.components,r=e.mdxType,n=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=p(o),u=r,m=c["".concat(l,".").concat(u)]||c[u]||h[u]||n;return o?a.createElement(m,i(i({ref:t},d),{},{components:o})):a.createElement(m,i({ref:t},d))}));function m(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=o.length,i=new Array(n);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p<n;p++)i[p]=o[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,o)}u.displayName="MDXCreateElement"},1406:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>h,frontMatter:()=>n,metadata:()=>s,toc:()=>p});var a=o(7462),r=(o(7294),o(4137));const n={},i="Smooth Validator States",s={unversionedId:"smooth/deep-dive-into-smooth/states",id:"smooth/deep-dive-into-smooth/states",title:"Smooth Validator States",description:"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.",source:"@site/docs/smooth/deep-dive-into-smooth/states.md",sourceDirName:"smooth/deep-dive-into-smooth",slug:"/smooth/deep-dive-into-smooth/states",permalink:"/docs/smooth/deep-dive-into-smooth/states",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/deep-dive-into-smooth/states.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Rewards",permalink:"/docs/smooth/deep-dive-into-smooth/rewards"},next:{title:"Smooth's architecture",permalink:"/docs/smooth/deep-dive-into-smooth/oracle-sm"}},l={},p=[{value:"State Machine Overview",id:"state-machine-overview",level:2},{value:"The purpose of the State Machine",id:"the-purpose-of-the-state-machine",level:2}],d={toc:p},c="wrapper";function h(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"smooth-validator-states"},"Smooth Validator States"),(0,r.kt)("p",null,"A ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another."),(0,r.kt)("h2",{id:"state-machine-overview"},"State Machine Overview"),(0,r.kt)("p",null,"The oracle employs a ",(0,r.kt)("strong",{parentName:"p"},"state machine")," to monitor the status of subscribed validators within ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". Various actions trigger state changes, detailed in the following image encompassing all possible transitions. Let's take a look at it:"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"statemachine",src:o(2060).Z,width:"2998",height:"1494"})),(0,r.kt)("p",null,"There are 6 different states a validator can have:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"\ud83d\udfe2 ",(0,r.kt)("strong",{parentName:"li"},"Active"),": The validator is active and subscribed to the pool, earning rewards over time. "),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udfe1 ",(0,r.kt)("strong",{parentName:"li"},"YellowCard"),": The validator missed its last block proposal but not two in a row. This validator earns rewards as if it was active."),(0,r.kt)("li",{parentName:"ul"},"\ud83d\udd34 ",(0,r.kt)("strong",{parentName:"li"},"RedCard"),": The validator missed its latest two block proposals in a row. As a penalty, the validator does not earn rewards until its next block is successfully proposed to the pool. In other words, this validator is not receiving ",(0,r.kt)("inlineCode",{parentName:"li"},"Pending Rewards")," when somebody else contributes to the pool. "),(0,r.kt)("li",{parentName:"ul"},"\u26aa ",(0,r.kt)("strong",{parentName:"li"},"NotSubscribed"),": The validator is no longer subscribed to the pool, but still tracked by the validator. For example, a validator that unsubscribed. Note that this is still tracked because a validator can unsubscribe but it may still have pending balance to claim. In this state, the validator does not earn rewards. "),(0,r.kt)("li",{parentName:"ul"},"\u2620\ufe0f ",(0,r.kt)("strong",{parentName:"li"},"Banned"),": The validator is banned forever from the pool. A validator is banned when it is subscribed to the pool but proposes a block with the wrong fee recipient. "),(0,r.kt)("li",{parentName:"ul"},"\u2753",(0,r.kt)("strong",{parentName:"li"},"Untracked"),": The validator is not tracked by the pool. It has never subscribed to the pool. ")),(0,r.kt)("p",null,"And 6 different actions can trigger a state transition:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ProposalOk"),": The validator proposed a valid block with its rewards correctly sent to the smoothing pool address."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ProposalMissed"),": The validator should have proposed a block but missed its proposal."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ProposalWrongFee"),": The validator proposes a block but with a wrong fee recipient."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"ManualSubscription"),": The validator manually subscribes to the pool, depositing collateral for its validator index by calling the smart contract function (see event)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"AutoSubscription"),": The validator is automatically subscribed to the pool, by setting as fee recipient the smoothing pool address."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Unsubscribe"),": The validator manually unsubscribes to the pool, calling the unsubscribe function from the smart contract (see event).")),(0,r.kt)("h2",{id:"the-purpose-of-the-state-machine"},"The purpose of the State Machine"),(0,r.kt)("p",null,"Beyond tracking validator statuses, the state machine ensures fair reward distribution and encourages correct behavior among validators."),(0,r.kt)("p",null,"Validators consistently proposing blocks receive greater rewards compared to those frequently missing proposals, promoting active participation and contribution to the pool."))}h.isMDXComponent=!0},2060:(e,t,o)=>{o.d(t,{Z:()=>a});const a=o.p+"assets/images/smooth_states-1ba74d83a78fa2e0b740effe50c30ee8.png"}}]); \ No newline at end of file diff --git a/assets/js/4248.7c4eeb2c.js b/assets/js/4248.7c4eeb2c.js deleted file mode 100644 index 355d779ab..000000000 --- a/assets/js/4248.7c4eeb2c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4248],{4248:(e,t,n)=>{n.r(t),n.d(t,{default:()=>c});var a=n(7294),o=n(7325),l=n(5463),r=n(1009);function c(){return a.createElement(a.Fragment,null,a.createElement(l.d,{title:(0,o.I)({id:"theme.NotFound.title",message:"Page Not Found"})}),a.createElement(r.Z,null,a.createElement("main",{className:"container margin-vert--xl"},a.createElement("div",{className:"row"},a.createElement("div",{className:"col col--6 col--offset-3"},a.createElement("h1",{className:"hero__title"},a.createElement(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for.")),a.createElement("p",null,a.createElement(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"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/assets/js/4c4b1a63.b03c2ad9.js b/assets/js/4c4b1a63.b03c2ad9.js new file mode 100644 index 000000000..802e6253b --- /dev/null +++ b/assets/js/4c4b1a63.b03c2ad9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3504],{3043:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var i=n(5893),t=n(1151);const r={},s="2. Configuring your Dappnode",a={id:"user/videos-and-tutorials/driving-school/configuration",title:"2. Configuring your Dappnode",description:"We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.",source:"@site/docs/user/videos-and-tutorials/driving-school/configuration.md",sourceDirName:"user/videos-and-tutorials/driving-school",slug:"/user/videos-and-tutorials/driving-school/configuration",permalink:"/docs/user/videos-and-tutorials/driving-school/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/driving-school/configuration.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"1. Initial Dappnode Setup",permalink:"/docs/user/videos-and-tutorials/driving-school/initial-setup"},next:{title:"Crash Course",permalink:"/docs/user/videos-and-tutorials/crash-course"}},d={},c=[];function u(e){const o={a:"a",admonition:"admonition",h1:"h1",p:"p",strong:"strong",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(o.h1,{id:"2-configuring-your-dappnode",children:"2. Configuring your Dappnode"}),"\n",(0,i.jsx)(o.admonition,{type:"info",children:(0,i.jsxs)(o.p,{children:["We recommend going through ",(0,i.jsx)(o.strong,{children:(0,i.jsx)(o.a,{href:"/docs/user/videos-and-tutorials/driving-school/initial-setup",children:"Initial Setup"})})," of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it."]})}),"\n",(0,i.jsx)(o.p,{children:"Once you have your Dappnode up and running, you can start configuring it to suit your needs. Here are some videos to help you with that:"}),"\n",(0,i.jsx)(o.h1,{id:"-21-repositories",children:"\ud83e\uddec 2.1 Repositories"}),"\n",(0,i.jsx)(o.p,{children:"Your Dappnode uses two technologies in order to stay decentralized and permissionless. In this video we'll go through Ethereum and IPFS and how do they work in Dappnode."}),"\n",(0,i.jsx)("center",{children:(0,i.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/b3NN2E6YALU",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)("br",{}),"\n",(0,i.jsx)(o.h1,{id:"-22-dappnode-monitoring-service-dms",children:"\ud83e\uddee 2.2 Dappnode Monitoring Service (DMS)"}),"\n",(0,i.jsx)(o.p,{children:"This video is about Dappnode Monitoring Service, a tool that will make it easy to monitor your Dappnode's health and activity."}),"\n",(0,i.jsx)("center",{children:(0,i.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/l4T1G9u17xg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,i.jsx)(o.h1,{id:"-23-ethical-metrics",children:"\ud83c\udf21 2.3 Ethical Metrics"}),"\n",(0,i.jsx)(o.p,{children:"Ethical Metrics is Dappnode's private solution to notify you through Email and Telegram when there's unexpected behavior in your Dappnode."}),"\n",(0,i.jsx)("center",{children:(0,i.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/YisNnejt8do",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})})]})}function l(e={}){const{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,i.jsx)(o,{...e,children:(0,i.jsx)(u,{...e})}):u(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>a,a:()=>s});var i=n(7294);const t={},r=i.createContext(t);function s(e){const o=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),i.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/4c4b1a63.fda7797e.js b/assets/js/4c4b1a63.fda7797e.js deleted file mode 100644 index f0d76c84d..000000000 --- a/assets/js/4c4b1a63.fda7797e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3504],{4137:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>f});var r=o(7294);function n(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function a(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach((function(t){n(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function s(e,t){if(null==e)return{};var o,r,n=function(e,t){if(null==e)return{};var o,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)o=i[r],t.indexOf(o)>=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)o=i[r],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var u=r.createContext({}),c=function(e){var t=r.useContext(u),o=t;return e&&(o="function"==typeof e?e(t):a(a({},t),e)),o},d=function(e){var t=c(e.components);return r.createElement(u.Provider,{value:t},e.children)},l="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,i=e.originalType,u=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),l=c(o),h=n,f=l["".concat(u,".").concat(h)]||l[h]||p[h]||i;return o?r.createElement(f,a(a({ref:t},d),{},{components:o})):r.createElement(f,a({ref:t},d))}));function f(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=o.length,a=new Array(i);a[0]=h;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[l]="string"==typeof e?e:n,a[1]=s;for(var c=2;c<i;c++)a[c]=o[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,o)}h.displayName="MDXCreateElement"},7322:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>p,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=o(7462),n=(o(7294),o(4137));const i={},a="2. Configuring your Dappnode",s={unversionedId:"user/videos-and-tutorials/driving-school/configuration",id:"user/videos-and-tutorials/driving-school/configuration",title:"2. Configuring your Dappnode",description:"We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.",source:"@site/docs/user/videos-and-tutorials/driving-school/configuration.md",sourceDirName:"user/videos-and-tutorials/driving-school",slug:"/user/videos-and-tutorials/driving-school/configuration",permalink:"/docs/user/videos-and-tutorials/driving-school/configuration",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/driving-school/configuration.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"1. Initial Dappnode Setup",permalink:"/docs/user/videos-and-tutorials/driving-school/initial-setup"},next:{title:"Crash Course",permalink:"/docs/user/videos-and-tutorials/crash-course"}},u={},c=[],d={toc:c},l="wrapper";function p(e){let{components:t,...o}=e;return(0,n.kt)(l,(0,r.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"2-configuring-your-dappnode"},"2. Configuring your Dappnode"),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"We recommend going through ",(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"/docs/user/videos-and-tutorials/driving-school/initial-setup"},"Initial Setup"))," of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.")),(0,n.kt)("p",null,"Once you have your Dappnode up and running, you can start configuring it to suit your needs. Here are some videos to help you with that:"),(0,n.kt)("h1",{id:"-21-repositories"},"\ud83e\uddec 2.1 Repositories"),(0,n.kt)("p",null,"Your Dappnode uses two technologies in order to stay decentralized and permissionless. In this video we'll go through Ethereum and IPFS and how do they work in Dappnode."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/b3NN2E6YALU",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("br",null),(0,n.kt)("br",null),(0,n.kt)("h1",{id:"-22-dappnode-monitoring-service-dms"},"\ud83e\uddee 2.2 Dappnode Monitoring Service (DMS)"),(0,n.kt)("p",null,"This video is about Dappnode Monitoring Service, a tool that will make it easy to monitor your Dappnode's health and activity."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/l4T1G9u17xg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("h1",{id:"-23-ethical-metrics"},"\ud83c\udf21 2.3 Ethical Metrics"),(0,n.kt)("p",null,"Ethical Metrics is Dappnode's private solution to notify you through Email and Telegram when there's unexpected behavior in your Dappnode."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/YisNnejt8do",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4d8f6977.468ee51d.js b/assets/js/4d8f6977.468ee51d.js deleted file mode 100644 index 4802fb131..000000000 --- a/assets/js/4d8f6977.468ee51d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5815],{4137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>g});var o=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,o)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,o,n=function(e,t){if(null==e)return{};var a,o,n={},r=Object.keys(e);for(o=0;o<r.length;o++)a=r[o],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)a=r[o],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=o.createContext({}),d=function(e){var t=o.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=d(e.components);return o.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var a=e.components,n=e.mdxType,r=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(a),h=n,g=u["".concat(l,".").concat(h)]||u[h]||c[h]||r;return a?o.createElement(g,i(i({ref:t},p),{},{components:a})):o.createElement(g,i({ref:t},p))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=a.length,i=new Array(r);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:n,i[1]=s;for(var d=2;d<r;d++)i[d]=a[d];return o.createElement.apply(null,i)}return o.createElement.apply(null,a)}h.displayName="MDXCreateElement"},7693:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var o=a(7462),n=(a(7294),a(4137));const r={},i="Obol Distributed Validator package for Dappnode",s={unversionedId:"user/staking/ethereum/dvt-technologies/obol-network",id:"user/staking/ethereum/dvt-technologies/obol-network",title:"Obol Distributed Validator package for Dappnode",description:"---",source:"@site/docs/user/staking/ethereum/dvt-technologies/obol-network.md",sourceDirName:"user/staking/ethereum/dvt-technologies",slug:"/user/staking/ethereum/dvt-technologies/obol-network",permalink:"/docs/user/staking/ethereum/dvt-technologies/obol-network",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/dvt-technologies/obol-network.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Stakehouse",permalink:"/docs/user/staking/ethereum/lsd-pools/stakehouse"},next:{title:"SSV Distributed Validator package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/ssv-network"}},l={},d=[{value:"<strong>Introduction</strong>",id:"introduction",level:3},{value:"<strong>Requirements</strong>",id:"requirements",level:3},{value:"<strong>First Steps</strong>",id:"first-steps",level:3},{value:"<strong>Cluster Configuration</strong>",id:"cluster-configuration",level:3},{value:"<strong>Distributed Key Generation (DKG) Event</strong>",id:"distributed-key-generation-dkg-event",level:3},{value:"Adding Validators to an Active Cluster",id:"adding-validators-to-an-active-cluster",level:3}],p={toc:d},u="wrapper";function c(e){let{components:t,...r}=e;return(0,n.kt)(u,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"obol-distributed-validator-package-for-dappnode"},"Obol Distributed Validator package for Dappnode"),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"introduction"},(0,n.kt)("strong",{parentName:"h3"},"Introduction")),(0,n.kt)("p",null,"The Obol Network package for Dappnode aims to make it seamless for Dappnode users to integrate and benefit from Obol's Distributed Validator Technology (DVT)."),(0,n.kt)("p",null,"A Distributed Validator is one or more logical Ethereum validators being operated across a number of nodes that are all online simultaneously and that all control a subset of the validators' private keys. Each of these nodes need to run an Execution client, a Consensus client, a Distributed Validator client, and a Validator client/Key Manager.\nThe distributed validator clients in these nodes come to consensus on what should be signed before constructing a signature for the validator that will be accepted by the wider Ethereum network. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage, contributing to a stronger and more resilient network."),(0,n.kt)("p",null,"The Obol Dappnode package is available for ",(0,n.kt)("a",{parentName:"p",href:"http://my.dappnode/installer/dnp/obol.dnp.dappnode.eth"},"Ethereum Mainnet")," and the ",(0,n.kt)("a",{parentName:"p",href:"http://my.dappnode/installer/dnp/holesky-obol.dnp.dappnode.eth"},"Holesky Testnet"),"."),(0,n.kt)("h3",{id:"requirements"},(0,n.kt)("strong",{parentName:"h3"},"Requirements")),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting:",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"1 Execution Client (Geth, Besu, Erigon or Nethermind)"),(0,n.kt)("li",{parentName:"ul"},"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"),(0,n.kt)("li",{parentName:"ul"},"MEV Boost (optional)"))),(0,n.kt)("li",{parentName:"ol"},"Install the Obol package from the DAppStore.")),(0,n.kt)("h3",{id:"first-steps"},(0,n.kt)("strong",{parentName:"h3"},"First Steps")),(0,n.kt)("admonition",{title:"It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator Cluster with.",type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility. Negligence on behalf of others in your group can put you at risk, however as far as 66% of these nodes are synced the validators will keep performing their duties.")),(0,n.kt)("p",null,"Once all participants have synced nodes, you'll need to install the Obol Dappnode package. After Dappnodes are ready, the next steps will take place at Obol's Distributed Validator Launchpad. There's a launchpad for ",(0,n.kt)("a",{parentName:"p",href:"https://launchpad.obol.org/"},"Ethereum Mainnet")," and another one for the ",(0,n.kt)("a",{parentName:"p",href:"https://holesky.launchpad.obol.org/"},"Holesky Testnet"),". Start by connecting your wallet and selecting the option that best fits your DV's distribution and setup."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad1",src:a(3921).Z,width:"1904",height:"1090"})),(0,n.kt)("h3",{id:"cluster-configuration"},(0,n.kt)("strong",{parentName:"h3"},"Cluster Configuration")),(0,n.kt)("p",null,"For creating a new cluster with a group, all operators must have an operator's address, which will submit the necessary information to the launchpad. The first step in the configuration process will be to select the cluster size and to enter the operator's adresses."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad2",src:a(222).Z,width:"1904",height:"981"})),(0,n.kt)("p",null,"In this next step, you'll be required to enter your Charon client's ENR, which is a public key that will give your node a unique ID. This ENR can be obtained after installing the Obol Dappnode package ",(0,n.kt)("a",{parentName:"p",href:"http://my.dappnode/packages/my/holesky-obol.dnp.dappnode.eth/info"},"under the Info tab"),"."),(0,n.kt)("admonition",{type:"warning"},(0,n.kt)("p",{parentName:"admonition"},"The Obol Dappnode package supports up to 5 ENRs. This means that you can participate in 5 different clusters with 5 different ENRs using the same package, however it's important to properly backup the package's database if the generated ENRs are committed to functional clusters.")),(0,n.kt)("p",null,"Next, you'll need to specify the amount of validator keys that this cluster will be generating and how these validators will be splitting the rewards. You can read more about the ",(0,n.kt)("a",{parentName:"p",href:"https://docs.obol.org/docs/sc/introducing-obol-splits"},"Obol Splits contract")," and the different options it offers in Obol's documentation."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad3",src:a(6912).Z,width:"1904",height:"1047"})),(0,n.kt)("p",null,"The last step will require that you perform a signature from your operator's address to generate a cluster invite link. You'll need to share this invite link with the rest of the operators so that they can register their ENRs and set everything up for the Distributed Key Generation (DKG) event."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad4",src:a(9468).Z,width:"1604",height:"1478"})),(0,n.kt)("h3",{id:"distributed-key-generation-dkg-event"},(0,n.kt)("strong",{parentName:"h3"},"Distributed Key Generation (DKG) Event")),(0,n.kt)("p",null,"After all operators have successfully submitted their ENRs, the Obol launchpad will generate a \"Definition File URL\" we'll need to load in our Obol Dappnode package's configuration to proceed with the DKG."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad5",src:a(7627).Z,width:"1904",height:"981"})),(0,n.kt)("p",null,"Copy the URL under the Dappnode tab in the Launchpad, go to your package's configuration section and enter it in the cluster number corresponding to the ENR you submitted in the launchpad. Make sure ",(0,n.kt)("inlineCode",{parentName:"p"},"URL"),' is selected under "Config Mode" and apply the configuration.'),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad6",src:a(5158).Z,width:"1904",height:"1089"})),(0,n.kt)("p",null,"After all operators have completed this step the DKG ceremony will start automatically and each of the operators' keystores will be stored in the Obol package's database."),(0,n.kt)("admonition",{type:"danger"},(0,n.kt)("p",{parentName:"admonition"},"Please make sure to create a backup of your Obol package. If you lose your private keys you won't be able to start the DV cluster successfully and may risk your validator deposit becoming unrecoverable. Ensure every operator has their backup secured before activating any validators.")),(0,n.kt)("h3",{id:"adding-validators-to-an-active-cluster"},"Adding Validators to an Active Cluster"),(0,n.kt)("p",null,"After the DKG has succeeded and all of the operators have backed up their cluster's keys, it's time to move on to the validator's deposits. The launchpad will show you an option to submit a ",(0,n.kt)("inlineCode",{parentName:"p"},"deposit_data.json")," file."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"ObolLaunchpad7",src:a(2882).Z,width:"1904",height:"1019"})),(0,n.kt)("p",null,"You can get this file if you decompress your Obol package's backup and look for it inside the charon folder corresponding to the cluster number you intend to run. The launchpad will confirm that you have enough balance in your connected wallet to perform the validator deposit and make you go over final checks prior to signing the deposit."),(0,n.kt)("p",null,"Remember that if you have any questions, you can always drop by the ",(0,n.kt)("a",{parentName:"p",href:"https://discord.gg/dappnode"},"Dappnode Discord server")," to ask for community support."))}c.isMDXComponent=!0},3921:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad1-384f64d06e76a09d4ec520ee76cf7fdf.png"},222:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad2-ce96b4add6b5709c4d88acb38a73a1ee.png"},6912:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad3-c7f4df9b4d7b753d8d0e027b7a659bee.png"},9468:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad4-f9db7d75efeda34396609e991e2840b6.png"},7627:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad5-678df34a484ab38012fd657c9dcfaf7e.png"},5158:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad6-2048cc9b6c237bb96964596ee7bd32ec.png"},2882:(e,t,a)=>{a.d(t,{Z:()=>o});const o=a.p+"assets/images/obol-launchpad7-11fdbb602d3e193d4a456ba9e0e05e1b.png"}}]); \ No newline at end of file diff --git a/assets/js/4d8f6977.c943a5a9.js b/assets/js/4d8f6977.c943a5a9.js new file mode 100644 index 000000000..519ddd46c --- /dev/null +++ b/assets/js/4d8f6977.c943a5a9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5815],{718:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>c,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var o=n(5893),a=n(1151);const s={},i="Obol Distributed Validator package for Dappnode",r={id:"user/staking/ethereum/dvt-technologies/obol-network",title:"Obol Distributed Validator package for Dappnode",description:"---",source:"@site/docs/user/staking/ethereum/dvt-technologies/obol-network.md",sourceDirName:"user/staking/ethereum/dvt-technologies",slug:"/user/staking/ethereum/dvt-technologies/obol-network",permalink:"/docs/user/staking/ethereum/dvt-technologies/obol-network",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/dvt-technologies/obol-network.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Stakehouse",permalink:"/docs/user/staking/ethereum/lsd-pools/stakehouse"},next:{title:"SSV Distributed Validator package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/ssv-network"}},d={},l=[{value:"<strong>Introduction</strong>",id:"introduction",level:3},{value:"<strong>Requirements</strong>",id:"requirements",level:3},{value:"<strong>First Steps</strong>",id:"first-steps",level:3},{value:"<strong>Cluster Configuration</strong>",id:"cluster-configuration",level:3},{value:"<strong>Distributed Key Generation (DKG) Event</strong>",id:"distributed-key-generation-dkg-event",level:3},{value:"Adding Validators to an Active Cluster",id:"adding-validators-to-an-active-cluster",level:3}];function h(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h3:"h3",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"obol-distributed-validator-package-for-dappnode",children:"Obol Distributed Validator package for Dappnode"}),"\n",(0,o.jsx)(t.hr,{}),"\n",(0,o.jsx)(t.h3,{id:"introduction",children:(0,o.jsx)(t.strong,{children:"Introduction"})}),"\n",(0,o.jsx)(t.p,{children:"The Obol Network package for Dappnode aims to make it seamless for Dappnode users to integrate and benefit from Obol's Distributed Validator Technology (DVT)."}),"\n",(0,o.jsx)(t.p,{children:"A Distributed Validator is one or more logical Ethereum validators being operated across a number of nodes that are all online simultaneously and that all control a subset of the validators' private keys. Each of these nodes need to run an Execution client, a Consensus client, a Distributed Validator client, and a Validator client/Key Manager.\nThe distributed validator clients in these nodes come to consensus on what should be signed before constructing a signature for the validator that will be accepted by the wider Ethereum network. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage, contributing to a stronger and more resilient network."}),"\n",(0,o.jsxs)(t.p,{children:["The Obol Dappnode package is available for ",(0,o.jsx)(t.a,{href:"http://my.dappnode/installer/dnp/obol.dnp.dappnode.eth",children:"Ethereum Mainnet"})," and the ",(0,o.jsx)(t.a,{href:"http://my.dappnode/installer/dnp/holesky-obol.dnp.dappnode.eth",children:"Holesky Testnet"}),"."]}),"\n",(0,o.jsx)(t.h3,{id:"requirements",children:(0,o.jsx)(t.strong,{children:"Requirements"})}),"\n",(0,o.jsxs)(t.ol,{children:["\n",(0,o.jsxs)(t.li,{children:["The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting:","\n",(0,o.jsxs)(t.ul,{children:["\n",(0,o.jsx)(t.li,{children:"1 Execution Client (Geth, Besu, Erigon or Nethermind)"}),"\n",(0,o.jsx)(t.li,{children:"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"}),"\n",(0,o.jsx)(t.li,{children:"MEV Boost (optional)"}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(t.li,{children:"Install the Obol package from the DAppStore."}),"\n"]}),"\n",(0,o.jsx)(t.h3,{id:"first-steps",children:(0,o.jsx)(t.strong,{children:"First Steps"})}),"\n",(0,o.jsx)(t.admonition,{title:"It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator Cluster with.",type:"tip",children:(0,o.jsx)(t.p,{children:"You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility. Negligence on behalf of others in your group can put you at risk, however as far as 66% of these nodes are synced the validators will keep performing their duties."})}),"\n",(0,o.jsxs)(t.p,{children:["Once all participants have synced nodes, you'll need to install the Obol Dappnode package. After Dappnodes are ready, the next steps will take place at Obol's Distributed Validator Launchpad. There's a launchpad for ",(0,o.jsx)(t.a,{href:"https://launchpad.obol.org/",children:"Ethereum Mainnet"})," and another one for the ",(0,o.jsx)(t.a,{href:"https://holesky.launchpad.obol.org/",children:"Holesky Testnet"}),". Start by connecting your wallet and selecting the option that best fits your DV's distribution and setup."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad1",src:n(3921).Z+"",width:"1904",height:"1090"})}),"\n",(0,o.jsx)(t.h3,{id:"cluster-configuration",children:(0,o.jsx)(t.strong,{children:"Cluster Configuration"})}),"\n",(0,o.jsx)(t.p,{children:"For creating a new cluster with a group, all operators must have an operator's address, which will submit the necessary information to the launchpad. The first step in the configuration process will be to select the cluster size and to enter the operator's adresses."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad2",src:n(222).Z+"",width:"1904",height:"981"})}),"\n",(0,o.jsxs)(t.p,{children:["In this next step, you'll be required to enter your Charon client's ENR, which is a public key that will give your node a unique ID. This ENR can be obtained after installing the Obol Dappnode package ",(0,o.jsx)(t.a,{href:"http://my.dappnode/packages/my/holesky-obol.dnp.dappnode.eth/info",children:"under the Info tab"}),"."]}),"\n",(0,o.jsx)(t.admonition,{type:"warning",children:(0,o.jsx)(t.p,{children:"The Obol Dappnode package supports up to 5 ENRs. This means that you can participate in 5 different clusters with 5 different ENRs using the same package, however it's important to properly backup the package's database if the generated ENRs are committed to functional clusters."})}),"\n",(0,o.jsxs)(t.p,{children:["Next, you'll need to specify the amount of validator keys that this cluster will be generating and how these validators will be splitting the rewards. You can read more about the ",(0,o.jsx)(t.a,{href:"https://docs.obol.org/docs/sc/introducing-obol-splits",children:"Obol Splits contract"})," and the different options it offers in Obol's documentation."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad3",src:n(6912).Z+"",width:"1904",height:"1047"})}),"\n",(0,o.jsx)(t.p,{children:"The last step will require that you perform a signature from your operator's address to generate a cluster invite link. You'll need to share this invite link with the rest of the operators so that they can register their ENRs and set everything up for the Distributed Key Generation (DKG) event."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad4",src:n(9468).Z+"",width:"1604",height:"1478"})}),"\n",(0,o.jsx)(t.h3,{id:"distributed-key-generation-dkg-event",children:(0,o.jsx)(t.strong,{children:"Distributed Key Generation (DKG) Event"})}),"\n",(0,o.jsx)(t.p,{children:"After all operators have successfully submitted their ENRs, the Obol launchpad will generate a \"Definition File URL\" we'll need to load in our Obol Dappnode package's configuration to proceed with the DKG."}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad5",src:n(7627).Z+"",width:"1904",height:"981"})}),"\n",(0,o.jsxs)(t.p,{children:["Copy the URL under the Dappnode tab in the Launchpad, go to your package's configuration section and enter it in the cluster number corresponding to the ENR you submitted in the launchpad. Make sure ",(0,o.jsx)(t.code,{children:"URL"}),' is selected under "Config Mode" and apply the configuration.']}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad6",src:n(5158).Z+"",width:"1904",height:"1089"})}),"\n",(0,o.jsx)(t.p,{children:"After all operators have completed this step the DKG ceremony will start automatically and each of the operators' keystores will be stored in the Obol package's database."}),"\n",(0,o.jsx)(t.admonition,{type:"danger",children:(0,o.jsx)(t.p,{children:"Please make sure to create a backup of your Obol package. If you lose your private keys you won't be able to start the DV cluster successfully and may risk your validator deposit becoming unrecoverable. Ensure every operator has their backup secured before activating any validators."})}),"\n",(0,o.jsx)(t.h3,{id:"adding-validators-to-an-active-cluster",children:"Adding Validators to an Active Cluster"}),"\n",(0,o.jsxs)(t.p,{children:["After the DKG has succeeded and all of the operators have backed up their cluster's keys, it's time to move on to the validator's deposits. The launchpad will show you an option to submit a ",(0,o.jsx)(t.code,{children:"deposit_data.json"})," file."]}),"\n",(0,o.jsx)(t.p,{children:(0,o.jsx)(t.img,{alt:"ObolLaunchpad7",src:n(2882).Z+"",width:"1904",height:"1019"})}),"\n",(0,o.jsx)(t.p,{children:"You can get this file if you decompress your Obol package's backup and look for it inside the charon folder corresponding to the cluster number you intend to run. The launchpad will confirm that you have enough balance in your connected wallet to perform the validator deposit and make you go over final checks prior to signing the deposit."}),"\n",(0,o.jsxs)(t.p,{children:["Remember that if you have any questions, you can always drop by the ",(0,o.jsx)(t.a,{href:"https://discord.gg/dappnode",children:"Dappnode Discord server"})," to ask for community support."]})]})}function c(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(h,{...e})}):h(e)}},3921:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad1-384f64d06e76a09d4ec520ee76cf7fdf.png"},222:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad2-ce96b4add6b5709c4d88acb38a73a1ee.png"},6912:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad3-c7f4df9b4d7b753d8d0e027b7a659bee.png"},9468:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad4-f9db7d75efeda34396609e991e2840b6.png"},7627:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad5-678df34a484ab38012fd657c9dcfaf7e.png"},5158:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad6-2048cc9b6c237bb96964596ee7bd32ec.png"},2882:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/obol-launchpad7-11fdbb602d3e193d4a456ba9e0e05e1b.png"},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>i});var o=n(7294);const a={},s=o.createContext(a);function i(e){const t=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),o.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/536a4320.54f1de4b.js b/assets/js/536a4320.54f1de4b.js deleted file mode 100644 index 2e1795de4..000000000 --- a/assets/js/536a4320.54f1de4b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9374],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>h});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function a(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},l=Object.keys(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o<l.length;o++)n=l[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i=o.createContext({}),u=function(e){var t=o.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},c=function(e){var t=u(e.components);return o.createElement(i.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},y=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),d=u(n),y=r,h=d["".concat(i,".").concat(y)]||d[y]||p[y]||l;return n?o.createElement(h,s(s({ref:t},c),{},{components:n})):o.createElement(h,s({ref:t},c))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,s=new Array(l);s[0]=y;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a[d]="string"==typeof e?e:r,s[1]=a;for(var u=2;u<l;u++)s[u]=n[u];return o.createElement.apply(null,s)}return o.createElement.apply(null,n)}y.displayName="MDXCreateElement"},8712:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>p,frontMatter:()=>l,metadata:()=>a,toc:()=>u});var o=n(7462),r=(n(7294),n(4137));const l={},s="FAQs",a={unversionedId:"user/faqs",id:"user/faqs",title:"FAQs",description:"How can I start validating?",source:"@site/docs/user/faqs.md",sourceDirName:"user",slug:"/user/faqs",permalink:"/docs/user/faqs",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/faqs.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"How to Connect to My Blockchain Node",permalink:"/docs/user/videos-and-tutorials/guides/connect-node"}},i={},u=[],c={toc:u},d="wrapper";function p(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,o.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"faqs"},"FAQs"),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"How can I start validating?")),(0,r.kt)("p",null,"These steps will help you set up an Ethereum/Gnosis Chain/LUKSO solo staker validator:"),(0,r.kt)("ol",null,(0,r.kt)("li",null,"Go to the Stakers menu, select the network tab that you want to validate in and select an execution client (Geth, Nethermind, Erigon or Besu), a consensus client (Prysm, Lighthouse, Teku, Nimbus or Lodestar) and Web3Signer. You can optionally select MEV Boost and any relays you choose to run (where applies)."),(0,r.kt)("li",null,"Create keystore and deposit files using Ethereum/Gnosis/LUKSO CLI or the Wagyu Keygen tool."),(0,r.kt)("li",null,"Wait until clients are synced and check logs to see that everything is running fine."),(0,r.kt)("li",null,"Import keystore file(s) into Web3Signer."),(0,r.kt)("li",null,"Do the deposit. Make sure to triple-check you're interacting with the right website/contract!"),(0,r.kt)("li",null,"Wait until you start attesting."))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"I'm not able to install! / Package not found")),(0,r.kt)("p",null,"You'll most likely have to switch your IPFS repository to remote, perform updates and go back to your Local IPFS node:"),(0,r.kt)("ol",null,(0,r.kt)("li",null,"Try switching local/remote in IPFS repository: ",(0,r.kt)("a",{href:"http://my.dappnode/repository/ipfs"},"http://my.dappnode/repository/ipfs")),(0,r.kt)("li",null,"Wait a few seconds, then retry downloading/updating your package."),(0,r.kt)("li",null,"Make sure you set your IPFS node to Local for optimal Dappnode performance."))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"I want to install Dappnode, what are the minimum specs I need?")),(0,r.kt)("p",null,"Assuming you want to sync only one chain (two clients) you should have at least:"),(0,r.kt)("ul",null,(0,r.kt)("li",null,"16GB RAM"),(0,r.kt)("li",null,"2TB of FAST storage (NVMe recommended)"),(0,r.kt)("li",null,"Intel i3 or i5 processor")),(0,r.kt)("p",null,"If you want to run Dappnode as recommended, we suggest the following specs:"),(0,r.kt)("ul",null,(0,r.kt)("li",null,"32-64GB RAM"),(0,r.kt)("li",null,"4TB NVMe"),(0,r.kt)("li",null,"Intel i7 processor"))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"VPN/Wireguard isn't working!")),(0,r.kt)("ul",null,(0,r.kt)("li",null,"Are you in the same network as the Dappnode? Use the local proxy access to configure your VPN: ",(0,r.kt)("a",{href:"http://dappnode.local/"},"http://dappnode.local/")),(0,r.kt)("li",null,"Is UPnP enabled in your router settings? Try restarting your router after applying this setting!"),(0,r.kt)("li",null,"Is the port for Wireguard open in your router's port forwarding settings? (UDP 51820)"),(0,r.kt)("li",null,"Are you behind a CGNAT? You need to contact your ISP and request an IPv4 static address."),(0,r.kt)("li",null,"Are you connected to another VPN? Please disconnect from this VPN before connecting to your Dappnode's VPN."),(0,r.kt)("li",null,"If you're trying to access with Wireguard through a local network, make sure you're using your local credentials:"))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"My Web3Signer status has an odd grey bar in its status, is something wrong?")),(0,r.kt)("p",null,"Web3Signer includes 4 containers (services): Web3Signer, Brain, Flyway and Postgres. You can check it yourself in the package view."),(0,r.kt)("p",null,"Whenever one is indicated as Stopped (gray), it means that it was stopped. But in this case - just the flyway service is stopped, which is an expected behavior - it should run only once, while migration of the database. If it\u2019s indicated as grey - that means that whenever it migrated - everything went well, and now there is no need for it to run!")),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"My clients are not syncing!")),(0,r.kt)("p",null,"It's always a good idea to check the logs first for any specific errors, but here are some of the most common issues:"),(0,r.kt)("ul",null,(0,r.kt)("li",null,"Have you selected both Execution and Consensus clients in the Stakers Menu?"),(0,r.kt)("li",null,"If something looks wrong in the dashboard, always check the logs first! The clients might be syncing as expected. Check if the block number and the package's volume size are increasing. This is a common issue for Nethermind."))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("strong",null,"How long do clients take to sync?")),(0,r.kt)("p",null,"This is very different for every Dappnode depending on a number of factors:"),(0,r.kt)("ul",null,(0,r.kt)("li",null,"Geographic location"),(0,r.kt)("li",null,"Bandwidth"),(0,r.kt)("li",null,"ISP limitations"),(0,r.kt)("li",null,"Chosen EL and CL clients")),(0,r.kt)("p",null,"There is no exact information on how long exactly every client takes to sync, but there are a couple of facts that would be useful:"),(0,r.kt)("ul",null,(0,r.kt)("li",null,"Consensus client usually doesn't take longer than 5 minutes, as long as you enabled checksync when selecting your clients in the Stakers menu."),(0,r.kt)("li",null,"Execution client syncing time depends on many factors, but it might take up to several days in some cases, so if you felt like consensus client synced fast, and execution client is still syncing after several hours - that's ok, it might take some time!"))))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/536a4320.efd3187a.js b/assets/js/536a4320.efd3187a.js new file mode 100644 index 000000000..85ad43117 --- /dev/null +++ b/assets/js/536a4320.efd3187a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9374],{392:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var t=s(5893),i=s(1151);const o={},r="FAQs",a={id:"user/faqs",title:"FAQs",description:"How can I start validating?",source:"@site/docs/user/faqs.md",sourceDirName:"user",slug:"/user/faqs",permalink:"/docs/user/faqs",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/faqs.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"How to Connect to My Blockchain Node",permalink:"/docs/user/videos-and-tutorials/guides/connect-node"}},l={},c=[];function d(e){const n={a:"a",h1:"h1",...(0,i.a)(),...e.components},{Details:s}=n;return s||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"faqs",children:"FAQs"}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"How can I start validating?"})}),(0,t.jsx)("p",{children:"These steps will help you set up an Ethereum/Gnosis Chain/LUKSO solo staker validator:"}),(0,t.jsxs)("ol",{children:[(0,t.jsx)("li",{children:"Go to the Stakers menu, select the network tab that you want to validate in and select an execution client (Geth, Nethermind, Erigon or Besu), a consensus client (Prysm, Lighthouse, Teku, Nimbus or Lodestar) and Web3Signer. You can optionally select MEV Boost and any relays you choose to run (where applies)."}),(0,t.jsx)("li",{children:"Create keystore and deposit files using Ethereum/Gnosis/LUKSO CLI or the Wagyu Keygen tool."}),(0,t.jsx)("li",{children:"Wait until clients are synced and check logs to see that everything is running fine."}),(0,t.jsx)("li",{children:"Import keystore file(s) into Web3Signer."}),(0,t.jsx)("li",{children:"Do the deposit. Make sure to triple-check you're interacting with the right website/contract!"}),(0,t.jsx)("li",{children:"Wait until you start attesting."})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"I'm not able to install! / Package not found"})}),(0,t.jsx)("p",{children:"You'll most likely have to switch your IPFS repository to remote, perform updates and go back to your Local IPFS node:"}),(0,t.jsxs)("ol",{children:[(0,t.jsxs)("li",{children:["Try switching local/remote in IPFS repository: ",(0,t.jsx)("a",{href:"http://my.dappnode/repository/ipfs",children:(0,t.jsx)(n.a,{href:"http://my.dappnode/repository/ipfs",children:"http://my.dappnode/repository/ipfs"})})]}),(0,t.jsx)("li",{children:"Wait a few seconds, then retry downloading/updating your package."}),(0,t.jsx)("li",{children:"Make sure you set your IPFS node to Local for optimal Dappnode performance."})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"I want to install Dappnode, what are the minimum specs I need?"})}),(0,t.jsx)("p",{children:"Assuming you want to sync only one chain (two clients) you should have at least:"}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:"16GB RAM"}),(0,t.jsx)("li",{children:"2TB of FAST storage (NVMe recommended)"}),(0,t.jsx)("li",{children:"Intel i3 or i5 processor"})]}),(0,t.jsx)("p",{children:"If you want to run Dappnode as recommended, we suggest the following specs:"}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:"32-64GB RAM"}),(0,t.jsx)("li",{children:"4TB NVMe"}),(0,t.jsx)("li",{children:"Intel i7 processor"})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"VPN/Wireguard isn't working!"})}),(0,t.jsxs)("ul",{children:[(0,t.jsxs)("li",{children:["Are you in the same network as the Dappnode? Use the local proxy access to configure your VPN: ",(0,t.jsx)("a",{href:"http://dappnode.local/",children:(0,t.jsx)(n.a,{href:"http://dappnode.local/",children:"http://dappnode.local/"})})]}),(0,t.jsx)("li",{children:"Is UPnP enabled in your router settings? Try restarting your router after applying this setting!"}),(0,t.jsx)("li",{children:"Is the port for Wireguard open in your router's port forwarding settings? (UDP 51820)"}),(0,t.jsx)("li",{children:"Are you behind a CGNAT? You need to contact your ISP and request an IPv4 static address."}),(0,t.jsx)("li",{children:"Are you connected to another VPN? Please disconnect from this VPN before connecting to your Dappnode's VPN."}),(0,t.jsx)("li",{children:"If you're trying to access with Wireguard through a local network, make sure you're using your local credentials:"})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"My Web3Signer status has an odd grey bar in its status, is something wrong?"})}),(0,t.jsx)("p",{children:"Web3Signer includes 4 containers (services): Web3Signer, Brain, Flyway and Postgres. You can check it yourself in the package view."}),(0,t.jsx)("p",{children:"Whenever one is indicated as Stopped (gray), it means that it was stopped. But in this case - just the flyway service is stopped, which is an expected behavior - it should run only once, while migration of the database. If it\u2019s indicated as grey - that means that whenever it migrated - everything went well, and now there is no need for it to run!"})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"My clients are not syncing!"})}),(0,t.jsx)("p",{children:"It's always a good idea to check the logs first for any specific errors, but here are some of the most common issues:"}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:"Have you selected both Execution and Consensus clients in the Stakers Menu?"}),(0,t.jsx)("li",{children:"If something looks wrong in the dashboard, always check the logs first! The clients might be syncing as expected. Check if the block number and the package's volume size are increasing. This is a common issue for Nethermind."})]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("strong",{children:"How long do clients take to sync?"})}),(0,t.jsx)("p",{children:"This is very different for every Dappnode depending on a number of factors:"}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:"Geographic location"}),(0,t.jsx)("li",{children:"Bandwidth"}),(0,t.jsx)("li",{children:"ISP limitations"}),(0,t.jsx)("li",{children:"Chosen EL and CL clients"})]}),(0,t.jsx)("p",{children:"There is no exact information on how long exactly every client takes to sync, but there are a couple of facts that would be useful:"}),(0,t.jsxs)("ul",{children:[(0,t.jsx)("li",{children:"Consensus client usually doesn't take longer than 5 minutes, as long as you enabled checksync when selecting your clients in the Stakers menu."}),(0,t.jsx)("li",{children:"Execution client syncing time depends on many factors, but it might take up to several days in some cases, so if you felt like consensus client synced fast, and execution client is still syncing after several hours - that's ok, it might take some time!"})]})]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>r});var t=s(7294);const i={},o=t.createContext(i);function r(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(i):e.components||i:r(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5373dce7.f0bfd25b.js b/assets/js/5373dce7.f0bfd25b.js new file mode 100644 index 000000000..f74607e63 --- /dev/null +++ b/assets/js/5373dce7.f0bfd25b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1606],{2776:s=>{s.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/53ed655b.06f06d30.js b/assets/js/53ed655b.06f06d30.js new file mode 100644 index 000000000..644617364 --- /dev/null +++ b/assets/js/53ed655b.06f06d30.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5708],{3252:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>s,contentTitle:()=>c,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var r=o(5893),t=o(1151);const a={},c="Monero",i={id:"user/packages/monero",title:"Monero",description:"Introducing Monero: A Privacy-Centric Cryptocurrency",source:"@site/docs/user/packages/monero.md",sourceDirName:"user/packages",slug:"/user/packages/monero",permalink:"/docs/user/packages/monero",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/monero.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Avalanche",permalink:"/docs/user/packages/avalanche"},next:{title:"Guide to Installing Bee Node on Dappnode",permalink:"/docs/user/packages/swarm"}},s={},p=[{value:"Introducing Monero: A Privacy-Centric Cryptocurrency",id:"introducing-monero-a-privacy-centric-cryptocurrency",level:2},{value:"Monero\u2019s Package on Dappnode",id:"moneros-package-on-dappnode",level:2}];function d(e){const n={h1:"h1",h2:"h2",p:"p",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"monero",children:"Monero"}),"\n",(0,r.jsx)(n.h2,{id:"introducing-monero-a-privacy-centric-cryptocurrency",children:"Introducing Monero: A Privacy-Centric Cryptocurrency"}),"\n",(0,r.jsx)(n.p,{children:"Monero stands as a privacy-focused cryptocurrency with a core focus on anonymity and transaction fungibility. Monero uses innovative cryptographic techniques to obscure transaction details, making it difficult to trace the sender, receiver, and transaction amount."}),"\n",(0,r.jsx)(n.h2,{id:"moneros-package-on-dappnode",children:"Monero\u2019s Package on Dappnode"}),"\n",(0,r.jsx)(n.p,{children:"By running a Monero node in Dappnode, you play a crucial role in supporting the decentralized nature of the Monero ecosystem. You actively contribute to the decentralization of the network, playing a role in shaping a financial ecosystem that values privacy and security."})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>i,a:()=>c});var r=o(7294);const t={},a=r.createContext(t);function c(e){const n=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),r.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/53ed655b.95aef4df.js b/assets/js/53ed655b.95aef4df.js deleted file mode 100644 index 66f02c0c5..000000000 --- a/assets/js/53ed655b.95aef4df.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5708],{4137:(e,r,n)=>{n.d(r,{Zo:()=>u,kt:()=>f});var t=n(7294);function o(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function a(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function c(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?a(Object(n),!0).forEach((function(r){o(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function i(e,r){if(null==e)return{};var n,t,o=function(e,r){if(null==e)return{};var n,t,o={},a=Object.keys(e);for(t=0;t<a.length;t++)n=a[t],r.indexOf(n)>=0||(o[n]=e[n]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t<a.length;t++)n=a[t],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=t.createContext({}),s=function(e){var r=t.useContext(p),n=r;return e&&(n="function"==typeof e?e(r):c(c({},r),e)),n},u=function(e){var r=s(e.components);return t.createElement(p.Provider,{value:r},e.children)},l="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},y=t.forwardRef((function(e,r){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),l=s(n),y=o,f=l["".concat(p,".").concat(y)]||l[y]||d[y]||a;return n?t.createElement(f,c(c({ref:r},u),{},{components:n})):t.createElement(f,c({ref:r},u))}));function f(e,r){var n=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=n.length,c=new Array(a);c[0]=y;var i={};for(var p in r)hasOwnProperty.call(r,p)&&(i[p]=r[p]);i.originalType=e,i[l]="string"==typeof e?e:o,c[1]=i;for(var s=2;s<a;s++)c[s]=n[s];return t.createElement.apply(null,c)}return t.createElement.apply(null,n)}y.displayName="MDXCreateElement"},665:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>p,contentTitle:()=>c,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>s});var t=n(7462),o=(n(7294),n(4137));const a={},c="Monero",i={unversionedId:"user/packages/monero",id:"user/packages/monero",title:"Monero",description:"Introducing Monero: A Privacy-Centric Cryptocurrency",source:"@site/docs/user/packages/monero.md",sourceDirName:"user/packages",slug:"/user/packages/monero",permalink:"/docs/user/packages/monero",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/monero.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Avalanche",permalink:"/docs/user/packages/avalanche"},next:{title:"Guide to Installing Bee Node on Dappnode",permalink:"/docs/user/packages/swarm"}},p={},s=[{value:"Introducing Monero: A Privacy-Centric Cryptocurrency",id:"introducing-monero-a-privacy-centric-cryptocurrency",level:2},{value:"Monero\u2019s Package on Dappnode",id:"moneros-package-on-dappnode",level:2}],u={toc:s},l="wrapper";function d(e){let{components:r,...n}=e;return(0,o.kt)(l,(0,t.Z)({},u,n,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"monero"},"Monero"),(0,o.kt)("h2",{id:"introducing-monero-a-privacy-centric-cryptocurrency"},"Introducing Monero: A Privacy-Centric Cryptocurrency"),(0,o.kt)("p",null,"Monero stands as a privacy-focused cryptocurrency with a core focus on anonymity and transaction fungibility. Monero uses innovative cryptographic techniques to obscure transaction details, making it difficult to trace the sender, receiver, and transaction amount."),(0,o.kt)("h2",{id:"moneros-package-on-dappnode"},"Monero\u2019s Package on Dappnode"),(0,o.kt)("p",null,"By running a Monero node in Dappnode, you play a crucial role in supporting the decentralized nature of the Monero ecosystem. You actively contribute to the decentralization of the network, playing a role in shaping a financial ecosystem that values privacy and security."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5456a9ed.28407620.js b/assets/js/5456a9ed.28407620.js deleted file mode 100644 index 5b3dc1c32..000000000 --- a/assets/js/5456a9ed.28407620.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1600],{4137:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>y});var r=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?n(Object(o),!0).forEach((function(t){a(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function s(e,t){if(null==e)return{};var o,r,a=function(e,t){if(null==e)return{};var o,r,a={},n=Object.keys(e);for(r=0;r<n.length;r++)o=n[r],t.indexOf(o)>=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r<n.length;r++)o=n[r],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},p=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var o=e.components,a=e.mdxType,n=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(o),m=a,y=u["".concat(c,".").concat(m)]||u[m]||d[m]||n;return o?r.createElement(y,i(i({ref:t},p),{},{components:o})):r.createElement(y,i({ref:t},p))}));function y(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=o.length,i=new Array(n);i[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var l=2;l<n;l++)i[l]=o[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,o)}m.displayName="MDXCreateElement"},2737:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var r=o(7462),a=(o(7294),o(4137));const n={},i="Local Proxy Access to Dappnode",s={unversionedId:"user/access-your-dappnode/local",id:"user/access-your-dappnode/local",title:"Local Proxy Access to Dappnode",description:"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users.",source:"@site/docs/user/access-your-dappnode/local.md",sourceDirName:"user/access-your-dappnode",slug:"/user/access-your-dappnode/local",permalink:"/docs/user/access-your-dappnode/local",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/local.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Terminal Access to Dappnode",permalink:"/docs/user/access-your-dappnode/terminal"},next:{title:"Hardware",permalink:"/docs/user/hardware/overview"}},c={},l=[{value:"When to Use Local Proxy",id:"when-to-use-local-proxy",level:2},{value:"Accessing Dappnode via Local Proxy",id:"accessing-dappnode-via-local-proxy",level:2},{value:"Limitations & Settings",id:"limitations--settings",level:2}],p={toc:l},u="wrapper";function d(e){let{components:t,...o}=e;return(0,a.kt)(u,(0,r.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"local-proxy-access-to-dappnode"},"Local Proxy Access to Dappnode"),(0,a.kt)("p",null,"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users."),(0,a.kt)("h2",{id:"when-to-use-local-proxy"},"When to Use Local Proxy"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"\ud83d\udee0 ",(0,a.kt)("strong",{parentName:"li"},"Setup & Recovery"),": If you're setting up your VPN or recovering from access issues, the local proxy can be really useful."),(0,a.kt)("li",{parentName:"ul"},"\ud83d\udce1 ",(0,a.kt)("strong",{parentName:"li"},"Same Network"),": It's crucial to be on the same local network as your Dappnode."),(0,a.kt)("li",{parentName:"ul"},"\u26a0\ufe0f ",(0,a.kt)("strong",{parentName:"li"},"Network Limitations"),": Local proxy access might not always be available due to specific network configurations or restrictions.")),(0,a.kt)("h2",{id:"accessing-dappnode-via-local-proxy"},"Accessing Dappnode via Local Proxy"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"\ud83d\udcf1 On a device of your choice that's connected to the same network as your Dappnode, open a web browser."),(0,a.kt)("li",{parentName:"ol"},"\ud83c\udf10 Type in ",(0,a.kt)("a",{parentName:"li",href:"http://dappnode.local"},"http://dappnode.local")," in the address bar."),(0,a.kt)("li",{parentName:"ol"},"\ud83d\udee1 If prompted, use your Dappnode credentials to log in or register as a new user if you haven't already.")),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"If ",(0,a.kt)("a",{parentName:"p",href:"http://dappnode.local"},"http://dappnode.local")," doesn't work, there might be network-specific restrictions or configurations preventing access. In such cases, consider other access methods or reach out for support.")),(0,a.kt)("h2",{id:"limitations--settings"},"Limitations & Settings"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"\u26a0\ufe0f ",(0,a.kt)("strong",{parentName:"p"},"Access Limitations"),": When using the local network proxy, you're limited to the Dappnode Admin UI dashboard at ",(0,a.kt)("inlineCode",{parentName:"p"},"dappnode.local")," and cannot access other features like blockchain clients (Ethereum, Gnosis Chain, etc.). For full feature access, you'd need to configure and use either a VPN or the included Wi-Fi hotspot.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Turning Local Proxy Off"),": If you primarily use VPN features or the included Wi-Fi hotspot and find no use for local network access, you can disable it. Disabling can also be a security measure if you don't want all devices on your network to have access to this UI, even though it's protected by a password. To toggle local network access, navigate to the Wi-Fi sidebar menu on your Dappnode:"),(0,a.kt)("p",{parentName:"li"}," \ud83d\udd0d Navigate to the ",(0,a.kt)("a",{parentName:"p",href:"http://my.dappnode/wireless-network/local"},"Local Network menu")," on your Dappnode."),(0,a.kt)("p",{parentName:"li"},' \ud83d\udd27 Toggle the "Local Network Proxy" switch.'),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{src:"/img/local-proxy-switch.png",alt:"Dappnode Local Proxy Switch",width:"600"})))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5456a9ed.e6eff62e.js b/assets/js/5456a9ed.e6eff62e.js new file mode 100644 index 000000000..dfe3c7d26 --- /dev/null +++ b/assets/js/5456a9ed.e6eff62e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1600],{242:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var s=n(5893),t=n(1151);const r={},a="Local Proxy Access to Dappnode",i={id:"user/access-your-dappnode/local",title:"Local Proxy Access to Dappnode",description:"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users.",source:"@site/docs/user/access-your-dappnode/local.md",sourceDirName:"user/access-your-dappnode",slug:"/user/access-your-dappnode/local",permalink:"/docs/user/access-your-dappnode/local",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/local.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Terminal Access to Dappnode",permalink:"/docs/user/access-your-dappnode/terminal"},next:{title:"Hardware",permalink:"/docs/user/hardware/overview"}},c={},l=[{value:"When to Use Local Proxy",id:"when-to-use-local-proxy",level:2},{value:"Accessing Dappnode via Local Proxy",id:"accessing-dappnode-via-local-proxy",level:2},{value:"Limitations & Settings",id:"limitations--settings",level:2}];function d(e){const o={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.h1,{id:"local-proxy-access-to-dappnode",children:"Local Proxy Access to Dappnode"}),"\n",(0,s.jsx)(o.p,{children:"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users."}),"\n",(0,s.jsx)(o.h2,{id:"when-to-use-local-proxy",children:"When to Use Local Proxy"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["\ud83d\udee0 ",(0,s.jsx)(o.strong,{children:"Setup & Recovery"}),": If you're setting up your VPN or recovering from access issues, the local proxy can be really useful."]}),"\n",(0,s.jsxs)(o.li,{children:["\ud83d\udce1 ",(0,s.jsx)(o.strong,{children:"Same Network"}),": It's crucial to be on the same local network as your Dappnode."]}),"\n",(0,s.jsxs)(o.li,{children:["\u26a0\ufe0f ",(0,s.jsx)(o.strong,{children:"Network Limitations"}),": Local proxy access might not always be available due to specific network configurations or restrictions."]}),"\n"]}),"\n",(0,s.jsx)(o.h2,{id:"accessing-dappnode-via-local-proxy",children:"Accessing Dappnode via Local Proxy"}),"\n",(0,s.jsxs)(o.ol,{children:["\n",(0,s.jsx)(o.li,{children:"\ud83d\udcf1 On a device of your choice that's connected to the same network as your Dappnode, open a web browser."}),"\n",(0,s.jsxs)(o.li,{children:["\ud83c\udf10 Type in ",(0,s.jsx)(o.a,{href:"http://dappnode.local",children:"http://dappnode.local"})," in the address bar."]}),"\n",(0,s.jsx)(o.li,{children:"\ud83d\udee1 If prompted, use your Dappnode credentials to log in or register as a new user if you haven't already."}),"\n"]}),"\n",(0,s.jsx)(o.admonition,{type:"caution",children:(0,s.jsxs)(o.p,{children:["If ",(0,s.jsx)(o.a,{href:"http://dappnode.local",children:"http://dappnode.local"})," doesn't work, there might be network-specific restrictions or configurations preventing access. In such cases, consider other access methods or reach out for support."]})}),"\n",(0,s.jsx)(o.h2,{id:"limitations--settings",children:"Limitations & Settings"}),"\n",(0,s.jsxs)(o.ul,{children:["\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:["\u26a0\ufe0f ",(0,s.jsx)(o.strong,{children:"Access Limitations"}),": When using the local network proxy, you're limited to the Dappnode Admin UI dashboard at ",(0,s.jsx)(o.code,{children:"dappnode.local"})," and cannot access other features like blockchain clients (Ethereum, Gnosis Chain, etc.). For full feature access, you'd need to configure and use either a VPN or the included Wi-Fi hotspot."]}),"\n"]}),"\n",(0,s.jsxs)(o.li,{children:["\n",(0,s.jsxs)(o.p,{children:[(0,s.jsx)(o.strong,{children:"Turning Local Proxy Off"}),": If you primarily use VPN features or the included Wi-Fi hotspot and find no use for local network access, you can disable it. Disabling can also be a security measure if you don't want all devices on your network to have access to this UI, even though it's protected by a password. To toggle local network access, navigate to the Wi-Fi sidebar menu on your Dappnode:"]}),"\n",(0,s.jsxs)(o.p,{children:["\ud83d\udd0d Navigate to the ",(0,s.jsx)(o.a,{href:"http://my.dappnode/wireless-network/local",children:"Local Network menu"})," on your Dappnode."]}),"\n",(0,s.jsx)(o.p,{children:'\ud83d\udd27 Toggle the "Local Network Proxy" switch.'}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{src:"/img/local-proxy-switch.png",alt:"Dappnode Local Proxy Switch",width:"600"})}),"\n"]}),"\n"]})]})}function p(e={}){const{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>i,a:()=>a});var s=n(7294);const t={},r=s.createContext(t);function a(e){const o=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5525.46543622.js b/assets/js/5525.46543622.js new file mode 100644 index 000000000..89b62c767 --- /dev/null +++ b/assets/js/5525.46543622.js @@ -0,0 +1 @@ +(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5525],{5525:()=>{}}]); \ No newline at end of file diff --git a/assets/js/59362658.2321f39d.js b/assets/js/59362658.2321f39d.js new file mode 100644 index 000000000..90762c14e --- /dev/null +++ b/assets/js/59362658.2321f39d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2267],{7797:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>c,toc:()=>u});var s=o(5893),n=o(1151);const r={slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},a=void 0,c={permalink:"/blog/mdx-blog-post",source:"@site/blog/2021-08-01-mdx-blog-post.mdx",title:"MDX Blog Post",description:"Blog posts support Docusaurus Markdown features, such as MDX.",date:"2021-08-01T00:00:00.000Z",formattedDate:"August 1, 2021",tags:[{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},unlisted:!1,prevItem:{title:"Welcome",permalink:"/blog/welcome"},nextItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},l={authorsImageUrls:[void 0]},u=[];function i(t){const e={a:"a",admonition:"admonition",code:"code",p:"p",pre:"pre",...(0,n.a)(),...t.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(e.p,{children:["Blog posts support ",(0,s.jsx)(e.a,{href:"https://docusaurus.io/docs/markdown-features",children:"Docusaurus Markdown features"}),", such as ",(0,s.jsx)(e.a,{href:"https://mdxjs.com/",children:"MDX"}),"."]}),"\n",(0,s.jsxs)(e.admonition,{type:"tip",children:[(0,s.jsx)(e.p,{children:"Use the power of React to create interactive blog posts."}),(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-js",children:"<button onClick={() => alert('button clicked!')}>Click me!</button>\n"})}),(0,s.jsx)("button",{onClick:()=>alert("button clicked!"),children:"Click me!"})]})]})}function d(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(i,{...t})}):i(t)}},1151:(t,e,o)=>{o.d(e,{Z:()=>c,a:()=>a});var s=o(7294);const n={},r=s.createContext(n);function a(t){const e=s.useContext(r);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:a(t.components),s.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/59362658.7e1a497f.js b/assets/js/59362658.7e1a497f.js deleted file mode 100644 index 70419507e..000000000 --- a/assets/js/59362658.7e1a497f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2267],{4137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var c=o.createContext({}),u=function(e){var t=o.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=u(e.components);return o.createElement(c.Provider,{value:t},e.children)},i="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),i=u(r),d=n,b=i["".concat(c,".").concat(d)]||i[d]||m[d]||a;return r?o.createElement(b,s(s({ref:t},p),{},{components:r})):o.createElement(b,s({ref:t},p))}));function b(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,s=new Array(a);s[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[i]="string"==typeof e?e:n,s[1]=l;for(var u=2;u<a;u++)s[u]=r[u];return o.createElement.apply(null,s)}return o.createElement.apply(null,r)}d.displayName="MDXCreateElement"},1910:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var o=r(7462),n=(r(7294),r(4137));const a={slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},s=void 0,l={permalink:"/blog/mdx-blog-post",source:"@site/blog/2021-08-01-mdx-blog-post.mdx",title:"MDX Blog Post",description:"Blog posts support Docusaurus Markdown features, such as MDX.",date:"2021-08-01T00:00:00.000Z",formattedDate:"August 1, 2021",tags:[{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},prevItem:{title:"Welcome",permalink:"/blog/welcome"},nextItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},c={authorsImageUrls:[void 0]},u=[],p={toc:u},i="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(i,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Blog posts support ",(0,n.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/markdown-features"},"Docusaurus Markdown features"),", such as ",(0,n.kt)("a",{parentName:"p",href:"https://mdxjs.com/"},"MDX"),"."),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Use the power of React to create interactive blog posts."),(0,n.kt)("pre",{parentName:"admonition"},(0,n.kt)("code",{parentName:"pre",className:"language-js"},"<button onClick={() => alert('button clicked!')}>Click me!</button>\n")),(0,n.kt)("button",{onClick:()=>alert("button clicked!")},"Click me!")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/59a51c52.947a6830.js b/assets/js/59a51c52.947a6830.js deleted file mode 100644 index 30f523b24..000000000 --- a/assets/js/59a51c52.947a6830.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4980],{4137:(e,t,i)=>{i.d(t,{Zo:()=>p,kt:()=>h});var n=i(7294);function a(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function o(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function r(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?o(Object(i),!0).forEach((function(t){a(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):o(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function l(e,t){if(null==e)return{};var i,n,a=function(e,t){if(null==e)return{};var i,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)i=o[n],t.indexOf(i)>=0||(a[i]=e[i]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)i=o[n],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),i=t;return e&&(i="function"==typeof e?e(t):r(r({},t),e)),i},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var i=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=c(i),u=a,h=m["".concat(s,".").concat(u)]||m[u]||d[u]||o;return i?n.createElement(h,r(r({ref:t},p),{},{components:i})):n.createElement(h,r({ref:t},p))}));function h(e,t){var i=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=i.length,r=new Array(o);r[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:a,r[1]=l;for(var c=2;c<o;c++)r[c]=i[c];return n.createElement.apply(null,r)}return n.createElement.apply(null,i)}u.displayName="MDXCreateElement"},6958:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=i(7462),a=(i(7294),i(4137));const o={},r="Setting up Ethical Metrics",l={unversionedId:"user/ethical-metrics/setup",id:"user/ethical-metrics/setup",title:"Setting up Ethical Metrics",description:"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.",source:"@site/docs/user/ethical-metrics/setup.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/setup",permalink:"/docs/user/ethical-metrics/setup",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/setup.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethical Metrics",permalink:"/docs/user/ethical-metrics/overview"},next:{title:"Metrics Collected by Ethical Metrics",permalink:"/docs/user/ethical-metrics/metrics"}},s={},c=[{value:"Telegram Notifications",id:"telegram-notifications",level:2},{value:"Email Notifications",id:"email-notifications",level:2}],p={toc:c},m="wrapper";function d(e){let{components:t,...o}=e;return(0,a.kt)(m,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"setting-up-ethical-metrics"},"Setting up Ethical Metrics"),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.")),(0,a.kt)("p",null,"Email notifications may sometimes encounter hurdles such as being categorized as spam or getting lost in a cluttered inbox. This could inadvertently lead to missing out on important notifications that require your immediate attention."),(0,a.kt)("p",null,"In contrast, Telegram channels provide a streamlined and efficient way to receive notifications directly to your device, ensuring that you stay informed without any interruptions."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"setup-6",src:i(1344).Z,width:"1685",height:"674"})),(0,a.kt)("p",null,"In order to setup your Ethical Metrics notification system, you need to follow these steps:"),(0,a.kt)("h2",{id:"telegram-notifications"},"Telegram Notifications"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Access Telegram Web:\nOpen Telegram Web using ",(0,a.kt)("a",{parentName:"p",href:"https://web.telegram.org/a/"},"this link")," and login with your account. Ensure the URL ends with ",(0,a.kt)("inlineCode",{parentName:"p"},"/a/"),". If not, manually add ",(0,a.kt)("inlineCode",{parentName:"p"},"/a/")," after ",(0,a.kt)("inlineCode",{parentName:"p"},"https://web.telegram.org/"),".")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Create a Private Channel.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Add the DappNode bot (",(0,a.kt)("inlineCode",{parentName:"p"},"@ethicalMetricsAlerts_bot"),") to your channel as an administrator.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Find Your Channel ID:\nCopy the channel ID from the URL.\nIt's a 13-digit number following the ",(0,a.kt)("inlineCode",{parentName:"p"},"-")," in the URL. The ID always starts with ",(0,a.kt)("inlineCode",{parentName:"p"},"-100"),". Ensure to include the ",(0,a.kt)("inlineCode",{parentName:"p"},"-")," when copying."),(0,a.kt)("p",{parentName:"li"},(0,a.kt)("img",{alt:"telegram-channel-id",src:i(7537).Z,width:"302",height:"29"}))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Navigate to ",(0,a.kt)("a",{parentName:"p",href:"http://my.dappnode/system/notifications"},"http://my.dappnode/system/notifications"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Enable Notifications:\nPaste the channel ID into the Telegram Channel ID field and toggle the switch ",(0,a.kt)("inlineCode",{parentName:"p"},"ON")," to start receiving notifications."))),(0,a.kt)("h2",{id:"email-notifications"},"Email Notifications"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Navigate to ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/system/notifications"},"http://my.dappnode/system/notifications")),(0,a.kt)("li",{parentName:"ol"},"Introduce the email address where you want to receive the notifications and click on the switch to activate the notifications."),(0,a.kt)("li",{parentName:"ol"},"Thats it! Your Ethical Metrics will automatically register your TOR instance with the email address you provided. This will happen through the TOR network, preserving your privacy. You should receive a welcome email in the following minutes.")),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"To send email notifications, it is necessary that you provide an email address. In order to remain private, we recommend you to use an address that can't be linked to your identity. For example, John Doe probably wouldn't want to use \"",(0,a.kt)("a",{parentName:"p",href:"mailto:johndoe@gmail.com"},"johndoe@gmail.com"),'" if he wanted to remain anoymous.')))}d.isMDXComponent=!0},1344:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/ethical-metrics-setup-1c7291004f39fb5cbc133557eebf35ee.png"},7537:(e,t,i)=>{i.d(t,{Z:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS4AAAAdCAYAAAAU2YH0AAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAmdEVYdENyZWF0aW9uIFRpbWUAanVlIDI4IG1hciAyMDI0IDE0OjE3OjE4soT19wAAElNJREFUeJztnH9sU+e5xz/8sB2S4BBXxh2zA+W0OHibkW8TFCKQW7VEKcMURFSSBREtICBUWbOCmnapUsV3KbiiUwoaAQRpQWT8UKpsy2VICdOwuEosflxfXM2kpaYNcelNzfLDS1KOXcL9Iz9wEjt2aNc26/lIR0qe532f8/i8Pt/zPu85PtPu379/HwkJCYkpxPTvOgEJCQmJySIJl4SExJRDEi4JCYkphyRcEhISU46Z33UCEhLfNom5177rFCQmQe+pJeNs0oxLQkJiyhFBuDpx1R+k3tX77WYzCdovnOZ0c3tU29fDh7PWRq3D/w3GDMVLo7WYavu/Kv7UZrLj+c2Pv8T3lQjC1UHzH89ibw9E6NZLh6uZ6x2x2r9hAi7OHDrB1b6EiW1fGy+NNTU0eMQY2op4nXac3snE9+FobMThe8j0/p2Z7Hj+S8Zf4vvKQ5aKLmrKdnPm+lhhi2T/hmm9wJXexZifVE1s+1ZxUFWwlRp3LCInEZXJjue49u3UbFlPxYXBqqG36RUsJfVMfE2dRsqyFP5+fDFVj08b7ZLFsbloEZ7jP+PO0cWc26wkJWb/dNKf1XHubQN3Ti3hzkE99XmzmRvz/hWs3vQYzQd/OtR/ESfXJJAUsz+Umawu0nPnlB7b4yHmx+dx9dQSekO2v29OQDHsV8+m4lU9nuNL6D1uoHnnXFYkRe47uAlsjo+hP6CYN4eq/1yM9/gS7hzVU79pzPEdw5Rc43JdaKF3sZllqoltElOXyY7nuPadLlo7dKQZE4EArVc8qFJT0UTor1AnsKPoCZpfSma+fKx3Gis2PcY7aQM0HG9jW10fc83zeW9NXGz+pCR+83w83dc62La3jfJr91nx/HzeWTY9xv0PoOArmuq85O5to/warPxFChWGaTH6H3yO9DULOJgm4+7Yz58wgzmBXsqtN3j69cEt98/9DF6GZewoWsCLc/op33ODp/fdoWPBjzi5Zc6gOLb52G79mOeGt91tHPl0gO4b/+RSfwz9ZfFYd+rIoYeX9twg92Q/Kc/O5701CiIxgXAFaT/za/Is2WRb8thScZrRS15BWvasITs7m+zsEs52TmTv4MLbr7Albz2W7Gws6wso2V2Pa6RPL9frK9iRZyE728L6gleo9wCdF6jIW0/J6dB1CxcXWnpZbF6GapztP/hgVzr63FpGqi9PNav066gZKeE8VK/Ss6raM/iv6KHRWsCq5Ub0xuWsK67FOWbJyVu3i3XLjej16TxTYKXRG2lWJdKwVc+CBQtYoM+l1hdb/NEhorX3YrdtHfTr9RiXryK3uBY3AD4arVtZ90w6er0efXouNR5w1xTwTLoevV5P+jMFWO2+kVgNZbmsWp6OXr8AvXE5uWW11NmKWfeMEb3eyPLcMhoilr9eGm1bWZWuH8q1OqTsDZ/LxPkPM3qMPadfoWD9g+/Gweax86aQ9s0VWLKzyf7FflzBVvb/Ipvs7DW8bu+j44+/xlLRHOZzTGPpGi07533Jm9V3+HBswRCfxI7Mmbj+1E7JeT/vn2unxP4VS1c+wgpZDP6eLnJf/oi84//g/SvdHDjyOXXdMzAa4oZmNFH2T5D3j7fzxvluzl/p5sCRL2gKyNHPnxGjf5AkwzwOrrrPm9V3uDXuM85A0R/AdaOfyx8Pbh/4hn4NKEtg5eNw8dxn1Lr7uXzlC0qbvyRuQQJGGRAMctndx8Wh7cP4OVjmfcnvjnzBBzH0VzyRzOoff0Xtsc95393P+fNeSlvusdT8CD8LM1oQ5XGIxIVr2VYsIO+9Tv2hd9m9X+DYa2kMXhBkGLdVUZwmB+Qkj6hIOHsnrS4XpO3kjZUa6LzO2XdrKHu9i6oDhQieE+w5dJPU4kp2psro6+giQQMEggQCECDkKF+/wNVegRdCL8Ujth9hGjBBmRO3mI9ZAX6nA4/owekWQasAvxunR43JJAB+HNat7HIYKK08hgE3NVYrxVYtf91rHpkmi2jJKS1EUPporLZRXACn/lKOadwFQYG5vJ5yswJQoFb7cZRFj/+AaPmIOKwFbG1Qk1+6n3JBgb/BRnGdEx/5gBen3Y7fVMnhvQIKv4haC+qMQsoNJagVIu46K2XFZZj++zAWpQ+3wwnmvRzL0SJ6arGVlWE15FNaehhB4aXOVkaZ1UTG4RzUo3IVcZQVUNyoprD8MOVKHw1VVgoKoL6+CIMiXC7R8g8/xpq0tWxb/EuSZX14/3KQfW/vI9VYyVOJYdon7uTYH/rwnimj7ObPOfCqmYQ+O3t2nGXhW2/xgi6RlC3Xxxz3+1w8+iECwPxH2Tx2VBckYEz4iqaPAyPtL7m/pHvlLNLVcGnOxP6Lt0EMhvwkOH4mGtkAt9qCQzOaifc/CpmMFc8lszTYx+/dX8Xuj5+NrSiJWydvcPR2MhvHdItLmEFc8B5J82QktQXpGeUN0NYzHUuakrn2br5ARvp8OXc/8/FhcOz+49mZMxta2jjaFmP/+BkkcY+O/uFjdB/XpyIsU7BIFv4wTCBcMpLTzGSmqQAjuq4WtpxpppU0jEMtEpJ16HTj5rUR7DISU58kzTgYL02AHTvOcObKRl6ji15ZMqlpRgQNDI4gwEoq3185Ksr1pqt0CmtJU4W3KU0ZGMRa7G4wm0ScDjcKJTgdbsgyITrtOBUmKk2Ar5HqBhHL4b3kZygAE5UldpZbG3BiJmMovpBTQr5l8LTNMIi4l9uosZeyP2u89Ci1AoIwZPfVxRR/hGj5+BupqfORUX6K8pwhGfFpoW50GLXJjNkUIjMGM+bhP4VCGuqqcHrAYhrK2ZBBhkkNJgF/YwNlyizyswazM/gaaLA58DBGuPwN1DT4MFfWU2pRDh4bQcTzTBXVjkL2m8Pk4m/AFkP+Y8c4Ucgkc8i3WLeBpgs1uG7CU8Zw7RNRqeS0dnWhWpiKTqWCri465TrWCipUclDETydONh0FIAbv0dMf5T0D8TKSuEdPd0i7niA9zCJlzrTo/tuh8WWsL3iUFd3/YJ197Fk/Memb9PxtVRxwj4vHPub3bbH6p7Eibx4rP/ucp+1BxHnjY2tkA3TIkjhkUxEXCHKp5XNeOtLFB0Eg2M+bR3ws/ZWO/9mTzMX+OFYk9bB9TxdfjImTlDaXfPWX/O5t/wPxi9a/rY8PAknkP6+k7oifW8jQq2cAA8QRnpgfQNVokqG3i2/sAQmdEaPqBFdcHbBxLS8Ir3NoxxaurNzAhhfMGFXjBRGu03S1E2FtZshaxRibNoMswUaj0wsmH3anmvwSA3V1DjyY8NudiBklZCgArxuP34ujwBhy7oiImPH6AWWYFNQmTFoRu8dLiMKGZ7Lxo7X3OHGLAoUZamJHxNNgw1Zjx+nxgVKJKIpow1a7StRqJaLPz3B6SrUahV/EL8KoKaLHjVs0UGgK+RBaEybBj93tYUQpQ4kp/7FjHKD9wkEOnrlKa0cnyBMJBANoApHaA3TQ3h5Ak6YbjNDuoUNjZPhaurroJxxLH1ol+czH0ztvc3mCjIbp+Zp+mMnqzQs5ZLhLqfVzLk5Ot3D9qY2nr8kxpqn5Td5CTvXfGCV+Ef3z1FRk3uP31i5uRYj90blP+Mk5IF7GisxHqdqUwnt9ATKP9yEyDY1agSbYT11zHxjkoJ7N5iVxNJ2/y4Ov0kxyzLPB7eXE7dDoUfr7OnnpaAInNz2G2wwwwN3AdOi/G/GYxv7kvFyOnNGFcaR7h7HdUwwRJvliNlQdI635LGdOHOSVs6dZW1nFdmPi6C7X7VztFFibqZnAZiAjQ0tVox1vhh8HGVTmmPBU1eLwZuF3+DDkZwxqhiiCwkD+sf3kh55LCiXacKIVA6P0YLLxo7UXB9Uj8pJlGNxVFO9qRF1SzuEsAaW/kbLcmsjtFYqh/Qz/DwrCqNzD3DyNJf+x4+k5QcWeFlQvFPNbsw55XxP7y85Gbn9lN+srmukLBmFfHpZ9QDBIkKvssJxAnvkazu65rD0/JFx9AT6Klnd/mNlTkowkgtzqvg9E8wPM5NnNAu+lf0X57k85envyb5MSe+5y+dpdLl/rpXuOgWPPPcIi+/+N5B/JT9oclibMYqltCdaQeMbf/pSUd/5OXktILv1BLp73UvrEbP64JAkjfVxWq3grL4FLR9yUtAzAn30czXuCv+U9yurmT3m/f6hvUhKrDXD5aM/omVjU/vf5yH6LJ5u9pKhl0AerX1qElT4uRRD3h/zJTyLyRAj29QKqGOxh6GzlZqccXeqw4CQiZG7gtcynSC3ZQk29i0JjZqi8cd3eQqduLaN1a7zNZDGjrWukts6P31SCQWnAbCijsbYWv9dATtaQKggmBBrweJUIsc5iPA4cXiUGg3aMQzF4zvv9wEPGj9ZeMKClEYfbT36Myur3ePAoMygtymKwMhSYzHwtcq4GBOpwOP0UDufideL0KBAEAcYst8ea/9jx7L3poSPByPbCTBYDkEoyZyO2x7iNA28kUFbh5edVO8lM7OXC7hKaUit5Y50GuSwZYcd1zo8psyZC/LQPV5+KpY/LwS0C01hqmMUcn5/LPhC7J/YDzDVrOWS+z9E9n3Cg7eu+Au8+4tAJHf4iMNr/kb2NZddC7jCqH+G9Xym5XP0Jb16LnotCHU9KQpBLtwdG4n/k/pKe52Yxfw4wJFwKw2zS6efN/x14qP4EB7h1W2TushReNNyj6Z2ecaXoMA8pXFpSdXDh7AmaNE+R3NuJ3PgURlUkO0CQ9rPvUp9gRpfYRfOJGlwqM2+lyaG9mbOtchYuTIa+m7R2BUnUJSLvvEDFi/vpWltF1YZe7C2d6FaljSoTx9sAkwWzOpeaWiWWwxkoUGC2GLBaa8FUzrBuoc6i0FLFVlsxZWIhFoMSfF586iwsISWQ3+3A4dSCz0mtzYbbUEKlWQG+BorXWfEVnuJUoYDJAA211TRos1D6fCgyosVXolZCY2MDbnM+hmj5qLPIN1exy1pMNUWYlD6cdU7E8atlIygFAa2/gdrqRpRmLQrRi4/wVXBURn3eLIpyqimwFmOjiCyll4YqG04hn3pzhDlV1PzHj2eiVoeqz0796WbkaRoSAu30AYkR2iNXkRzooku1EKOgQUMnXV1yBGMqOk245YcY6O/hQPOPqH9eR1XPF5yPn0OFeSauun8MlnvBKH7i2LlmNly7zX8F4kgffn4qGMQ1skA/AfGzeTlnFh037tIRnM58QzIvp03Dda578K5dNH+PyAehNVcwiMgAPb673OoHZPFszlPCjX7ahvsvm8GH57txAeKn/8TVrWJjwaO46vzckinIz0tC09M5IswPxLqHy2Pqu1j6z52XgHGeHGP6I7y4bBbd9jZeaglz82GIhxQuFSu3befK7hr2vf4XSE5lY/lTGFWR7IO95HTQdKiCm71yNIvNvPrb7RjlEOhqpenEWTwdfQRlySxM+yWv/dIIND3YpcdOS6eOVZm6iW0AmMjJEqitE8jKGDyJtGYLJtwocrJCZhxKzJXH2G+zUVW9izqviEJrIKs0Y0hY1BgyTNjtZRTU+kGpxZRVyqnyQgzjjokaS2k59l1V7MqtRaE1UXTYQtGE8QVySnJoLLNR5bBw2BI9H8vew/jKbNSWFVAlajEJUUovQxF7y71Yq3eRa/ODUo1aMJD1kKXwA5RklB9jv6IMm7WAGr8SwVzE4coiDBETipJ/uPFcvJFXt3Ww/8xuXnk3CLIEkjUCTyZHaA90tLYT0JoHxazXS3unBmOYm0ixc5+Lxz+hNCGF32x+jI3BAJftbWz7893Y/PGzWKSejubHWs6lh4T13eG5lz+LvtaVMJNFTyTz4rNxaOQDdPtELp5ro/Tk3dj8UZlGyrwkNpo1aBIG6O4WuXy+jdKTQ89x9Xezfd9M3tmk5p1XNczhHm1tPWzbO3qdLkU9k7s94vjSO2r/6Vi2LMQ2/x5tbb2cqPbyu5bI61sA076dVzdf52DBK7S+cIyqnz/cE6KegwWUuFZx4MAGdBPYfmj46gpYXm2g/q+lYcT0+09o/opJjufDjr/0doipRbi3Q0yR19p4sF/pRLcyM+QLGs72746Iu7EOj0JAq1Yieu3UVDnQZpVEu7/5PWGi/D3UTmo8f4jjLzHM1BAuj53mDg2ZY8rEcbZ/e/x47XVUNXrw+kUUagFT1l4Ol5omd6fxO2OC/D01kxvPH+T4SwzzLZWKEhLfH6RScWoRrlSUhEtCQmLKMSXfDiEhIfHDRhIuCQmJKYckXBISElMOSbgkJCSmHJJwSUhITDn+H8jAhSjsBOBaAAAAAElFTkSuQmCC"}}]); \ No newline at end of file diff --git a/assets/js/59a51c52.f26ffb8c.js b/assets/js/59a51c52.f26ffb8c.js new file mode 100644 index 000000000..382525dc5 --- /dev/null +++ b/assets/js/59a51c52.f26ffb8c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4980],{9837:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var n=t(5893),o=t(1151);const s={},a="Setting up Ethical Metrics",r={id:"user/ethical-metrics/setup",title:"Setting up Ethical Metrics",description:"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.",source:"@site/docs/user/ethical-metrics/setup.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/setup",permalink:"/docs/user/ethical-metrics/setup",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/setup.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethical Metrics",permalink:"/docs/user/ethical-metrics/overview"},next:{title:"Metrics Collected by Ethical Metrics",permalink:"/docs/user/ethical-metrics/metrics"}},c={},l=[{value:"Telegram Notifications",id:"telegram-notifications",level:2},{value:"Email Notifications",id:"email-notifications",level:2}];function d(e){const i={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"setting-up-ethical-metrics",children:"Setting up Ethical Metrics"}),"\n",(0,n.jsx)(i.admonition,{type:"tip",children:(0,n.jsx)(i.p,{children:"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications."})}),"\n",(0,n.jsx)(i.p,{children:"Email notifications may sometimes encounter hurdles such as being categorized as spam or getting lost in a cluttered inbox. This could inadvertently lead to missing out on important notifications that require your immediate attention."}),"\n",(0,n.jsx)(i.p,{children:"In contrast, Telegram channels provide a streamlined and efficient way to receive notifications directly to your device, ensuring that you stay informed without any interruptions."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"setup-6",src:t(1344).Z+"",width:"1685",height:"674"})}),"\n",(0,n.jsx)(i.p,{children:"In order to setup your Ethical Metrics notification system, you need to follow these steps:"}),"\n",(0,n.jsx)(i.h2,{id:"telegram-notifications",children:"Telegram Notifications"}),"\n",(0,n.jsxs)(i.ol,{children:["\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Access Telegram Web:\nOpen Telegram Web using ",(0,n.jsx)(i.a,{href:"https://web.telegram.org/a/",children:"this link"})," and login with your account. Ensure the URL ends with ",(0,n.jsx)(i.code,{children:"/a/"}),". If not, manually add ",(0,n.jsx)(i.code,{children:"/a/"})," after ",(0,n.jsx)(i.code,{children:"https://web.telegram.org/"}),"."]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsx)(i.p,{children:"Create a Private Channel."}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Add the DappNode bot (",(0,n.jsx)(i.code,{children:"@ethicalMetricsAlerts_bot"}),") to your channel as an administrator."]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Find Your Channel ID:\nCopy the channel ID from the URL.\nIt's a 13-digit number following the ",(0,n.jsx)(i.code,{children:"-"})," in the URL. The ID always starts with ",(0,n.jsx)(i.code,{children:"-100"}),". Ensure to include the ",(0,n.jsx)(i.code,{children:"-"})," when copying."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"telegram-channel-id",src:t(7537).Z+"",width:"302",height:"29"})}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Navigate to ",(0,n.jsx)(i.a,{href:"http://my.dappnode/system/notifications",children:"http://my.dappnode/system/notifications"})]}),"\n"]}),"\n",(0,n.jsxs)(i.li,{children:["\n",(0,n.jsxs)(i.p,{children:["Enable Notifications:\nPaste the channel ID into the Telegram Channel ID field and toggle the switch ",(0,n.jsx)(i.code,{children:"ON"})," to start receiving notifications."]}),"\n"]}),"\n"]}),"\n",(0,n.jsx)(i.h2,{id:"email-notifications",children:"Email Notifications"}),"\n",(0,n.jsxs)(i.ol,{children:["\n",(0,n.jsxs)(i.li,{children:["Navigate to ",(0,n.jsx)(i.a,{href:"http://my.dappnode/system/notifications",children:"http://my.dappnode/system/notifications"})]}),"\n",(0,n.jsx)(i.li,{children:"Introduce the email address where you want to receive the notifications and click on the switch to activate the notifications."}),"\n",(0,n.jsx)(i.li,{children:"Thats it! Your Ethical Metrics will automatically register your TOR instance with the email address you provided. This will happen through the TOR network, preserving your privacy. You should receive a welcome email in the following minutes."}),"\n"]}),"\n",(0,n.jsx)(i.admonition,{type:"caution",children:(0,n.jsxs)(i.p,{children:["To send email notifications, it is necessary that you provide an email address. In order to remain private, we recommend you to use an address that can't be linked to your identity. For example, John Doe probably wouldn't want to use \"",(0,n.jsx)(i.a,{href:"mailto:johndoe@gmail.com",children:"johndoe@gmail.com"}),'" if he wanted to remain anoymous.']})})]})}function h(e={}){const{wrapper:i}={...(0,o.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1344:(e,i,t)=>{t.d(i,{Z:()=>n});const n=t.p+"assets/images/ethical-metrics-setup-1c7291004f39fb5cbc133557eebf35ee.png"},7537:(e,i,t)=>{t.d(i,{Z:()=>n});const n="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS4AAAAdCAYAAAAU2YH0AAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAmdEVYdENyZWF0aW9uIFRpbWUAanVlIDI4IG1hciAyMDI0IDE0OjE3OjE4soT19wAAElNJREFUeJztnH9sU+e5xz/8sB2S4BBXxh2zA+W0OHibkW8TFCKQW7VEKcMURFSSBREtICBUWbOCmnapUsV3KbiiUwoaAQRpQWT8UKpsy2VICdOwuEosflxfXM2kpaYNcelNzfLDS1KOXcL9Iz9wEjt2aNc26/lIR0qe532f8/i8Pt/zPu85PtPu379/HwkJCYkpxPTvOgEJCQmJySIJl4SExJRDEi4JCYkphyRcEhISU46Z33UCEhLfNom5177rFCQmQe+pJeNs0oxLQkJiyhFBuDpx1R+k3tX77WYzCdovnOZ0c3tU29fDh7PWRq3D/w3GDMVLo7WYavu/Kv7UZrLj+c2Pv8T3lQjC1UHzH89ibw9E6NZLh6uZ6x2x2r9hAi7OHDrB1b6EiW1fGy+NNTU0eMQY2op4nXac3snE9+FobMThe8j0/p2Z7Hj+S8Zf4vvKQ5aKLmrKdnPm+lhhi2T/hmm9wJXexZifVE1s+1ZxUFWwlRp3LCInEZXJjue49u3UbFlPxYXBqqG36RUsJfVMfE2dRsqyFP5+fDFVj08b7ZLFsbloEZ7jP+PO0cWc26wkJWb/dNKf1XHubQN3Ti3hzkE99XmzmRvz/hWs3vQYzQd/OtR/ESfXJJAUsz+Umawu0nPnlB7b4yHmx+dx9dQSekO2v29OQDHsV8+m4lU9nuNL6D1uoHnnXFYkRe47uAlsjo+hP6CYN4eq/1yM9/gS7hzVU79pzPEdw5Rc43JdaKF3sZllqoltElOXyY7nuPadLlo7dKQZE4EArVc8qFJT0UTor1AnsKPoCZpfSma+fKx3Gis2PcY7aQM0HG9jW10fc83zeW9NXGz+pCR+83w83dc62La3jfJr91nx/HzeWTY9xv0PoOArmuq85O5to/warPxFChWGaTH6H3yO9DULOJgm4+7Yz58wgzmBXsqtN3j69cEt98/9DF6GZewoWsCLc/op33ODp/fdoWPBjzi5Zc6gOLb52G79mOeGt91tHPl0gO4b/+RSfwz9ZfFYd+rIoYeX9twg92Q/Kc/O5701CiIxgXAFaT/za/Is2WRb8thScZrRS15BWvasITs7m+zsEs52TmTv4MLbr7Albz2W7Gws6wso2V2Pa6RPL9frK9iRZyE728L6gleo9wCdF6jIW0/J6dB1CxcXWnpZbF6GapztP/hgVzr63FpGqi9PNav066gZKeE8VK/Ss6raM/iv6KHRWsCq5Ub0xuWsK67FOWbJyVu3i3XLjej16TxTYKXRG2lWJdKwVc+CBQtYoM+l1hdb/NEhorX3YrdtHfTr9RiXryK3uBY3AD4arVtZ90w6er0efXouNR5w1xTwTLoevV5P+jMFWO2+kVgNZbmsWp6OXr8AvXE5uWW11NmKWfeMEb3eyPLcMhoilr9eGm1bWZWuH8q1OqTsDZ/LxPkPM3qMPadfoWD9g+/Gweax86aQ9s0VWLKzyf7FflzBVvb/Ipvs7DW8bu+j44+/xlLRHOZzTGPpGi07533Jm9V3+HBswRCfxI7Mmbj+1E7JeT/vn2unxP4VS1c+wgpZDP6eLnJf/oi84//g/SvdHDjyOXXdMzAa4oZmNFH2T5D3j7fzxvluzl/p5sCRL2gKyNHPnxGjf5AkwzwOrrrPm9V3uDXuM85A0R/AdaOfyx8Pbh/4hn4NKEtg5eNw8dxn1Lr7uXzlC0qbvyRuQQJGGRAMctndx8Wh7cP4OVjmfcnvjnzBBzH0VzyRzOoff0Xtsc95393P+fNeSlvusdT8CD8LM1oQ5XGIxIVr2VYsIO+9Tv2hd9m9X+DYa2kMXhBkGLdVUZwmB+Qkj6hIOHsnrS4XpO3kjZUa6LzO2XdrKHu9i6oDhQieE+w5dJPU4kp2psro6+giQQMEggQCECDkKF+/wNVegRdCL8Ujth9hGjBBmRO3mI9ZAX6nA4/owekWQasAvxunR43JJAB+HNat7HIYKK08hgE3NVYrxVYtf91rHpkmi2jJKS1EUPporLZRXACn/lKOadwFQYG5vJ5yswJQoFb7cZRFj/+AaPmIOKwFbG1Qk1+6n3JBgb/BRnGdEx/5gBen3Y7fVMnhvQIKv4haC+qMQsoNJagVIu46K2XFZZj++zAWpQ+3wwnmvRzL0SJ6arGVlWE15FNaehhB4aXOVkaZ1UTG4RzUo3IVcZQVUNyoprD8MOVKHw1VVgoKoL6+CIMiXC7R8g8/xpq0tWxb/EuSZX14/3KQfW/vI9VYyVOJYdon7uTYH/rwnimj7ObPOfCqmYQ+O3t2nGXhW2/xgi6RlC3Xxxz3+1w8+iECwPxH2Tx2VBckYEz4iqaPAyPtL7m/pHvlLNLVcGnOxP6Lt0EMhvwkOH4mGtkAt9qCQzOaifc/CpmMFc8lszTYx+/dX8Xuj5+NrSiJWydvcPR2MhvHdItLmEFc8B5J82QktQXpGeUN0NYzHUuakrn2br5ARvp8OXc/8/FhcOz+49mZMxta2jjaFmP/+BkkcY+O/uFjdB/XpyIsU7BIFv4wTCBcMpLTzGSmqQAjuq4WtpxpppU0jEMtEpJ16HTj5rUR7DISU58kzTgYL02AHTvOcObKRl6ji15ZMqlpRgQNDI4gwEoq3185Ksr1pqt0CmtJU4W3KU0ZGMRa7G4wm0ScDjcKJTgdbsgyITrtOBUmKk2Ar5HqBhHL4b3kZygAE5UldpZbG3BiJmMovpBTQr5l8LTNMIi4l9uosZeyP2u89Ci1AoIwZPfVxRR/hGj5+BupqfORUX6K8pwhGfFpoW50GLXJjNkUIjMGM+bhP4VCGuqqcHrAYhrK2ZBBhkkNJgF/YwNlyizyswazM/gaaLA58DBGuPwN1DT4MFfWU2pRDh4bQcTzTBXVjkL2m8Pk4m/AFkP+Y8c4Ucgkc8i3WLeBpgs1uG7CU8Zw7RNRqeS0dnWhWpiKTqWCri465TrWCipUclDETydONh0FIAbv0dMf5T0D8TKSuEdPd0i7niA9zCJlzrTo/tuh8WWsL3iUFd3/YJ197Fk/Memb9PxtVRxwj4vHPub3bbH6p7Eibx4rP/ucp+1BxHnjY2tkA3TIkjhkUxEXCHKp5XNeOtLFB0Eg2M+bR3ws/ZWO/9mTzMX+OFYk9bB9TxdfjImTlDaXfPWX/O5t/wPxi9a/rY8PAknkP6+k7oifW8jQq2cAA8QRnpgfQNVokqG3i2/sAQmdEaPqBFdcHbBxLS8Ir3NoxxaurNzAhhfMGFXjBRGu03S1E2FtZshaxRibNoMswUaj0wsmH3anmvwSA3V1DjyY8NudiBklZCgArxuP34ujwBhy7oiImPH6AWWYFNQmTFoRu8dLiMKGZ7Lxo7X3OHGLAoUZamJHxNNgw1Zjx+nxgVKJKIpow1a7StRqJaLPz3B6SrUahV/EL8KoKaLHjVs0UGgK+RBaEybBj93tYUQpQ4kp/7FjHKD9wkEOnrlKa0cnyBMJBANoApHaA3TQ3h5Ak6YbjNDuoUNjZPhaurroJxxLH1ol+czH0ztvc3mCjIbp+Zp+mMnqzQs5ZLhLqfVzLk5Ot3D9qY2nr8kxpqn5Td5CTvXfGCV+Ef3z1FRk3uP31i5uRYj90blP+Mk5IF7GisxHqdqUwnt9ATKP9yEyDY1agSbYT11zHxjkoJ7N5iVxNJ2/y4Ov0kxyzLPB7eXE7dDoUfr7OnnpaAInNz2G2wwwwN3AdOi/G/GYxv7kvFyOnNGFcaR7h7HdUwwRJvliNlQdI635LGdOHOSVs6dZW1nFdmPi6C7X7VztFFibqZnAZiAjQ0tVox1vhh8HGVTmmPBU1eLwZuF3+DDkZwxqhiiCwkD+sf3kh55LCiXacKIVA6P0YLLxo7UXB9Uj8pJlGNxVFO9qRF1SzuEsAaW/kbLcmsjtFYqh/Qz/DwrCqNzD3DyNJf+x4+k5QcWeFlQvFPNbsw55XxP7y85Gbn9lN+srmukLBmFfHpZ9QDBIkKvssJxAnvkazu65rD0/JFx9AT6Klnd/mNlTkowkgtzqvg9E8wPM5NnNAu+lf0X57k85envyb5MSe+5y+dpdLl/rpXuOgWPPPcIi+/+N5B/JT9oclibMYqltCdaQeMbf/pSUd/5OXktILv1BLp73UvrEbP64JAkjfVxWq3grL4FLR9yUtAzAn30czXuCv+U9yurmT3m/f6hvUhKrDXD5aM/omVjU/vf5yH6LJ5u9pKhl0AerX1qElT4uRRD3h/zJTyLyRAj29QKqGOxh6GzlZqccXeqw4CQiZG7gtcynSC3ZQk29i0JjZqi8cd3eQqduLaN1a7zNZDGjrWukts6P31SCQWnAbCijsbYWv9dATtaQKggmBBrweJUIsc5iPA4cXiUGg3aMQzF4zvv9wEPGj9ZeMKClEYfbT36Myur3ePAoMygtymKwMhSYzHwtcq4GBOpwOP0UDufideL0KBAEAcYst8ea/9jx7L3poSPByPbCTBYDkEoyZyO2x7iNA28kUFbh5edVO8lM7OXC7hKaUit5Y50GuSwZYcd1zo8psyZC/LQPV5+KpY/LwS0C01hqmMUcn5/LPhC7J/YDzDVrOWS+z9E9n3Cg7eu+Au8+4tAJHf4iMNr/kb2NZddC7jCqH+G9Xym5XP0Jb16LnotCHU9KQpBLtwdG4n/k/pKe52Yxfw4wJFwKw2zS6efN/x14qP4EB7h1W2TushReNNyj6Z2ecaXoMA8pXFpSdXDh7AmaNE+R3NuJ3PgURlUkO0CQ9rPvUp9gRpfYRfOJGlwqM2+lyaG9mbOtchYuTIa+m7R2BUnUJSLvvEDFi/vpWltF1YZe7C2d6FaljSoTx9sAkwWzOpeaWiWWwxkoUGC2GLBaa8FUzrBuoc6i0FLFVlsxZWIhFoMSfF586iwsISWQ3+3A4dSCz0mtzYbbUEKlWQG+BorXWfEVnuJUoYDJAA211TRos1D6fCgyosVXolZCY2MDbnM+hmj5qLPIN1exy1pMNUWYlD6cdU7E8atlIygFAa2/gdrqRpRmLQrRi4/wVXBURn3eLIpyqimwFmOjiCyll4YqG04hn3pzhDlV1PzHj2eiVoeqz0796WbkaRoSAu30AYkR2iNXkRzooku1EKOgQUMnXV1yBGMqOk245YcY6O/hQPOPqH9eR1XPF5yPn0OFeSauun8MlnvBKH7i2LlmNly7zX8F4kgffn4qGMQ1skA/AfGzeTlnFh037tIRnM58QzIvp03Dda578K5dNH+PyAehNVcwiMgAPb673OoHZPFszlPCjX7ahvsvm8GH57txAeKn/8TVrWJjwaO46vzckinIz0tC09M5IswPxLqHy2Pqu1j6z52XgHGeHGP6I7y4bBbd9jZeaglz82GIhxQuFSu3befK7hr2vf4XSE5lY/lTGFWR7IO95HTQdKiCm71yNIvNvPrb7RjlEOhqpenEWTwdfQRlySxM+yWv/dIIND3YpcdOS6eOVZm6iW0AmMjJEqitE8jKGDyJtGYLJtwocrJCZhxKzJXH2G+zUVW9izqviEJrIKs0Y0hY1BgyTNjtZRTU+kGpxZRVyqnyQgzjjokaS2k59l1V7MqtRaE1UXTYQtGE8QVySnJoLLNR5bBw2BI9H8vew/jKbNSWFVAlajEJUUovQxF7y71Yq3eRa/ODUo1aMJD1kKXwA5RklB9jv6IMm7WAGr8SwVzE4coiDBETipJ/uPFcvJFXt3Ww/8xuXnk3CLIEkjUCTyZHaA90tLYT0JoHxazXS3unBmOYm0ixc5+Lxz+hNCGF32x+jI3BAJftbWz7893Y/PGzWKSejubHWs6lh4T13eG5lz+LvtaVMJNFTyTz4rNxaOQDdPtELp5ro/Tk3dj8UZlGyrwkNpo1aBIG6O4WuXy+jdKTQ89x9Xezfd9M3tmk5p1XNczhHm1tPWzbO3qdLkU9k7s94vjSO2r/6Vi2LMQ2/x5tbb2cqPbyu5bI61sA076dVzdf52DBK7S+cIyqnz/cE6KegwWUuFZx4MAGdBPYfmj46gpYXm2g/q+lYcT0+09o/opJjufDjr/0doipRbi3Q0yR19p4sF/pRLcyM+QLGs72746Iu7EOj0JAq1Yieu3UVDnQZpVEu7/5PWGi/D3UTmo8f4jjLzHM1BAuj53mDg2ZY8rEcbZ/e/x47XVUNXrw+kUUagFT1l4Ol5omd6fxO2OC/D01kxvPH+T4SwzzLZWKEhLfH6RScWoRrlSUhEtCQmLKMSXfDiEhIfHDRhIuCQmJKYckXBISElMOSbgkJCSmHJJwSUhITDn+H8jAhSjsBOBaAAAAAElFTkSuQmCC"},1151:(e,i,t)=>{t.d(i,{Z:()=>r,a:()=>a});var n=t(7294);const o={},s=n.createContext(o);function a(e){const i=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(s.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5b35db5e.42cb4405.js b/assets/js/5b35db5e.42cb4405.js deleted file mode 100644 index 0d4154dae..000000000 --- a/assets/js/5b35db5e.42cb4405.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7775],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>k});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var r=a.createContext({}),d=function(e){var t=a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):p(p({},t),e)),n},c=function(e){var t=d(e.components);return a.createElement(r.Provider,{value:t},e.children)},s="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,r=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),s=d(n),m=o,k=s["".concat(r,".").concat(m)]||s[m]||u[m]||i;return n?a.createElement(k,p(p({ref:t},c),{},{components:n})):a.createElement(k,p({ref:t},c))}));function k(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,p=new Array(i);p[0]=m;var l={};for(var r in t)hasOwnProperty.call(t,r)&&(l[r]=t[r]);l.originalType=e,l[s]="string"==typeof e?e:o,p[1]=l;for(var d=2;d<i;d++)p[d]=n[d];return a.createElement.apply(null,p)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},3470:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>p,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var a=n(7462),o=(n(7294),n(4137));const i={},p="OpenVPN Access to Dappnode",l={unversionedId:"user/access-your-dappnode/vpn/openvpn",id:"user/access-your-dappnode/vpn/openvpn",title:"OpenVPN Access to Dappnode",description:"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode.",source:"@site/docs/user/access-your-dappnode/vpn/openvpn.md",sourceDirName:"user/access-your-dappnode/vpn",slug:"/user/access-your-dappnode/vpn/openvpn",permalink:"/docs/user/access-your-dappnode/vpn/openvpn",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/vpn/openvpn.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"WireGuard Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/wireguard"},next:{title:"Terminal Access to Dappnode",permalink:"/docs/user/access-your-dappnode/terminal"}},r={},d=[{value:"Setting Up OpenVPN",id:"setting-up-openvpn",level:2},{value:"1. Get VPN Credentials URL",id:"1-get-vpn-credentials-url",level:3},{value:"<em>Option 1</em>: Via Dappmanager UI",id:"option-1-via-dappmanager-ui",level:4},{value:"<em>Option 2</em>: Via Dappnode Terminal",id:"option-2-via-dappnode-terminal",level:4},{value:"2. Download OpenVPN Credentials",id:"2-download-openvpn-credentials",level:3},{value:"3. OpenVPN Installation",id:"3-openvpn-installation",level:2},{value:"4. Connecting to Dappnode via OpenVPN",id:"4-connecting-to-dappnode-via-openvpn",level:2}],c={toc:d},s="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(s,(0,a.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"openvpn-access-to-dappnode"},"OpenVPN Access to Dappnode"),(0,o.kt)("p",null,"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode."),(0,o.kt)("h2",{id:"setting-up-openvpn"},"Setting Up OpenVPN"),(0,o.kt)("h3",{id:"1-get-vpn-credentials-url"},"1. Get VPN Credentials URL"),(0,o.kt)("p",null,"There are two primary methods to obtain your VPN credentials, based on your access level to the Dappmanager:"),(0,o.kt)("h4",{id:"option-1-via-dappmanager-ui"},(0,o.kt)("em",{parentName:"h4"},"Option 1"),": Via Dappmanager UI"),(0,o.kt)("p",null,"If you have access to the Dappmanager:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Navigate to ",(0,o.kt)("strong",{parentName:"p"},"VPN > OpenVPN"),"."),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"If you don't see any device added to the list:")),(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Provide a name for your device."),(0,o.kt)("li",{parentName:"ol"},"Click on 'Add New Device'."))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"To retrieve the credentials:")),(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Click on the 'Get Link' button."),(0,o.kt)("li",{parentName:"ol"},"Copy the URL displayed.")))))),(0,o.kt)("admonition",{title:"Separate Credentials for Each Device",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"For the best experience and to enable simultaneous access, it's recommended to create a separate device entry in the Dappnode VPN list for each device you intend to use for accessing your Dappnode. "),(0,o.kt)("p",{parentName:"admonition"},"While it's technically possible to use the same credentials on multiple devices, doing so can lead to connectivity issues when trying to access the Dappnode from multiple devices at the same time."),(0,o.kt)("p",{parentName:"admonition"},"By setting up distinct credentials for each device, you ensure a smooth, uninterrupted connection for all your devices.")),(0,o.kt)("h4",{id:"option-2-via-dappnode-terminal"},(0,o.kt)("em",{parentName:"h4"},"Option 2"),": Via Dappnode Terminal"),(0,o.kt)("p",null,"If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Access the Dappnode terminal, as explained ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/terminal"},"here"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Execute the command: ",(0,o.kt)("inlineCode",{parentName:"p"},"dappnode_openvpn"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"A URL will be displayed on the terminal. Copy it."))),(0,o.kt)("h3",{id:"2-download-openvpn-credentials"},"2. Download OpenVPN Credentials"),(0,o.kt)("p",null,"With the URL you obtained in the previous step, you'll now download the OpenVPN credentials:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Open a web browser on any device."),(0,o.kt)("li",{parentName:"ol"},"Paste the URL you copied into the address bar and navigate to it."),(0,o.kt)("li",{parentName:"ol"},"You should be taken to a page where the OpenVPN credentials for your Dappnode can be downloaded. Click on the download button or link to download the ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file, which contains your OpenVPN configuration and credentials.")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Ensure that you ",(0,o.kt)("strong",{parentName:"p"},"store credentials securely"),". The ",(0,o.kt)("inlineCode",{parentName:"p"},".ovpn")," file provides direct access to your Dappnode, so treat it with the same caution you'd treat a password.")),(0,o.kt)("h2",{id:"3-openvpn-installation"},"3. OpenVPN Installation"),(0,o.kt)("p",null,"Once you've obtained your OpenVPN credentials, the next step is to install an OpenVPN client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the ",(0,o.kt)("a",{parentName:"p",href:"https://openvpn.net/client/"},"OpenVPN website"),"."),(0,o.kt)("h2",{id:"4-connecting-to-dappnode-via-openvpn"},"4. Connecting to Dappnode via OpenVPN"),(0,o.kt)("p",null,"Once you have installed the OpenVPN client on your device, follow the steps below based on your operating system to connect to Dappnode:"),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"Android")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Launch the OpenVPN for Android app."),(0,o.kt)("li",{parentName:"ol"},'Tap on "Import file".'),(0,o.kt)("li",{parentName:"ol"},"Upload the ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file you downloaded earlier."),(0,o.kt)("li",{parentName:"ol"},'Click on "Connect".'),(0,o.kt)("li",{parentName:"ol"},"Allow the app to create a VPN connection.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{src:"/img/openvpn_android.jpg",alt:"Import file in Android",style:{width:"20em"}}))),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"iPhone/iPad")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Go to the URL you obtained in the previous step."),(0,o.kt)("li",{parentName:"ol"},"Download the ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file."),(0,o.kt)("li",{parentName:"ol"},'Click on "Open in OpenVPN".'),(0,o.kt)("li",{parentName:"ol"},'Click on "Add".'),(0,o.kt)("li",{parentName:"ol"},'Click on "Connect"'),(0,o.kt)("li",{parentName:"ol"},"Allow the app to create a VPN connection.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{src:"/img/openvpn_iphone_import.jpg",alt:"Import file in iPhone",style:{width:"10em"}}))),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"macOS")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Launch Tunnelblick app for macOS."),(0,o.kt)("li",{parentName:"ol"},'Click on "VPN Details" in the top bar menu.'),(0,o.kt)("li",{parentName:"ol"},"Drag and drop the ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file you downloaded earlier in the left side bar."),(0,o.kt)("li",{parentName:"ol"},"Click on Connect.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{src:"/img/openvpn_mac.png",alt:"Import file in macOS",style:{width:"20em"}}))),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"Windows")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Launch the OpenVPN for Windows app."),(0,o.kt)("li",{parentName:"ol"},'Click on "Import file".'),(0,o.kt)("li",{parentName:"ol"},"Upload the ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file you downloaded earlier."),(0,o.kt)("li",{parentName:"ol"},"Allow the app to create a VPN connection.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{src:"/img/openvpn_windows.jpg",alt:"Import file in Windows",style:{width:"20em"}}))),(0,o.kt)("details",null,(0,o.kt)("summary",null," ",(0,o.kt)("b",null,"Recent Ubuntu")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Open Settings>Network."),(0,o.kt)("li",{parentName:"ol"},'Click on the "+" button to add a new VPN connection.'),(0,o.kt)("li",{parentName:"ol"},'Select "Import from file".'),(0,o.kt)("li",{parentName:"ol"},"Upload the ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file you downloaded earlier."),(0,o.kt)("li",{parentName:"ol"},'Click on "Add".'),(0,o.kt)("li",{parentName:"ol"},"Toggle the switch button to connect.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{src:"/img/openvpn_ubuntu_network.png",alt:"Import file in Ubuntu",style:{width:"40em"}})),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{src:"/img/openvpn_ubuntu_import.png",alt:"Import file in Ubuntu",style:{width:"40em"}}))),(0,o.kt)("details",null,(0,o.kt)("summary",null," ",(0,o.kt)("b",null,"Other Linux")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Open the terminal."),(0,o.kt)("li",{parentName:"ol"},"Navigate to the directory where you have stored your ",(0,o.kt)("inlineCode",{parentName:"li"},".ovpn")," file."),(0,o.kt)("li",{parentName:"ol"},"Execute the command: ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo openvpn Dappnode_VPN.ovpn"),"."))),(0,o.kt)("br",null),(0,o.kt)("admonition",{title:"Testing Your Connection",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Once connected, you can directly type ",(0,o.kt)("a",{parentName:"p",href:"http://my.dappnode"},"http://my.dappnode")," in your browser to access the Dappmanager.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5b35db5e.ed76c31a.js b/assets/js/5b35db5e.ed76c31a.js new file mode 100644 index 000000000..62664419c --- /dev/null +++ b/assets/js/5b35db5e.ed76c31a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7775],{2292:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>r,contentTitle:()=>l,default:()=>p,frontMatter:()=>s,metadata:()=>d,toc:()=>c});var o=i(5893),t=i(1151);const s={},l="OpenVPN Access to Dappnode",d={id:"user/access-your-dappnode/vpn/openvpn",title:"OpenVPN Access to Dappnode",description:"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode.",source:"@site/docs/user/access-your-dappnode/vpn/openvpn.md",sourceDirName:"user/access-your-dappnode/vpn",slug:"/user/access-your-dappnode/vpn/openvpn",permalink:"/docs/user/access-your-dappnode/vpn/openvpn",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/vpn/openvpn.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"WireGuard Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/wireguard"},next:{title:"Terminal Access to Dappnode",permalink:"/docs/user/access-your-dappnode/terminal"}},r={},c=[{value:"Setting Up OpenVPN",id:"setting-up-openvpn",level:2},{value:"1. Get VPN Credentials URL",id:"1-get-vpn-credentials-url",level:3},{value:"<em>Option 1</em>: Via Dappmanager UI",id:"option-1-via-dappmanager-ui",level:4},{value:"<em>Option 2</em>: Via Dappnode Terminal",id:"option-2-via-dappnode-terminal",level:4},{value:"2. Download OpenVPN Credentials",id:"2-download-openvpn-credentials",level:3},{value:"3. OpenVPN Installation",id:"3-openvpn-installation",level:2},{value:"4. Connecting to Dappnode via OpenVPN",id:"4-connecting-to-dappnode-via-openvpn",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"openvpn-access-to-dappnode",children:"OpenVPN Access to Dappnode"}),"\n",(0,o.jsx)(n.p,{children:"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode."}),"\n",(0,o.jsx)(n.h2,{id:"setting-up-openvpn",children:"Setting Up OpenVPN"}),"\n",(0,o.jsx)(n.h3,{id:"1-get-vpn-credentials-url",children:"1. Get VPN Credentials URL"}),"\n",(0,o.jsx)(n.p,{children:"There are two primary methods to obtain your VPN credentials, based on your access level to the Dappmanager:"}),"\n",(0,o.jsxs)(n.h4,{id:"option-1-via-dappmanager-ui",children:[(0,o.jsx)(n.em,{children:"Option 1"}),": Via Dappmanager UI"]}),"\n",(0,o.jsx)(n.p,{children:"If you have access to the Dappmanager:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Navigate to ",(0,o.jsx)(n.strong,{children:"VPN > OpenVPN"}),"."]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"If you don't see any device added to the list:"})}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Provide a name for your device."}),"\n",(0,o.jsx)(n.li,{children:"Click on 'Add New Device'."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"To retrieve the credentials:"})}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Click on the 'Get Link' button."}),"\n",(0,o.jsx)(n.li,{children:"Copy the URL displayed."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(n.admonition,{title:"Separate Credentials for Each Device",type:"tip",children:[(0,o.jsx)(n.p,{children:"For the best experience and to enable simultaneous access, it's recommended to create a separate device entry in the Dappnode VPN list for each device you intend to use for accessing your Dappnode."}),(0,o.jsx)(n.p,{children:"While it's technically possible to use the same credentials on multiple devices, doing so can lead to connectivity issues when trying to access the Dappnode from multiple devices at the same time."}),(0,o.jsx)(n.p,{children:"By setting up distinct credentials for each device, you ensure a smooth, uninterrupted connection for all your devices."})]}),"\n",(0,o.jsxs)(n.h4,{id:"option-2-via-dappnode-terminal",children:[(0,o.jsx)(n.em,{children:"Option 2"}),": Via Dappnode Terminal"]}),"\n",(0,o.jsx)(n.p,{children:"If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Access the Dappnode terminal, as explained ",(0,o.jsx)(n.a,{href:"/docs/user/access-your-dappnode/terminal",children:"here"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["Execute the command: ",(0,o.jsx)(n.code,{children:"dappnode_openvpn"}),"."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:"A URL will be displayed on the terminal. Copy it."}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"2-download-openvpn-credentials",children:"2. Download OpenVPN Credentials"}),"\n",(0,o.jsx)(n.p,{children:"With the URL you obtained in the previous step, you'll now download the OpenVPN credentials:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Open a web browser on any device."}),"\n",(0,o.jsx)(n.li,{children:"Paste the URL you copied into the address bar and navigate to it."}),"\n",(0,o.jsxs)(n.li,{children:["You should be taken to a page where the OpenVPN credentials for your Dappnode can be downloaded. Click on the download button or link to download the ",(0,o.jsx)(n.code,{children:".ovpn"})," file, which contains your OpenVPN configuration and credentials."]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"caution",children:(0,o.jsxs)(n.p,{children:["Ensure that you ",(0,o.jsx)(n.strong,{children:"store credentials securely"}),". The ",(0,o.jsx)(n.code,{children:".ovpn"})," file provides direct access to your Dappnode, so treat it with the same caution you'd treat a password."]})}),"\n",(0,o.jsx)(n.h2,{id:"3-openvpn-installation",children:"3. OpenVPN Installation"}),"\n",(0,o.jsxs)(n.p,{children:["Once you've obtained your OpenVPN credentials, the next step is to install an OpenVPN client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the ",(0,o.jsx)(n.a,{href:"https://openvpn.net/client/",children:"OpenVPN website"}),"."]}),"\n",(0,o.jsx)(n.h2,{id:"4-connecting-to-dappnode-via-openvpn",children:"4. Connecting to Dappnode via OpenVPN"}),"\n",(0,o.jsx)(n.p,{children:"Once you have installed the OpenVPN client on your device, follow the steps below based on your operating system to connect to Dappnode:"}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"Android"})}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Launch the OpenVPN for Android app."}),"\n",(0,o.jsx)(n.li,{children:'Tap on "Import file".'}),"\n",(0,o.jsxs)(n.li,{children:["Upload the ",(0,o.jsx)(n.code,{children:".ovpn"})," file you downloaded earlier."]}),"\n",(0,o.jsx)(n.li,{children:'Click on "Connect".'}),"\n",(0,o.jsx)(n.li,{children:"Allow the app to create a VPN connection."}),"\n"]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{src:"/img/openvpn_android.jpg",alt:"Import file in Android",style:{width:"20em"}})})]}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"iPhone/iPad"})}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Go to the URL you obtained in the previous step."}),"\n",(0,o.jsxs)(n.li,{children:["Download the ",(0,o.jsx)(n.code,{children:".ovpn"})," file."]}),"\n",(0,o.jsx)(n.li,{children:'Click on "Open in OpenVPN".'}),"\n",(0,o.jsx)(n.li,{children:'Click on "Add".'}),"\n",(0,o.jsx)(n.li,{children:'Click on "Connect"'}),"\n",(0,o.jsx)(n.li,{children:"Allow the app to create a VPN connection."}),"\n"]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{src:"/img/openvpn_iphone_import.jpg",alt:"Import file in iPhone",style:{width:"10em"}})})]}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"macOS"})}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Launch Tunnelblick app for macOS."}),"\n",(0,o.jsx)(n.li,{children:'Click on "VPN Details" in the top bar menu.'}),"\n",(0,o.jsxs)(n.li,{children:["Drag and drop the ",(0,o.jsx)(n.code,{children:".ovpn"})," file you downloaded earlier in the left side bar."]}),"\n",(0,o.jsx)(n.li,{children:"Click on Connect."}),"\n"]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{src:"/img/openvpn_mac.png",alt:"Import file in macOS",style:{width:"20em"}})})]}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"Windows"})}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Launch the OpenVPN for Windows app."}),"\n",(0,o.jsx)(n.li,{children:'Click on "Import file".'}),"\n",(0,o.jsxs)(n.li,{children:["Upload the ",(0,o.jsx)(n.code,{children:".ovpn"})," file you downloaded earlier."]}),"\n",(0,o.jsx)(n.li,{children:"Allow the app to create a VPN connection."}),"\n"]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{src:"/img/openvpn_windows.jpg",alt:"Import file in Windows",style:{width:"20em"}})})]}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsxs)("summary",{children:[" ",(0,o.jsx)("b",{children:"Recent Ubuntu"})]}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Open Settings>Network."}),"\n",(0,o.jsx)(n.li,{children:'Click on the "+" button to add a new VPN connection.'}),"\n",(0,o.jsx)(n.li,{children:'Select "Import from file".'}),"\n",(0,o.jsxs)(n.li,{children:["Upload the ",(0,o.jsx)(n.code,{children:".ovpn"})," file you downloaded earlier."]}),"\n",(0,o.jsx)(n.li,{children:'Click on "Add".'}),"\n",(0,o.jsx)(n.li,{children:"Toggle the switch button to connect."}),"\n"]}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{src:"/img/openvpn_ubuntu_network.png",alt:"Import file in Ubuntu",style:{width:"40em"}})}),(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{src:"/img/openvpn_ubuntu_import.png",alt:"Import file in Ubuntu",style:{width:"40em"}})})]}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsxs)("summary",{children:[" ",(0,o.jsx)("b",{children:"Other Linux"})]}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:"Open the terminal."}),"\n",(0,o.jsxs)(n.li,{children:["Navigate to the directory where you have stored your ",(0,o.jsx)(n.code,{children:".ovpn"})," file."]}),"\n",(0,o.jsxs)(n.li,{children:["Execute the command: ",(0,o.jsx)(n.code,{children:"sudo openvpn Dappnode_VPN.ovpn"}),"."]}),"\n"]})]}),"\n",(0,o.jsx)("br",{}),"\n",(0,o.jsx)(n.admonition,{title:"Testing Your Connection",type:"tip",children:(0,o.jsxs)(n.p,{children:["Once connected, you can directly type ",(0,o.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})," in your browser to access the Dappmanager."]})})]})}function p(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(a,{...e})}):a(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>d,a:()=>l});var o=i(7294);const t={},s=o.createContext(t);function l(e){const n=o.useContext(s);return o.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(t):e.components||t:l(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5d0a1dad.6a634fce.js b/assets/js/5d0a1dad.6a634fce.js deleted file mode 100644 index 7001eec9f..000000000 --- a/assets/js/5d0a1dad.6a634fce.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[306],{4137:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),l=c(r),h=o,f=l["".concat(s,".").concat(h)]||l[h]||u[h]||a;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=h;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p[l]="string"==typeof e?e:o,i[1]=p;for(var c=2;c<a;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}h.displayName="MDXCreateElement"},8083:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var n=r(7462),o=(r(7294),r(4137));const a={},i="Choose your path",p={unversionedId:"user/getting-started/choose-your-path",id:"user/getting-started/choose-your-path",title:"Choose your path",description:"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode.",source:"@site/docs/user/getting-started/choose-your-path.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/choose-your-path",permalink:"/docs/user/getting-started/choose-your-path",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/choose-your-path.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",next:{title:"Connect your dappnode to the router and power",permalink:"/docs/user/getting-started/connect-dappnode-to-the-router"}},s={},c=[],d={toc:c},l="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(l,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"choose-your-path"},"Choose your path"),(0,o.kt)("p",null,"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Interested in purchasing a Dappnode? Explore our ",(0,o.kt)("a",{href:"https://dappnode.io"},"official store"),".")),(0,o.kt)("div",{className:"card-container"},(0,o.kt)("a",{href:"/docs/user/getting-started/connect-dappnode-to-the-router",className:"card"},(0,o.kt)("img",{src:"/img/dappnode_box.png",alt:"Dappnode Box",className:"dappnode-box"}),(0,o.kt)("h2",null,"Dappnode is installed"),(0,o.kt)("p",null,"I have bought a Dappnode or I already installed it")),(0,o.kt)("a",{href:"/docs/user/install/iso",className:"card"},(0,o.kt)("img",{src:"/img/install_dappnode.png",alt:"Install Dappnode"}),(0,o.kt)("h2",null,"I want to install Dappnode"),(0,o.kt)("p",null,"I own a machine where I want to install Dappnode software"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5d0a1dad.fda2f78b.js b/assets/js/5d0a1dad.fda2f78b.js new file mode 100644 index 000000000..12dc93797 --- /dev/null +++ b/assets/js/5d0a1dad.fda2f78b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[306],{919:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>s,default:()=>l,frontMatter:()=>r,metadata:()=>i,toc:()=>p});var o=n(5893),a=n(1151);const r={},s="Choose your path",i={id:"user/getting-started/choose-your-path",title:"Choose your path",description:"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode.",source:"@site/docs/user/getting-started/choose-your-path.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/choose-your-path",permalink:"/docs/user/getting-started/choose-your-path",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/choose-your-path.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",next:{title:"Connect your dappnode to the router and power",permalink:"/docs/user/getting-started/connect-dappnode-to-the-router"}},d={},p=[];function c(e){const t={admonition:"admonition",h1:"h1",p:"p",...(0,a.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.h1,{id:"choose-your-path",children:"Choose your path"}),"\n",(0,o.jsx)(t.p,{children:"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode."}),"\n",(0,o.jsx)(t.admonition,{type:"note",children:(0,o.jsxs)(t.p,{children:["Interested in purchasing a Dappnode? Explore our ",(0,o.jsx)("a",{href:"https://dappnode.io",children:"official store"}),"."]})}),"\n",(0,o.jsxs)("div",{className:"card-container",children:[(0,o.jsxs)("a",{href:"/docs/user/getting-started/connect-dappnode-to-the-router",className:"card",children:[(0,o.jsx)("img",{src:"/img/dappnode_box.png",alt:"Dappnode Box",className:"dappnode-box"}),(0,o.jsx)("h2",{children:"Dappnode is installed"}),(0,o.jsx)("p",{children:"I have bought a Dappnode or I already installed it"})]}),(0,o.jsxs)("a",{href:"/docs/user/install/iso",className:"card",children:[(0,o.jsx)("img",{src:"/img/install_dappnode.png",alt:"Install Dappnode"}),(0,o.jsx)("h2",{children:"I want to install Dappnode"}),(0,o.jsx)("p",{children:"I own a machine where I want to install Dappnode software"})]})]})]})}function l(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>s});var o=n(7294);const a={},r=o.createContext(a);function s(e){const t=o.useContext(r);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(a):e.components||a:s(e.components),o.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5d665ce0.462ff5cd.js b/assets/js/5d665ce0.462ff5cd.js new file mode 100644 index 000000000..4534cbc4a --- /dev/null +++ b/assets/js/5d665ce0.462ff5cd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8646],{9513:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>p,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=t(5893),o=t(1151);const s={},a="Hardware",i={id:"user/hardware/overview",title:"Hardware",description:"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.",source:"@site/docs/user/hardware/overview.md",sourceDirName:"user/hardware",slug:"/user/hardware/overview",permalink:"/docs/user/hardware/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/hardware/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Local Proxy Access to Dappnode",permalink:"/docs/user/access-your-dappnode/local"},next:{title:"Maintenance",permalink:"/docs/user/hardware/maintenance"}},d={},c=[];function h(e){const n={a:"a",h1:"h1",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"hardware",children:"Hardware"}),"\n",(0,r.jsx)(n.p,{children:"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things."}),"\n",(0,r.jsx)(n.p,{children:"Here are some topics you can check:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/docs/user/hardware/maintenance",children:(0,r.jsx)(n.strong,{children:"\ud83d\udee0\ufe0f Maintenance"})}),": Some approaches that may be helpful for your dappnode to perform as expected."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.a,{href:"/docs/user/hardware/temperature",children:(0,r.jsx)(n.strong,{children:"\ud83c\udf21\ufe0f Temperature"})}),": Instructions for keeping track of your dappnode's temperature."]}),"\n"]}),"\n"]})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>a});var r=t(7294);const o={},s=r.createContext(o);function a(e){const n=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5d665ce0.834d76f8.js b/assets/js/5d665ce0.834d76f8.js deleted file mode 100644 index 6ba71b30e..000000000 --- a/assets/js/5d665ce0.834d76f8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8646],{4137:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(r),h=a,f=u["".concat(p,".").concat(h)]||u[h]||l[h]||o;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=h;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var c=2;c<o;c++)i[c]=r[c];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}h.displayName="MDXCreateElement"},9934:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var n=r(7462),a=(r(7294),r(4137));const o={},i="Hardware",s={unversionedId:"user/hardware/overview",id:"user/hardware/overview",title:"Hardware",description:"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.",source:"@site/docs/user/hardware/overview.md",sourceDirName:"user/hardware",slug:"/user/hardware/overview",permalink:"/docs/user/hardware/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/hardware/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Local Proxy Access to Dappnode",permalink:"/docs/user/access-your-dappnode/local"},next:{title:"Maintenance",permalink:"/docs/user/hardware/maintenance"}},p={},c=[],d={toc:c},u="wrapper";function l(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"hardware"},"Hardware"),(0,a.kt)("p",null,"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things."),(0,a.kt)("p",null,"Here are some topics you can check:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("a",{parentName:"p",href:"/docs/user/hardware/maintenance"},(0,a.kt)("strong",{parentName:"a"},"\ud83d\udee0\ufe0f Maintenance")),": Some approaches that may be helpful for your dappnode to perform as expected.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("a",{parentName:"p",href:"/docs/user/hardware/temperature"},(0,a.kt)("strong",{parentName:"a"},"\ud83c\udf21\ufe0f Temperature")),": Instructions for keeping track of your dappnode's temperature."))))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.c2e7cc9c.js b/assets/js/5e95c892.c2e7cc9c.js new file mode 100644 index 000000000..84b2ce2e5 --- /dev/null +++ b/assets/js/5e95c892.c2e7cc9c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9661],{1892:(e,s,d)=>{d.r(s),d.d(s,{default:()=>o});d(7294);var r=d(6010),a=d(1944),c=d(5281),n=d(8790),p=d(179),u=d(5893);function o(e){return(0,u.jsx)(a.FG,{className:(0,r.Z)(c.k.wrapper.docsPages),children:(0,u.jsx)(p.Z,{children:(0,n.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/5f877448.89e09364.js b/assets/js/5f877448.89e09364.js new file mode 100644 index 000000000..d67be4f30 --- /dev/null +++ b/assets/js/5f877448.89e09364.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[839],{6506:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>t,metadata:()=>a,toc:()=>d});var s=o(5893),r=o(1151);const t={},i="VPN Access to Dappnode",a={id:"user/access-your-dappnode/vpn/overview",title:"VPN Access to Dappnode",description:"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.",source:"@site/docs/user/access-your-dappnode/vpn/overview.md",sourceDirName:"user/access-your-dappnode/vpn",slug:"/user/access-your-dappnode/vpn/overview",permalink:"/docs/user/access-your-dappnode/vpn/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/vpn/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Wi-Fi Access to Dappnode",permalink:"/docs/user/access-your-dappnode/wifi"},next:{title:"WireGuard Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/wireguard"}},c={},d=[{value:"VPN Clients",id:"vpn-clients",level:2},{value:"WireGuard (Recommended)",id:"wireguard-recommended",level:3},{value:"OpenVPN",id:"openvpn",level:3},{value:"Local vs. Remote Access",id:"local-vs-remote-access",level:2}];function p(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"vpn-access-to-dappnode",children:"VPN Access to Dappnode"}),"\n",(0,s.jsxs)(n.p,{children:["Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: ",(0,s.jsx)(n.strong,{children:"WireGuard"})," and ",(0,s.jsx)(n.strong,{children:"OpenVPN"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"It is not possible to use both Dappnode WiFi hotspot and VPN at the same time. If you want to use VPN, you'll need to disconnect your device from the WiFi hotspot."})}),"\n",(0,s.jsx)(n.h2,{id:"vpn-clients",children:"VPN Clients"}),"\n",(0,s.jsxs)(n.h3,{id:"wireguard-recommended",children:[(0,s.jsx)(n.a,{href:"/docs/user/access-your-dappnode/vpn/wireguard",children:"WireGuard"})," (Recommended)"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"WireGuard is a newer, streamlined VPN protocol known for its simplicity, speed, and security."}),"\n",(0,s.jsxs)(n.li,{children:["It requires less configuration and is considered more efficient in terms of CPU usage. ",(0,s.jsx)(n.a,{href:"https://www.wireguard.com/",children:"Learn more"})]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"openvpn",children:(0,s.jsx)(n.a,{href:"/docs/user/access-your-dappnode/vpn/openvpn",children:"OpenVPN"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"OpenVPN is a well-established VPN protocol praised for its security and reliability."}),"\n",(0,s.jsxs)(n.li,{children:["It's more versatile and can bypass most network restrictions and firewalls. ",(0,s.jsx)(n.a,{href:"https://openvpn.net/",children:"Learn more"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"local-vs-remote-access",children:"Local vs. Remote Access"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Local Access"}),": Connecting to your Dappnode when you're on the same local network. Generally, this means that your Dappnode machine and the device you're using to access it are connected to the same router."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Remote Access"}),": Connecting to your Dappnode from a different network or location. This is one of the major advantages of using a VPN."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"VPN provides a balance of security, versatility, and remote access capability. You can choose the VPN technology that best suits your needs and preferences, both fufill the requirements of most users."})})]})}function l(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>i});var s=o(7294);const r={},t=s.createContext(r);function i(e){const n=s.useContext(t);return s.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),s.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/5f877448.cda86ebe.js b/assets/js/5f877448.cda86ebe.js deleted file mode 100644 index 54a0c7660..000000000 --- a/assets/js/5f877448.cda86ebe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[839],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>y});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=r.createContext({}),c=function(e){var t=r.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},d=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},u="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=c(n),m=o,y=u["".concat(p,".").concat(m)]||u[m]||l[m]||a;return n?r.createElement(y,s(s({ref:t},d),{},{components:n})):r.createElement(y,s({ref:t},d))}));function y(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,s=new Array(a);s[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[u]="string"==typeof e?e:o,s[1]=i;for(var c=2;c<a;c++)s[c]=n[c];return r.createElement.apply(null,s)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},2955:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>l,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var r=n(7462),o=(n(7294),n(4137));const a={},s="VPN Access to Dappnode",i={unversionedId:"user/access-your-dappnode/vpn/overview",id:"user/access-your-dappnode/vpn/overview",title:"VPN Access to Dappnode",description:"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.",source:"@site/docs/user/access-your-dappnode/vpn/overview.md",sourceDirName:"user/access-your-dappnode/vpn",slug:"/user/access-your-dappnode/vpn/overview",permalink:"/docs/user/access-your-dappnode/vpn/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/vpn/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Wi-Fi Access to Dappnode",permalink:"/docs/user/access-your-dappnode/wifi"},next:{title:"WireGuard Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/wireguard"}},p={},c=[{value:"VPN Clients",id:"vpn-clients",level:2},{value:"WireGuard (Recommended)",id:"wireguard-recommended",level:3},{value:"OpenVPN",id:"openvpn",level:3},{value:"Local vs. Remote Access",id:"local-vs-remote-access",level:2}],d={toc:c},u="wrapper";function l(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"vpn-access-to-dappnode"},"VPN Access to Dappnode"),(0,o.kt)("p",null,"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: ",(0,o.kt)("strong",{parentName:"p"},"WireGuard")," and ",(0,o.kt)("strong",{parentName:"p"},"OpenVPN"),"."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"It is not possible to use both Dappnode WiFi hotspot and VPN at the same time. If you want to use VPN, you'll need to disconnect your device from the WiFi hotspot.")),(0,o.kt)("h2",{id:"vpn-clients"},"VPN Clients"),(0,o.kt)("h3",{id:"wireguard-recommended"},(0,o.kt)("a",{parentName:"h3",href:"/docs/user/access-your-dappnode/vpn/wireguard"},"WireGuard")," (Recommended)"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"WireGuard is a newer, streamlined VPN protocol known for its simplicity, speed, and security."),(0,o.kt)("li",{parentName:"ul"},"It requires less configuration and is considered more efficient in terms of CPU usage. ",(0,o.kt)("a",{parentName:"li",href:"https://www.wireguard.com/"},"Learn more"))),(0,o.kt)("h3",{id:"openvpn"},(0,o.kt)("a",{parentName:"h3",href:"/docs/user/access-your-dappnode/vpn/openvpn"},"OpenVPN")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"OpenVPN is a well-established VPN protocol praised for its security and reliability."),(0,o.kt)("li",{parentName:"ul"},"It's more versatile and can bypass most network restrictions and firewalls. ",(0,o.kt)("a",{parentName:"li",href:"https://openvpn.net/"},"Learn more"))),(0,o.kt)("h2",{id:"local-vs-remote-access"},"Local vs. Remote Access"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Local Access"),": Connecting to your Dappnode when you're on the same local network. Generally, this means that your Dappnode machine and the device you're using to access it are connected to the same router."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Remote Access"),": Connecting to your Dappnode from a different network or location. This is one of the major advantages of using a VPN.")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"VPN provides a balance of security, versatility, and remote access capability. You can choose the VPN technology that best suits your needs and preferences, both fufill the requirements of most users.")))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/67625ece.a4dc0a22.js b/assets/js/67625ece.a4dc0a22.js new file mode 100644 index 000000000..487da0278 --- /dev/null +++ b/assets/js/67625ece.a4dc0a22.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[120],{8386:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>r,contentTitle:()=>s,default:()=>l,frontMatter:()=>a,metadata:()=>d,toc:()=>p});var t=o(5893),i=o(1151);const a={},s="DappnodeSDK",d={id:"dev/sdk/overview",title:"DappnodeSDK",description:"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.",source:"@site/docs/dev/sdk/overview.md",sourceDirName:"dev/sdk",slug:"/dev/sdk/overview",permalink:"/docs/dev/sdk/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/sdk/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Introduction",permalink:"/docs/dev"},next:{title:"Main commands",permalink:"/docs/dev/sdk/commands"}},r={},p=[{value:"Command-line options",id:"command-line-options",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"dappnodesdk",children:"DappnodeSDK"}),"\n",(0,t.jsxs)(n.p,{children:["The DappnodeSDK ",(0,t.jsx)(n.code,{children:"dappnodesdk"})," is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet."]}),"\n",(0,t.jsxs)(n.p,{children:["We have deployed a public APM (Aragon Package Manager) registry in which anyone can create their own APM repository: ",(0,t.jsx)(n.a,{href:"https://etherscan.io/address/public.dappnode.eth",children:"public.dappnode.eth"})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Demo GIF",src:o(4702).Z+"",width:"1049",height:"638"})}),"\n",(0,t.jsx)(n.h2,{id:"command-line-options",children:"Command-line options"}),"\n",(0,t.jsx)(n.p,{children:"DappnodeSDK is usually executed from the command line. The following are all the available commands."}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["You can run ",(0,t.jsx)(n.code,{children:"dappnodesdk <command> help"})," to get more information about each command."]})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:'Usage: dappnodesdk <command> [options]\n\nCommands:\n build Build a new version (only generates the ipfs hash)\n from_github [repoSlug] Gets an existing DNP Github release (assets) and uploa\n d it to IPFS\n increase [type] Increases the version defined in the manifest\n init Initialize a new DAppNodePackage (DNP) repository\n next [type] Compute the next release version from local\n publish [type] Publish a new version of the package in an Aragon Pack\n age Manager Repository\n github-action Github actions tooling to be run in CI. Uses a specifi\n c set of options for internal DAppNode use. Caution: o\n ptions may change without notice.\n\nOptions:\n --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]```\n'})})]})}function l(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},4702:(e,n,o)=>{o.d(n,{Z:()=>t});const t=o.p+"assets/images/demo-3ae4e5dc0c026dfb372657f396712b72.gif"},1151:(e,n,o)=>{o.d(n,{Z:()=>d,a:()=>s});var t=o(7294);const i={},a=t.createContext(i);function s(e){const n=t.useContext(a);return t.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:s(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/67625ece.d4d8382e.js b/assets/js/67625ece.d4d8382e.js deleted file mode 100644 index 0877dad39..000000000 --- a/assets/js/67625ece.d4d8382e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[120],{4137:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>h});var o=t(7294);function a(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?r(Object(t),!0).forEach((function(n){a(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):r(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function p(e,n){if(null==e)return{};var t,o,a=function(e,n){if(null==e)return{};var t,o,a={},r=Object.keys(e);for(o=0;o<r.length;o++)t=r[o],n.indexOf(t)>=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)t=r[o],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=o.createContext({}),d=function(e){var n=o.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},l=function(e){var n=d(e.components);return o.createElement(s.Provider,{value:n},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},m=o.forwardRef((function(e,n){var t=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,l=p(e,["components","mdxType","originalType","parentName"]),c=d(t),m=a,h=c["".concat(s,".").concat(m)]||c[m]||u[m]||r;return t?o.createElement(h,i(i({ref:n},l),{},{components:t})):o.createElement(h,i({ref:n},l))}));function h(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=t.length,i=new Array(r);i[0]=m;var p={};for(var s in n)hasOwnProperty.call(n,s)&&(p[s]=n[s]);p.originalType=e,p[c]="string"==typeof e?e:a,i[1]=p;for(var d=2;d<r;d++)i[d]=t[d];return o.createElement.apply(null,i)}return o.createElement.apply(null,t)}m.displayName="MDXCreateElement"},236:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>p,toc:()=>d});var o=t(7462),a=(t(7294),t(4137));const r={},i="DappnodeSDK",p={unversionedId:"dev/sdk/overview",id:"dev/sdk/overview",title:"DappnodeSDK",description:"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.",source:"@site/docs/dev/sdk/overview.md",sourceDirName:"dev/sdk",slug:"/dev/sdk/overview",permalink:"/docs/dev/sdk/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/sdk/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Introduction",permalink:"/docs/dev"},next:{title:"Main commands",permalink:"/docs/dev/sdk/commands"}},s={},d=[{value:"Command-line options",id:"command-line-options",level:2}],l={toc:d},c="wrapper";function u(e){let{components:n,...r}=e;return(0,a.kt)(c,(0,o.Z)({},l,r,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"dappnodesdk"},"DappnodeSDK"),(0,a.kt)("p",null,"The DappnodeSDK ",(0,a.kt)("inlineCode",{parentName:"p"},"dappnodesdk")," is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet."),(0,a.kt)("p",null,"We have deployed a public APM (Aragon Package Manager) registry in which anyone can create their own APM repository: ",(0,a.kt)("a",{parentName:"p",href:"https://etherscan.io/address/public.dappnode.eth"},"public.dappnode.eth")),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Demo GIF",src:t(4702).Z,width:"1049",height:"638"})),(0,a.kt)("h2",{id:"command-line-options"},"Command-line options"),(0,a.kt)("p",null,"DappnodeSDK is usually executed from the command line. The following are all the available commands. "),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"You can run ",(0,a.kt)("inlineCode",{parentName:"p"},"dappnodesdk <command> help")," to get more information about each command.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},'Usage: dappnodesdk <command> [options]\n\nCommands:\n build Build a new version (only generates the ipfs hash)\n from_github [repoSlug] Gets an existing DNP Github release (assets) and uploa\n d it to IPFS\n increase [type] Increases the version defined in the manifest\n init Initialize a new DAppNodePackage (DNP) repository\n next [type] Compute the next release version from local\n publish [type] Publish a new version of the package in an Aragon Pack\n age Manager Repository\n github-action Github actions tooling to be run in CI. Uses a specifi\n c set of options for internal DAppNode use. Caution: o\n ptions may change without notice.\n\nOptions:\n --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]```\n')))}u.isMDXComponent=!0},4702:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/demo-3ae4e5dc0c026dfb372657f396712b72.gif"}}]); \ No newline at end of file diff --git a/assets/js/6875c492.464585ab.js b/assets/js/6875c492.464585ab.js new file mode 100644 index 000000000..a14e2bed1 --- /dev/null +++ b/assets/js/6875c492.464585ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8610],{9703:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var s=n(5999),a=n(2244),i=n(5893);function l(e){const{metadata:t}=e,{previousPage:n,nextPage:l}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.Z,{permalink:n,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),l&&(0,i.jsx)(a.Z,{permalink:l,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},9985:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var s=n(9460),a=n(390),i=n(5893);function l(e){let{items:t,component:n=a.Z}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.n,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}},1714:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});n(7294);var s=n(6010),a=n(5999),i=n(8824),l=n(1944),r=n(5281),o=n(9960),c=n(1460),d=n(9703),g=n(197),u=n(9985),p=n(2212),h=n(2503),m=n(5893);function x(e){const t=function(){const{selectMessage:e}=(0,i.c)();return t=>e(t,(0,a.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,a.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function j(e){let{tag:t}=e;const n=x(t);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(l.d,{title:n}),(0,m.jsx)(g.Z,{tag:"blog_tags_posts"})]})}function b(e){let{tag:t,items:n,sidebar:s,listMetadata:i}=e;const l=x(t);return(0,m.jsxs)(c.Z,{sidebar:s,children:[t.unlisted&&(0,m.jsx)(p.Z,{}),(0,m.jsxs)("header",{className:"margin-bottom--xl",children:[(0,m.jsx)(h.Z,{as:"h1",children:l}),(0,m.jsx)(o.Z,{href:t.allTagsPath,children:(0,m.jsx)(a.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,m.jsx)(u.Z,{items:n}),(0,m.jsx)(d.Z,{metadata:i})]})}function f(e){return(0,m.jsxs)(l.FG,{className:(0,s.Z)(r.k.wrapper.blogPages,r.k.page.blogTagPostListPage),children:[(0,m.jsx)(j,{...e}),(0,m.jsx)(b,{...e})]})}},2212:(e,t,n)=>{n.d(t,{Z:()=>p});n(7294);var s=n(6010),a=n(5999),i=n(5742),l=n(5893);function r(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function o(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,l.jsx)(i.Z,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=n(5281),g=n(9047);function u(e){let{className:t}=e;return(0,l.jsx)(g.Z,{type:"caution",title:(0,l.jsx)(r,{}),className:(0,s.Z)(t,d.k.common.unlistedBanner),children:(0,l.jsx)(o,{})})}function p(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{}),(0,l.jsx)(u,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/6875c492.b010a3d3.js b/assets/js/6875c492.b010a3d3.js deleted file mode 100644 index d46aa28d3..000000000 --- a/assets/js/6875c492.b010a3d3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8610],{2568:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),l=a(7325),r=a(3672);function s(e){const{metadata:t}=e,{previousPage:a,nextPage:s}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(r.Z,{permalink:a,title:n.createElement(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),s&&n.createElement(r.Z,{permalink:s,title:n.createElement(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},8389:(e,t,a)=>{a.d(t,{Z:()=>s});var n=a(7294),l=a(9107),r=a(1116);function s(e){let{items:t,component:a=r.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(l.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}},4883:(e,t,a)=>{a.r(t),a.d(t,{default:()=>E});var n=a(7294),l=a(6010),r=a(7325),s=a(3777),o=a(5463),i=a(3702),g=a(3699),c=a(2506),m=a(2568),p=a(3647),u=a(8389);function d(e){const t=function(){const{selectMessage:e}=(0,s.c)();return t=>e(t,(0,r.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,r.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function h(e){let{tag:t}=e;const a=d(t);return n.createElement(n.Fragment,null,n.createElement(o.d,{title:a}),n.createElement(p.Z,{tag:"blog_tags_posts"}))}function b(e){let{tag:t,items:a,sidebar:l,listMetadata:s}=e;const o=d(t);return n.createElement(c.Z,{sidebar:l},n.createElement("header",{className:"margin-bottom--xl"},n.createElement("h1",null,o),n.createElement(g.Z,{href:t.allTagsPath},n.createElement(r.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page"},"View All Tags"))),n.createElement(u.Z,{items:a}),n.createElement(m.Z,{metadata:s}))}function E(e){return n.createElement(o.FG,{className:(0,l.Z)(i.k.wrapper.blogPages,i.k.page.blogTagPostListPage)},n.createElement(h,e),n.createElement(b,e))}}}]); \ No newline at end of file diff --git a/assets/js/6e504cb9.0b0e4ccf.js b/assets/js/6e504cb9.0b0e4ccf.js new file mode 100644 index 000000000..2c0f1cf35 --- /dev/null +++ b/assets/js/6e504cb9.0b0e4ccf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9402],{865:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>t,metadata:()=>d,toc:()=>a});var s=n(5893),r=n(1151);const t={},i="More coming soon",d={id:"user/dappnode-cloud/providers/coming-soon",title:"More coming soon",description:"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.",source:"@site/docs/user/dappnode-cloud/providers/coming-soon.md",sourceDirName:"user/dappnode-cloud/providers",slug:"/user/dappnode-cloud/providers/coming-soon",permalink:"/docs/user/dappnode-cloud/providers/coming-soon",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/providers/coming-soon.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"FAQs & Troubleshooting",permalink:"/docs/user/dappnode-cloud/providers/aws/faqs"},next:{title:"1. Initial Dappnode Setup",permalink:"/docs/user/videos-and-tutorials/driving-school/initial-setup"}},p={},a=[];function c(e){const o={a:"a",h1:"h1",p:"p",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(o.h1,{id:"more-coming-soon",children:"More coming soon"}),"\n",(0,s.jsx)(o.p,{children:"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future."}),"\n",(0,s.jsxs)(o.p,{children:["If you are willing to run Dappnode in a specific provider you can open an Issue in ",(0,s.jsx)(o.a,{href:"https://github.com/dappnode/DNP_DAPPMANAGER/issues/new?assignees=&labels=&projects=&template=feature_request.md",children:"Dappnode's GitHub"})," and tell us more about it!"]})]})}function u(e={}){const{wrapper:o}={...(0,r.a)(),...e.components};return o?(0,s.jsx)(o,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>d,a:()=>i});var s=n(7294);const r={},t=s.createContext(r);function i(e){const o=s.useContext(t);return s.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(t.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6e504cb9.6f3e8a52.js b/assets/js/6e504cb9.6f3e8a52.js deleted file mode 100644 index 1b3e3c0a6..000000000 --- a/assets/js/6e504cb9.6f3e8a52.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9402],{4137:(e,r,n)=>{n.d(r,{Zo:()=>d,kt:()=>f});var o=n(7294);function t(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function a(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?a(Object(n),!0).forEach((function(r){t(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}function p(e,r){if(null==e)return{};var n,o,t=function(e,r){if(null==e)return{};var n,o,t={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],r.indexOf(n)>=0||(t[n]=e[n]);return t}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],r.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(t[n]=e[n])}return t}var s=o.createContext({}),c=function(e){var r=o.useContext(s),n=r;return e&&(n="function"==typeof e?e(r):i(i({},r),e)),n},d=function(e){var r=c(e.components);return o.createElement(s.Provider,{value:r},e.children)},u="mdxType",l={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},m=o.forwardRef((function(e,r){var n=e.components,t=e.mdxType,a=e.originalType,s=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),u=c(n),m=t,f=u["".concat(s,".").concat(m)]||u[m]||l[m]||a;return n?o.createElement(f,i(i({ref:r},d),{},{components:n})):o.createElement(f,i({ref:r},d))}));function f(e,r){var n=arguments,t=r&&r.mdxType;if("string"==typeof e||t){var a=n.length,i=new Array(a);i[0]=m;var p={};for(var s in r)hasOwnProperty.call(r,s)&&(p[s]=r[s]);p.originalType=e,p[u]="string"==typeof e?e:t,i[1]=p;for(var c=2;c<a;c++)i[c]=n[c];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},5898:(e,r,n)=>{n.r(r),n.d(r,{assets:()=>s,contentTitle:()=>i,default:()=>l,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var o=n(7462),t=(n(7294),n(4137));const a={},i="More coming soon",p={unversionedId:"user/dappnode-cloud/providers/coming-soon",id:"user/dappnode-cloud/providers/coming-soon",title:"More coming soon",description:"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.",source:"@site/docs/user/dappnode-cloud/providers/coming-soon.md",sourceDirName:"user/dappnode-cloud/providers",slug:"/user/dappnode-cloud/providers/coming-soon",permalink:"/docs/user/dappnode-cloud/providers/coming-soon",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/providers/coming-soon.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"FAQs & Troubleshooting",permalink:"/docs/user/dappnode-cloud/providers/aws/faqs"},next:{title:"1. Initial Dappnode Setup",permalink:"/docs/user/videos-and-tutorials/driving-school/initial-setup"}},s={},c=[],d={toc:c},u="wrapper";function l(e){let{components:r,...n}=e;return(0,t.kt)(u,(0,o.Z)({},d,n,{components:r,mdxType:"MDXLayout"}),(0,t.kt)("h1",{id:"more-coming-soon"},"More coming soon"),(0,t.kt)("p",null,"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future."),(0,t.kt)("p",null,"If you are willing to run Dappnode in a specific provider you can open an Issue in ",(0,t.kt)("a",{parentName:"p",href:"https://github.com/dappnode/DNP_DAPPMANAGER/issues/new?assignees=&labels=&projects=&template=feature_request.md"},"Dappnode's GitHub")," and tell us more about it!"))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6e93d9f5.65732374.js b/assets/js/6e93d9f5.65732374.js new file mode 100644 index 000000000..e061d6c2c --- /dev/null +++ b/assets/js/6e93d9f5.65732374.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[935],{1830:(o,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var e=s(5893),n=s(1151);const i={},r="Unsubscribing from Smooth.",a={id:"smooth/unsubscribe-from-smooth",title:"Unsubscribing from Smooth.",description:"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth's website and it only takes one simple transaction.",source:"@site/docs/smooth/unsubscribe-from-smooth.md",sourceDirName:"smooth",slug:"/smooth/unsubscribe-from-smooth",permalink:"/docs/smooth/unsubscribe-from-smooth",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/unsubscribe-from-smooth.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Manual Subscription",permalink:"/docs/smooth/subscribe-to-smooth/manual"},next:{title:"FAQ & Glossary",permalink:"/docs/smooth/faq-glossary"}},c={},l=[{value:"Step 1: Log in to Smooth's website.",id:"step-1-log-in-to-smooths-website",level:2},{value:"Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.",id:"step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe",level:2},{value:"Step 3: Follow the dialog instructions.",id:"step-3-follow-the-dialog-instructions",level:2}];function h(o){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",img:"img",p:"p",strong:"strong",...(0,n.a)(),...o.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(t.h1,{id:"unsubscribing-from-smooth",children:"Unsubscribing from Smooth."}),"\n",(0,e.jsxs)(t.p,{children:["Unsubscribing from ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," is as simple as subscribing to it. You can unsubscribe from ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," at any time, it is done through ",(0,e.jsx)(t.strong,{children:(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})})," and it only takes one simple transaction."]}),"\n",(0,e.jsx)(t.admonition,{type:"caution",children:(0,e.jsxs)(t.p,{children:["When unsubscribing a validator from ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),", you will lose all pending rewards attached to it. We recommend unsubscribing just after successfully proposing a block, so lost pending rewards are minimized."]})}),"\n",(0,e.jsx)(t.h2,{id:"step-1-log-in-to-smooths-website",children:"Step 1: Log in to Smooth's website."}),"\n",(0,e.jsxs)(t.p,{children:["Go to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear."]}),"\n",(0,e.jsx)(t.h2,{id:"step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe",children:'Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.'}),"\n",(0,e.jsxs)(t.p,{children:['Once logged in, click on the "Unsubscribe" button of the validator you want to unsubscribe from ',(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]}),"\n",(0,e.jsx)(t.p,{children:(0,e.jsx)(t.img,{alt:"my-unsub-table",src:s(9742).Z+"",width:"1021",height:"258"})}),"\n",(0,e.jsx)(t.h2,{id:"step-3-follow-the-dialog-instructions",children:"Step 3: Follow the dialog instructions."}),"\n",(0,e.jsx)("p",{align:"center",children:(0,e.jsx)("img",{src:"/img/smooth-unsub-initial-dialog.png",alt:"unsub-initial-dialog",width:"400"})}),"\n",(0,e.jsxs)(t.p,{children:['Once clicking on the "Unsubscribe" button, a dialog will appear warning you that you are about to unsubscribe from ',(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),", and that it is recommended to do it when pending rewards are low. Click on ",(0,e.jsx)("em",{children:'"Claim my rewards"'})," to continue and follow the dialog instructions. If you have any claimable rewards, a transaction that claims them will be prepared. If no claimable rewards are available, you will jump directly into the unsubscribe transaction."]}),"\n",(0,e.jsx)("p",{align:"center",children:(0,e.jsx)("img",{src:"/img/smooth-unsubscribe-done.png",alt:"unsub-done",width:"400"})}),"\n",(0,e.jsxs)(t.p,{children:["Once the subscription transaction is processed by the chain, your validator will have been unsubscribed sucessfully from ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". You can check it by reloading your validator's table."]}),"\n",(0,e.jsx)(t.admonition,{type:"caution",children:(0,e.jsxs)(t.p,{children:["After unsubscribing, we recommend to change your validator's fee recipient back to another address as soon as possible, in order to avoid automatically subscribing to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," again."]})})]})}function d(o={}){const{wrapper:t}={...(0,n.a)(),...o.components};return t?(0,e.jsx)(t,{...o,children:(0,e.jsx)(h,{...o})}):h(o)}},9742:(o,t,s)=>{s.d(t,{Z:()=>e});const e=s.p+"assets/images/smooth-unsub-table-bebccc787b3582ee85af18702df67c05.png"},1151:(o,t,s)=>{s.d(t,{Z:()=>a,a:()=>r});var e=s(7294);const n={},i=e.createContext(n);function r(o){const t=e.useContext(i);return e.useMemo((function(){return"function"==typeof o?o(t):{...t,...o}}),[t,o])}function a(o){let t;return t=o.disableParentContext?"function"==typeof o.components?o.components(n):o.components||n:r(o.components),e.createElement(i.Provider,{value:t},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/6e93d9f5.a76a2c8c.js b/assets/js/6e93d9f5.a76a2c8c.js deleted file mode 100644 index 4ed86cc0b..000000000 --- a/assets/js/6e93d9f5.a76a2c8c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[935],{4137:(t,e,o)=>{o.d(e,{Zo:()=>c,kt:()=>d});var n=o(7294);function r(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}function i(t,e){var o=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),o.push.apply(o,n)}return o}function s(t){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{};e%2?i(Object(o),!0).forEach((function(e){r(t,e,o[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}))}return t}function a(t,e){if(null==t)return{};var o,n,r=function(t,e){if(null==t)return{};var o,n,r={},i=Object.keys(t);for(n=0;n<i.length;n++)o=i[n],e.indexOf(o)>=0||(r[o]=t[o]);return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n<i.length;n++)o=i[n],e.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(t,o)&&(r[o]=t[o])}return r}var l=n.createContext({}),u=function(t){var e=n.useContext(l),o=e;return t&&(o="function"==typeof t?t(e):s(s({},e),t)),o},c=function(t){var e=u(t.components);return n.createElement(l.Provider,{value:e},t.children)},p="mdxType",m={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},b=n.forwardRef((function(t,e){var o=t.components,r=t.mdxType,i=t.originalType,l=t.parentName,c=a(t,["components","mdxType","originalType","parentName"]),p=u(o),b=r,d=p["".concat(l,".").concat(b)]||p[b]||m[b]||i;return o?n.createElement(d,s(s({ref:e},c),{},{components:o})):n.createElement(d,s({ref:e},c))}));function d(t,e){var o=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var i=o.length,s=new Array(i);s[0]=b;var a={};for(var l in e)hasOwnProperty.call(e,l)&&(a[l]=e[l]);a.originalType=t,a[p]="string"==typeof t?t:r,s[1]=a;for(var u=2;u<i;u++)s[u]=o[u];return n.createElement.apply(null,s)}return n.createElement.apply(null,o)}b.displayName="MDXCreateElement"},3612:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>l,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var n=o(7462),r=(o(7294),o(4137));const i={},s="Unsubscribing from Smooth.",a={unversionedId:"smooth/unsubscribe-from-smooth",id:"smooth/unsubscribe-from-smooth",title:"Unsubscribing from Smooth.",description:"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth's website and it only takes one simple transaction.",source:"@site/docs/smooth/unsubscribe-from-smooth.md",sourceDirName:"smooth",slug:"/smooth/unsubscribe-from-smooth",permalink:"/docs/smooth/unsubscribe-from-smooth",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/unsubscribe-from-smooth.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Manual Subscription",permalink:"/docs/smooth/subscribe-to-smooth/manual"},next:{title:"FAQ & Glossary",permalink:"/docs/smooth/faq-glossary"}},l={},u=[{value:"Step 1: Log in to Smooth's website.",id:"step-1-log-in-to-smooths-website",level:2},{value:"Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.",id:"step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe",level:2},{value:"Step 3: Follow the dialog instructions.",id:"step-3-follow-the-dialog-instructions",level:2}],c={toc:u},p="wrapper";function m(t){let{components:e,...i}=t;return(0,r.kt)(p,(0,n.Z)({},c,i,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"unsubscribing-from-smooth"},"Unsubscribing from Smooth."),(0,r.kt)("p",null,"Unsubscribing from ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," is as simple as subscribing to it. You can unsubscribe from ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," at any time, it is done through ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("a",{parentName:"strong",href:"https://smooth.dappnode.io/"},"Smooth's website"))," and it only takes one simple transaction."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"When unsubscribing a validator from ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),", you will lose all pending rewards attached to it. We recommend unsubscribing just after successfully proposing a block, so lost pending rewards are minimized.")),(0,r.kt)("h2",{id:"step-1-log-in-to-smooths-website"},"Step 1: Log in to Smooth's website."),(0,r.kt)("p",null,"Go to ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth's website")," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear."),(0,r.kt)("h2",{id:"step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe"},'Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.'),(0,r.kt)("p",null,'Once logged in, click on the "Unsubscribe" button of the validator you want to unsubscribe from ',(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),"."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"my-unsub-table",src:o(9742).Z,width:"1021",height:"258"})),(0,r.kt)("h2",{id:"step-3-follow-the-dialog-instructions"},"Step 3: Follow the dialog instructions."),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{src:"/img/smooth-unsub-initial-dialog.png",alt:"unsub-initial-dialog",width:"400"})),(0,r.kt)("p",null,'Once clicking on the "Unsubscribe" button, a dialog will appear warning you that you are about to unsubscribe from ',(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),", and that it is recommended to do it when pending rewards are low. Click on ",(0,r.kt)("em",null,'"Claim my rewards"')," to continue and follow the dialog instructions. If you have any claimable rewards, a transaction that claims them will be prepared. If no claimable rewards are available, you will jump directly into the unsubscribe transaction."),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{src:"/img/smooth-unsubscribe-done.png",alt:"unsub-done",width:"400"})),(0,r.kt)("p",null,"Once the subscription transaction is processed by the chain, your validator will have been unsubscribed sucessfully from ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". You can check it by reloading your validator's table."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"After unsubscribing, we recommend to change your validator's fee recipient back to another address as soon as possible, in order to avoid automatically subscribing to ",(0,r.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," again.")))}m.isMDXComponent=!0},9742:(t,e,o)=>{o.d(e,{Z:()=>n});const n=o.p+"assets/images/smooth-unsub-table-bebccc787b3582ee85af18702df67c05.png"}}]); \ No newline at end of file diff --git a/assets/js/73664a40.a988e157.js b/assets/js/73664a40.a988e157.js deleted file mode 100644 index 2f9f43b67..000000000 --- a/assets/js/73664a40.a988e157.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3514],{4137:(e,t,i)=>{i.d(t,{Zo:()=>a,kt:()=>g});var o=i(7294);function s(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function r(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,o)}return i}function n(e){for(var t=1;t<arguments.length;t++){var i=null!=arguments[t]?arguments[t]:{};t%2?r(Object(i),!0).forEach((function(t){s(e,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(i)):r(Object(i)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(i,t))}))}return e}function l(e,t){if(null==e)return{};var i,o,s=function(e,t){if(null==e)return{};var i,o,s={},r=Object.keys(e);for(o=0;o<r.length;o++)i=r[o],t.indexOf(i)>=0||(s[i]=e[i]);return s}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o<r.length;o++)i=r[o],t.indexOf(i)>=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(s[i]=e[i])}return s}var u=o.createContext({}),m=function(e){var t=o.useContext(u),i=t;return e&&(i="function"==typeof e?e(t):n(n({},t),e)),i},a=function(e){var t=m(e.components);return o.createElement(u.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var i=e.components,s=e.mdxType,r=e.originalType,u=e.parentName,a=l(e,["components","mdxType","originalType","parentName"]),c=m(i),d=s,g=c["".concat(u,".").concat(d)]||c[d]||p[d]||r;return i?o.createElement(g,n(n({ref:t},a),{},{components:i})):o.createElement(g,n({ref:t},a))}));function g(e,t){var i=arguments,s=t&&t.mdxType;if("string"==typeof e||s){var r=i.length,n=new Array(r);n[0]=d;var l={};for(var u in t)hasOwnProperty.call(t,u)&&(l[u]=t[u]);l.originalType=e,l[c]="string"==typeof e?e:s,n[1]=l;for(var m=2;m<r;m++)n[m]=i[m];return o.createElement.apply(null,n)}return o.createElement.apply(null,i)}d.displayName="MDXCreateElement"},6866:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>u,contentTitle:()=>n,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>m});var o=i(7462),s=(i(7294),i(4137));const r={slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},n=void 0,l={permalink:"/blog/long-blog-post",source:"@site/blog/2019-05-29-long-blog-post.md",title:"Long Blog Post",description:"This is the summary of a very long blog post,",date:"2019-05-29T00:00:00.000Z",formattedDate:"May 29, 2019",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:2.05,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endi"}],frontMatter:{slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},prevItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"},nextItem:{title:"First Blog Post",permalink:"/blog/first-blog-post"}},u={authorsImageUrls:[void 0]},m=[],a={toc:m},c="wrapper";function p(e){let{components:t,...i}=e;return(0,s.kt)(c,(0,o.Z)({},a,i,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("p",null,"This is the summary of a very long blog post,"),(0,s.kt)("p",null,"Use a ",(0,s.kt)("inlineCode",{parentName:"p"},"\x3c!--")," ",(0,s.kt)("inlineCode",{parentName:"p"},"truncate")," ",(0,s.kt)("inlineCode",{parentName:"p"},"--\x3e")," comment to limit blog post size in the list view."),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"),(0,s.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/73664a40.c26c9299.js b/assets/js/73664a40.c26c9299.js new file mode 100644 index 000000000..77748a34f --- /dev/null +++ b/assets/js/73664a40.c26c9299.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3514],{1985:(e,s,i)=>{i.r(s),i.d(s,{assets:()=>m,contentTitle:()=>u,default:()=>a,frontMatter:()=>n,metadata:()=>r,toc:()=>l});var t=i(5893),o=i(1151);const n={slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},u=void 0,r={permalink:"/blog/long-blog-post",source:"@site/blog/2019-05-29-long-blog-post.md",title:"Long Blog Post",description:"This is the summary of a very long blog post,",date:"2019-05-29T00:00:00.000Z",formattedDate:"May 29, 2019",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:2.05,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endi"}],frontMatter:{slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},unlisted:!1,prevItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"},nextItem:{title:"First Blog Post",permalink:"/blog/first-blog-post"}},m={authorsImageUrls:[void 0]},l=[];function c(e){const s={code:"code",p:"p",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.p,{children:"This is the summary of a very long blog post,"}),"\n",(0,t.jsxs)(s.p,{children:["Use a ",(0,t.jsx)(s.code,{children:"\x3c!--"})," ",(0,t.jsx)(s.code,{children:"truncate"})," ",(0,t.jsx)(s.code,{children:"--\x3e"})," comment to limit blog post size in the list view."]}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}),"\n",(0,t.jsx)(s.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})]})}function a(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1151:(e,s,i)=>{i.d(s,{Z:()=>r,a:()=>u});var t=i(7294);const o={},n=t.createContext(o);function u(e){const s=t.useContext(n);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(o):e.components||o:u(e.components),t.createElement(n.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/747b92bf.93f2077a.js b/assets/js/747b92bf.93f2077a.js new file mode 100644 index 000000000..fc259b34f --- /dev/null +++ b/assets/js/747b92bf.93f2077a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4743],{2164:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>u,contentTitle:()=>a,default:()=>l,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var t=n(5893),r=n(1151);const s={},a="Connect your dappnode to the router and power",i={id:"user/getting-started/connect-dappnode-to-the-router",title:"Connect your dappnode to the router and power",description:"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.",source:"@site/docs/user/getting-started/connect-dappnode-to-the-router.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/connect-dappnode-to-the-router",permalink:"/docs/user/getting-started/connect-dappnode-to-the-router",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/connect-dappnode-to-the-router.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Choose your path",permalink:"/docs/user/getting-started/choose-your-path"},next:{title:"Access Dappnode via Wi-Fi",permalink:"/docs/user/getting-started/access-dappnode-via-wifi"}},u={},d=[{value:"Enable UPnP in your router",id:"enable-upnp-in-your-router",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}];function p(e){const o={code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",...(0,r.a)(),...e.components},{Details:s}=o;return s||function(e,o){throw new Error("Expected "+(o?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"connect-your-dappnode-to-the-router-and-power",children:"Connect your dappnode to the router and power"}),"\n",(0,t.jsx)(o.p,{children:"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router."}),"\n",(0,t.jsx)(o.p,{children:(0,t.jsx)(o.img,{alt:"Connect to router",src:n(2647).Z+"",width:"200",height:"100"})}),"\n",(0,t.jsx)(o.p,{children:"Make sure you also connect your Dappnode to a power outlet and you are ready to turn it on."}),"\n",(0,t.jsx)(o.h2,{id:"enable-upnp-in-your-router",children:"Enable UPnP in your router"}),"\n",(0,t.jsx)(o.p,{children:"Enabling UPnP (Universal Plug and Play) on a router allows devices on your network to set up port forwarding rules for themselves automatically. This simplifies device communication and functions, especially for applications that require open ports, like some games and peer-to-peer programs."}),"\n",(0,t.jsx)(o.p,{children:"Here are basic instructions to enable UPnP on most routers:"}),"\n",(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Log into Your Router"}),": Open a web browser on a computer connected to your network.\nEnter your router's IP address in the address bar. Common addresses include 192.168.1.1, 192.168.0.1, or 10.0.0.1. If you're unsure of your router's IP, you can check your device's network settings or consult the router's manual.\nYou'll be prompted for a username and password. If you haven't changed them, the default details are usually admin/admin, admin/password, or some similar combination. Refer to your router's documentation if you're unsure."]}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Navigate to the UPnP Section"}),': Once logged in, look for a section labeled "UPnP", often found under "Advanced Settings", "WAN", "NAT", or similar categories. The exact path can vary based on the router manufacturer and model.']}),"\n"]}),"\n",(0,t.jsxs)(o.li,{children:["\n",(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.strong,{children:"Enable UPnP"}),': There should be an option to enable or disable UPnP. Make sure it\'s set to "Enable" or "On".\nSave or apply the changes.']}),"\n"]}),"\n"]}),"\n",(0,t.jsx)("hr",{}),"\n",(0,t.jsx)(o.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"How can I verify that the ports were successfully opened by UPnP? "})}),(0,t.jsxs)(o.p,{children:["Access your dappnode ",(0,t.jsx)("a",{href:"http://my.dappnode/support/ports",children:"support > ports"})," view and execute an API scan of the ports."]}),(0,t.jsx)(o.p,{children:"An alternative is to manually check if the ports have been opened successfully, follow these steps:"}),(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsx)(o.li,{children:'Use an online port checker tool, like "YouGetSignal" or "Canyouseeme."'}),"\n",(0,t.jsx)(o.li,{children:"Enter your external IP address and the port number you want to check."}),"\n",(0,t.jsx)(o.li,{children:'Click "Check." If the port is open and accessible from the outside, the tool will confirm it.'}),"\n"]}),(0,t.jsxs)(o.p,{children:["Alternatively, you can use tools like ",(0,t.jsx)(o.code,{children:"nmap"})," to scan your own ports from a different network."]})]}),"\n",(0,t.jsxs)(s,{children:[(0,t.jsx)("summary",{children:(0,t.jsx)("b",{children:"Why can't I connect my DappNode to the router via Wi-Fi?"})}),(0,t.jsx)(o.p,{children:"Currently, Dappnode doesn't support Wi-Fi connections to a router. Ensure your Dappnode is connected directly to the router using an ethernet cable."})]})]})}function l(e={}){const{wrapper:o}={...(0,r.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},2647:(e,o,n)=>{n.d(o,{Z:()=>t});const t="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABqnSURBVHgB7Z0LXFzVmcC/79w7wwwQoHmQqNGkNlqrboylSYAEmCQwSBsfqcbtWrVat3a7ff1Wf13brlujfezWx7arfah1bWu7/tpSW83WEEhQkhAIGqyvpE1NNJoY81QIAeZx7/n2O3dmeIUAMzDDgOf/Y2bu49wH957vnO9xHgAajUaj0SQCDtxQULAy0+MJTJcGTIM4sKUhe06KFgG4wAI6Al1Hj7a2toZBo5mAmH1XqqqqMto7w49LMEoRKJNg5BiC+iQ3eFkKN0A7ZE17lDf8O38s0GgmGEbflfzTz/465+ybeTELIsKT6McV/eXz0Mdmzzln1/439+wAjWaCIWILRUWrvQR4OaiMTfQjQriMf8tJwmUI2DSSk3Ed8jMJVAkkypHkSoHYwAqXB0hWgUYzAelRsUzzYLYN3rlKT5Igf9qyqX6n2l5YesknieSFJ1srJ8OCVOoRoVsaGjacUOtLyvzn8o8PNJoJiuhdzB48BcmlnPNzYCQgfThouX2xVUnQCRrNBKaPgJwYPAXCWRAX5I0tGUAu0GgmMGK4BKxZTYEEsYc9u0aT3gyfhRHk4JuhDYY7lCgEGs0Exhw+CYkB8cRjvNZJQIcEoGDpKTjlkWp3PMEUjSbNSEQJUi5fF6ngOUAOIur4hmbSEreAoOOcQg/XHhcjVxEcJzkCGs0kZQQq1kksZOWpgYOCSAIDLCGrtBalmazELSAsDKfz12KuSo6zcKjAYgZoNJOURGoQpWedzt+n65pDM9nRkQqNZgi0gGg0Q6AFRKMZgrhtEHbzvsOm+gsgjDYpYS4CXczrmaDRTELirkGIvVf86ZKW9Rqg7OYtusWuZtISvxeL4MP83c4R9BwiWsB1ynTQaCYpibl5ARcR4lFWr7RwaCYl5/t82XnS/WCCAqJsES0cmsnJ4sUrZgppPMFxviXai6XR9KGgoCBTZIjHeHEJf9oSrkEmAuXl5bldXTIvti6lHEHP+vGFKKe7pWXtIdCMC67sqd9mT5Sfbe3jZIhVk1pAuoJ4L5nmTaDGoQASCGbaCwhA4K/89RHQpJyi0spruIS6hRctNIybmhtqNk1qAQHED/D3cZaOpxAwrZuOIdEcvl8fS7AHNCnHx0Z5UNKP1TJnlJ+wcDyhFie1gEhVEgB0iHDuPzU3V3dDGlPoq7gBpR4iabwISPdtnFfy2Pl01AXBewEifWEntZHOpbJ2QmiG5UL2WrGGcYOzgnjX8uXL347tm+QqllMKyIyMI3rw7FHA6ofZHnblZ9hht1qXbokC3B4pbffAtKY00RKChBVsV+vvGTnHdm1d2wFpTJbLuJIrjNkE9HZepvnLNWvW9AxUkqiAnIh+ZsCA8X01E5/58+dnZeXNepiIVL8fCNhgZhh4MRpuNWZzzws3xMkVtKqzDVUuuSOyMxUCBwtLKv4a3f1LYRu7mprWNw9yWeVASbmduHr1amP/4fYvqCtzLVJds25dB9ciPfsTaax4ggx5lRT0IoZd9yHIT4NmUpGbe9oFFtCliDjcmGhqxP5jnCu6OV+ElE1LCNM4s6mROGO5bBafZ1Z02UemtIpK/S2881tNm+ue6XOucXGi7Dv03rkI4oNqWbhgHQtHv/uIW0AkYADR8+oxt92WT9BCFmgBmWSQaSDYzmwVxzm3PICEa8nAwwPTGWFLWp7MoNEdIMtr22pbpu32BrDX+SNCaKBbLrMl/R1nvU+w2HyINy/h8z5RXOp/jmNT/7GtcWMDjBcSZrIl7tSMFSXF9Vvr6/rtTqAGoelghe6absFmisz7MWlgVeBZLu18kERIYsW2xtqNkMbYaMdK0XfPnJl7R3V1tQ2jY0/096vFZSsWkjTvZg9KCV/Ej0L4i0r8LxPgj0zq/H1jY6MakDB1tYkQq6JL/WyPGInaIJ/lKvKzoIkbNCkbRsG8efMy8vPPzrVtD0ppofTYjiojAkZCmUpkdZmyM5PtapMsd9AxKtCSeZxhVWYxXz/w3hn8uw/GKNM2bap/nn+WFZb5q1jn/1c+7UJen88F78M2Zt5eXFL+HbDFU01NdUcg2YKyZo0QzzRfTI4BInYNlmRye7HSELTlqJwaM06bU8V6/iPC7DYiJrLjqkP0hhPLTNKVIbzhoDIn3MT2NarzoRp0XAUsc10Gbigs9f+ZpfD+9qP7t+/cuTOu4WSVByxouS5lcetsatrQo79s21RXwz81xT7/hXz7X2WHwFW8fhaheJhz5bf4mr/gm3v8kuVLdw1Wso+WgoICV2Z9S56F5IwMiiS3DpZOxwlSDJrm6AKWhpjJ39P4THmRjwpuQW7vetwfb+w8LGtslJMyzGPR/BNswObw+f+elzfkTTvjIZ/vhrgi/QHLXAoC/8DFwvq5c30eVXMUlparpjROzdfUULfjcKb4EoTxQyyZ9/DG13nzbP69na/9cm190xNLyipLYIzJz8/3WoKW8qLqDXvADtq7IvdE/Zoj6RpkgkFCSJSOUrAPwbgcIAzkhgBI6YUE4KBFmO0A9rWYHnUuQ1KQz+vnK6hocpsMyuWYgR/llD/k7HNDwD7gLSoqurG5uTkuQWfbDs+Y613AamE1oti7uKqqWHRZldKUm1tqag7tBuBaDL6+ZEnFDy1DlJtA/8L/4wK+5hWSZEVxaUW9RfTwc1s2Pg1jwJvZ2YHczvbPRG+uvqWlPtpAtH9zPS0gKUYSDakusKoxtKoklYqG6jXazZtr/gxJoNBXUYCRhs/o9YaPNDQ0/HbRihUbzZChhORaNLNV4PU6iBMCezafMosX5hmd8nOsyn1fhA01tvOC4hL/lRaZL29tXPc3Xn+sqGh1Nbjar+GH8Tn+by/i38sMxMtY9VrHT/BbLY11rTAKphxqmwORKQeBbHjsVOne1yqW0kPVtNesJ3tUPwBIAdIwhvQIcUE76P6C8vJcdb+C0A2po6c4fa6+/ljTlrrr2FX7EiFeyxn6UxAnXPEFo7/sJ5PqeSt7LKewtOpqVmyqBdrfKC31f7CwxP8TSxw9u3lz3aMeEVrKtWYV30k1p+3gG/q4QPjDIl/Fx2AUsLF1dfQffNFjBrcPlobzRd77VkBUBNWdPe1xV1bw+aB0N7uypzVxSVUAScYgGrLJfdR71A9Waaa6wrjenTWtnjPX1yB1yHA43E9ghQmf5+d0lCuY7y0s9Z8JcZAB6Mwpw7E49Qx6nwPaZbFF9gB8hv0EXzCF+T+LSvyXB2zXBrJkx+z83H9g4bxZZWg16xkXM7+P2jJxo+6ba6SvqmWusNdyDTnoXDcB6b71fatiKd9+UVnFQn7Zc9S6Ez9NUm8RNVQSSWpWg32DFY57NHzbyJxuEBZGzxWBBe1jS1ec7RJGPYwRnFn2btuyYVmfTUY47OlXY5kU2hVE1/2cx+9yIagYwv0wQmxhhCIBSLSFQDWbsrNdgOClAeUC4kwD6Eu84GOt9Kq3D7VfQQK+wDb0t0GFGJBdwwQ1BcXLV7Q2PbNnhLcgliy75Bzbkr/l41Uzqf3CAw+dKjE/60WJCohqW/MCf66BCcsarj1Vk6Dkx6T4Ch9gT85iXpSWwHuGSstO1pNqEC5RY+9pE2eQJ1maf6CK4e1bSvYuLmu6GSxyJdrfhQ10CRRGEkauSbh3wG7bNSsr6tYtYNdvq9VlGIZJrsfAtv+NBer68vLyX27cuLF9RNeywqbTzondyQLIFftHT2V38VbDaRaFwkPK20SqGQtdwvf8j7yvlh/WHLdpbi8q9ferASjiinqVF/dwORIS/NhZLeT3TSulLWfzOdlrR22c8IZpXu+gDSl9vivygnbXhYkISBebide2PFvXWuyrVCXjrZDGqBhBR0dHb93AwaH5TU3evEDj2WHVyTA1sGcIHuGi8gTnwjeGTkrWwC0CsSd2QoZsixrQbExvOwtsqo1akgkJiCq5URjKLcYOLVQF3wX9Ehw7Fl1odVpEK1tEbS0srWhkoVzR1gln8/qInAVSYmaspSMpZ0Vvo8Ah7129Jf4LOIkQ3E2b1j/Pxvr9vO0OiLinXdGzZEWSODjtq1TTKuqpd53fbt74JhLd3LRlw6lqXwzIri/y7Z2eiIBIEQhFBouTapTFCQYHnTyl/vww+9ghdWTwS7pJuXFOWKYyCBtgDDh+eMqB3OltX+ZzT+fyMQiJIB2fGCkRZF3/byM+juA3fOAK0xAqRpEUb9opGBhoPSglfNkQ9ttc4ZzPmdrNtUUG1zBu/q+WIsgLSBUwRHtYItexk/ytIwdx7e7dtad8XvP9/kwM0udUPZSIgGSBy3130dKKt1g2PwkTECltNERKW+l3c0n9FmfGkG0MP/npUBDXehgtcHPyO07nTHAfr2bAKGLNTlTF6bUvlID8sc8udLlcxiluZLdTAwiYCuODk3fZq/dA85ba30e3DWxGfzckQHYQr2YBm9NzkThR9dSlkDLtZHQo7aO7+2y+2V63uRBG8g2PvpCazxSPcXXfzorFMEO14pBZXShdOqqyeyDQxh64O7mgS3gSIz6fy1aNupRrieDoiI8zzCBrSTarKql0O/fAL/Sj6tcGeQBGjbJHI81ZFi1aMY3Vv69Er/HopPdiKRskN3f/+HbqQsxm23sRG4y2NOi+YVIP0/uxV346pXuKS7AeTokLiLKPRcwWQNrL3z8ayXE24j5B0M4HL4TxgHD62I3DEREOn+/js4K29RtQEXyCt1j6//N96eZNvYpFb3M+/CMXSR1GwBhSxYrnlWeJUEe37fq+ITg6IRPUsYSAWA3CAtw28G66vd7BT2yEwigNi/+vmZBC+D4j94Mwpt2oi4pWnhG0g7/mC5Q5nQIRvlu1fMmeSS8gyql4+Ehev5ecahUL1byOQlzJWdAmt1QtWveeOi2N+N4C4MkTgj4TGX4j8ZivED3tgvfyzw/73A2Zx48Pfj8h10xCp/3XC5BCKDYQB3KogaCY731Uur7qPqBaSPM/dCcLx3znGgB3ZojQo6oV8fujBjmHP7t7V6V0cQ0SVs2bL+LPqPpnjARSRrqUb6icZiF1D50WT3rhrO+HpB0tOCnaVFGl7cZ30S1fU27OYdtwjQAEHLEDAcmayv7hKTSEsA9xIWWU2bGygB0YJg4ZpVXmkVIj+6XZ7+whWnX+6tX/u7O6OgxxVMBFRUVeMKdU8im/zKvLI7eF7/BN3V61vPgXsSb27wsbxOru7vdktzc+rZpUL+VI+l5+9kkXEH6L7fz0W5R73W2Zx4dKyi/ppDiIZYUNEQ2FqKa8qqUG/1+G10tTgxLejhyWuELOtgQH6lUbL5kitz05DbJiZQEOUij0T00ufk8ZfVOpAiG6emnuoeNri0v9jXyid3mz0zSGI58cLZIRC0s5eW3eK8jDR53LR1dyQeTlpzi7z0U2khW+YVtT/QHs8yx1a95UgDiHX+ZtapFVrG3Q2wV1EE6OpEvT5PI29s7Y3oiEvth0kDa/8CL2a2XgKGoQ5Tnmw1Ur4b+wqTqiPMHR7GudYxG2QpJhlTjMmTnYz8wiOtgrVyrDQyVEI4mR+4oFCCnyRCOLsa9INzMnSgq/ChHeD11HX9m+fbuFox20YbLAVaiofTbp7zbGbi4ln1DR46C034RRodTiSCYQbKSjdG8j1SMEwUrkbBxH4DqJdU5SPTaA4yANfJ4KZ5/KQjk5OQN7EGLBypVe6AgVcoI2DIrXIG5QIjp1SGydhtKOSFUEKEKRqCbSohWrpolw1yejquYbvPEp/s3nlPNUG65Tn8gRlS38OcAn/PO2LbW/63dXg1RkiU6gc4RLrV1844UwQYVsx44dJhczb0L/ensOJId5/DJvU/k6Qxibef0vp05KJ3VpZUOUY/C2KgsvYMf/p2OqeLdhZPCeT3DmzmMBTNCrQ45do764Nnpu4N7uXvXUKYN9Pp8RaO86D9DkCDU9sm3b+r0wSoZrJ8r5WiVxXNm8+JoR7lrDz0JJ8QlJ4oqWLeuT1ioikczdzi/sMhd0vxpE9zf5v/sGTECqq6tVRizruy0Vo5oIjL8/h7ClIzSoprtDWNqzvasrjK4pV7Oge8kgFyQA+9XYE6YUOGGBSf1UP9UEKhwOq/MGCgoKzNbW1vCMGTNo/6H2B1TzW1brfwVjAKmwymA7ULDdRmVsIr1FLlFnWHIbC4tqhft9ZzfSHS2b178CSST+YX+4nAl3dR7a+tzmE4VlFW1Dex80Y0FzQ+2epUtXfJhcrAlJup5VtW+q7bNnz25nQX8GkkZv3xUlHOp33zvtX2TtoZgr3see31y3GcYAdmEdi+lbSPaLbE2/ztXmd5o31f6i0HfJg1bHkbfd+IHz+Hbm8XW/Erk1uCc367wfA2xIqss+bgHhajjPyPD8pKi0ci/LyuWpbbMRP0q5zTx8eMxHxRgFQz5zVngGGzWEGhvrnYaES8r8R2PPfAzGqxoGpI6srJ5nt7i4ws8eoe9xJmizDKHaOfWYviM6m2l4IOJkUi6onNiR7HT/aQjsM6VlP81epCcXlfpfsl32u2wn4vr6ljNcWdPu5ysVkzNYhXP00yEj4+6amgcSa6AZB4nZDwiXRJu4pT3K5Z6fny937twJEwEuIYd86azZBFLXU5p1t3bTUF1PQ+BaSRJZtaJuU+KNzZtrd8R5Moh5ZjnftLETtp4EzWaNZG1Dw7qD0GecNbvTfchNgZLaZ5qu4edxPUQPYv7K1tIDZ5yW90hURU462s2bYizbDgy1n4Yb1AEjY0PzUh7bTD+HJIA2zI1ozihMt3V10HarIUOv4E8nb7u+sbHuT5AAKI1XwZB/4vO/6i8vquEaot8IJUVFlVPBsK8AEbyJC4Hi6Gal2u1jG+lr2W6rfuPGDcchhZMhaQFJMaxCBWAUcAAsGhFhzxXCDZBcTmN/7M8gohI9SwK+pjrKxXMCtI2XUdA6PjZUvnzh3paWlquys7OtvoPBLeAaymO7r+N/7hYWjLk9xyI8yc6AezJE6LmGhoaoGzu1Nq8WkL4IPJhsvVGoLq5DMFzXWUTxCqtZj6nuqACJxT6GhWAmZ85yUM29UDwuyb63ZdOGBOId7GBorn2XPWBXXHrppXZUKHpUyIXFFQsMA29zZtZCiI0A38EP4Of8oH4QYuM85hwYL7SA9MGDoRsD6Emq21r14RgywTACurVhfSOrYVvvvPNOTMaQnIrS5VXLw5ZdyrfyXk6GvKWutq6rN160mgXTcQ6M2EBXmZw/PeuLllVeZFh0O0SEMDYL8QEW/vtCdvjJ7Vs2vjGapjNjiRaQPnA1rtSfvTCOqD4jw6WJNodIWgbi2kn1oVfC53ov4PQY7FItDyIC2eM5i+v6aozeMLgWkC2+wrGX6yDaz5y/XrJJ/rpl88Z7exJj+oQOtICkGzj+zkErMv2B+uRxBnmosLSyvRZBFpb66yAU2jQwvTHFFUIOub9rmuEpXq+wTsgsVzjY24nLZa4KSjVsEV4dbVXSwTLwgkS4b9umuv/rfzbl6XIkJC1c85NbQJzWakQq+gsThMGG/Uk5luxga0k1y1cDWVf1dDhUwzy5T24IQEE4IUXm4VwJIThhu9xqaj63O+cUZ99LUt7avHXjHwbfndzaMV5GIyDqASY0YHIqYXVE7NjhGLRJDqqNDVx+jvtol02bNrxavKyyDGzMYYfAR/khFkZujgx+nspumNU3PUX61ES6DQzUjhDaOcuvl2rYHhL/5TUCbzVsbhjVwBWpJBEBCfIrvJ31yGZ+WHdBtLNJukJOoPCInCBxQjV19bjXIFEbJzbxpprw5kG1oAJ9i5Z9YqYB0sM1ncmfnqkQbFv17bMMFCLMNQRCWISli2xEI9y8afQNGseL+JuaAHZ0heixl5s2HC4uu+QJfp9pKyCqJTe/xJyAdN/O+jOkM2yaXwSREWvTTR3suZ+o4ByE9xGJzFGYl2Xg54tLKl/mkmJVOrdVjDTjdiaYuQPSnZ7niCdAkzYkomKZnPPuokiQKq2NfMNt3m7Z9sMwQWBjOCMcNhIKyGmSw2gyeNp7wBrrnb7nr8MEQen4mCYBMk0Ek3XzNWohRJAlIDL471jDJeOC2HUGIhD35GaK39XU1CS96XK6o4Uj/TBj+nlyg5e4ANVodYPApWagrVOqaK2aZ0JnEE1aIdRQ8M5w8ABjMMbpKemKXeekD4CHgL5b6PPNAY0mzTCbN9XOVQsLF/pmubzul7kInyHVOF5jCNcSv9u2ue7GgdsXLVo1zfB0NvPFziHLnAvj3A5KoxlIT9TW4/GmPNJs228d57iKCkSpSYc+CBpNmjFoswYhrJTYAq2trZaIju1qGFAEGk2a0UdAeuNT/VUsTLjpAwENp6pR2A6t54RdkmjeypUrUzIVs0YzUoavQcgZ8TsxaPixmoSL2vku1CSCy460d88FjSaN6CMgJ43hHBmBAsU+9s+POEZhgHyp5wQjmPT+rBkz3uF0LzorJJI+T7lGEw890fBZs7Lb9x9u28sSMUOg+Oei0opXpKQQ2OQl4YwsMZJZjHbbwrVsSUlFqVqRgFcOd4Aa22lJWWUTEVRyLOZC0GjSiB4BUeMMLSnzV7PVMJ8Iv6i2JTA3yTwWiwdl/6hj0JBQPcQxasILNXuHGn6yCqKjoGs06UC/9lRWwHhIZMg5rBt9amBCZ4pHcIaVH3wYVTq5mQRvaufE/71164Z1cGooQxjPBKV1hAOHUwsKfNNbWxtGPJmkRpNM+glIS0vN8Xnz5t06c+aHfio8aFgYMdZdIbBY3YqMGenKdFkifPIEf2GzW/WVMSzLsWuIJNqWp7OqavGBpk11Q46AMWNG1pH9h47v4yQfEVnifN40JmO+ajSThuKSikeLSvzBwlL/j0GjSRPGvf9zDCnoFfabubmeObd3di2NZnxJGwERwlD9NiwWkvMWL148FTSaNCBtBKTp2dqnuPbYBWqoGfcHZoNGkwakjYA4CDzCulWugXYJaDRpQFoJCAtHU+QXF4NGkwaY4PONT9/yhgabr21ARweq9iXt7flCSqtTzTRKiGeCRpMGmEWUsRvGg1K/auyLkB1pwTI9yxa8nuusUKQm0WjGGzOJUx8PT5+57zH6xfXH827DmDBD9WgmNyYgfhvSAGfIG9a0bJf3Vw31aw+DRqPRaDQajUajmYz8P5+EKwLJLbE5AAAAAElFTkSuQmCC"},1151:(e,o,n)=>{n.d(o,{Z:()=>i,a:()=>a});var t=n(7294);const r={},s=t.createContext(r);function a(e){const o=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(s.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/747b92bf.bf5aff42.js b/assets/js/747b92bf.bf5aff42.js deleted file mode 100644 index 7ca33360d..000000000 --- a/assets/js/747b92bf.bf5aff42.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4743],{4137:(e,t,r)=>{r.d(t,{Zo:()=>i,kt:()=>y});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function p(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=o.createContext({}),l=function(e){var t=o.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):p(p({},t),e)),r},i=function(e){var t=l(e.components);return o.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,i=u(e,["components","mdxType","originalType","parentName"]),d=l(r),h=n,y=d["".concat(s,".").concat(h)]||d[h]||c[h]||a;return r?o.createElement(y,p(p({ref:t},i),{},{components:r})):o.createElement(y,p({ref:t},i))}));function y(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,p=new Array(a);p[0]=h;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u[d]="string"==typeof e?e:n,p[1]=u;for(var l=2;l<a;l++)p[l]=r[l];return o.createElement.apply(null,p)}return o.createElement.apply(null,r)}h.displayName="MDXCreateElement"},1488:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>p,default:()=>c,frontMatter:()=>a,metadata:()=>u,toc:()=>l});var o=r(7462),n=(r(7294),r(4137));const a={},p="Connect your dappnode to the router and power",u={unversionedId:"user/getting-started/connect-dappnode-to-the-router",id:"user/getting-started/connect-dappnode-to-the-router",title:"Connect your dappnode to the router and power",description:"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.",source:"@site/docs/user/getting-started/connect-dappnode-to-the-router.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/connect-dappnode-to-the-router",permalink:"/docs/user/getting-started/connect-dappnode-to-the-router",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/connect-dappnode-to-the-router.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Choose your path",permalink:"/docs/user/getting-started/choose-your-path"},next:{title:"Access Dappnode via Wi-Fi",permalink:"/docs/user/getting-started/access-dappnode-via-wifi"}},s={},l=[{value:"Enable UPnP in your router",id:"enable-upnp-in-your-router",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}],i={toc:l},d="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(d,(0,o.Z)({},i,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"connect-your-dappnode-to-the-router-and-power"},"Connect your dappnode to the router and power"),(0,n.kt)("p",null,"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Connect to router",src:r(2647).Z,width:"200",height:"100"})),(0,n.kt)("p",null,"Make sure you also connect your Dappnode to a power outlet and you are ready to turn it on."),(0,n.kt)("h2",{id:"enable-upnp-in-your-router"},"Enable UPnP in your router"),(0,n.kt)("p",null,"Enabling UPnP (Universal Plug and Play) on a router allows devices on your network to set up port forwarding rules for themselves automatically. This simplifies device communication and functions, especially for applications that require open ports, like some games and peer-to-peer programs."),(0,n.kt)("p",null,"Here are basic instructions to enable UPnP on most routers:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Log into Your Router"),": Open a web browser on a computer connected to your network.\nEnter your router's IP address in the address bar. Common addresses include 192.168.1.1, 192.168.0.1, or 10.0.0.1. If you're unsure of your router's IP, you can check your device's network settings or consult the router's manual.\nYou'll be prompted for a username and password. If you haven't changed them, the default details are usually admin/admin, admin/password, or some similar combination. Refer to your router's documentation if you're unsure.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Navigate to the UPnP Section"),': Once logged in, look for a section labeled "UPnP", often found under "Advanced Settings", "WAN", "NAT", or similar categories. The exact path can vary based on the router manufacturer and model.')),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Enable UPnP"),': There should be an option to enable or disable UPnP. Make sure it\'s set to "Enable" or "On".\nSave or apply the changes.'))),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,n.kt)("details",null,(0,n.kt)("summary",null,(0,n.kt)("b",null,"How can I verify that the ports were successfully opened by UPnP? ")),(0,n.kt)("p",null,"Access your dappnode ",(0,n.kt)("a",{href:"http://my.dappnode/support/ports"},"support > ports")," view and execute an API scan of the ports."),(0,n.kt)("p",null,"An alternative is to manually check if the ports have been opened successfully, follow these steps:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},'Use an online port checker tool, like "YouGetSignal" or "Canyouseeme."'),(0,n.kt)("li",{parentName:"ol"},"Enter your external IP address and the port number you want to check."),(0,n.kt)("li",{parentName:"ol"},'Click "Check." If the port is open and accessible from the outside, the tool will confirm it.')),(0,n.kt)("p",null,"Alternatively, you can use tools like ",(0,n.kt)("inlineCode",{parentName:"p"},"nmap")," to scan your own ports from a different network.")),(0,n.kt)("details",null,(0,n.kt)("summary",null,(0,n.kt)("b",null,"Why can't I connect my DappNode to the router via Wi-Fi?")),"Currently, Dappnode doesn't support Wi-Fi connections to a router. Ensure your Dappnode is connected directly to the router using an ethernet cable."))}c.isMDXComponent=!0},2647:(e,t,r)=>{r.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAYAAADDhn8LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABqnSURBVHgB7Z0LXFzVmcC/79w7wwwQoHmQqNGkNlqrboylSYAEmCQwSBsfqcbtWrVat3a7ff1Wf13brlujfezWx7arfah1bWu7/tpSW83WEEhQkhAIGqyvpE1NNJoY81QIAeZx7/n2O3dmeIUAMzDDgOf/Y2bu49wH957vnO9xHgAajUaj0SQCDtxQULAy0+MJTJcGTIM4sKUhe06KFgG4wAI6Al1Hj7a2toZBo5mAmH1XqqqqMto7w49LMEoRKJNg5BiC+iQ3eFkKN0A7ZE17lDf8O38s0GgmGEbflfzTz/465+ybeTELIsKT6McV/eXz0Mdmzzln1/439+wAjWaCIWILRUWrvQR4OaiMTfQjQriMf8tJwmUI2DSSk3Ed8jMJVAkkypHkSoHYwAqXB0hWgUYzAelRsUzzYLYN3rlKT5Igf9qyqX6n2l5YesknieSFJ1srJ8OCVOoRoVsaGjacUOtLyvzn8o8PNJoJiuhdzB48BcmlnPNzYCQgfThouX2xVUnQCRrNBKaPgJwYPAXCWRAX5I0tGUAu0GgmMGK4BKxZTYEEsYc9u0aT3gyfhRHk4JuhDYY7lCgEGs0Exhw+CYkB8cRjvNZJQIcEoGDpKTjlkWp3PMEUjSbNSEQJUi5fF6ngOUAOIur4hmbSEreAoOOcQg/XHhcjVxEcJzkCGs0kZQQq1kksZOWpgYOCSAIDLCGrtBalmazELSAsDKfz12KuSo6zcKjAYgZoNJOURGoQpWedzt+n65pDM9nRkQqNZgi0gGg0Q6AFRKMZgrhtEHbzvsOm+gsgjDYpYS4CXczrmaDRTELirkGIvVf86ZKW9Rqg7OYtusWuZtISvxeL4MP83c4R9BwiWsB1ynTQaCYpibl5ARcR4lFWr7RwaCYl5/t82XnS/WCCAqJsES0cmsnJ4sUrZgppPMFxviXai6XR9KGgoCBTZIjHeHEJf9oSrkEmAuXl5bldXTIvti6lHEHP+vGFKKe7pWXtIdCMC67sqd9mT5Sfbe3jZIhVk1pAuoJ4L5nmTaDGoQASCGbaCwhA4K/89RHQpJyi0spruIS6hRctNIybmhtqNk1qAQHED/D3cZaOpxAwrZuOIdEcvl8fS7AHNCnHx0Z5UNKP1TJnlJ+wcDyhFie1gEhVEgB0iHDuPzU3V3dDGlPoq7gBpR4iabwISPdtnFfy2Pl01AXBewEifWEntZHOpbJ2QmiG5UL2WrGGcYOzgnjX8uXL347tm+QqllMKyIyMI3rw7FHA6ofZHnblZ9hht1qXbokC3B4pbffAtKY00RKChBVsV+vvGTnHdm1d2wFpTJbLuJIrjNkE9HZepvnLNWvW9AxUkqiAnIh+ZsCA8X01E5/58+dnZeXNepiIVL8fCNhgZhh4MRpuNWZzzws3xMkVtKqzDVUuuSOyMxUCBwtLKv4a3f1LYRu7mprWNw9yWeVASbmduHr1amP/4fYvqCtzLVJds25dB9ciPfsTaax4ggx5lRT0IoZd9yHIT4NmUpGbe9oFFtCliDjcmGhqxP5jnCu6OV+ElE1LCNM4s6mROGO5bBafZ1Z02UemtIpK/S2881tNm+ue6XOucXGi7Dv03rkI4oNqWbhgHQtHv/uIW0AkYADR8+oxt92WT9BCFmgBmWSQaSDYzmwVxzm3PICEa8nAwwPTGWFLWp7MoNEdIMtr22pbpu32BrDX+SNCaKBbLrMl/R1nvU+w2HyINy/h8z5RXOp/jmNT/7GtcWMDjBcSZrIl7tSMFSXF9Vvr6/rtTqAGoelghe6absFmisz7MWlgVeBZLu18kERIYsW2xtqNkMbYaMdK0XfPnJl7R3V1tQ2jY0/096vFZSsWkjTvZg9KCV/Ej0L4i0r8LxPgj0zq/H1jY6MakDB1tYkQq6JL/WyPGInaIJ/lKvKzoIkbNCkbRsG8efMy8vPPzrVtD0ppofTYjiojAkZCmUpkdZmyM5PtapMsd9AxKtCSeZxhVWYxXz/w3hn8uw/GKNM2bap/nn+WFZb5q1jn/1c+7UJen88F78M2Zt5eXFL+HbDFU01NdUcg2YKyZo0QzzRfTI4BInYNlmRye7HSELTlqJwaM06bU8V6/iPC7DYiJrLjqkP0hhPLTNKVIbzhoDIn3MT2NarzoRp0XAUsc10Gbigs9f+ZpfD+9qP7t+/cuTOu4WSVByxouS5lcetsatrQo79s21RXwz81xT7/hXz7X2WHwFW8fhaheJhz5bf4mr/gm3v8kuVLdw1Wso+WgoICV2Z9S56F5IwMiiS3DpZOxwlSDJrm6AKWhpjJ39P4THmRjwpuQW7vetwfb+w8LGtslJMyzGPR/BNswObw+f+elzfkTTvjIZ/vhrgi/QHLXAoC/8DFwvq5c30eVXMUlparpjROzdfUULfjcKb4EoTxQyyZ9/DG13nzbP69na/9cm190xNLyipLYIzJz8/3WoKW8qLqDXvADtq7IvdE/Zoj6RpkgkFCSJSOUrAPwbgcIAzkhgBI6YUE4KBFmO0A9rWYHnUuQ1KQz+vnK6hocpsMyuWYgR/llD/k7HNDwD7gLSoqurG5uTkuQWfbDs+Y613AamE1oti7uKqqWHRZldKUm1tqag7tBuBaDL6+ZEnFDy1DlJtA/8L/4wK+5hWSZEVxaUW9RfTwc1s2Pg1jwJvZ2YHczvbPRG+uvqWlPtpAtH9zPS0gKUYSDakusKoxtKoklYqG6jXazZtr/gxJoNBXUYCRhs/o9YaPNDQ0/HbRihUbzZChhORaNLNV4PU6iBMCezafMosX5hmd8nOsyn1fhA01tvOC4hL/lRaZL29tXPc3Xn+sqGh1Nbjar+GH8Tn+by/i38sMxMtY9VrHT/BbLY11rTAKphxqmwORKQeBbHjsVOne1yqW0kPVtNesJ3tUPwBIAdIwhvQIcUE76P6C8vJcdb+C0A2po6c4fa6+/ljTlrrr2FX7EiFeyxn6UxAnXPEFo7/sJ5PqeSt7LKewtOpqVmyqBdrfKC31f7CwxP8TSxw9u3lz3aMeEVrKtWYV30k1p+3gG/q4QPjDIl/Fx2AUsLF1dfQffNFjBrcPlobzRd77VkBUBNWdPe1xV1bw+aB0N7uypzVxSVUAScYgGrLJfdR71A9Waaa6wrjenTWtnjPX1yB1yHA43E9ghQmf5+d0lCuY7y0s9Z8JcZAB6Mwpw7E49Qx6nwPaZbFF9gB8hv0EXzCF+T+LSvyXB2zXBrJkx+z83H9g4bxZZWg16xkXM7+P2jJxo+6ba6SvqmWusNdyDTnoXDcB6b71fatiKd9+UVnFQn7Zc9S6Ez9NUm8RNVQSSWpWg32DFY57NHzbyJxuEBZGzxWBBe1jS1ec7RJGPYwRnFn2btuyYVmfTUY47OlXY5kU2hVE1/2cx+9yIagYwv0wQmxhhCIBSLSFQDWbsrNdgOClAeUC4kwD6Eu84GOt9Kq3D7VfQQK+wDb0t0GFGJBdwwQ1BcXLV7Q2PbNnhLcgliy75Bzbkr/l41Uzqf3CAw+dKjE/60WJCohqW/MCf66BCcsarj1Vk6Dkx6T4Ch9gT85iXpSWwHuGSstO1pNqEC5RY+9pE2eQJ1maf6CK4e1bSvYuLmu6GSxyJdrfhQ10CRRGEkauSbh3wG7bNSsr6tYtYNdvq9VlGIZJrsfAtv+NBer68vLyX27cuLF9RNeywqbTzondyQLIFftHT2V38VbDaRaFwkPK20SqGQtdwvf8j7yvlh/WHLdpbi8q9ferASjiinqVF/dwORIS/NhZLeT3TSulLWfzOdlrR22c8IZpXu+gDSl9vivygnbXhYkISBebide2PFvXWuyrVCXjrZDGqBhBR0dHb93AwaH5TU3evEDj2WHVyTA1sGcIHuGi8gTnwjeGTkrWwC0CsSd2QoZsixrQbExvOwtsqo1akgkJiCq5URjKLcYOLVQF3wX9Ehw7Fl1odVpEK1tEbS0srWhkoVzR1gln8/qInAVSYmaspSMpZ0Vvo8Ah7129Jf4LOIkQ3E2b1j/Pxvr9vO0OiLinXdGzZEWSODjtq1TTKuqpd53fbt74JhLd3LRlw6lqXwzIri/y7Z2eiIBIEQhFBouTapTFCQYHnTyl/vww+9ghdWTwS7pJuXFOWKYyCBtgDDh+eMqB3OltX+ZzT+fyMQiJIB2fGCkRZF3/byM+juA3fOAK0xAqRpEUb9opGBhoPSglfNkQ9ttc4ZzPmdrNtUUG1zBu/q+WIsgLSBUwRHtYItexk/ytIwdx7e7dtad8XvP9/kwM0udUPZSIgGSBy3130dKKt1g2PwkTECltNERKW+l3c0n9FmfGkG0MP/npUBDXehgtcHPyO07nTHAfr2bAKGLNTlTF6bUvlID8sc8udLlcxiluZLdTAwiYCuODk3fZq/dA85ba30e3DWxGfzckQHYQr2YBm9NzkThR9dSlkDLtZHQo7aO7+2y+2V63uRBG8g2PvpCazxSPcXXfzorFMEO14pBZXShdOqqyeyDQxh64O7mgS3gSIz6fy1aNupRrieDoiI8zzCBrSTarKql0O/fAL/Sj6tcGeQBGjbJHI81ZFi1aMY3Vv69Er/HopPdiKRskN3f/+HbqQsxm23sRG4y2NOi+YVIP0/uxV346pXuKS7AeTokLiLKPRcwWQNrL3z8ayXE24j5B0M4HL4TxgHD62I3DEREOn+/js4K29RtQEXyCt1j6//N96eZNvYpFb3M+/CMXSR1GwBhSxYrnlWeJUEe37fq+ITg6IRPUsYSAWA3CAtw28G66vd7BT2yEwigNi/+vmZBC+D4j94Mwpt2oi4pWnhG0g7/mC5Q5nQIRvlu1fMmeSS8gyql4+Ehev5ecahUL1byOQlzJWdAmt1QtWveeOi2N+N4C4MkTgj4TGX4j8ZivED3tgvfyzw/73A2Zx48Pfj8h10xCp/3XC5BCKDYQB3KogaCY731Uur7qPqBaSPM/dCcLx3znGgB3ZojQo6oV8fujBjmHP7t7V6V0cQ0SVs2bL+LPqPpnjARSRrqUb6icZiF1D50WT3rhrO+HpB0tOCnaVFGl7cZ30S1fU27OYdtwjQAEHLEDAcmayv7hKTSEsA9xIWWU2bGygB0YJg4ZpVXmkVIj+6XZ7+whWnX+6tX/u7O6OgxxVMBFRUVeMKdU8im/zKvLI7eF7/BN3V61vPgXsSb27wsbxOru7vdktzc+rZpUL+VI+l5+9kkXEH6L7fz0W5R73W2Zx4dKyi/ppDiIZYUNEQ2FqKa8qqUG/1+G10tTgxLejhyWuELOtgQH6lUbL5kitz05DbJiZQEOUij0T00ufk8ZfVOpAiG6emnuoeNri0v9jXyid3mz0zSGI58cLZIRC0s5eW3eK8jDR53LR1dyQeTlpzi7z0U2khW+YVtT/QHs8yx1a95UgDiHX+ZtapFVrG3Q2wV1EE6OpEvT5PI29s7Y3oiEvth0kDa/8CL2a2XgKGoQ5Tnmw1Ur4b+wqTqiPMHR7GudYxG2QpJhlTjMmTnYz8wiOtgrVyrDQyVEI4mR+4oFCCnyRCOLsa9INzMnSgq/ChHeD11HX9m+fbuFox20YbLAVaiofTbp7zbGbi4ln1DR46C034RRodTiSCYQbKSjdG8j1SMEwUrkbBxH4DqJdU5SPTaA4yANfJ4KZ5/KQjk5OQN7EGLBypVe6AgVcoI2DIrXIG5QIjp1SGydhtKOSFUEKEKRqCbSohWrpolw1yejquYbvPEp/s3nlPNUG65Tn8gRlS38OcAn/PO2LbW/63dXg1RkiU6gc4RLrV1844UwQYVsx44dJhczb0L/ensOJId5/DJvU/k6Qxibef0vp05KJ3VpZUOUY/C2KgsvYMf/p2OqeLdhZPCeT3DmzmMBTNCrQ45do764Nnpu4N7uXvXUKYN9Pp8RaO86D9DkCDU9sm3b+r0wSoZrJ8r5WiVxXNm8+JoR7lrDz0JJ8QlJ4oqWLeuT1ioikczdzi/sMhd0vxpE9zf5v/sGTECqq6tVRizruy0Vo5oIjL8/h7ClIzSoprtDWNqzvasrjK4pV7Oge8kgFyQA+9XYE6YUOGGBSf1UP9UEKhwOq/MGCgoKzNbW1vCMGTNo/6H2B1TzW1brfwVjAKmwymA7ULDdRmVsIr1FLlFnWHIbC4tqhft9ZzfSHS2b178CSST+YX+4nAl3dR7a+tzmE4VlFW1Dex80Y0FzQ+2epUtXfJhcrAlJup5VtW+q7bNnz25nQX8GkkZv3xUlHOp33zvtX2TtoZgr3see31y3GcYAdmEdi+lbSPaLbE2/ztXmd5o31f6i0HfJg1bHkbfd+IHz+Hbm8XW/Erk1uCc367wfA2xIqss+bgHhajjPyPD8pKi0ci/LyuWpbbMRP0q5zTx8eMxHxRgFQz5zVngGGzWEGhvrnYaES8r8R2PPfAzGqxoGpI6srJ5nt7i4ws8eoe9xJmizDKHaOfWYviM6m2l4IOJkUi6onNiR7HT/aQjsM6VlP81epCcXlfpfsl32u2wn4vr6ljNcWdPu5ysVkzNYhXP00yEj4+6amgcSa6AZB4nZDwiXRJu4pT3K5Z6fny937twJEwEuIYd86azZBFLXU5p1t3bTUF1PQ+BaSRJZtaJuU+KNzZtrd8R5Moh5ZjnftLETtp4EzWaNZG1Dw7qD0GecNbvTfchNgZLaZ5qu4edxPUQPYv7K1tIDZ5yW90hURU462s2bYizbDgy1n4Yb1AEjY0PzUh7bTD+HJIA2zI1ozihMt3V10HarIUOv4E8nb7u+sbHuT5AAKI1XwZB/4vO/6i8vquEaot8IJUVFlVPBsK8AEbyJC4Hi6Gal2u1jG+lr2W6rfuPGDcchhZMhaQFJMaxCBWAUcAAsGhFhzxXCDZBcTmN/7M8gohI9SwK+pjrKxXMCtI2XUdA6PjZUvnzh3paWlquys7OtvoPBLeAaymO7r+N/7hYWjLk9xyI8yc6AezJE6LmGhoaoGzu1Nq8WkL4IPJhsvVGoLq5DMFzXWUTxCqtZj6nuqACJxT6GhWAmZ85yUM29UDwuyb63ZdOGBOId7GBorn2XPWBXXHrppXZUKHpUyIXFFQsMA29zZtZCiI0A38EP4Of8oH4QYuM85hwYL7SA9MGDoRsD6Emq21r14RgywTACurVhfSOrYVvvvPNOTMaQnIrS5VXLw5ZdyrfyXk6GvKWutq6rN160mgXTcQ6M2EBXmZw/PeuLllVeZFh0O0SEMDYL8QEW/vtCdvjJ7Vs2vjGapjNjiRaQPnA1rtSfvTCOqD4jw6WJNodIWgbi2kn1oVfC53ov4PQY7FItDyIC2eM5i+v6aozeMLgWkC2+wrGX6yDaz5y/XrJJ/rpl88Z7exJj+oQOtICkGzj+zkErMv2B+uRxBnmosLSyvRZBFpb66yAU2jQwvTHFFUIOub9rmuEpXq+wTsgsVzjY24nLZa4KSjVsEV4dbVXSwTLwgkS4b9umuv/rfzbl6XIkJC1c85NbQJzWakQq+gsThMGG/Uk5luxga0k1y1cDWVf1dDhUwzy5T24IQEE4IUXm4VwJIThhu9xqaj63O+cUZ99LUt7avHXjHwbfndzaMV5GIyDqASY0YHIqYXVE7NjhGLRJDqqNDVx+jvtol02bNrxavKyyDGzMYYfAR/khFkZujgx+nspumNU3PUX61ES6DQzUjhDaOcuvl2rYHhL/5TUCbzVsbhjVwBWpJBEBCfIrvJ31yGZ+WHdBtLNJukJOoPCInCBxQjV19bjXIFEbJzbxpprw5kG1oAJ9i5Z9YqYB0sM1ncmfnqkQbFv17bMMFCLMNQRCWISli2xEI9y8afQNGseL+JuaAHZ0heixl5s2HC4uu+QJfp9pKyCqJTe/xJyAdN/O+jOkM2yaXwSREWvTTR3suZ+o4ByE9xGJzFGYl2Xg54tLKl/mkmJVOrdVjDTjdiaYuQPSnZ7niCdAkzYkomKZnPPuokiQKq2NfMNt3m7Z9sMwQWBjOCMcNhIKyGmSw2gyeNp7wBrrnb7nr8MEQen4mCYBMk0Ek3XzNWohRJAlIDL471jDJeOC2HUGIhD35GaK39XU1CS96XK6o4Uj/TBj+nlyg5e4ANVodYPApWagrVOqaK2aZ0JnEE1aIdRQ8M5w8ABjMMbpKemKXeekD4CHgL5b6PPNAY0mzTCbN9XOVQsLF/pmubzul7kInyHVOF5jCNcSv9u2ue7GgdsXLVo1zfB0NvPFziHLnAvj3A5KoxlIT9TW4/GmPNJs228d57iKCkSpSYc+CBpNmjFoswYhrJTYAq2trZaIju1qGFAEGk2a0UdAeuNT/VUsTLjpAwENp6pR2A6t54RdkmjeypUrUzIVs0YzUoavQcgZ8TsxaPixmoSL2vku1CSCy460d88FjSaN6CMgJ43hHBmBAsU+9s+POEZhgHyp5wQjmPT+rBkz3uF0LzorJJI+T7lGEw890fBZs7Lb9x9u28sSMUOg+Oei0opXpKQQ2OQl4YwsMZJZjHbbwrVsSUlFqVqRgFcOd4Aa22lJWWUTEVRyLOZC0GjSiB4BUeMMLSnzV7PVMJ8Iv6i2JTA3yTwWiwdl/6hj0JBQPcQxasILNXuHGn6yCqKjoGs06UC/9lRWwHhIZMg5rBt9amBCZ4pHcIaVH3wYVTq5mQRvaufE/71164Z1cGooQxjPBKV1hAOHUwsKfNNbWxtGPJmkRpNM+glIS0vN8Xnz5t06c+aHfio8aFgYMdZdIbBY3YqMGenKdFkifPIEf2GzW/WVMSzLsWuIJNqWp7OqavGBpk11Q46AMWNG1pH9h47v4yQfEVnifN40JmO+ajSThuKSikeLSvzBwlL/j0GjSRPGvf9zDCnoFfabubmeObd3di2NZnxJGwERwlD9NiwWkvMWL148FTSaNCBtBKTp2dqnuPbYBWqoGfcHZoNGkwakjYA4CDzCulWugXYJaDRpQFoJCAtHU+QXF4NGkwaY4PONT9/yhgabr21ARweq9iXt7flCSqtTzTRKiGeCRpMGmEWUsRvGg1K/auyLkB1pwTI9yxa8nuusUKQm0WjGGzOJUx8PT5+57zH6xfXH827DmDBD9WgmNyYgfhvSAGfIG9a0bJf3Vw31aw+DRqPRaDQajUajmYz8P5+EKwLJLbE5AAAAAElFTkSuQmCC"}}]); \ No newline at end of file diff --git a/assets/js/7661071f.655fc62f.js b/assets/js/7661071f.655fc62f.js deleted file mode 100644 index d3da7dd27..000000000 --- a/assets/js/7661071f.655fc62f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9642],{4137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),i=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=i(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),p=i(r),m=o,d=p["".concat(s,".").concat(m)]||p[m]||g[m]||a;return r?n.createElement(d,l(l({ref:t},c),{},{components:r})):n.createElement(d,l({ref:t},c))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u[p]="string"==typeof e?e:o,l[1]=u;for(var i=2;i<a;i++)l[i]=r[i];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},1362:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>u,toc:()=>i});var n=r(7462),o=(r(7294),r(4137));const a={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},l=void 0,u={permalink:"/blog/welcome",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",formattedDate:"August 26, 2021",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},s={authorsImageUrls:[void 0,void 0]},i=[],c={toc:i},p="wrapper";function g(e){let{components:t,...a}=e;return(0,o.kt)(p,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/blog"},"Docusaurus blogging features")," are powered by the ",(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog"},"blog plugin"),"."),(0,o.kt)("p",null,"Simply add Markdown files (or folders) to the ",(0,o.kt)("inlineCode",{parentName:"p"},"blog")," directory."),(0,o.kt)("p",null,"Regular blog authors can be added to ",(0,o.kt)("inlineCode",{parentName:"p"},"authors.yml"),"."),(0,o.kt)("p",null,"The blog post date can be extracted from filenames, such as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome.md")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome/index.md"))),(0,o.kt)("p",null,"A blog post folder can be convenient to co-locate blog post images:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Docusaurus Plushie",src:r(250).Z,width:"1500",height:"500"})),(0,o.kt)("p",null,"The blog supports tags as well!"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"And if you don't want a blog"),": just delete this directory, and use ",(0,o.kt)("inlineCode",{parentName:"p"},"blog: false")," in your Docusaurus config."))}g.isMDXComponent=!0},250:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/7661071f.ae9f9558.js b/assets/js/7661071f.ae9f9558.js new file mode 100644 index 000000000..05c96dd36 --- /dev/null +++ b/assets/js/7661071f.ae9f9558.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9642],{3174:(e,o,s)=>{s.r(o),s.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>l,metadata:()=>a,toc:()=>u});var n=s(5893),t=s(1151);const l={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},r=void 0,a={permalink:"/blog/welcome",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",formattedDate:"August 26, 2021",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},unlisted:!1,nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},c={authorsImageUrls:[void 0,void 0]},u=[];function i(e){const o={a:"a",code:"code",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.a,{href:"https://docusaurus.io/docs/blog",children:"Docusaurus blogging features"})," are powered by the ",(0,n.jsx)(o.a,{href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog plugin"}),"."]}),"\n",(0,n.jsxs)(o.p,{children:["Simply add Markdown files (or folders) to the ",(0,n.jsx)(o.code,{children:"blog"})," directory."]}),"\n",(0,n.jsxs)(o.p,{children:["Regular blog authors can be added to ",(0,n.jsx)(o.code,{children:"authors.yml"}),"."]}),"\n",(0,n.jsx)(o.p,{children:"The blog post date can be extracted from filenames, such as:"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.code,{children:"2019-05-30-welcome.md"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.code,{children:"2019-05-30-welcome/index.md"})}),"\n"]}),"\n",(0,n.jsx)(o.p,{children:"A blog post folder can be convenient to co-locate blog post images:"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"Docusaurus Plushie",src:s(250).Z+"",width:"1500",height:"500"})}),"\n",(0,n.jsx)(o.p,{children:"The blog supports tags as well!"}),"\n",(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.strong,{children:"And if you don't want a blog"}),": just delete this directory, and use ",(0,n.jsx)(o.code,{children:"blog: false"})," in your Docusaurus config."]})]})}function d(e={}){const{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},250:(e,o,s)=>{s.d(o,{Z:()=>n});const n=s.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"},1151:(e,o,s)=>{s.d(o,{Z:()=>a,a:()=>r});var n=s(7294);const t={},l=n.createContext(t);function r(e){const o=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(l.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/769f9326.b3090ddc.js b/assets/js/769f9326.b3090ddc.js new file mode 100644 index 000000000..460927aff --- /dev/null +++ b/assets/js/769f9326.b3090ddc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8233],{2125:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>d});var r=n(5893),o=n(1151);const s={},a="Temperature",i={id:"user/hardware/temperature",title:"Temperature",description:"Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics \ud83d\udcca in the main dashboard to do so.",source:"@site/docs/user/hardware/temperature.md",sourceDirName:"user/hardware",slug:"/user/hardware/temperature",permalink:"/docs/user/hardware/temperature",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/hardware/temperature.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Maintenance",permalink:"/docs/user/hardware/maintenance"},next:{title:"Earn with Staking in Dappnode",permalink:"/docs/user/staking/overview"}},c={},d=[];function p(e){const t={a:"a",code:"code",h1:"h1",li:"li",ol:"ol",p:"p",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"temperature",children:"Temperature"}),"\n",(0,r.jsxs)(t.p,{children:["Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics \ud83d\udcca in the ",(0,r.jsx)(t.a,{href:"http://my.dappnode/dashboard",children:"main dashboard"})," to do so."]}),"\n",(0,r.jsx)("p",{align:"center",children:(0,r.jsx)("img",{width:"100%",src:"/img/temp_dashboard.png",alt:"CPU_temp"})}),"\n",(0,r.jsx)(t.p,{children:"If you want to configure notifications \ud83d\udd14 for temperature changes, you can find two options:"}),"\n",(0,r.jsxs)(t.ol,{children:["\n",(0,r.jsxs)(t.li,{children:["In the ",(0,r.jsx)(t.a,{href:"http://dms.dappnode/dashboards",children:"DMS Dashboard"})," you'll be able to configure Grafana notifications."]}),"\n",(0,r.jsxs)(t.li,{children:["You can also set ",(0,r.jsx)(t.a,{href:"http://my.dappnode/system/notifications",children:"Ethical Metrics"})," up to get email notifications while keeping your privacy."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"Some additional tips that will contribute to an optimal temperature are:"}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["BIOS Adjustments: if you shut your Dappnode down you can access your NUC's BIOS setup with the ",(0,r.jsx)(t.code,{children:"F2"})," key while booting. The UI includes different options that you can check in ",(0,r.jsx)(t.a,{href:"https://www.intel.com/content/www/us/en/support/articles/000096279/intel-nuc.html",children:"Intel's documentation"})," and tweak according to your preferences."]}),"\n",(0,r.jsxs)(t.li,{children:["If you're using an 11th Generation NUC, check its ambient temperature recomendations ",(0,r.jsx)(t.a,{href:"https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/NUC11AT_TechProdSpec.pdf",children:"here"}),"."]}),"\n",(0,r.jsxs)(t.li,{children:["If you're using a 12th Generation NUC, check its ambient temperature recomendations ",(0,r.jsx)(t.a,{href:"https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/NUC12WSK_L10_UserGuide.pdf",children:"here"}),"."]}),"\n"]})]})}function u(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>a});var r=n(7294);const o={},s=r.createContext(o);function a(e){const t=r.useContext(s);return r.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(o):e.components||o:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/769f9326.b68781fb.js b/assets/js/769f9326.b68781fb.js deleted file mode 100644 index b02245697..000000000 --- a/assets/js/769f9326.b68781fb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8233],{4137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?o(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):o(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function p(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},l="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),l=s(r),m=a,f=l["".concat(c,".").concat(m)]||l[m]||d[m]||o;return r?n.createElement(f,i(i({ref:t},u),{},{components:r})):n.createElement(f,i({ref:t},u))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p[l]="string"==typeof e?e:a,i[1]=p;for(var s=2;s<o;s++)i[s]=r[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},3441:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var n=r(7462),a=(r(7294),r(4137));const o={},i="Temperature",p={unversionedId:"user/hardware/temperature",id:"user/hardware/temperature",title:"Temperature",description:"Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics \ud83d\udcca in the main dashboard to do so.",source:"@site/docs/user/hardware/temperature.md",sourceDirName:"user/hardware",slug:"/user/hardware/temperature",permalink:"/docs/user/hardware/temperature",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/hardware/temperature.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Maintenance",permalink:"/docs/user/hardware/maintenance"},next:{title:"Earn with Staking in Dappnode",permalink:"/docs/user/staking/overview"}},c={},s=[],u={toc:s},l="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(l,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"temperature"},"Temperature"),(0,a.kt)("p",null,"Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics \ud83d\udcca in the ",(0,a.kt)("a",{parentName:"p",href:"http://my.dappnode/dashboard"},"main dashboard")," to do so."),(0,a.kt)("p",{align:"center"},(0,a.kt)("img",{width:"100%",src:"/img/temp_dashboard.png",alt:"CPU_temp"})),(0,a.kt)("p",null,"If you want to configure notifications \ud83d\udd14 for temperature changes, you can find two options:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"In the ",(0,a.kt)("a",{parentName:"li",href:"http://dms.dappnode/dashboards"},"DMS Dashboard")," you'll be able to configure Grafana notifications."),(0,a.kt)("li",{parentName:"ol"},"You can also set ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/system/notifications"},"Ethical Metrics")," up to get email notifications while keeping your privacy.")),(0,a.kt)("p",null,"Some additional tips that will contribute to an optimal temperature are:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"BIOS Adjustments: if you shut your Dappnode down you can access your NUC's BIOS setup with the ",(0,a.kt)("inlineCode",{parentName:"li"},"F2")," key while booting. The UI includes different options that you can check in ",(0,a.kt)("a",{parentName:"li",href:"https://www.intel.com/content/www/us/en/support/articles/000096279/intel-nuc.html"},"Intel's documentation")," and tweak according to your preferences."),(0,a.kt)("li",{parentName:"ul"},"If you're using an 11th Generation NUC, check its ambient temperature recomendations ",(0,a.kt)("a",{parentName:"li",href:"https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/NUC11AT_TechProdSpec.pdf"},"here"),"."),(0,a.kt)("li",{parentName:"ul"},"If you're using a 12th Generation NUC, check its ambient temperature recomendations ",(0,a.kt)("a",{parentName:"li",href:"https://www.intel.com/content/dam/support/us/en/documents/intel-nuc/NUC12WSK_L10_UserGuide.pdf"},"here"),".")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/773dc9fa.1f43c6cc.js b/assets/js/773dc9fa.1f43c6cc.js new file mode 100644 index 000000000..267057d39 --- /dev/null +++ b/assets/js/773dc9fa.1f43c6cc.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6471],{740:(o,t,s)=>{s.r(t),s.d(t,{assets:()=>h,contentTitle:()=>n,default:()=>l,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var e=s(5893),i=s(1151);const r={},n="Subscribing to Smooth",a={id:"smooth/subscribe-to-smooth/overview",title:"Subscribing to Smooth",description:"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.",source:"@site/docs/smooth/subscribe-to-smooth/overview.md",sourceDirName:"smooth/subscribe-to-smooth",slug:"/smooth/subscribe-to-smooth/overview",permalink:"/docs/smooth/subscribe-to-smooth/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/subscribe-to-smooth/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Smooth's architecture",permalink:"/docs/smooth/deep-dive-into-smooth/oracle-sm"},next:{title:"Automatic Subscription",permalink:"/docs/smooth/subscribe-to-smooth/automatic"}},h={},d=[];function c(o){const t={a:"a",admonition:"admonition",h1:"h1",li:"li",ol:"ol",p:"p",strong:"strong",...(0,i.a)(),...o.components};return(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(t.h1,{id:"subscribing-to-smooth",children:"Subscribing to Smooth"}),"\n",(0,e.jsxs)(t.p,{children:["Hello! In this section you will find all the information on how to subscribe your Validators to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". Even though the process is simple, it is important to follow the steps carefully."]}),"\n",(0,e.jsxs)(t.admonition,{title:"Before subscribing to Smooth!",type:"danger",children:[(0,e.jsxs)(t.p,{children:["Only validators with ETH1 withdrawal addresses can be subscribed to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]}),(0,e.jsxs)(t.p,{children:["Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),"."]})]}),"\n",(0,e.jsxs)(t.p,{children:["You have ",(0,e.jsx)(t.strong,{children:"two options"})," to subscribe to ",(0,e.jsx)(t.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),":"]}),"\n",(0,e.jsxs)(t.ol,{children:["\n",(0,e.jsxs)(t.li,{children:["\n",(0,e.jsxs)(t.p,{children:[(0,e.jsx)(t.a,{href:"/docs/smooth/subscribe-to-smooth/automatic",children:(0,e.jsx)(t.strong,{children:"Automatic subscription"})}),": The simplest way to subscribe, change the fee recipient of your validators to Smooth's address and subscribe automatically when proposing your next block!"]}),"\n"]}),"\n",(0,e.jsxs)(t.li,{children:["\n",(0,e.jsxs)(t.p,{children:[(0,e.jsx)(t.a,{href:"/docs/smooth/subscribe-to-smooth/manual",children:(0,e.jsx)(t.strong,{children:"Manual subscription"})}),": Change the fee recipient of your validators to Smooth's address and use the Smooth's website to subscribe right now, without waiting for your validators to propose a block. Start earning rewards right away!"]}),"\n"]}),"\n"]})]})}function l(o={}){const{wrapper:t}={...(0,i.a)(),...o.components};return t?(0,e.jsx)(t,{...o,children:(0,e.jsx)(c,{...o})}):c(o)}},1151:(o,t,s)=>{s.d(t,{Z:()=>a,a:()=>n});var e=s(7294);const i={},r=e.createContext(i);function n(o){const t=e.useContext(r);return e.useMemo((function(){return"function"==typeof o?o(t):{...t,...o}}),[t,o])}function a(o){let t;return t=o.disableParentContext?"function"==typeof o.components?o.components(i):o.components||i:n(o.components),e.createElement(r.Provider,{value:t},o.children)}}}]); \ No newline at end of file diff --git a/assets/js/773dc9fa.5ecc2397.js b/assets/js/773dc9fa.5ecc2397.js deleted file mode 100644 index 9dac0fe75..000000000 --- a/assets/js/773dc9fa.5ecc2397.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6471],{4137:(t,e,o)=>{o.d(e,{Zo:()=>l,kt:()=>d});var r=o(7294);function a(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}function n(t,e){var o=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),o.push.apply(o,r)}return o}function s(t){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{};e%2?n(Object(o),!0).forEach((function(e){a(t,e,o[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}))}return t}function i(t,e){if(null==t)return{};var o,r,a=function(t,e){if(null==t)return{};var o,r,a={},n=Object.keys(t);for(r=0;r<n.length;r++)o=n[r],e.indexOf(o)>=0||(a[o]=t[o]);return a}(t,e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);for(r=0;r<n.length;r++)o=n[r],e.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(t,o)&&(a[o]=t[o])}return a}var p=r.createContext({}),c=function(t){var e=r.useContext(p),o=e;return t&&(o="function"==typeof t?t(e):s(s({},e),t)),o},l=function(t){var e=c(t.components);return r.createElement(p.Provider,{value:e},t.children)},m="mdxType",h={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},u=r.forwardRef((function(t,e){var o=t.components,a=t.mdxType,n=t.originalType,p=t.parentName,l=i(t,["components","mdxType","originalType","parentName"]),m=c(o),u=a,d=m["".concat(p,".").concat(u)]||m[u]||h[u]||n;return o?r.createElement(d,s(s({ref:e},l),{},{components:o})):r.createElement(d,s({ref:e},l))}));function d(t,e){var o=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var n=o.length,s=new Array(n);s[0]=u;var i={};for(var p in e)hasOwnProperty.call(e,p)&&(i[p]=e[p]);i.originalType=t,i[m]="string"==typeof t?t:a,s[1]=i;for(var c=2;c<n;c++)s[c]=o[c];return r.createElement.apply(null,s)}return r.createElement.apply(null,o)}u.displayName="MDXCreateElement"},1020:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>p,contentTitle:()=>s,default:()=>h,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var r=o(7462),a=(o(7294),o(4137));const n={},s="Subscribing to Smooth",i={unversionedId:"smooth/subscribe-to-smooth/overview",id:"smooth/subscribe-to-smooth/overview",title:"Subscribing to Smooth",description:"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.",source:"@site/docs/smooth/subscribe-to-smooth/overview.md",sourceDirName:"smooth/subscribe-to-smooth",slug:"/smooth/subscribe-to-smooth/overview",permalink:"/docs/smooth/subscribe-to-smooth/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/subscribe-to-smooth/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Smooth's architecture",permalink:"/docs/smooth/deep-dive-into-smooth/oracle-sm"},next:{title:"Automatic Subscription",permalink:"/docs/smooth/subscribe-to-smooth/automatic"}},p={},c=[],l={toc:c},m="wrapper";function h(t){let{components:e,...o}=t;return(0,a.kt)(m,(0,r.Z)({},l,o,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"subscribing-to-smooth"},"Subscribing to Smooth"),(0,a.kt)("p",null,"Hello! In this section you will find all the information on how to subscribe your Validators to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". Even though the process is simple, it is important to follow the steps carefully. "),(0,a.kt)("admonition",{title:"Before subscribing to Smooth!",type:"danger"},(0,a.kt)("p",{parentName:"admonition"},"Only validators with ETH1 withdrawal addresses can be subscribed to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". "),(0,a.kt)("p",{parentName:"admonition"},"Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),".")),(0,a.kt)("p",null,"You have ",(0,a.kt)("strong",{parentName:"p"},"two options")," to subscribe to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),":"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("a",{parentName:"p",href:"/docs/smooth/subscribe-to-smooth/automatic"},(0,a.kt)("strong",{parentName:"a"},"Automatic subscription")),": The simplest way to subscribe, change the fee recipient of your validators to Smooth's address and subscribe automatically when proposing your next block!")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("a",{parentName:"p",href:"/docs/smooth/subscribe-to-smooth/manual"},(0,a.kt)("strong",{parentName:"a"},"Manual subscription")),": Change the fee recipient of your validators to Smooth's address and use the Smooth's website to subscribe right now, without waiting for your validators to propose a block. Start earning rewards right away!"))))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7874.528a2ea3.js b/assets/js/7874.528a2ea3.js new file mode 100644 index 000000000..274ae0170 --- /dev/null +++ b/assets/js/7874.528a2ea3.js @@ -0,0 +1 @@ +(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7874],{9047:(e,t,n)=>{"use strict";n.d(t,{Z:()=>L});var s=n(7294),o=n(5893);function a(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),a=t.filter((e=>e!==n)),c=n?.props.children;return{mdxAdmonitionTitle:c,rest:a.length>0?(0,o.jsx)(o.Fragment,{children:a}):null}}(e.children),a=e.title??t;return{...e,...a&&{title:a},children:n}}var c=n(6010),i=n(5999),r=n(5281);const l={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:t,className:n,children:s}=e;return(0,o.jsx)("div",{className:(0,c.Z)(r.k.common.admonition,r.k.common.admonitionType(t),l.admonition,n),children:s})}function u(e){let{icon:t,title:n}=e;return(0,o.jsxs)("div",{className:l.admonitionHeading,children:[(0,o.jsx)("span",{className:l.admonitionIcon,children:t}),n]})}function m(e){let{children:t}=e;return t?(0,o.jsx)("div",{className:l.admonitionContent,children:t}):null}function h(e){const{type:t,icon:n,title:s,children:a,className:c}=e;return(0,o.jsxs)(d,{type:t,className:c,children:[(0,o.jsx)(u,{title:s,icon:n}),(0,o.jsx)(m,{children:a})]})}function p(e){return(0,o.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const f={icon:(0,o.jsx)(p,{}),title:(0,o.jsx)(i.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function g(e){return(0,o.jsx)(h,{...f,...e,className:(0,c.Z)("alert alert--secondary",e.className),children:e.children})}function x(e){return(0,o.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const j={icon:(0,o.jsx)(x,{}),title:(0,o.jsx)(i.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function b(e){return(0,o.jsx)(h,{...j,...e,className:(0,c.Z)("alert alert--success",e.className),children:e.children})}function v(e){return(0,o.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const N={icon:(0,o.jsx)(v,{}),title:(0,o.jsx)(i.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function k(e){return(0,o.jsx)(h,{...N,...e,className:(0,c.Z)("alert alert--info",e.className),children:e.children})}function y(e){return(0,o.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const C={icon:(0,o.jsx)(y,{}),title:(0,o.jsx)(i.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function B(e){return(0,o.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,o.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const w={icon:(0,o.jsx)(B,{}),title:(0,o.jsx)(i.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const Z={icon:(0,o.jsx)(y,{}),title:(0,o.jsx)(i.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const _={...{note:g,tip:b,info:k,warning:function(e){return(0,o.jsx)(h,{...C,...e,className:(0,c.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,o.jsx)(h,{...w,...e,className:(0,c.Z)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,o.jsx)(g,{title:"secondary",...e}),important:e=>(0,o.jsx)(k,{title:"important",...e}),success:e=>(0,o.jsx)(b,{title:"success",...e}),caution:function(e){return(0,o.jsx)(h,{...Z,...e,className:(0,c.Z)("alert alert--warning",e.className),children:e.children})}}};function L(e){const t=a(e),n=(s=t.type,_[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),_.info));var s;return(0,o.jsx)(n,{...t})}},4881:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});n(7294);var s=n(5999),o=n(5281),a=n(9960),c=n(6010);const i={iconEdit:"iconEdit_Z9Sw"};var r=n(5893);function l(e){let{className:t,...n}=e;return(0,r.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,c.Z)(i.iconEdit,t),"aria-hidden":"true",...n,children:(0,r.jsx)("g",{children:(0,r.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function d(e){let{editUrl:t}=e;return(0,r.jsxs)(a.Z,{to:t,className:o.k.common.editThisPage,children:[(0,r.jsx)(l,{}),(0,r.jsx)(s.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}},2459:(e,t,n)=>{"use strict";n.d(t,{Z:()=>se});var s=n(7294),o=n(1151),a=n(5742),c=n(2389),i=n(6010),r=n(2949),l=n(6668);function d(){const{prism:e}=(0,l.L)(),{colorMode:t}=(0,r.I)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var u=n(5281),m=n(7594),h=n.n(m);const p=/title=(?<quote>["'])(?<title>.*?)\1/,f=/\{(?<range>[\d,-]+)\}/,g={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"},lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""}};function x(e,t){const n=e.map((e=>{const{start:n,end:s}=g[e];return`(?:${n}\\s*(${t.flatMap((e=>[e.line,e.block?.start,e.block?.end].filter(Boolean))).join("|")})\\s*${s})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function j(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:o,metastring:a}=t;if(a&&f.test(a)){const e=a.match(f).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${a}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=o[0].className,s=h()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(s),code:n}}if(void 0===s)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return x(["js","jsBlock"],t);case"jsx":case"tsx":return x(["js","jsBlock","jsx"],t);case"html":return x(["js","jsBlock","html"],t);case"python":case"py":case"bash":return x(["bash"],t);case"markdown":case"md":return x(["html","jsx","bash"],t);case"tex":case"latex":case"matlab":return x(["tex"],t);case"lua":case"haskell":case"sql":return x(["lua"],t);case"wasm":return x(["wasm"],t);default:return x(Object.keys(g).filter((e=>!["lua","wasm","tex","latex","matlab"].includes(e))),t)}}(s,o),i=n.split("\n"),r=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),l=Object.fromEntries(o.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),d=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),u=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let h=0;h<i.length;){const e=i[h].match(c);if(!e){h+=1;continue}const t=e.slice(1).find((e=>void 0!==e));l[t]?r[l[t]].range+=`${h},`:d[t]?r[d[t]].start=h:u[t]&&(r[u[t]].range+=`${r[u[t]].start}-${h-1},`),i.splice(h,1)}n=i.join("\n");const m={};return Object.entries(r).forEach((e=>{let[t,{range:n}]=e;h()(n).forEach((e=>{m[e]??=[],m[e].push(t)}))})),{lineClassNames:m,code:n}}const b={codeBlockContainer:"codeBlockContainer_Ckt0"};var v=n(5893);function N(e){let{as:t,...n}=e;const s=function(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[s,o]=e;const a=t[s];a&&"string"==typeof o&&(n[a]=o)})),n}(d());return(0,v.jsx)(t,{...n,style:s,className:(0,i.Z)(n.className,b.codeBlockContainer,u.k.common.codeBlock)})}const k={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function y(e){let{children:t,className:n}=e;return(0,v.jsx)(N,{as:"pre",tabIndex:0,className:(0,i.Z)(k.codeBlockStandalone,"thin-scrollbar",n),children:(0,v.jsx)("code",{className:k.codeBlockLines,children:t})})}var C=n(902);const B={attributes:!0,characterData:!0,childList:!0,subtree:!0};function w(e,t){const[n,o]=(0,s.useState)(),a=(0,s.useCallback)((()=>{o(e.current?.closest("[role=tabpanel][hidden]"))}),[e,o]);(0,s.useEffect)((()=>{a()}),[a]),function(e,t,n){void 0===n&&(n=B);const o=(0,C.zX)(t),a=(0,C.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(o);return e&&t.observe(e,a),()=>t.disconnect()}),[e,o,a])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),a())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var Z=n(4965);const _={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function L(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:o,getTokenProps:a}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const c=o({line:t,className:(0,i.Z)(n,s&&_.codeLine)}),r=t.map(((e,t)=>(0,v.jsx)("span",{...a({token:e,key:t})},t)));return(0,v.jsxs)("span",{...c,children:[s?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)("span",{className:_.codeLineNumber}),(0,v.jsx)("span",{className:_.codeLineContent,children:r})]}):r,(0,v.jsx)("br",{})]})}var E=n(5999);function T(e){return(0,v.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,v.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 S(e){return(0,v.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,v.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const z={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function I(e){let{code:t,className:n}=e;const[o,a]=(0,s.useState)(!1),c=(0,s.useRef)(void 0),r=(0,s.useCallback)((()=>{!function(e,t){let{target:n=document.body}=void 0===t?{}:t;if("string"!=typeof e)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof e}\`.`);const s=document.createElement("textarea"),o=document.activeElement;s.value=e,s.setAttribute("readonly",""),s.style.contain="strict",s.style.position="absolute",s.style.left="-9999px",s.style.fontSize="12pt";const a=document.getSelection(),c=a.rangeCount>0&&a.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let i=!1;try{i=document.execCommand("copy")}catch{}s.remove(),c&&(a.removeAllRanges(),a.addRange(c)),o&&o.focus()}(t),a(!0),c.current=window.setTimeout((()=>{a(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(c.current)),[]),(0,v.jsx)("button",{type:"button","aria-label":o?(0,E.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,E.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,E.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,z.copyButton,o&&z.copyButtonCopied),onClick:r,children:(0,v.jsxs)("span",{className:z.copyButtonIcons,"aria-hidden":"true",children:[(0,v.jsx)(T,{className:z.copyButtonIcon}),(0,v.jsx)(S,{className:z.copyButtonSuccessIcon})]})})}function A(e){return(0,v.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,v.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 M={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function H(e){let{className:t,onClick:n,isEnabled:s}=e;const o=(0,E.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,v.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",t,s&&M.wordWrapButtonEnabled),"aria-label":o,title:o,children:(0,v.jsx)(A,{className:M.wordWrapButtonIcon,"aria-hidden":"true"})})}function R(e){let{children:t,className:n="",metastring:o,title:a,showLineNumbers:c,language:r}=e;const{prism:{defaultLanguage:u,magicComments:m}}=(0,l.L)(),h=function(e){return e?.toLowerCase()}(r??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??u),f=d(),g=function(){const[e,t]=(0,s.useState)(!1),[n,o]=(0,s.useState)(!1),a=(0,s.useRef)(null),c=(0,s.useCallback)((()=>{const n=a.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[a,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=a.current,n=e>t||a.current.querySelector("code").hasAttribute("style");o(n)}),[a]);return w(a,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:a,isEnabled:e,isCodeScrollable:n,toggle:c}}(),x=function(e){return e?.match(p)?.groups.title??""}(o)||a,{lineClassNames:b,code:y}=j(t,{metastring:o,language:h,magicComments:m}),C=c??function(e){return Boolean(e?.includes("showLineNumbers"))}(o);return(0,v.jsxs)(N,{as:"div",className:(0,i.Z)(n,h&&!n.includes(`language-${h}`)&&`language-${h}`),children:[x&&(0,v.jsx)("div",{className:k.codeBlockTitle,children:x}),(0,v.jsxs)("div",{className:k.codeBlockContent,children:[(0,v.jsx)(Z.y$,{theme:f,code:y,language:h??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:o,getTokenProps:a}=e;return(0,v.jsx)("pre",{tabIndex:0,ref:g.codeBlockRef,className:(0,i.Z)(t,k.codeBlock,"thin-scrollbar"),style:n,children:(0,v.jsx)("code",{className:(0,i.Z)(k.codeBlockLines,C&&k.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,v.jsx)(L,{line:e,getLineProps:o,getTokenProps:a,classNames:b[t],showLineNumbers:C},t)))})})}}),(0,v.jsxs)("div",{className:k.buttonGroup,children:[(g.isEnabled||g.isCodeScrollable)&&(0,v.jsx)(H,{className:k.codeButton,onClick:()=>g.toggle(),isEnabled:g.isEnabled}),(0,v.jsx)(I,{className:k.codeButton,code:y})]})]})]})}function V(e){let{children:t,...n}=e;const o=(0,c.Z)(),a=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),i="string"==typeof a?R:y;return(0,v.jsx)(i,{...n,children:a},String(o))}var W=n(9960);var $=n(6043);const P={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function q(e){return!!e&&("SUMMARY"===e.tagName||q(e.parentElement))}function D(e,t){return!!e&&(e===t||D(e.parentElement,t))}function O(e){let{summary:t,children:n,...o}=e;const a=(0,c.Z)(),r=(0,s.useRef)(null),{collapsed:l,setCollapsed:d}=(0,$.u)({initialState:!o.open}),[u,m]=(0,s.useState)(o.open),h=s.isValidElement(t)?t:(0,v.jsx)("summary",{children:t??"Details"});return(0,v.jsxs)("details",{...o,ref:r,open:u,"data-collapsed":l,className:(0,i.Z)(P.details,a&&P.isBrowser,o.className),onMouseDown:e=>{q(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;q(t)&&D(t,r.current)&&(e.preventDefault(),l?(d(!1),m(!0)):d(!0))},children:[h,(0,v.jsx)($.z,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{d(e),m(!e)},children:(0,v.jsx)("div",{className:P.collapsibleContent,children:n})})]})}const F={details:"details_b_Ee"},G="alert alert--info";function U(e){let{...t}=e;return(0,v.jsx)(O,{...t,className:(0,i.Z)(G,F.details,t.className)})}function J(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),o=(0,v.jsx)(v.Fragment,{children:t.filter((e=>e!==n))});return(0,v.jsx)(U,{...e,summary:n,children:o})}var Q=n(2503);function X(e){return(0,v.jsx)(Q.Z,{...e})}const Y={containsTaskList:"containsTaskList_mC6p"};function K(e){if(void 0!==e)return(0,i.Z)(e,e?.includes("contains-task-list")&&Y.containsTaskList)}const ee={img:"img_ev3q"};var te=n(9047);const ne={Head:a.Z,details:J,Details:J,code:function(e){return s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))?(0,v.jsx)("code",{...e}):(0,v.jsx)(V,{...e})},a:function(e){return(0,v.jsx)(W.Z,{...e})},pre:function(e){return(0,v.jsx)(v.Fragment,{children:e.children})},ul:function(e){return(0,v.jsx)("ul",{...e,className:K(e.className)})},img:function(e){return(0,v.jsx)("img",{loading:"lazy",...e,className:(t=e.className,(0,i.Z)(t,ee.img))});var t},h1:e=>(0,v.jsx)(X,{as:"h1",...e}),h2:e=>(0,v.jsx)(X,{as:"h2",...e}),h3:e=>(0,v.jsx)(X,{as:"h3",...e}),h4:e=>(0,v.jsx)(X,{as:"h4",...e}),h5:e=>(0,v.jsx)(X,{as:"h5",...e}),h6:e=>(0,v.jsx)(X,{as:"h6",...e}),admonition:te.Z,mermaid:()=>null};function se(e){let{children:t}=e;return(0,v.jsx)(o.Z,{components:ne,children:t})}},2244:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var s=n(6010),o=n(9960),a=n(5893);function c(e){const{permalink:t,title:n,subLabel:c,isNext:i}=e;return(0,a.jsxs)(o.Z,{className:(0,s.Z)("pagination-nav__link",i?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[c&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:c}),(0,a.jsx)("div",{className:"pagination-nav__label",children:n})]})}},3008:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});n(7294);var s=n(6010),o=n(9960);const a={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var c=n(5893);function i(e){let{permalink:t,label:n,count:i}=e;return(0,c.jsxs)(o.Z,{href:t,className:(0,s.Z)(a.tag,i?a.tagWithCount:a.tagRegular),children:[n,i&&(0,c.jsx)("span",{children:i})]})}},1526:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});n(7294);var s=n(6010),o=n(5999),a=n(3008);const c={tags:"tags_jXut",tag:"tag_QGVx"};var i=n(5893);function r(e){let{tags:t}=e;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("b",{children:(0,i.jsx)(o.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,i.jsx)("ul",{className:(0,s.Z)(c.tags,"padding--none","margin-left--sm"),children:t.map((e=>{let{label:t,permalink:n}=e;return(0,i.jsx)("li",{className:c.tag,children:(0,i.jsx)(a.Z,{label:t,permalink:n})},n)}))})]})}},7594:(e,t)=>{function n(e){let t,n=[];for(let s of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(s))n.push(parseInt(s,10));else if(t=s.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,s,o,a]=t;if(s&&a){s=parseInt(s),a=parseInt(a);const e=s<a?1:-1;"-"!==o&&".."!==o&&"\u2025"!==o||(a+=e);for(let t=s;t!==a;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},1151:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i,a:()=>c});var s=n(7294);const o={},a=s.createContext(o);function c(e){const t=s.useContext(a);return s.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(o):e.components||o:c(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7b2e8791.8224c8fa.js b/assets/js/7b2e8791.8224c8fa.js deleted file mode 100644 index 738131d19..000000000 --- a/assets/js/7b2e8791.8224c8fa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8804],{4137:(e,n,o)=>{o.d(n,{Zo:()=>d,kt:()=>h});var t=o(7294);function a(e,n,o){return n in e?Object.defineProperty(e,n,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[n]=o,e}function r(e,n){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),o.push.apply(o,t)}return o}function i(e){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?r(Object(o),!0).forEach((function(n){a(e,n,o[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(o,n))}))}return e}function p(e,n){if(null==e)return{};var o,t,a=function(e,n){if(null==e)return{};var o,t,a={},r=Object.keys(e);for(t=0;t<r.length;t++)o=r[t],n.indexOf(o)>=0||(a[o]=e[o]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(t=0;t<r.length;t++)o=r[t],n.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var l=t.createContext({}),s=function(e){var n=t.useContext(l),o=n;return e&&(o="function"==typeof e?e(n):i(i({},n),e)),o},d=function(e){var n=s(e.components);return t.createElement(l.Provider,{value:n},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return t.createElement(t.Fragment,{},n)}},m=t.forwardRef((function(e,n){var o=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),c=s(o),m=a,h=c["".concat(l,".").concat(m)]||c[m]||u[m]||r;return o?t.createElement(h,i(i({ref:n},d),{},{components:o})):t.createElement(h,i({ref:n},d))}));function h(e,n){var o=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var r=o.length,i=new Array(r);i[0]=m;var p={};for(var l in n)hasOwnProperty.call(n,l)&&(p[l]=n[l]);p.originalType=e,p[c]="string"==typeof e?e:a,i[1]=p;for(var s=2;s<r;s++)i[s]=o[s];return t.createElement.apply(null,i)}return t.createElement.apply(null,o)}m.displayName="MDXCreateElement"},5900:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>p,toc:()=>s});var t=o(7462),a=(o(7294),o(4137));const r={},i="Main commands",p={unversionedId:"dev/sdk/commands",id:"dev/sdk/commands",title:"Main commands",description:"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).",source:"@site/docs/dev/sdk/commands.md",sourceDirName:"dev/sdk",slug:"/dev/sdk/commands",permalink:"/docs/dev/sdk/commands",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/sdk/commands.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"DappnodeSDK",permalink:"/docs/dev/sdk/overview"},next:{title:"Docker compose file",permalink:"/docs/dev/references/docker-compose"}},l={},s=[{value:"<code>init</code>",id:"init",level:2},{value:"<code>build</code>",id:"build",level:2},{value:"<code>publish</code>",id:"publish",level:2}],d={toc:s},c="wrapper";function u(e){let{components:n,...o}=e;return(0,a.kt)(c,(0,t.Z)({},d,o,{components:n,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"main-commands"},"Main commands"),(0,a.kt)("p",null,"This page covers the top three functionalities of DappnodeSDK: ",(0,a.kt)("inlineCode",{parentName:"p"},"init"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"build"),", and ",(0,a.kt)("inlineCode",{parentName:"p"},"publish"),". Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs)."),(0,a.kt)("h2",{id:"init"},(0,a.kt)("inlineCode",{parentName:"h2"},"init")),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"init")," command allows you to initialize a new DAppNodePackage (DNP) repository. This is the first step when creating a new DNP. To use the ",(0,a.kt)("inlineCode",{parentName:"p"},"init")," command, run the following:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"npx @dappnode/dappnodesdk init\n")),(0,a.kt)("p",null,"The following are all the possible ",(0,a.kt)("inlineCode",{parentName:"p"},"init")," options:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-Options:"},' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -y, --yes Answer yes or the default option to all initializatio\n n questions [boolean]\n -f, --force Overwrite previous project if necessary [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]\n')),(0,a.kt)("h2",{id:"build"},(0,a.kt)("inlineCode",{parentName:"h2"},"build")),(0,a.kt)("p",null,"The build command is used to build a new version of a DNP. It generates the IPFS hash for the package. To use the build command, run the following:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"npx @dappnode/dappnodesdk build\n")),(0,a.kt)("p",null,"The following are all the possible ",(0,a.kt)("inlineCode",{parentName:"p"},"build")," options:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-Options:"},' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -p, --provider Specify an ipfs provider: "dappnode" (default), "infu\n ra", "localhost:5002" [default: "dappnode"]\n -t, --timeout Overrides default build timeout: "15h", "20min 15s",\n "5000". Specs npmjs.com/package/timestring\n [default: "60min"]\n --skip_save For testing only: do not save image to disk [boolean]\n --skip_upload For testing only: do not upload image from disk\n [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]\n')),(0,a.kt)("h2",{id:"publish"},(0,a.kt)("inlineCode",{parentName:"h2"},"publish")),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"publish")," command is used to publish a new version of the DNP in an Aragon Package Manager Repository. To use the ",(0,a.kt)("inlineCode",{parentName:"p"},"publish")," command, run the following:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"npx @dappnode/dappnodesdk publish\n")),(0,a.kt)("p",null,"The following are all the possible ",(0,a.kt)("inlineCode",{parentName:"p"},"publish")," options:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-Options:"},' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n --type Semver update type. Can also be provided with env\n RELEASE_TYPE=[type] or via TRAVIS_TAG=release (pat\n ch), TRAVIS_TAG=release/[type]\n [string] [choices: "major", "minor", "patch"]\n -p, --provider Specify a provider (overwrittes content_provider a\n nd eth_provider): "dappnode" (default), "infura",\n "http://localhost:8545" [string]\n --eth_provider Specify an eth provider: "dappnode" (default), "in\n fura", "localhost:8545"\n [string] [default: "dappnode"]\n --content_provider Specify an ipfs provider: "dappnode" (default), "i\n nfura", "http://localhost:5001"\n [string] [default: "dappnode"]\n --upload_to Specify where to upload the release\n [choices: "ipfs", "swarm"] [default: "ipfs"]\n -a, --developer_address If there is no existing repo for this DNP the publ\n ish command needs a developer address. If it is no\n t provided as an option a prompt will request it\n [string]\n -t, --timeout Overrides default build timeout: "15h", "20min 15s\n ", "5000". Specs npmjs.com/package/timestring\n [string]\n --github_release Publish the release on the Github repo specified i\n n the manifest. Requires a GITHUB_TOKEN ENV to aut\n henticate [boolean]\n --dappnode_team_preset Specific set of options used for internal DAppNode\n releases. Caution: options may change without not\n ice. [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]```\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7b2e8791.9388802d.js b/assets/js/7b2e8791.9388802d.js new file mode 100644 index 000000000..f5cb43d99 --- /dev/null +++ b/assets/js/7b2e8791.9388802d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8804],{2935:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>r,contentTitle:()=>d,default:()=>c,frontMatter:()=>t,metadata:()=>a,toc:()=>l});var i=o(5893),s=o(1151);const t={},d="Main commands",a={id:"dev/sdk/commands",title:"Main commands",description:"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).",source:"@site/docs/dev/sdk/commands.md",sourceDirName:"dev/sdk",slug:"/dev/sdk/commands",permalink:"/docs/dev/sdk/commands",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/sdk/commands.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"DappnodeSDK",permalink:"/docs/dev/sdk/overview"},next:{title:"Docker compose file",permalink:"/docs/dev/references/docker-compose"}},r={},l=[{value:"<code>init</code>",id:"init",level:2},{value:"<code>build</code>",id:"build",level:2},{value:"<code>publish</code>",id:"publish",level:2}];function p(e){const n={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"main-commands",children:"Main commands"}),"\n",(0,i.jsxs)(n.p,{children:["This page covers the top three functionalities of DappnodeSDK: ",(0,i.jsx)(n.code,{children:"init"}),", ",(0,i.jsx)(n.code,{children:"build"}),", and ",(0,i.jsx)(n.code,{children:"publish"}),". Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs)."]}),"\n",(0,i.jsx)(n.h2,{id:"init",children:(0,i.jsx)(n.code,{children:"init"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"init"})," command allows you to initialize a new DAppNodePackage (DNP) repository. This is the first step when creating a new DNP. To use the ",(0,i.jsx)(n.code,{children:"init"})," command, run the following:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"npx @dappnode/dappnodesdk init\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The following are all the possible ",(0,i.jsx)(n.code,{children:"init"})," options:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Options:",children:' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -y, --yes Answer yes or the default option to all initializatio\n n questions [boolean]\n -f, --force Overwrite previous project if necessary [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]\n'})}),"\n",(0,i.jsx)(n.h2,{id:"build",children:(0,i.jsx)(n.code,{children:"build"})}),"\n",(0,i.jsx)(n.p,{children:"The build command is used to build a new version of a DNP. It generates the IPFS hash for the package. To use the build command, run the following:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"npx @dappnode/dappnodesdk build\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The following are all the possible ",(0,i.jsx)(n.code,{children:"build"})," options:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Options:",children:' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n -p, --provider Specify an ipfs provider: "dappnode" (default), "infu\n ra", "localhost:5002" [default: "dappnode"]\n -t, --timeout Overrides default build timeout: "15h", "20min 15s",\n "5000". Specs npmjs.com/package/timestring\n [default: "60min"]\n --skip_save For testing only: do not save image to disk [boolean]\n --skip_upload For testing only: do not upload image from disk\n [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]\n'})}),"\n",(0,i.jsx)(n.h2,{id:"publish",children:(0,i.jsx)(n.code,{children:"publish"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"publish"})," command is used to publish a new version of the DNP in an Aragon Package Manager Repository. To use the ",(0,i.jsx)(n.code,{children:"publish"})," command, run the following:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"npx @dappnode/dappnodesdk publish\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The following are all the possible ",(0,i.jsx)(n.code,{children:"publish"})," options:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-Options:",children:' --dir, --directory Change the base directory [string] [default: "./"]\n --compose_file_name Compose file for docker-compose\n [string] [default: "docker-compose.yml"]\n --silent Silence output to terminal [boolean]\n --verbose, --debug Show more output to terminal [boolean]\n --type Semver update type. Can also be provided with env\n RELEASE_TYPE=[type] or via TRAVIS_TAG=release (pat\n ch), TRAVIS_TAG=release/[type]\n [string] [choices: "major", "minor", "patch"]\n -p, --provider Specify a provider (overwrittes content_provider a\n nd eth_provider): "dappnode" (default), "infura",\n "http://localhost:8545" [string]\n --eth_provider Specify an eth provider: "dappnode" (default), "in\n fura", "localhost:8545"\n [string] [default: "dappnode"]\n --content_provider Specify an ipfs provider: "dappnode" (default), "i\n nfura", "http://localhost:5001"\n [string] [default: "dappnode"]\n --upload_to Specify where to upload the release\n [choices: "ipfs", "swarm"] [default: "ipfs"]\n -a, --developer_address If there is no existing repo for this DNP the publ\n ish command needs a developer address. If it is no\n t provided as an option a prompt will request it\n [string]\n -t, --timeout Overrides default build timeout: "15h", "20min 15s\n ", "5000". Specs npmjs.com/package/timestring\n [string]\n --github_release Publish the release on the Github repo specified i\n n the manifest. Requires a GITHUB_TOKEN ENV to aut\n henticate [boolean]\n --dappnode_team_preset Specific set of options used for internal DAppNode\n releases. Caution: options may change without not\n ice. [boolean]\n -h, --help Show help [boolean]\n -v, --version Show version number [boolean]```\n'})})]})}function c(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(p,{...e})}):p(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>d});var i=o(7294);const s={},t=i.createContext(s);function d(e){const n=i.useContext(t);return i.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(s):e.components||s:d(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ef68c32.6a742b13.js b/assets/js/7ef68c32.6a742b13.js new file mode 100644 index 000000000..0dd8ec7c3 --- /dev/null +++ b/assets/js/7ef68c32.6a742b13.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3036],{611:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>r,default:()=>l,frontMatter:()=>a,metadata:()=>s,toc:()=>d});var n=o(5893),i=o(1151);const a={},r="NODEstream",s={id:"dao/node-stream",title:"NODEstream",description:'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."',source:"@site/docs/dao/node-stream.md",sourceDirName:"dao",slug:"/dao/node-stream",permalink:"/docs/dao/node-stream",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/node-stream.md",tags:[],version:"current",frontMatter:{}},u={},d=[];function c(e){const t={h1:"h1",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"nodestream",children:"NODEstream"}),"\n",(0,n.jsx)(t.p,{children:'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."'})]})}function l(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},1151:(e,t,o)=>{o.d(t,{Z:()=>s,a:()=>r});var n=o(7294);const i={},a=n.createContext(i);function r(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:r(e.components),n.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/7ef68c32.75c64508.js b/assets/js/7ef68c32.75c64508.js deleted file mode 100644 index 29ee9492a..000000000 --- a/assets/js/7ef68c32.75c64508.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3036],{4137:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=u(e,["components","mdxType","originalType","parentName"]),d=l(r),m=o,f=d["".concat(c,".").concat(m)]||d[m]||p[m]||a;return r?n.createElement(f,i(i({ref:t},s),{},{components:r})):n.createElement(f,i({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var u={};for(var c in t)hasOwnProperty.call(t,c)&&(u[c]=t[c]);u.originalType=e,u[d]="string"==typeof e?e:o,i[1]=u;for(var l=2;l<a;l++)i[l]=r[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},2495:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>u,toc:()=>l});var n=r(7462),o=(r(7294),r(4137));const a={},i="NODEstream",u={unversionedId:"dao/node-stream",id:"dao/node-stream",title:"NODEstream",description:'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."',source:"@site/docs/dao/node-stream.md",sourceDirName:"dao",slug:"/dao/node-stream",permalink:"/docs/dao/node-stream",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/node-stream.md",tags:[],version:"current",frontMatter:{}},c={},l=[],s={toc:l},d="wrapper";function p(e){let{components:t,...r}=e;return(0,o.kt)(d,(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"nodestream"},"NODEstream"),(0,o.kt)("p",null,'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."'))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/814f3328.3f452409.js b/assets/js/814f3328.3f452409.js deleted file mode 100644 index 2f77ed9f0..000000000 --- a/assets/js/814f3328.3f452409.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2535],{5641:o=>{o.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Welcome","permalink":"/blog/welcome"},{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"},{"title":"Long Blog Post","permalink":"/blog/long-blog-post"},{"title":"First Blog Post","permalink":"/blog/first-blog-post"}]}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.cf45552c.js b/assets/js/814f3328.cf45552c.js new file mode 100644 index 000000000..9bda3c4cc --- /dev/null +++ b/assets/js/814f3328.cf45552c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2535],{5641:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Welcome","permalink":"/blog/welcome","unlisted":false},{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post","unlisted":false},{"title":"Long Blog Post","permalink":"/blog/long-blog-post","unlisted":false},{"title":"First Blog Post","permalink":"/blog/first-blog-post","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/82063238.21b18e62.js b/assets/js/82063238.21b18e62.js deleted file mode 100644 index d02e997ef..000000000 --- a/assets/js/82063238.21b18e62.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9984],{4137:(e,n,t)=>{t.d(n,{Zo:()=>c,kt:()=>k});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)t=i[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=a.createContext({}),s=function(e){var n=a.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},c=function(e){var n=s(e.components);return a.createElement(p.Provider,{value:n},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},u=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=s(t),u=r,k=d["".concat(p,".").concat(u)]||d[u]||m[u]||i;return t?a.createElement(k,o(o({ref:n},c),{},{components:t})):a.createElement(k,o({ref:n},c))}));function k(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,o=new Array(i);o[0]=u;var l={};for(var p in n)hasOwnProperty.call(n,p)&&(l[p]=n[p]);l.originalType=e,l[d]="string"==typeof e?e:r,o[1]=l;for(var s=2;s<i;s++)o[s]=t[s];return a.createElement.apply(null,o)}return a.createElement.apply(null,t)}u.displayName="MDXCreateElement"},1504:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var a=t(7462),r=(t(7294),t(4137));const i={},o="Docker compose file",l={unversionedId:"dev/references/docker-compose",id:"dev/references/docker-compose",title:"Docker compose file",description:"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.",source:"@site/docs/dev/references/docker-compose.md",sourceDirName:"dev/references",slug:"/dev/references/docker-compose",permalink:"/docs/dev/references/docker-compose",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/references/docker-compose.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Main commands",permalink:"/docs/dev/sdk/commands"},next:{title:"Dappnode Package (DNP) manifest",permalink:"/docs/dev/references/manifest"}},p={},s=[{value:"Basic Example",id:"basic-example",level:2},{value:"Complex Example",id:"complex-example",level:2},{value:"Notable Features",id:"notable-features",level:3},{value:"Environment Variables",id:"environment-variables",level:4},{value:"The <code>UPSTREAM_VERSION</code> Argument",id:"the-upstream_version-argument",level:4},{value:"The <code>EXTRA_OPTS</code> Environment Variable",id:"the-extra_opts-environment-variable",level:4}],c={toc:s},d="wrapper";function m(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,a.Z)({},c,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"docker-compose-file"},"Docker compose file"),(0,r.kt)("p",null,"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the ",(0,r.kt)("inlineCode",{parentName:"p"},"docker-compose.yml")," file. In this guide, we will explain the typical structure of the ",(0,r.kt)("inlineCode",{parentName:"p"},"docker-compose.yml")," file for a Dappnode package."),(0,r.kt)("h2",{id:"basic-example"},"Basic Example"),(0,r.kt)("p",null,"A simple ",(0,r.kt)("inlineCode",{parentName:"p"},"docker-compose.yml")," file looks like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'version: "3.5"\nservices:\n test.public.dappnode.eth:\n build: .\n image: "test.public.dappnode.eth:0.1.0"\n restart: unless-stopped\n')),(0,r.kt)("p",null,"This example illustrates the basic elements, which include the version of the docker-compose file, services, and the service's basic attributes."),(0,r.kt)("h2",{id:"complex-example"},"Complex Example"),(0,r.kt)("p",null,"A more intricate ",(0,r.kt)("inlineCode",{parentName:"p"},"docker-compose.yml")," file could look like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'version: "3.5"\nservices:\n beacon-chain:\n build:\n context: beacon-chain\n args:\n UPSTREAM_VERSION: v4.0.7\n volumes:\n - "beacon-chain-data:/data"\n ports:\n - "12603:12603/tcp"\n - "12603:12603/udp"\n restart: unless-stopped\n environment:\n P2P_PORT: 12603\n CHECKPOINT_SYNC_URL: "https://checkpoints.mainnet.lukso.network"\n EXTRA_OPTS: ""\n LOG_VERBOSITY: info\n MIN_SYNC_PEERS: "0"\n MAX_PEERS: "250"\n SUBSCRIBE_ALL_SUBNETS: "true"\n validator:\n build:\n context: validator\n args:\n UPSTREAM_VERSION: v4.0.7\n volumes:\n - "validator-data:/data"\n restart: unless-stopped\n environment:\n LOG_VERBOSITY: info\n GRAFFITI: validating_from_DAppNode\n ENABLE_DOPPELGANGER: "true"\n EXTRA_OPTS: ""\nvolumes:\n beacon-chain-data: {}\n validator-data: {}\n')),(0,r.kt)("p",null,"In the complex example, you'll find:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Multiple services (like ",(0,r.kt)("inlineCode",{parentName:"li"},"beacon-chain")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"validator"),")."),(0,r.kt)("li",{parentName:"ul"},"Build arguments, such as the relevant ",(0,r.kt)("inlineCode",{parentName:"li"},"UPSTREAM_VERSION"),"."),(0,r.kt)("li",{parentName:"ul"},"Defined volumes, ports, and environment variables.")),(0,r.kt)("h3",{id:"notable-features"},"Notable Features"),(0,r.kt)("h4",{id:"environment-variables"},"Environment Variables"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"All environment variables (",(0,r.kt)("inlineCode",{parentName:"li"},"envs"),") defined in the ",(0,r.kt)("inlineCode",{parentName:"li"},"docker-compose.yml")," file will be visible in the package config post-installation. Users can modify these."),(0,r.kt)("li",{parentName:"ul"},"If the package has a ",(0,r.kt)("inlineCode",{parentName:"li"},"setup-wizard"),', those environment variables not set within it will be hidden by default in the configuration. Users can view these by selecting "Show advanced config".')),(0,r.kt)("h4",{id:"the-upstream_version-argument"},"The ",(0,r.kt)("inlineCode",{parentName:"h4"},"UPSTREAM_VERSION")," Argument"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"The ",(0,r.kt)("inlineCode",{parentName:"p"},"UPSTREAM_VERSION")," argument is mandatory if you wish to leverage GitHub actions that automatically create PRs when there's a new release in the upstream repository.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"In the Dockerfile, ",(0,r.kt)("inlineCode",{parentName:"p"},"UPSTREAM_VERSION")," is usually declared and used like this:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-dockerfile"},"ARG UPSTREAM_VERSION\nFROM consensys/teku:$UPSTREAM_VERSION\n")))),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"The ",(0,r.kt)("inlineCode",{parentName:"p"},"upstreamVersion")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"upstreamRepo")," fields need to be defined in the ",(0,r.kt)("inlineCode",{parentName:"p"},"dappnode_package.json")," file for the GitHub actions to work. Here is an example:"),(0,r.kt)("pre",{parentName:"admonition"},(0,r.kt)("code",{parentName:"pre"},'{\n ...\n "upstreamVersion": "23.8.0",\n "upstreamRepo": "ConsenSys/teku",\n ...\n}\n'))),(0,r.kt)("h4",{id:"the-extra_opts-environment-variable"},"The ",(0,r.kt)("inlineCode",{parentName:"h4"},"EXTRA_OPTS")," Environment Variable"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"EXTRA_OPTS")," is an environment variable that allows users to add any flags that might not have been included by default. ")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Here's a typical use case for ",(0,r.kt)("inlineCode",{parentName:"p"},"EXTRA_OPTS")," in the entrypoint script:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"exec /opt/teku/bin/teku \\\n --network=prater \\\n ...(omitting other flags) \\\n --log-destination=CONSOLE \\\n $EXTRA_OPTS\n")))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/82063238.7513d20c.js b/assets/js/82063238.7513d20c.js new file mode 100644 index 000000000..828eccaff --- /dev/null +++ b/assets/js/82063238.7513d20c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9984],{6789:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>a,toc:()=>c});var i=s(5893),o=s(1151);const t={},r="Docker compose file",a={id:"dev/references/docker-compose",title:"Docker compose file",description:"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.",source:"@site/docs/dev/references/docker-compose.md",sourceDirName:"dev/references",slug:"/dev/references/docker-compose",permalink:"/docs/dev/references/docker-compose",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/references/docker-compose.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Main commands",permalink:"/docs/dev/sdk/commands"},next:{title:"Dappnode Package (DNP) manifest",permalink:"/docs/dev/references/manifest"}},l={},c=[{value:"Basic Example",id:"basic-example",level:2},{value:"Complex Example",id:"complex-example",level:2},{value:"Notable Features",id:"notable-features",level:3},{value:"Environment Variables",id:"environment-variables",level:4},{value:"The <code>UPSTREAM_VERSION</code> Argument",id:"the-upstream_version-argument",level:4},{value:"The <code>EXTRA_OPTS</code> Environment Variable",id:"the-extra_opts-environment-variable",level:4}];function d(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"docker-compose-file",children:"Docker compose file"}),"\n",(0,i.jsxs)(n.p,{children:["Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," file. In this guide, we will explain the typical structure of the ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," file for a Dappnode package."]}),"\n",(0,i.jsx)(n.h2,{id:"basic-example",children:"Basic Example"}),"\n",(0,i.jsxs)(n.p,{children:["A simple ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," file looks like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'version: "3.5"\nservices:\n test.public.dappnode.eth:\n build: .\n image: "test.public.dappnode.eth:0.1.0"\n restart: unless-stopped\n'})}),"\n",(0,i.jsx)(n.p,{children:"This example illustrates the basic elements, which include the version of the docker-compose file, services, and the service's basic attributes."}),"\n",(0,i.jsx)(n.h2,{id:"complex-example",children:"Complex Example"}),"\n",(0,i.jsxs)(n.p,{children:["A more intricate ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," file could look like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:'version: "3.5"\nservices:\n beacon-chain:\n build:\n context: beacon-chain\n args:\n UPSTREAM_VERSION: v4.0.7\n volumes:\n - "beacon-chain-data:/data"\n ports:\n - "12603:12603/tcp"\n - "12603:12603/udp"\n restart: unless-stopped\n environment:\n P2P_PORT: 12603\n CHECKPOINT_SYNC_URL: "https://checkpoints.mainnet.lukso.network"\n EXTRA_OPTS: ""\n LOG_VERBOSITY: info\n MIN_SYNC_PEERS: "0"\n MAX_PEERS: "250"\n SUBSCRIBE_ALL_SUBNETS: "true"\n validator:\n build:\n context: validator\n args:\n UPSTREAM_VERSION: v4.0.7\n volumes:\n - "validator-data:/data"\n restart: unless-stopped\n environment:\n LOG_VERBOSITY: info\n GRAFFITI: validating_from_DAppNode\n ENABLE_DOPPELGANGER: "true"\n EXTRA_OPTS: ""\nvolumes:\n beacon-chain-data: {}\n validator-data: {}\n'})}),"\n",(0,i.jsx)(n.p,{children:"In the complex example, you'll find:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Multiple services (like ",(0,i.jsx)(n.code,{children:"beacon-chain"})," and ",(0,i.jsx)(n.code,{children:"validator"}),")."]}),"\n",(0,i.jsxs)(n.li,{children:["Build arguments, such as the relevant ",(0,i.jsx)(n.code,{children:"UPSTREAM_VERSION"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Defined volumes, ports, and environment variables."}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"notable-features",children:"Notable Features"}),"\n",(0,i.jsx)(n.h4,{id:"environment-variables",children:"Environment Variables"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["All environment variables (",(0,i.jsx)(n.code,{children:"envs"}),") defined in the ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," file will be visible in the package config post-installation. Users can modify these."]}),"\n",(0,i.jsxs)(n.li,{children:["If the package has a ",(0,i.jsx)(n.code,{children:"setup-wizard"}),', those environment variables not set within it will be hidden by default in the configuration. Users can view these by selecting "Show advanced config".']}),"\n"]}),"\n",(0,i.jsxs)(n.h4,{id:"the-upstream_version-argument",children:["The ",(0,i.jsx)(n.code,{children:"UPSTREAM_VERSION"})," Argument"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"UPSTREAM_VERSION"})," argument is mandatory if you wish to leverage GitHub actions that automatically create PRs when there's a new release in the upstream repository."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In the Dockerfile, ",(0,i.jsx)(n.code,{children:"UPSTREAM_VERSION"})," is usually declared and used like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-dockerfile",children:"ARG UPSTREAM_VERSION\nFROM consensys/teku:$UPSTREAM_VERSION\n"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"upstreamVersion"})," and ",(0,i.jsx)(n.code,{children:"upstreamRepo"})," fields need to be defined in the ",(0,i.jsx)(n.code,{children:"dappnode_package.json"})," file for the GitHub actions to work. Here is an example:"]}),(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:'{\n ...\n "upstreamVersion": "23.8.0",\n "upstreamRepo": "ConsenSys/teku",\n ...\n}\n'})})]}),"\n",(0,i.jsxs)(n.h4,{id:"the-extra_opts-environment-variable",children:["The ",(0,i.jsx)(n.code,{children:"EXTRA_OPTS"})," Environment Variable"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"EXTRA_OPTS"})," is an environment variable that allows users to add any flags that might not have been included by default."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Here's a typical use case for ",(0,i.jsx)(n.code,{children:"EXTRA_OPTS"})," in the entrypoint script:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"exec /opt/teku/bin/teku \\\n --network=prater \\\n ...(omitting other flags) \\\n --log-destination=CONSOLE \\\n $EXTRA_OPTS\n"})}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>r});var i=s(7294);const o={},t=i.createContext(o);function r(e){const n=i.useContext(t);return i.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(o):e.components||o:r(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8443.6d2e563d.js b/assets/js/8443.6d2e563d.js new file mode 100644 index 000000000..4b2d635bb --- /dev/null +++ b/assets/js/8443.6d2e563d.js @@ -0,0 +1,2 @@ +/*! For license information please see 8443.6d2e563d.js.LICENSE.txt */ +(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8443],{8443:(t,e,n)=>{"use strict";t.exports=n(295)},1228:(t,e,n)=>{"use strict";var i=n(2856),s={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},dropdown:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},suggestions:{display:"block"},suggestion:{whiteSpace:"nowrap",cursor:"pointer"},suggestionChild:{whiteSpace:"normal"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:"0"},defaultClasses:{root:"algolia-autocomplete",prefix:"aa",noPrefix:!1,dropdownMenu:"dropdown-menu",input:"input",hint:"hint",suggestions:"suggestions",suggestion:"suggestion",cursor:"cursor",dataset:"dataset",empty:"empty"},appendTo:{wrapper:{position:"absolute",zIndex:"100",display:"none"},input:{},inputWithNoHint:{},dropdown:{display:"block"}}};i.isMsie()&&i.mixin(s.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),i.isMsie()&&i.isMsie()<=7&&i.mixin(s.input,{marginTop:"-1px"}),t.exports=s},9050:(t,e,n)=>{"use strict";var i="aaDataset",s="aaValue",r="aaDatum",o=n(2856),a=n(4910),u=n(3561),c=n(1228),l=n(3109);function h(t){var e;(t=t||{}).templates=t.templates||{},t.source||o.error("missing source"),t.name&&(e=t.name,!/^[_a-zA-Z0-9-]+$/.test(e))&&o.error("invalid dataset name: "+t.name),this.query=null,this._isEmpty=!0,this.highlight=!!t.highlight,this.name=void 0===t.name||null===t.name?o.getUniqueId():t.name,this.source=t.source,this.displayFn=function(t){return t=t||"value",o.isFunction(t)?t:e;function e(e){return e[t]}}(t.display||t.displayKey),this.debounce=t.debounce,this.cache=!1!==t.cache,this.templates=function(t,e){return{empty:t.empty&&o.templatify(t.empty),header:t.header&&o.templatify(t.header),footer:t.footer&&o.templatify(t.footer),suggestion:t.suggestion||n};function n(t){return"<p>"+e(t)+"</p>"}}(t.templates,this.displayFn),this.css=o.mixin({},c,t.appendTo?c.appendTo:{}),this.cssClasses=t.cssClasses=o.mixin({},c.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||o.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix);var n=o.className(this.cssClasses.prefix,this.cssClasses.dataset);this.$el=t.$menu&&t.$menu.find(n+"-"+this.name).length>0?a.element(t.$menu.find(n+"-"+this.name)[0]):a.element(u.dataset.replace("%CLASS%",this.name).replace("%PREFIX%",this.cssClasses.prefix).replace("%DATASET%",this.cssClasses.dataset)),this.$menu=t.$menu,this.clearCachedSuggestions()}h.extractDatasetName=function(t){return a.element(t).data(i)},h.extractValue=function(t){return a.element(t).data(s)},h.extractDatum=function(t){var e=a.element(t).data(r);return"string"==typeof e&&(e=JSON.parse(e)),e},o.mixin(h.prototype,l,{_render:function(t,e){if(this.$el){var n,c=this,l=[].slice.call(arguments,2);if(this.$el.empty(),n=e&&e.length,this._isEmpty=!n,!n&&this.templates.empty)this.$el.html(function(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!0}].concat(e),c.templates.empty.apply(this,e)}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(n)this.$el.html(function(){var t,n,l=[].slice.call(arguments,0),h=this,p=u.suggestions.replace("%PREFIX%",this.cssClasses.prefix).replace("%SUGGESTIONS%",this.cssClasses.suggestions);return t=a.element(p).css(this.css.suggestions),n=o.map(e,f),t.append.apply(t,n),t;function f(t){var e,n=u.suggestion.replace("%PREFIX%",h.cssClasses.prefix).replace("%SUGGESTION%",h.cssClasses.suggestion);return(e=a.element(n).attr({role:"option",id:["option",Math.floor(1e8*Math.random())].join("-")}).append(c.templates.suggestion.apply(this,[t].concat(l)))).data(i,c.name),e.data(s,c.displayFn(t)||void 0),e.data(r,JSON.stringify(t)),e.children().each((function(){a.element(this).css(h.css.suggestionChild)})),e}}.apply(this,l)).prepend(c.templates.header?h.apply(this,l):null).append(c.templates.footer?p.apply(this,l):null);else if(e&&!Array.isArray(e))throw new TypeError("suggestions must be an array");this.$menu&&this.$menu.addClass(this.cssClasses.prefix+(n?"with":"without")+"-"+this.name).removeClass(this.cssClasses.prefix+(n?"without":"with")+"-"+this.name),this.trigger("rendered",t)}function h(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.header.apply(this,e)}function p(){var e=[].slice.call(arguments,0);return e=[{query:t,isEmpty:!n}].concat(e),c.templates.footer.apply(this,e)}},getRoot:function(){return this.$el},update:function(t){function e(e){if(!this.canceled&&t===this.query){var n=[].slice.call(arguments,1);this.cacheSuggestions(t,e,n),this._render.apply(this,[t,e].concat(n))}}if(this.query=t,this.canceled=!1,this.shouldFetchFromCache(t))e.apply(this,[this.cachedSuggestions].concat(this.cachedRenderExtraArgs));else{var n=this,i=function(){n.canceled||n.source(t,e.bind(n))};if(this.debounce){clearTimeout(this.debounceTimeout),this.debounceTimeout=setTimeout((function(){n.debounceTimeout=null,i()}),this.debounce)}else i()}},cacheSuggestions:function(t,e,n){this.cachedQuery=t,this.cachedSuggestions=e,this.cachedRenderExtraArgs=n},shouldFetchFromCache:function(t){return this.cache&&this.cachedQuery===t&&this.cachedSuggestions&&this.cachedSuggestions.length},clearCachedSuggestions:function(){delete this.cachedQuery,delete this.cachedSuggestions,delete this.cachedRenderExtraArgs},cancel:function(){this.canceled=!0},clear:function(){this.$el&&(this.cancel(),this.$el.empty(),this.trigger("rendered",""))},isEmpty:function(){return this._isEmpty},destroy:function(){this.clearCachedSuggestions(),this.$el=null}}),t.exports=h},3354:(t,e,n)=>{"use strict";var i=n(2856),s=n(4910),r=n(3109),o=n(9050),a=n(1228);function u(t){var e,n,r,o=this;(t=t||{}).menu||i.error("menu is required"),i.isArray(t.datasets)||i.isObject(t.datasets)||i.error("1 or more datasets required"),t.datasets||i.error("datasets is required"),this.isOpen=!1,this.isEmpty=!0,this.minLength=t.minLength||0,this.templates={},this.appendTo=t.appendTo||!1,this.css=i.mixin({},a,t.appendTo?a.appendTo:{}),this.cssClasses=t.cssClasses=i.mixin({},a.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix||i.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),e=i.bind(this._onSuggestionClick,this),n=i.bind(this._onSuggestionMouseEnter,this),r=i.bind(this._onSuggestionMouseLeave,this);var c=i.className(this.cssClasses.prefix,this.cssClasses.suggestion);this.$menu=s.element(t.menu).on("mouseenter.aa",c,n).on("mouseleave.aa",c,r).on("click.aa",c,e),this.$container=t.appendTo?t.wrapper:this.$menu,t.templates&&t.templates.header&&(this.templates.header=i.templatify(t.templates.header),this.$menu.prepend(this.templates.header())),t.templates&&t.templates.empty&&(this.templates.empty=i.templatify(t.templates.empty),this.$empty=s.element('<div class="'+i.className(this.cssClasses.prefix,this.cssClasses.empty,!0)+'"></div>'),this.$menu.append(this.$empty),this.$empty.hide()),this.datasets=i.map(t.datasets,(function(e){return function(t,e,n){return new u.Dataset(i.mixin({$menu:t,cssClasses:n},e))}(o.$menu,e,t.cssClasses)})),i.each(this.datasets,(function(t){var e=t.getRoot();e&&0===e.parent().length&&o.$menu.append(e),t.onSync("rendered",o._onRendered,o)})),t.templates&&t.templates.footer&&(this.templates.footer=i.templatify(t.templates.footer),this.$menu.append(this.templates.footer()));var l=this;s.element(window).resize((function(){l._redraw()}))}i.mixin(u.prototype,r,{_onSuggestionClick:function(t){this.trigger("suggestionClicked",s.element(t.currentTarget))},_onSuggestionMouseEnter:function(t){var e=s.element(t.currentTarget);if(!e.hasClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0))){this._removeCursor();var n=this;setTimeout((function(){n._setCursor(e,!1)}),0)}},_onSuggestionMouseLeave:function(t){if(t.relatedTarget&&s.element(t.relatedTarget).closest("."+i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).length>0)return;this._removeCursor(),this.trigger("cursorRemoved")},_onRendered:function(t,e){if(this.isEmpty=i.every(this.datasets,(function(t){return t.isEmpty()})),this.isEmpty)if(e.length>=this.minLength&&this.trigger("empty"),this.$empty)if(e.length<this.minLength)this._hide();else{var n=this.templates.empty({query:this.datasets[0]&&this.datasets[0].query});this.$empty.html(n),this.$empty.show(),this._show()}else i.any(this.datasets,(function(t){return t.templates&&t.templates.empty}))?e.length<this.minLength?this._hide():this._show():this._hide();else this.isOpen&&(this.$empty&&(this.$empty.empty(),this.$empty.hide()),e.length>=this.minLength?this._show():this._hide());this.trigger("datasetRendered")},_hide:function(){this.$container.hide()},_show:function(){this.$container.css("display","block"),this._redraw(),this.trigger("shown")},_redraw:function(){this.isOpen&&this.appendTo&&this.trigger("redrawn")},_getSuggestions:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.suggestion))},_getCursor:function(){return this.$menu.find(i.className(this.cssClasses.prefix,this.cssClasses.cursor)).first()},_setCursor:function(t,e){t.first().addClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).attr("aria-selected","true"),this.trigger("cursorMoved",e)},_removeCursor:function(){this._getCursor().removeClass(i.className(this.cssClasses.prefix,this.cssClasses.cursor,!0)).removeAttr("aria-selected")},_moveCursor:function(t){var e,n,i,s;this.isOpen&&(n=this._getCursor(),e=this._getSuggestions(),this._removeCursor(),-1!==(i=((i=e.index(n)+t)+1)%(e.length+1)-1)?(i<-1&&(i=e.length-1),this._setCursor(s=e.eq(i),!0),this._ensureVisible(s)):this.trigger("cursorRemoved"))},_ensureVisible:function(t){var e,n,i,s;n=(e=t.position().top)+t.height()+parseInt(t.css("margin-top"),10)+parseInt(t.css("margin-bottom"),10),i=this.$menu.scrollTop(),s=this.$menu.height()+parseInt(this.$menu.css("padding-top"),10)+parseInt(this.$menu.css("padding-bottom"),10),e<0?this.$menu.scrollTop(i+e):s<n&&this.$menu.scrollTop(i+(n-s))},close:function(){this.isOpen&&(this.isOpen=!1,this._removeCursor(),this._hide(),this.trigger("closed"))},open:function(){this.isOpen||(this.isOpen=!0,this.isEmpty||this._show(),this.trigger("opened"))},setLanguageDirection:function(t){this.$menu.css("ltr"===t?this.css.ltr:this.css.rtl)},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getDatumForSuggestion:function(t){var e=null;return t.length&&(e={raw:o.extractDatum(t),value:o.extractValue(t),datasetName:o.extractDatasetName(t)}),e},getCurrentCursor:function(){return this._getCursor().first()},getDatumForCursor:function(){return this.getDatumForSuggestion(this._getCursor().first())},getDatumForTopSuggestion:function(){return this.getDatumForSuggestion(this._getSuggestions().first())},cursorTopSuggestion:function(){this._setCursor(this._getSuggestions().first(),!1)},update:function(t){i.each(this.datasets,(function(e){e.update(t)}))},empty:function(){i.each(this.datasets,(function(t){t.clear()})),this.isEmpty=!0},isVisible:function(){return this.isOpen&&!this.isEmpty},destroy:function(){this.$menu.off(".aa"),this.$menu=null,i.each(this.datasets,(function(t){t.destroy()}))}}),u.Dataset=o,t.exports=u},50:(t,e,n)=>{"use strict";var i=n(2856),s=n(4910);function r(t){t&&t.el||i.error("EventBus initialized without el"),this.$el=s.element(t.el)}i.mixin(r.prototype,{trigger:function(t,e,n,s){var r=i.Event("autocomplete:"+t);return this.$el.trigger(r,[e,n,s]),r}}),t.exports=r},3109:(t,e,n)=>{"use strict";var i=n(624),s=/\s+/;function r(t,e,n,i){var r;if(!n)return this;for(e=e.split(s),n=i?function(t,e){return t.bind?t.bind(e):function(){t.apply(e,[].slice.call(arguments,0))}}(n,i):n,this._callbacks=this._callbacks||{};r=e.shift();)this._callbacks[r]=this._callbacks[r]||{sync:[],async:[]},this._callbacks[r][t].push(n);return this}function o(t,e,n){return function(){for(var i,s=0,r=t.length;!i&&s<r;s+=1)i=!1===t[s].apply(e,n);return!i}}t.exports={onSync:function(t,e,n){return r.call(this,"sync",t,e,n)},onAsync:function(t,e,n){return r.call(this,"async",t,e,n)},off:function(t){var e;if(!this._callbacks)return this;t=t.split(s);for(;e=t.shift();)delete this._callbacks[e];return this},trigger:function(t){var e,n,r,a,u;if(!this._callbacks)return this;t=t.split(s),r=[].slice.call(arguments,1);for(;(e=t.shift())&&(n=this._callbacks[e]);)a=o(n.sync,this,[e].concat(r)),u=o(n.async,this,[e].concat(r)),a()&&i(u);return this}}},3561:t=>{"use strict";t.exports={wrapper:'<span class="%ROOT%"></span>',dropdown:'<span class="%PREFIX%%DROPDOWN_MENU%"></span>',dataset:'<div class="%PREFIX%%DATASET%-%CLASS%"></div>',suggestions:'<span class="%PREFIX%%SUGGESTIONS%"></span>',suggestion:'<div class="%PREFIX%%SUGGESTION%"></div>'}},2534:(t,e,n)=>{"use strict";var i;i={9:"tab",27:"esc",37:"left",39:"right",13:"enter",38:"up",40:"down"};var s=n(2856),r=n(4910),o=n(3109);function a(t){var e,n,o,a,u,c=this;(t=t||{}).input||s.error("input is missing"),e=s.bind(this._onBlur,this),n=s.bind(this._onFocus,this),o=s.bind(this._onKeydown,this),a=s.bind(this._onInput,this),this.$hint=r.element(t.hint),this.$input=r.element(t.input).on("blur.aa",e).on("focus.aa",n).on("keydown.aa",o),0===this.$hint.length&&(this.setHint=this.getHint=this.clearHint=this.clearHintIfInvalid=s.noop),s.isMsie()?this.$input.on("keydown.aa keypress.aa cut.aa paste.aa",(function(t){i[t.which||t.keyCode]||s.defer(s.bind(c._onInput,c,t))})):this.$input.on("input.aa",a),this.query=this.$input.val(),this.$overflowHelper=(u=this.$input,r.element('<pre aria-hidden="true"></pre>').css({position:"absolute",visibility:"hidden",whiteSpace:"pre",fontFamily:u.css("font-family"),fontSize:u.css("font-size"),fontStyle:u.css("font-style"),fontVariant:u.css("font-variant"),fontWeight:u.css("font-weight"),wordSpacing:u.css("word-spacing"),letterSpacing:u.css("letter-spacing"),textIndent:u.css("text-indent"),textRendering:u.css("text-rendering"),textTransform:u.css("text-transform")}).insertAfter(u))}function u(t){return t.altKey||t.ctrlKey||t.metaKey||t.shiftKey}a.normalizeQuery=function(t){return(t||"").replace(/^\s*/g,"").replace(/\s{2,}/g," ")},s.mixin(a.prototype,o,{_onBlur:function(){this.resetInputValue(),this.$input.removeAttr("aria-activedescendant"),this.trigger("blurred")},_onFocus:function(){this.trigger("focused")},_onKeydown:function(t){var e=i[t.which||t.keyCode];this._managePreventDefault(e,t),e&&this._shouldTrigger(e,t)&&this.trigger(e+"Keyed",t)},_onInput:function(){this._checkInputValue()},_managePreventDefault:function(t,e){var n,i,s;switch(t){case"tab":i=this.getHint(),s=this.getInputValue(),n=i&&i!==s&&!u(e);break;case"up":case"down":n=!u(e);break;default:n=!1}n&&e.preventDefault()},_shouldTrigger:function(t,e){var n;if("tab"===t)n=!u(e);else n=!0;return n},_checkInputValue:function(){var t,e,n,i,s;t=this.getInputValue(),i=t,s=this.query,n=!(!(e=a.normalizeQuery(i)===a.normalizeQuery(s))||!this.query)&&this.query.length!==t.length,this.query=t,e?n&&this.trigger("whitespaceChanged",this.query):this.trigger("queryChanged",this.query)},focus:function(){this.$input.focus()},blur:function(){this.$input.blur()},getQuery:function(){return this.query},setQuery:function(t){this.query=t},getInputValue:function(){return this.$input.val()},setInputValue:function(t,e){void 0===t&&(t=this.query),this.$input.val(t),e?this.clearHint():this._checkInputValue()},expand:function(){this.$input.attr("aria-expanded","true")},collapse:function(){this.$input.attr("aria-expanded","false")},setActiveDescendant:function(t){this.$input.attr("aria-activedescendant",t)},removeActiveDescendant:function(){this.$input.removeAttr("aria-activedescendant")},resetInputValue:function(){this.setInputValue(this.query,!0)},getHint:function(){return this.$hint.val()},setHint:function(t){this.$hint.val(t)},clearHint:function(){this.setHint("")},clearHintIfInvalid:function(){var t,e,n;n=(t=this.getInputValue())!==(e=this.getHint())&&0===e.indexOf(t),""!==t&&n&&!this.hasOverflow()||this.clearHint()},getLanguageDirection:function(){return(this.$input.css("direction")||"ltr").toLowerCase()},hasOverflow:function(){var t=this.$input.width()-2;return this.$overflowHelper.text(this.getInputValue()),this.$overflowHelper.width()>=t},isCursorAtEnd:function(){var t,e,n;return t=this.$input.val().length,e=this.$input[0].selectionStart,s.isNumber(e)?e===t:!document.selection||((n=document.selection.createRange()).moveStart("character",-t),t===n.text.length)},destroy:function(){this.$hint.off(".aa"),this.$input.off(".aa"),this.$hint=this.$input=this.$overflowHelper=null}}),t.exports=a},6549:(t,e,n)=>{"use strict";var i="aaAttrs",s=n(2856),r=n(4910),o=n(50),a=n(2534),u=n(3354),c=n(3561),l=n(1228);function h(t){var e,n;if((t=t||{}).input||s.error("missing input"),this.isActivated=!1,this.debug=!!t.debug,this.autoselect=!!t.autoselect,this.autoselectOnBlur=!!t.autoselectOnBlur,this.openOnFocus=!!t.openOnFocus,this.minLength=s.isNumber(t.minLength)?t.minLength:1,this.autoWidth=void 0===t.autoWidth||!!t.autoWidth,this.clearOnSelected=!!t.clearOnSelected,this.tabAutocomplete=void 0===t.tabAutocomplete||!!t.tabAutocomplete,t.hint=!!t.hint,t.hint&&t.appendTo)throw new Error("[autocomplete.js] hint and appendTo options can't be used at the same time");this.css=t.css=s.mixin({},l,t.appendTo?l.appendTo:{}),this.cssClasses=t.cssClasses=s.mixin({},l.defaultClasses,t.cssClasses||{}),this.cssClasses.prefix=t.cssClasses.formattedPrefix=s.formatPrefix(this.cssClasses.prefix,this.cssClasses.noPrefix),this.listboxId=t.listboxId=[this.cssClasses.root,"listbox",s.getUniqueId()].join("-");var a=function(t){var e,n,o,a;e=r.element(t.input),n=r.element(c.wrapper.replace("%ROOT%",t.cssClasses.root)).css(t.css.wrapper),t.appendTo||"block"!==e.css("display")||"table"!==e.parent().css("display")||n.css("display","table-cell");var u=c.dropdown.replace("%PREFIX%",t.cssClasses.prefix).replace("%DROPDOWN_MENU%",t.cssClasses.dropdownMenu);o=r.element(u).css(t.css.dropdown).attr({role:"listbox",id:t.listboxId}),t.templates&&t.templates.dropdownMenu&&o.html(s.templatify(t.templates.dropdownMenu)());a=e.clone().css(t.css.hint).css(function(t){return{backgroundAttachment:t.css("background-attachment"),backgroundClip:t.css("background-clip"),backgroundColor:t.css("background-color"),backgroundImage:t.css("background-image"),backgroundOrigin:t.css("background-origin"),backgroundPosition:t.css("background-position"),backgroundRepeat:t.css("background-repeat"),backgroundSize:t.css("background-size")}}(e)),a.val("").addClass(s.className(t.cssClasses.prefix,t.cssClasses.hint,!0)).removeAttr("id name placeholder required").prop("readonly",!0).attr({"aria-hidden":"true",autocomplete:"off",spellcheck:"false",tabindex:-1}),a.removeData&&a.removeData();e.data(i,{"aria-autocomplete":e.attr("aria-autocomplete"),"aria-expanded":e.attr("aria-expanded"),"aria-owns":e.attr("aria-owns"),autocomplete:e.attr("autocomplete"),dir:e.attr("dir"),role:e.attr("role"),spellcheck:e.attr("spellcheck"),style:e.attr("style"),type:e.attr("type")}),e.addClass(s.className(t.cssClasses.prefix,t.cssClasses.input,!0)).attr({autocomplete:"off",spellcheck:!1,role:"combobox","aria-autocomplete":t.datasets&&t.datasets[0]&&t.datasets[0].displayKey?"both":"list","aria-expanded":"false","aria-label":t.ariaLabel,"aria-owns":t.listboxId}).css(t.hint?t.css.input:t.css.inputWithNoHint);try{e.attr("dir")||e.attr("dir","auto")}catch(l){}return n=t.appendTo?n.appendTo(r.element(t.appendTo).eq(0)).eq(0):e.wrap(n).parent(),n.prepend(t.hint?a:null).append(o),{wrapper:n,input:e,hint:a,menu:o}}(t);this.$node=a.wrapper;var u=this.$input=a.input;e=a.menu,n=a.hint,t.dropdownMenuContainer&&r.element(t.dropdownMenuContainer).css("position","relative").append(e.css("top","0")),u.on("blur.aa",(function(t){var n=document.activeElement;s.isMsie()&&(e[0]===n||e[0].contains(n))&&(t.preventDefault(),t.stopImmediatePropagation(),s.defer((function(){u.focus()})))})),e.on("mousedown.aa",(function(t){t.preventDefault()})),this.eventBus=t.eventBus||new o({el:u}),this.dropdown=new h.Dropdown({appendTo:t.appendTo,wrapper:this.$node,menu:e,datasets:t.datasets,templates:t.templates,cssClasses:t.cssClasses,minLength:this.minLength}).onSync("suggestionClicked",this._onSuggestionClicked,this).onSync("cursorMoved",this._onCursorMoved,this).onSync("cursorRemoved",this._onCursorRemoved,this).onSync("opened",this._onOpened,this).onSync("closed",this._onClosed,this).onSync("shown",this._onShown,this).onSync("empty",this._onEmpty,this).onSync("redrawn",this._onRedrawn,this).onAsync("datasetRendered",this._onDatasetRendered,this),this.input=new h.Input({input:u,hint:n}).onSync("focused",this._onFocused,this).onSync("blurred",this._onBlurred,this).onSync("enterKeyed",this._onEnterKeyed,this).onSync("tabKeyed",this._onTabKeyed,this).onSync("escKeyed",this._onEscKeyed,this).onSync("upKeyed",this._onUpKeyed,this).onSync("downKeyed",this._onDownKeyed,this).onSync("leftKeyed",this._onLeftKeyed,this).onSync("rightKeyed",this._onRightKeyed,this).onSync("queryChanged",this._onQueryChanged,this).onSync("whitespaceChanged",this._onWhitespaceChanged,this),this._bindKeyboardShortcuts(t),this._setLanguageDirection()}s.mixin(h.prototype,{_bindKeyboardShortcuts:function(t){if(t.keyboardShortcuts){var e=this.$input,n=[];s.each(t.keyboardShortcuts,(function(t){"string"==typeof t&&(t=t.toUpperCase().charCodeAt(0)),n.push(t)})),r.element(document).keydown((function(t){var i=t.target||t.srcElement,s=i.tagName;if(!i.isContentEditable&&"INPUT"!==s&&"SELECT"!==s&&"TEXTAREA"!==s){var r=t.which||t.keyCode;-1!==n.indexOf(r)&&(e.focus(),t.stopPropagation(),t.preventDefault())}}))}},_onSuggestionClicked:function(t,e){var n;(n=this.dropdown.getDatumForSuggestion(e))&&this._select(n,{selectionMethod:"click"})},_onCursorMoved:function(t,e){var n=this.dropdown.getDatumForCursor(),i=this.dropdown.getCurrentCursor().attr("id");this.input.setActiveDescendant(i),n&&(e&&this.input.setInputValue(n.value,!0),this.eventBus.trigger("cursorchanged",n.raw,n.datasetName))},_onCursorRemoved:function(){this.input.resetInputValue(),this._updateHint(),this.eventBus.trigger("cursorremoved")},_onDatasetRendered:function(){this._updateHint(),this.eventBus.trigger("updated")},_onOpened:function(){this._updateHint(),this.input.expand(),this.eventBus.trigger("opened")},_onEmpty:function(){this.eventBus.trigger("empty")},_onRedrawn:function(){this.$node.css("top","0px"),this.$node.css("left","0px");var t=this.$input[0].getBoundingClientRect();this.autoWidth&&this.$node.css("width",t.width+"px");var e=this.$node[0].getBoundingClientRect(),n=t.bottom-e.top;this.$node.css("top",n+"px");var i=t.left-e.left;this.$node.css("left",i+"px"),this.eventBus.trigger("redrawn")},_onShown:function(){this.eventBus.trigger("shown"),this.autoselect&&this.dropdown.cursorTopSuggestion()},_onClosed:function(){this.input.clearHint(),this.input.removeActiveDescendant(),this.input.collapse(),this.eventBus.trigger("closed")},_onFocused:function(){if(this.isActivated=!0,this.openOnFocus){var t=this.input.getQuery();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty(),this.dropdown.open()}},_onBlurred:function(){var t,e;t=this.dropdown.getDatumForCursor(),e=this.dropdown.getDatumForTopSuggestion();var n={selectionMethod:"blur"};this.debug||(this.autoselectOnBlur&&t?this._select(t,n):this.autoselectOnBlur&&e?this._select(e,n):(this.isActivated=!1,this.dropdown.empty(),this.dropdown.close()))},_onEnterKeyed:function(t,e){var n,i;n=this.dropdown.getDatumForCursor(),i=this.dropdown.getDatumForTopSuggestion();var s={selectionMethod:"enterKey"};n?(this._select(n,s),e.preventDefault()):this.autoselect&&i&&(this._select(i,s),e.preventDefault())},_onTabKeyed:function(t,e){if(this.tabAutocomplete){var n;(n=this.dropdown.getDatumForCursor())?(this._select(n,{selectionMethod:"tabKey"}),e.preventDefault()):this._autocomplete(!0)}else this.dropdown.close()},_onEscKeyed:function(){this.dropdown.close(),this.input.resetInputValue()},_onUpKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorUp(),this.dropdown.open()},_onDownKeyed:function(){var t=this.input.getQuery();this.dropdown.isEmpty&&t.length>=this.minLength?this.dropdown.update(t):this.dropdown.moveCursorDown(),this.dropdown.open()},_onLeftKeyed:function(){"rtl"===this.dir&&this._autocomplete()},_onRightKeyed:function(){"ltr"===this.dir&&this._autocomplete()},_onQueryChanged:function(t,e){this.input.clearHintIfInvalid(),e.length>=this.minLength?this.dropdown.update(e):this.dropdown.empty(),this.dropdown.open(),this._setLanguageDirection()},_onWhitespaceChanged:function(){this._updateHint(),this.dropdown.open()},_setLanguageDirection:function(){var t=this.input.getLanguageDirection();this.dir!==t&&(this.dir=t,this.$node.css("direction",t),this.dropdown.setLanguageDirection(t))},_updateHint:function(){var t,e,n,i,r;(t=this.dropdown.getDatumForTopSuggestion())&&this.dropdown.isVisible()&&!this.input.hasOverflow()?(e=this.input.getInputValue(),n=a.normalizeQuery(e),i=s.escapeRegExChars(n),(r=new RegExp("^(?:"+i+")(.+$)","i").exec(t.value))?this.input.setHint(e+r[1]):this.input.clearHint()):this.input.clearHint()},_autocomplete:function(t){var e,n,i,s;e=this.input.getHint(),n=this.input.getQuery(),i=t||this.input.isCursorAtEnd(),e&&n!==e&&i&&((s=this.dropdown.getDatumForTopSuggestion())&&this.input.setInputValue(s.value),this.eventBus.trigger("autocompleted",s.raw,s.datasetName))},_select:function(t,e){void 0!==t.value&&this.input.setQuery(t.value),this.clearOnSelected?this.setVal(""):this.input.setInputValue(t.value,!0),this._setLanguageDirection(),!1===this.eventBus.trigger("selected",t.raw,t.datasetName,e).isDefaultPrevented()&&(this.dropdown.close(),s.defer(s.bind(this.dropdown.empty,this.dropdown)))},open:function(){if(!this.isActivated){var t=this.input.getInputValue();t.length>=this.minLength?this.dropdown.update(t):this.dropdown.empty()}this.dropdown.open()},close:function(){this.dropdown.close()},setVal:function(t){t=s.toStr(t),this.isActivated?this.input.setInputValue(t):(this.input.setQuery(t),this.input.setInputValue(t,!0)),this._setLanguageDirection()},getVal:function(){return this.input.getQuery()},destroy:function(){this.input.destroy(),this.dropdown.destroy(),function(t,e){var n=t.find(s.className(e.prefix,e.input));s.each(n.data(i),(function(t,e){void 0===t?n.removeAttr(e):n.attr(e,t)})),n.detach().removeClass(s.className(e.prefix,e.input,!0)).insertAfter(t),n.removeData&&n.removeData(i);t.remove()}(this.$node,this.cssClasses),this.$node=null},getWrapper:function(){return this.dropdown.$container[0]}}),h.Dropdown=u,h.Input=a,h.sources=n(8840),t.exports=h},4910:t=>{"use strict";t.exports={element:null}},6177:t=>{"use strict";t.exports=function(t){var e=t.match(/Algolia for JavaScript \((\d+\.)(\d+\.)(\d+)\)/)||t.match(/Algolia for vanilla JavaScript (\d+\.)(\d+\.)(\d+)/);if(e)return[e[1],e[2],e[3]]}},2856:(t,e,n)=>{"use strict";var i,s=n(8820),r=n(4910);function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}t.exports={isArray:null,isFunction:null,isObject:null,bind:null,each:null,map:null,mixin:null,isMsie:function(t){if(void 0===t&&(t=navigator.userAgent),/(msie|trident)/i.test(t)){var e=t.match(/(msie |rv:)(\d+(.\d+)?)/i);if(e)return e[2]}return!1},escapeRegExChars:function(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isNumber:function(t){return"number"==typeof t},toStr:function(t){return null==t?"":t+""},cloneDeep:function(t){var e=this.mixin({},t),n=this;return this.each(e,(function(t,i){t&&(n.isArray(t)?e[i]=[].concat(t):n.isObject(t)&&(e[i]=n.cloneDeep(t)))})),e},error:function(t){throw new Error(t)},every:function(t,e){var n=!0;return t?(this.each(t,(function(i,s){n&&(n=e.call(null,i,s,t)&&n)})),!!n):n},any:function(t,e){var n=!1;return t?(this.each(t,(function(i,s){if(e.call(null,i,s,t))return n=!0,!1})),n):n},getUniqueId:(i=0,function(){return i++}),templatify:function(t){if(this.isFunction(t))return t;var e=r.element(t);return"SCRIPT"===e.prop("tagName")?function(){return e.text()}:function(){return String(t)}},defer:function(t){setTimeout(t,0)},noop:function(){},formatPrefix:function(t,e){return e?"":t+"-"},className:function(t,e,n){return n?t+e:"."+s(t+e,{isIdentifier:!0})},escapeHighlightedString:function(t,e,n){e=e||"<em>";var i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"</em>";var s=document.createElement("div");s.appendChild(document.createTextNode(n));var r=document.createElement("div");return r.appendChild(document.createTextNode(t)),r.innerHTML.replace(RegExp(o(i.innerHTML),"g"),e).replace(RegExp(o(s.innerHTML),"g"),n)}}},9983:(t,e,n)=>{"use strict";var i=n(2856),s=n(533),r=n(6177);var o,a,u=(o=[],a=window.Promise.resolve(),function(t,e){return function(n,s){(function(t,e){return window.Promise.resolve().then((function(){return o.length&&(a=t.search(o),o=[]),a})).then((function(t){if(t)return t.results[e]}))})(t.as,o.push({indexName:t.indexName,query:n,params:e})-1).then((function(t){t&&s(t.hits,t)})).catch((function(t){i.error(t.message)}))}});t.exports=function(t,e){var n=r(t.as._ua);if(n&&n[0]>=3&&n[1]>20){var i="autocomplete.js "+s;-1===t.as._ua.indexOf(i)&&(t.as._ua+="; "+i)}return u(t,e)}},8840:(t,e,n)=>{"use strict";t.exports={hits:n(9983),popularIn:n(4445)}},4445:(t,e,n)=>{"use strict";var i=n(2856),s=n(533),r=n(6177);t.exports=function(t,e,n,o){var a=r(t.as._ua);if(a&&a[0]>=3&&a[1]>20&&((e=e||{}).additionalUA="autocomplete.js "+s),!n.source)return i.error("Missing 'source' key");var u=i.isFunction(n.source)?n.source:function(t){return t[n.source]};if(!n.index)return i.error("Missing 'index' key");var c=n.index;return o=o||{},function(a,l){t.search(a,e,(function(t,a){if(t)i.error(t.message);else{if(a.hits.length>0){var h=a.hits[0],p=i.mixin({hitsPerPage:0},n);delete p.source,delete p.index;var f=r(c.as._ua);return f&&f[0]>=3&&f[1]>20&&(e.additionalUA="autocomplete.js "+s),void c.search(u(h),p,(function(t,e){if(t)i.error(t.message);else{var n=[];if(o.includeAll){var s=o.allTitle||"All departments";n.push(i.mixin({facet:{value:s,count:e.nbHits}},i.cloneDeep(h)))}i.each(e.facets,(function(t,e){i.each(t,(function(t,s){n.push(i.mixin({facet:{facet:e,value:s,count:t}},i.cloneDeep(h)))}))}));for(var r=1;r<a.hits.length;++r)n.push(a.hits[r]);l(n,a)}}))}l([])}}))}}},295:(t,e,n)=>{"use strict";var i=n(6990);n(4910).element=i;var s=n(2856);s.isArray=i.isArray,s.isFunction=i.isFunction,s.isObject=i.isPlainObject,s.bind=i.proxy,s.each=function(t,e){i.each(t,(function(t,n){return e(n,t)}))},s.map=i.map,s.mixin=i.extend,s.Event=i.Event;var r="aaAutocomplete",o=n(6549),a=n(50);function u(t,e,n,u){n=s.isArray(n)?n:[].slice.call(arguments,2);var c=i(t).each((function(t,s){var c=i(s),l=new a({el:c}),h=u||new o({input:c,eventBus:l,dropdownMenuContainer:e.dropdownMenuContainer,hint:void 0===e.hint||!!e.hint,minLength:e.minLength,autoselect:e.autoselect,autoselectOnBlur:e.autoselectOnBlur,tabAutocomplete:e.tabAutocomplete,openOnFocus:e.openOnFocus,templates:e.templates,debug:e.debug,clearOnSelected:e.clearOnSelected,cssClasses:e.cssClasses,datasets:n,keyboardShortcuts:e.keyboardShortcuts,appendTo:e.appendTo,autoWidth:e.autoWidth,ariaLabel:e.ariaLabel||s.getAttribute("aria-label")});c.data(r,h)}));return c.autocomplete={},s.each(["open","close","getVal","setVal","destroy","getWrapper"],(function(t){c.autocomplete[t]=function(){var e,n=arguments;return c.each((function(s,o){var a=i(o).data(r);e=a[t].apply(a,n)})),e}})),c}u.sources=o.sources,u.escapeHighlightedString=s.escapeHighlightedString;var c="autocomplete"in window,l=window.autocomplete;u.noConflict=function(){return c?window.autocomplete=l:delete window.autocomplete,u},t.exports=u},533:t=>{t.exports="0.38.1"},6990:t=>{var e;e=window,t.exports=function(t){var e,n,i=function(){var e,n,i,s,r,o,a=[],u=a.concat,c=a.filter,l=a.slice,h=t.document,p={},f={},d={"column-count":1,columns:1,"font-weight":1,"line-height":1,opacity:1,"z-index":1,zoom:1},g=/^\s*<(\w+|!)[^>]*>/,m=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,y=/^(?:body|html)$/i,w=/([A-Z])/g,b=["val","css","html","text","data","width","height","offset"],C=["after","prepend","before","append"],x=h.createElement("table"),_=h.createElement("tr"),S={tr:h.createElement("tbody"),tbody:x,thead:x,tfoot:x,td:_,th:_,"*":h.createElement("div")},E=/complete|loaded|interactive/,A=/^[\w-]*$/,$={},T=$.toString,O={},D=h.createElement("div"),N={tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},k=Array.isArray||function(t){return t instanceof Array};function I(t){return null==t?String(t):$[T.call(t)]||"object"}function P(t){return"function"==I(t)}function L(t){return null!=t&&t==t.window}function M(t){return null!=t&&t.nodeType==t.DOCUMENT_NODE}function F(t){return"object"==I(t)}function R(t){return F(t)&&!L(t)&&Object.getPrototypeOf(t)==Object.prototype}function q(t){var e=!!t&&"length"in t&&t.length,n=i.type(t);return"function"!=n&&!L(t)&&("array"==n||0===e||"number"==typeof e&&e>0&&e-1 in t)}function V(t){return c.call(t,(function(t){return null!=t}))}function H(t){return t.length>0?i.fn.concat.apply([],t):t}function B(t){return t.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/_/g,"-").toLowerCase()}function K(t){return t in f?f[t]:f[t]=new RegExp("(^|\\s)"+t+"(\\s|$)")}function j(t,e){return"number"!=typeof e||d[B(t)]?e:e+"px"}function z(t){var e,n;return p[t]||(e=h.createElement(t),h.body.appendChild(e),n=getComputedStyle(e,"").getPropertyValue("display"),e.parentNode.removeChild(e),"none"==n&&(n="block"),p[t]=n),p[t]}function U(t){return"children"in t?l.call(t.children):i.map(t.childNodes,(function(t){if(1==t.nodeType)return t}))}function Q(t,e){var n,i=t?t.length:0;for(n=0;n<i;n++)this[n]=t[n];this.length=i,this.selector=e||""}function W(t,i,s){for(n in i)s&&(R(i[n])||k(i[n]))?(R(i[n])&&!R(t[n])&&(t[n]={}),k(i[n])&&!k(t[n])&&(t[n]=[]),W(t[n],i[n],s)):i[n]!==e&&(t[n]=i[n])}function Z(t,e){return null==e?i(t):i(t).filter(e)}function X(t,e,n,i){return P(e)?e.call(t,n,i):e}function G(t,e,n){null==n?t.removeAttribute(e):t.setAttribute(e,n)}function J(t,n){var i=t.className||"",s=i&&i.baseVal!==e;if(n===e)return s?i.baseVal:i;s?i.baseVal=n:t.className=n}function Y(t){try{return t?"true"==t||"false"!=t&&("null"==t?null:+t+""==t?+t:/^[\[\{]/.test(t)?i.parseJSON(t):t):t}catch(e){return t}}function tt(t,e){e(t);for(var n=0,i=t.childNodes.length;n<i;n++)tt(t.childNodes[n],e)}return O.matches=function(t,e){if(!e||!t||1!==t.nodeType)return!1;var n=t.matches||t.webkitMatchesSelector||t.mozMatchesSelector||t.oMatchesSelector||t.matchesSelector;if(n)return n.call(t,e);var i,s=t.parentNode,r=!s;return r&&(s=D).appendChild(t),i=~O.qsa(s,e).indexOf(t),r&&D.removeChild(t),i},r=function(t){return t.replace(/-+(.)?/g,(function(t,e){return e?e.toUpperCase():""}))},o=function(t){return c.call(t,(function(e,n){return t.indexOf(e)==n}))},O.fragment=function(t,n,s){var r,o,a;return m.test(t)&&(r=i(h.createElement(RegExp.$1))),r||(t.replace&&(t=t.replace(v,"<$1></$2>")),n===e&&(n=g.test(t)&&RegExp.$1),n in S||(n="*"),(a=S[n]).innerHTML=""+t,r=i.each(l.call(a.childNodes),(function(){a.removeChild(this)}))),R(s)&&(o=i(r),i.each(s,(function(t,e){b.indexOf(t)>-1?o[t](e):o.attr(t,e)}))),r},O.Z=function(t,e){return new Q(t,e)},O.isZ=function(t){return t instanceof O.Z},O.init=function(t,n){var s;if(!t)return O.Z();if("string"==typeof t)if("<"==(t=t.trim())[0]&&g.test(t))s=O.fragment(t,RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}else{if(P(t))return i(h).ready(t);if(O.isZ(t))return t;if(k(t))s=V(t);else if(F(t))s=[t],t=null;else if(g.test(t))s=O.fragment(t.trim(),RegExp.$1,n),t=null;else{if(n!==e)return i(n).find(t);s=O.qsa(h,t)}}return O.Z(s,t)},(i=function(t,e){return O.init(t,e)}).extend=function(t){var e,n=l.call(arguments,1);return"boolean"==typeof t&&(e=t,t=n.shift()),n.forEach((function(n){W(t,n,e)})),t},O.qsa=function(t,e){var n,i="#"==e[0],s=!i&&"."==e[0],r=i||s?e.slice(1):e,o=A.test(r);return t.getElementById&&o&&i?(n=t.getElementById(r))?[n]:[]:1!==t.nodeType&&9!==t.nodeType&&11!==t.nodeType?[]:l.call(o&&!i&&t.getElementsByClassName?s?t.getElementsByClassName(r):t.getElementsByTagName(e):t.querySelectorAll(e))},i.contains=h.documentElement.contains?function(t,e){return t!==e&&t.contains(e)}:function(t,e){for(;e&&(e=e.parentNode);)if(e===t)return!0;return!1},i.type=I,i.isFunction=P,i.isWindow=L,i.isArray=k,i.isPlainObject=R,i.isEmptyObject=function(t){var e;for(e in t)return!1;return!0},i.isNumeric=function(t){var e=Number(t),n=typeof t;return null!=t&&"boolean"!=n&&("string"!=n||t.length)&&!isNaN(e)&&isFinite(e)||!1},i.inArray=function(t,e,n){return a.indexOf.call(e,t,n)},i.camelCase=r,i.trim=function(t){return null==t?"":String.prototype.trim.call(t)},i.uuid=0,i.support={},i.expr={},i.noop=function(){},i.map=function(t,e){var n,i,s,r=[];if(q(t))for(i=0;i<t.length;i++)null!=(n=e(t[i],i))&&r.push(n);else for(s in t)null!=(n=e(t[s],s))&&r.push(n);return H(r)},i.each=function(t,e){var n,i;if(q(t)){for(n=0;n<t.length;n++)if(!1===e.call(t[n],n,t[n]))return t}else for(i in t)if(!1===e.call(t[i],i,t[i]))return t;return t},i.grep=function(t,e){return c.call(t,e)},t.JSON&&(i.parseJSON=JSON.parse),i.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),(function(t,e){$["[object "+e+"]"]=e.toLowerCase()})),i.fn={constructor:O.Z,length:0,forEach:a.forEach,reduce:a.reduce,push:a.push,sort:a.sort,splice:a.splice,indexOf:a.indexOf,concat:function(){var t,e,n=[];for(t=0;t<arguments.length;t++)e=arguments[t],n[t]=O.isZ(e)?e.toArray():e;return u.apply(O.isZ(this)?this.toArray():this,n)},map:function(t){return i(i.map(this,(function(e,n){return t.call(e,n,e)})))},slice:function(){return i(l.apply(this,arguments))},ready:function(t){return E.test(h.readyState)&&h.body?t(i):h.addEventListener("DOMContentLoaded",(function(){t(i)}),!1),this},get:function(t){return t===e?l.call(this):this[t>=0?t:t+this.length]},toArray:function(){return this.get()},size:function(){return this.length},remove:function(){return this.each((function(){null!=this.parentNode&&this.parentNode.removeChild(this)}))},each:function(t){return a.every.call(this,(function(e,n){return!1!==t.call(e,n,e)})),this},filter:function(t){return P(t)?this.not(this.not(t)):i(c.call(this,(function(e){return O.matches(e,t)})))},add:function(t,e){return i(o(this.concat(i(t,e))))},is:function(t){return this.length>0&&O.matches(this[0],t)},not:function(t){var n=[];if(P(t)&&t.call!==e)this.each((function(e){t.call(this,e)||n.push(this)}));else{var s="string"==typeof t?this.filter(t):q(t)&&P(t.item)?l.call(t):i(t);this.forEach((function(t){s.indexOf(t)<0&&n.push(t)}))}return i(n)},has:function(t){return this.filter((function(){return F(t)?i.contains(this,t):i(this).find(t).size()}))},eq:function(t){return-1===t?this.slice(t):this.slice(t,+t+1)},first:function(){var t=this[0];return t&&!F(t)?t:i(t)},last:function(){var t=this[this.length-1];return t&&!F(t)?t:i(t)},find:function(t){var e=this;return t?"object"==typeof t?i(t).filter((function(){var t=this;return a.some.call(e,(function(e){return i.contains(e,t)}))})):1==this.length?i(O.qsa(this[0],t)):this.map((function(){return O.qsa(this,t)})):i()},closest:function(t,e){var n=[],s="object"==typeof t&&i(t);return this.each((function(i,r){for(;r&&!(s?s.indexOf(r)>=0:O.matches(r,t));)r=r!==e&&!M(r)&&r.parentNode;r&&n.indexOf(r)<0&&n.push(r)})),i(n)},parents:function(t){for(var e=[],n=this;n.length>0;)n=i.map(n,(function(t){if((t=t.parentNode)&&!M(t)&&e.indexOf(t)<0)return e.push(t),t}));return Z(e,t)},parent:function(t){return Z(o(this.pluck("parentNode")),t)},children:function(t){return Z(this.map((function(){return U(this)})),t)},contents:function(){return this.map((function(){return this.contentDocument||l.call(this.childNodes)}))},siblings:function(t){return Z(this.map((function(t,e){return c.call(U(e.parentNode),(function(t){return t!==e}))})),t)},empty:function(){return this.each((function(){this.innerHTML=""}))},pluck:function(t){return i.map(this,(function(e){return e[t]}))},show:function(){return this.each((function(){"none"==this.style.display&&(this.style.display=""),"none"==getComputedStyle(this,"").getPropertyValue("display")&&(this.style.display=z(this.nodeName))}))},replaceWith:function(t){return this.before(t).remove()},wrap:function(t){var e=P(t);if(this[0]&&!e)var n=i(t).get(0),s=n.parentNode||this.length>1;return this.each((function(r){i(this).wrapAll(e?t.call(this,r):s?n.cloneNode(!0):n)}))},wrapAll:function(t){if(this[0]){var e;for(i(this[0]).before(t=i(t));(e=t.children()).length;)t=e.first();i(t).append(this)}return this},wrapInner:function(t){var e=P(t);return this.each((function(n){var s=i(this),r=s.contents(),o=e?t.call(this,n):t;r.length?r.wrapAll(o):s.append(o)}))},unwrap:function(){return this.parent().each((function(){i(this).replaceWith(i(this).children())})),this},clone:function(){return this.map((function(){return this.cloneNode(!0)}))},hide:function(){return this.css("display","none")},toggle:function(t){return this.each((function(){var n=i(this);(t===e?"none"==n.css("display"):t)?n.show():n.hide()}))},prev:function(t){return i(this.pluck("previousElementSibling")).filter(t||"*")},next:function(t){return i(this.pluck("nextElementSibling")).filter(t||"*")},html:function(t){return 0 in arguments?this.each((function(e){var n=this.innerHTML;i(this).empty().append(X(this,t,e,n))})):0 in this?this[0].innerHTML:null},text:function(t){return 0 in arguments?this.each((function(e){var n=X(this,t,e,this.textContent);this.textContent=null==n?"":""+n})):0 in this?this.pluck("textContent").join(""):null},attr:function(t,i){var s;return"string"!=typeof t||1 in arguments?this.each((function(e){if(1===this.nodeType)if(F(t))for(n in t)G(this,n,t[n]);else G(this,t,X(this,i,e,this.getAttribute(t)))})):0 in this&&1==this[0].nodeType&&null!=(s=this[0].getAttribute(t))?s:e},removeAttr:function(t){return this.each((function(){1===this.nodeType&&t.split(" ").forEach((function(t){G(this,t)}),this)}))},prop:function(t,e){return t=N[t]||t,1 in arguments?this.each((function(n){this[t]=X(this,e,n,this[t])})):this[0]&&this[0][t]},removeProp:function(t){return t=N[t]||t,this.each((function(){delete this[t]}))},data:function(t,n){var i="data-"+t.replace(w,"-$1").toLowerCase(),s=1 in arguments?this.attr(i,n):this.attr(i);return null!==s?Y(s):e},val:function(t){return 0 in arguments?(null==t&&(t=""),this.each((function(e){this.value=X(this,t,e,this.value)}))):this[0]&&(this[0].multiple?i(this[0]).find("option").filter((function(){return this.selected})).pluck("value"):this[0].value)},offset:function(e){if(e)return this.each((function(t){var n=i(this),s=X(this,e,t,n.offset()),r=n.offsetParent().offset(),o={top:s.top-r.top,left:s.left-r.left};"static"==n.css("position")&&(o.position="relative"),n.css(o)}));if(!this.length)return null;if(h.documentElement!==this[0]&&!i.contains(h.documentElement,this[0]))return{top:0,left:0};var n=this[0].getBoundingClientRect();return{left:n.left+t.pageXOffset,top:n.top+t.pageYOffset,width:Math.round(n.width),height:Math.round(n.height)}},css:function(t,e){if(arguments.length<2){var s=this[0];if("string"==typeof t){if(!s)return;return s.style[r(t)]||getComputedStyle(s,"").getPropertyValue(t)}if(k(t)){if(!s)return;var o={},a=getComputedStyle(s,"");return i.each(t,(function(t,e){o[e]=s.style[r(e)]||a.getPropertyValue(e)})),o}}var u="";if("string"==I(t))e||0===e?u=B(t)+":"+j(t,e):this.each((function(){this.style.removeProperty(B(t))}));else for(n in t)t[n]||0===t[n]?u+=B(n)+":"+j(n,t[n])+";":this.each((function(){this.style.removeProperty(B(n))}));return this.each((function(){this.style.cssText+=";"+u}))},index:function(t){return t?this.indexOf(i(t)[0]):this.parent().children().indexOf(this[0])},hasClass:function(t){return!!t&&a.some.call(this,(function(t){return this.test(J(t))}),K(t))},addClass:function(t){return t?this.each((function(e){if("className"in this){s=[];var n=J(this);X(this,t,e,n).split(/\s+/g).forEach((function(t){i(this).hasClass(t)||s.push(t)}),this),s.length&&J(this,n+(n?" ":"")+s.join(" "))}})):this},removeClass:function(t){return this.each((function(n){if("className"in this){if(t===e)return J(this,"");s=J(this),X(this,t,n,s).split(/\s+/g).forEach((function(t){s=s.replace(K(t)," ")})),J(this,s.trim())}}))},toggleClass:function(t,n){return t?this.each((function(s){var r=i(this);X(this,t,s,J(this)).split(/\s+/g).forEach((function(t){(n===e?!r.hasClass(t):n)?r.addClass(t):r.removeClass(t)}))})):this},scrollTop:function(t){if(this.length){var n="scrollTop"in this[0];return t===e?n?this[0].scrollTop:this[0].pageYOffset:this.each(n?function(){this.scrollTop=t}:function(){this.scrollTo(this.scrollX,t)})}},scrollLeft:function(t){if(this.length){var n="scrollLeft"in this[0];return t===e?n?this[0].scrollLeft:this[0].pageXOffset:this.each(n?function(){this.scrollLeft=t}:function(){this.scrollTo(t,this.scrollY)})}},position:function(){if(this.length){var t=this[0],e=this.offsetParent(),n=this.offset(),s=y.test(e[0].nodeName)?{top:0,left:0}:e.offset();return n.top-=parseFloat(i(t).css("margin-top"))||0,n.left-=parseFloat(i(t).css("margin-left"))||0,s.top+=parseFloat(i(e[0]).css("border-top-width"))||0,s.left+=parseFloat(i(e[0]).css("border-left-width"))||0,{top:n.top-s.top,left:n.left-s.left}}},offsetParent:function(){return this.map((function(){for(var t=this.offsetParent||h.body;t&&!y.test(t.nodeName)&&"static"==i(t).css("position");)t=t.offsetParent;return t}))}},i.fn.detach=i.fn.remove,["width","height"].forEach((function(t){var n=t.replace(/./,(function(t){return t[0].toUpperCase()}));i.fn[t]=function(s){var r,o=this[0];return s===e?L(o)?o["inner"+n]:M(o)?o.documentElement["scroll"+n]:(r=this.offset())&&r[t]:this.each((function(e){(o=i(this)).css(t,X(this,s,e,o[t]()))}))}})),C.forEach((function(n,s){var r=s%2;i.fn[n]=function(){var n,o,a=i.map(arguments,(function(t){var s=[];return"array"==(n=I(t))?(t.forEach((function(t){return t.nodeType!==e?s.push(t):i.zepto.isZ(t)?s=s.concat(t.get()):void(s=s.concat(O.fragment(t)))})),s):"object"==n||null==t?t:O.fragment(t)})),u=this.length>1;return a.length<1?this:this.each((function(e,n){o=r?n:n.parentNode,n=0==s?n.nextSibling:1==s?n.firstChild:2==s?n:null;var c=i.contains(h.documentElement,o);a.forEach((function(e){if(u)e=e.cloneNode(!0);else if(!o)return i(e).remove();o.insertBefore(e,n),c&&tt(e,(function(e){if(!(null==e.nodeName||"SCRIPT"!==e.nodeName.toUpperCase()||e.type&&"text/javascript"!==e.type||e.src)){var n=e.ownerDocument?e.ownerDocument.defaultView:t;n.eval.call(n,e.innerHTML)}}))}))}))},i.fn[r?n+"To":"insert"+(s?"Before":"After")]=function(t){return i(t)[n](this),this}})),O.Z.prototype=Q.prototype=i.fn,O.uniq=o,O.deserializeValue=Y,i.zepto=O,i}();return function(e){var n,i=1,s=Array.prototype.slice,r=e.isFunction,o=function(t){return"string"==typeof t},a={},u={},c="onfocusin"in t,l={focus:"focusin",blur:"focusout"},h={mouseenter:"mouseover",mouseleave:"mouseout"};function p(t){return t._zid||(t._zid=i++)}function f(t,e,n,i){if((e=d(e)).ns)var s=g(e.ns);return(a[p(t)]||[]).filter((function(t){return t&&(!e.e||t.e==e.e)&&(!e.ns||s.test(t.ns))&&(!n||p(t.fn)===p(n))&&(!i||t.sel==i)}))}function d(t){var e=(""+t).split(".");return{e:e[0],ns:e.slice(1).sort().join(" ")}}function g(t){return new RegExp("(?:^| )"+t.replace(" "," .* ?")+"(?: |$)")}function m(t,e){return t.del&&!c&&t.e in l||!!e}function v(t){return h[t]||c&&l[t]||t}function y(t,i,s,r,o,u,c){var l=p(t),f=a[l]||(a[l]=[]);i.split(/\s/).forEach((function(i){if("ready"==i)return e(document).ready(s);var a=d(i);a.fn=s,a.sel=o,a.e in h&&(s=function(t){var n=t.relatedTarget;if(!n||n!==this&&!e.contains(this,n))return a.fn.apply(this,arguments)}),a.del=u;var l=u||s;a.proxy=function(e){if(!(e=S(e)).isImmediatePropagationStopped()){try{var i=Object.getOwnPropertyDescriptor(e,"data");i&&!i.writable||(e.data=r)}catch(e){}var s=l.apply(t,e._args==n?[e]:[e].concat(e._args));return!1===s&&(e.preventDefault(),e.stopPropagation()),s}},a.i=f.length,f.push(a),"addEventListener"in t&&t.addEventListener(v(a.e),a.proxy,m(a,c))}))}function w(t,e,n,i,s){var r=p(t);(e||"").split(/\s/).forEach((function(e){f(t,e,n,i).forEach((function(e){delete a[r][e.i],"removeEventListener"in t&&t.removeEventListener(v(e.e),e.proxy,m(e,s))}))}))}u.click=u.mousedown=u.mouseup=u.mousemove="MouseEvents",e.event={add:y,remove:w},e.proxy=function(t,n){var i=2 in arguments&&s.call(arguments,2);if(r(t)){var a=function(){return t.apply(n,i?i.concat(s.call(arguments)):arguments)};return a._zid=p(t),a}if(o(n))return i?(i.unshift(t[n],t),e.proxy.apply(null,i)):e.proxy(t[n],t);throw new TypeError("expected function")},e.fn.bind=function(t,e,n){return this.on(t,e,n)},e.fn.unbind=function(t,e){return this.off(t,e)},e.fn.one=function(t,e,n,i){return this.on(t,e,n,i,1)};var b=function(){return!0},C=function(){return!1},x=/^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,_={preventDefault:"isDefaultPrevented",stopImmediatePropagation:"isImmediatePropagationStopped",stopPropagation:"isPropagationStopped"};function S(t,i){if(i||!t.isDefaultPrevented){i||(i=t),e.each(_,(function(e,n){var s=i[e];t[e]=function(){return this[n]=b,s&&s.apply(i,arguments)},t[n]=C}));try{t.timeStamp||(t.timeStamp=Date.now())}catch(s){}(i.defaultPrevented!==n?i.defaultPrevented:"returnValue"in i?!1===i.returnValue:i.getPreventDefault&&i.getPreventDefault())&&(t.isDefaultPrevented=b)}return t}function E(t){var e,i={originalEvent:t};for(e in t)x.test(e)||t[e]===n||(i[e]=t[e]);return S(i,t)}e.fn.delegate=function(t,e,n){return this.on(e,t,n)},e.fn.undelegate=function(t,e,n){return this.off(e,t,n)},e.fn.live=function(t,n){return e(document.body).delegate(this.selector,t,n),this},e.fn.die=function(t,n){return e(document.body).undelegate(this.selector,t,n),this},e.fn.on=function(t,i,a,u,c){var l,h,p=this;return t&&!o(t)?(e.each(t,(function(t,e){p.on(t,i,a,e,c)})),p):(o(i)||r(u)||!1===u||(u=a,a=i,i=n),u!==n&&!1!==a||(u=a,a=n),!1===u&&(u=C),p.each((function(n,r){c&&(l=function(t){return w(r,t.type,u),u.apply(this,arguments)}),i&&(h=function(t){var n,o=e(t.target).closest(i,r).get(0);if(o&&o!==r)return n=e.extend(E(t),{currentTarget:o,liveFired:r}),(l||u).apply(o,[n].concat(s.call(arguments,1)))}),y(r,t,u,a,i,h||l)})))},e.fn.off=function(t,i,s){var a=this;return t&&!o(t)?(e.each(t,(function(t,e){a.off(t,i,e)})),a):(o(i)||r(s)||!1===s||(s=i,i=n),!1===s&&(s=C),a.each((function(){w(this,t,s,i)})))},e.fn.trigger=function(t,n){return(t=o(t)||e.isPlainObject(t)?e.Event(t):S(t))._args=n,this.each((function(){t.type in l&&"function"==typeof this[t.type]?this[t.type]():"dispatchEvent"in this?this.dispatchEvent(t):e(this).triggerHandler(t,n)}))},e.fn.triggerHandler=function(t,n){var i,s;return this.each((function(r,a){(i=E(o(t)?e.Event(t):t))._args=n,i.target=a,e.each(f(a,t.type||t),(function(t,e){if(s=e.proxy(i),i.isImmediatePropagationStopped())return!1}))})),s},"focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error".split(" ").forEach((function(t){e.fn[t]=function(e){return 0 in arguments?this.bind(t,e):this.trigger(t)}})),e.Event=function(t,e){o(t)||(t=(e=t).type);var n=document.createEvent(u[t]||"Events"),i=!0;if(e)for(var s in e)"bubbles"==s?i=!!e[s]:n[s]=e[s];return n.initEvent(t,i,!0),S(n)}}(i),n=[],i.fn.remove=function(){return this.each((function(){this.parentNode&&("IMG"===this.tagName&&(n.push(this),this.src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=",e&&clearTimeout(e),e=setTimeout((function(){n=[]}),6e4)),this.parentNode.removeChild(this))}))},function(t){var e={},n=t.fn.data,i=t.camelCase,s=t.expando="Zepto"+ +new Date,r=[];function o(r,o){var u=r[s],c=u&&e[u];if(void 0===o)return c||a(r);if(c){if(o in c)return c[o];var l=i(o);if(l in c)return c[l]}return n.call(t(r),o)}function a(n,r,o){var a=n[s]||(n[s]=++t.uuid),c=e[a]||(e[a]=u(n));return void 0!==r&&(c[i(r)]=o),c}function u(e){var n={};return t.each(e.attributes||r,(function(e,s){0==s.name.indexOf("data-")&&(n[i(s.name.replace("data-",""))]=t.zepto.deserializeValue(s.value))})),n}t.fn.data=function(e,n){return void 0===n?t.isPlainObject(e)?this.each((function(n,i){t.each(e,(function(t,e){a(i,t,e)}))})):0 in this?o(this[0],e):void 0:this.each((function(){a(this,e,n)}))},t.data=function(e,n,i){return t(e).data(n,i)},t.hasData=function(n){var i=n[s],r=i&&e[i];return!!r&&!t.isEmptyObject(r)},t.fn.removeData=function(n){return"string"==typeof n&&(n=n.split(/\s+/)),this.each((function(){var r=this[s],o=r&&e[r];o&&t.each(n||o,(function(t){delete o[n?i(this):t]}))}))},["remove","empty"].forEach((function(e){var n=t.fn[e];t.fn[e]=function(){var t=this.find("*");return"remove"===e&&(t=t.add(this)),t.removeData(),n.call(this)}}))}(i),i}(e)},8820:t=>{"use strict";var e={}.hasOwnProperty,n=/[ -,\.\/:-@\[-\^`\{-~]/,i=/[ -,\.\/:-@\[\]\^`\{-~]/,s=/(^|\\+)?(\\[A-F0-9]{1,6})\x20(?![a-fA-F0-9\x20])/g,r=function t(r,o){"single"!=(o=function(t,n){if(!t)return n;var i={};for(var s in n)i[s]=e.call(t,s)?t[s]:n[s];return i}(o,t.options)).quotes&&"double"!=o.quotes&&(o.quotes="single");for(var a="double"==o.quotes?'"':"'",u=o.isIdentifier,c=r.charAt(0),l="",h=0,p=r.length;h<p;){var f=r.charAt(h++),d=f.charCodeAt(),g=void 0;if(d<32||d>126){if(d>=55296&&d<=56319&&h<p){var m=r.charCodeAt(h++);56320==(64512&m)?d=((1023&d)<<10)+(1023&m)+65536:h--}g="\\"+d.toString(16).toUpperCase()+" "}else g=o.escapeEverything?n.test(f)?"\\"+f:"\\"+d.toString(16).toUpperCase()+" ":/[\t\n\f\r\x0B]/.test(f)?"\\"+d.toString(16).toUpperCase()+" ":"\\"==f||!u&&('"'==f&&a==f||"'"==f&&a==f)||u&&i.test(f)?"\\"+f:f;l+=g}return u&&(/^-[-\d]/.test(l)?l="\\-"+l.slice(1):/\d/.test(c)&&(l="\\3"+c+" "+l.slice(1))),l=l.replace(s,(function(t,e,n){return e&&e.length%2?t:(e||"")+n})),!u&&o.wrap?a+l+a:l};r.options={escapeEverything:!1,isIdentifier:!1,quotes:"single",wrap:!1},r.version="3.0.0",t.exports=r},624:(t,e,n)=>{"use strict";var i,s,r,o=[n(5525),n(4785),n(8291),n(2709),n(2506),n(9176)],a=-1,u=[],c=!1;function l(){i&&s&&(i=!1,s.length?u=s.concat(u):a=-1,u.length&&h())}function h(){if(!i){c=!1,i=!0;for(var t=u.length,e=setTimeout(l);t;){for(s=u,u=[];s&&++a<t;)s[a].run();a=-1,t=u.length}s=null,a=-1,i=!1,clearTimeout(e)}}for(var p=-1,f=o.length;++p<f;)if(o[p]&&o[p].test&&o[p].test()){r=o[p].install(h);break}function d(t,e){this.fun=t,this.array=e}d.prototype.run=function(){var t=this.fun,e=this.array;switch(e.length){case 0:return t();case 1:return t(e[0]);case 2:return t(e[0],e[1]);case 3:return t(e[0],e[1],e[2]);default:return t.apply(null,e)}},t.exports=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];u.push(new d(t,e)),c||i||(c=!0,r())}},2709:(t,e,n)=>{"use strict";e.test=function(){return!n.g.setImmediate&&void 0!==n.g.MessageChannel},e.install=function(t){var e=new n.g.MessageChannel;return e.port1.onmessage=t,function(){e.port2.postMessage(0)}}},8291:(t,e,n)=>{"use strict";var i=n.g.MutationObserver||n.g.WebKitMutationObserver;e.test=function(){return i},e.install=function(t){var e=0,s=new i(t),r=n.g.document.createTextNode("");return s.observe(r,{characterData:!0}),function(){r.data=e=++e%2}}},4785:(t,e,n)=>{"use strict";e.test=function(){return"function"==typeof n.g.queueMicrotask},e.install=function(t){return function(){n.g.queueMicrotask(t)}}},2506:(t,e,n)=>{"use strict";e.test=function(){return"document"in n.g&&"onreadystatechange"in n.g.document.createElement("script")},e.install=function(t){return function(){var e=n.g.document.createElement("script");return e.onreadystatechange=function(){t(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},n.g.document.documentElement.appendChild(e),t}}},9176:(t,e)=>{"use strict";e.test=function(){return!0},e.install=function(t){return function(){setTimeout(t,0)}}}}]); \ No newline at end of file diff --git a/assets/js/8443.6d2e563d.js.LICENSE.txt b/assets/js/8443.6d2e563d.js.LICENSE.txt new file mode 100644 index 000000000..4f7ccd8a7 --- /dev/null +++ b/assets/js/8443.6d2e563d.js.LICENSE.txt @@ -0,0 +1 @@ +/*! https://mths.be/cssesc v3.0.0 by @mathias */ diff --git a/assets/js/8717b14a.d94c26ad.js b/assets/js/8717b14a.d94c26ad.js deleted file mode 100644 index 1797072fb..000000000 --- a/assets/js/8717b14a.d94c26ad.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[948],{4137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),u=p(r),m=o,f=u["".concat(s,".").concat(m)]||u[m]||g[m]||a;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[u]="string"==typeof e?e:o,l[1]=i;for(var p=2;p<a;p++)l[p]=r[p];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},8812:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(4137));const a={slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},l=void 0,i={permalink:"/blog/long-blog-post",source:"@site/blog/2019-05-29-long-blog-post.md",title:"Long Blog Post",description:"This is the summary of a very long blog post,",date:"2019-05-29T00:00:00.000Z",formattedDate:"May 29, 2019",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:2.05,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endi"}],frontMatter:{slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},prevItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"},nextItem:{title:"First Blog Post",permalink:"/blog/first-blog-post"}},s={authorsImageUrls:[void 0]},p=[],c={toc:p},u="wrapper";function g(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This is the summary of a very long blog post,"),(0,o.kt)("p",null,"Use a ",(0,o.kt)("inlineCode",{parentName:"p"},"\x3c!--")," ",(0,o.kt)("inlineCode",{parentName:"p"},"truncate")," ",(0,o.kt)("inlineCode",{parentName:"p"},"--\x3e")," comment to limit blog post size in the list view."))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8717b14a.fb07c460.js b/assets/js/8717b14a.fb07c460.js new file mode 100644 index 000000000..cb2e3b799 --- /dev/null +++ b/assets/js/8717b14a.fb07c460.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[948],{7106:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>a,contentTitle:()=>r,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var n=o(5893),s=o(1151);const l={slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},r=void 0,i={permalink:"/blog/long-blog-post",source:"@site/blog/2019-05-29-long-blog-post.md",title:"Long Blog Post",description:"This is the summary of a very long blog post,",date:"2019-05-29T00:00:00.000Z",formattedDate:"May 29, 2019",tags:[{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:2.05,hasTruncateMarker:!0,authors:[{name:"Endilie Yacop Sucipto",title:"Maintainer of Docusaurus",url:"https://github.com/endiliey",imageURL:"https://github.com/endiliey.png",key:"endi"}],frontMatter:{slug:"long-blog-post",title:"Long Blog Post",authors:"endi",tags:["hello","docusaurus"]},unlisted:!1,prevItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"},nextItem:{title:"First Blog Post",permalink:"/blog/first-blog-post"}},a={authorsImageUrls:[void 0]},c=[];function u(t){const e={code:"code",p:"p",...(0,s.a)(),...t.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(e.p,{children:"This is the summary of a very long blog post,"}),"\n",(0,n.jsxs)(e.p,{children:["Use a ",(0,n.jsx)(e.code,{children:"\x3c!--"})," ",(0,n.jsx)(e.code,{children:"truncate"})," ",(0,n.jsx)(e.code,{children:"--\x3e"})," comment to limit blog post size in the list view."]})]})}function d(t={}){const{wrapper:e}={...(0,s.a)(),...t.components};return e?(0,n.jsx)(e,{...t,children:(0,n.jsx)(u,{...t})}):u(t)}},1151:(t,e,o)=>{o.d(e,{Z:()=>i,a:()=>r});var n=o(7294);const s={},l=n.createContext(s);function r(t){const e=n.useContext(l);return n.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function i(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:r(t.components),n.createElement(l.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/89600f1f.168a8da4.js b/assets/js/89600f1f.168a8da4.js new file mode 100644 index 000000000..1c7bef4df --- /dev/null +++ b/assets/js/89600f1f.168a8da4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5599],{1471:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>r,default:()=>a,frontMatter:()=>t,metadata:()=>c,toc:()=>h});var d=n(5893),s=n(1151);const t={},r="Liquidity Mining",c={id:"dao/liquidity-mining",title:"Liquidity Mining",description:"Liquidity Mining (LM) launched on Jul 17 2021, 2000 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:",source:"@site/docs/dao/liquidity-mining.md",sourceDirName:"dao",slug:"/dao/liquidity-mining",permalink:"/docs/dao/liquidity-mining",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/liquidity-mining.md",tags:[],version:"current",frontMatter:{},sidebar:"daoSidebar",previous:{title:"The NODE Economy",permalink:"/docs/dao/node-basics"},next:{title:"Dappnode DAO FAQ",permalink:"/docs/dao/faq"}},l={},h=[{value:"Liquidity Provision Pools Contract Addresses",id:"liquidity-provision-pools-contract-addresses",level:3},{value:"LP Token Addresses (Mainnet)",id:"lp-token-addresses-mainnet",level:3},{value:"Liquidity Mining Contracts",id:"liquidity-mining-contracts",level:2},{value:"Weekly Distribution",id:"weekly-distribution",level:3}];function o(e){const i={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(i.h1,{id:"liquidity-mining",children:"Liquidity Mining"}),"\n",(0,d.jsx)(i.p,{children:"Liquidity Mining (LM) launched on Jul 17 2021, 20:00:00 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:"}),"\n",(0,d.jsxs)(i.ul,{children:["\n",(0,d.jsx)(i.li,{children:"Sushiswap NODE/ETH Pool - 40% - 2,200,000 NODE"}),"\n",(0,d.jsx)(i.li,{children:"Uniswap NODE/ETH Pool - 40% - 2,200,000 NODE"}),"\n",(0,d.jsx)(i.li,{children:"NODE Governance Staking xDai - 10% - 550,000 NODE"}),"\n",(0,d.jsx)(i.li,{children:"NODE Governance Staking Mainnet -10% - 550,000 NODE"}),"\n"]}),"\n",(0,d.jsx)(i.p,{children:"A further 5.5% of the token supply has been reserved for future rounds of LM. At the end of the first round the team will re-assess the Liquidity Mining program, potentially deploying new pools and distribution."}),"\n",(0,d.jsx)(i.h3,{id:"liquidity-provision-pools-contract-addresses",children:"Liquidity Provision Pools Contract Addresses"}),"\n",(0,d.jsxs)(i.ul,{children:["\n",(0,d.jsxs)(i.li,{children:["Sushiswap NODE/ETH Pool - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8",children:"0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8"})]}),"\n",(0,d.jsxs)(i.li,{children:["Uniswap NODE/ETH Pool - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0xee3b01b2debd3df95bf24d4aacf8e70373113315",children:"0xee3b01b2debd3df95bf24d4aacf8e70373113315"})]}),"\n"]}),"\n",(0,d.jsx)(i.h3,{id:"lp-token-addresses-mainnet",children:"LP Token Addresses (Mainnet)"}),"\n",(0,d.jsxs)(i.ul,{children:["\n",(0,d.jsxs)(i.li,{children:["Uniswap v2 ETH/NODE LP - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0xee3b01b2debd3df95bf24d4aacf8e70373113315",children:"0xee3b01b2debd3df95bf24d4aacf8e70373113315"})]}),"\n",(0,d.jsxs)(i.li,{children:["Sushiswap ETH/NODE LP - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8",children:"0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8"})]}),"\n"]}),"\n",(0,d.jsx)(i.h2,{id:"liquidity-mining-contracts",children:"Liquidity Mining Contracts"}),"\n",(0,d.jsxs)(i.ul,{children:["\n",(0,d.jsxs)(i.li,{children:["NODE Governance Staking Mainnet - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0x19992b52338B7B49De9679ae018A7027803dB1Aa",children:"0x19992b52338B7B49De9679ae018A7027803dB1Aa"})]}),"\n",(0,d.jsxs)(i.li,{children:["NODE Governance Staking xDai - ",(0,d.jsx)(i.a,{href:"https://blockscout.com/xdai/mainnet/address/0xF66823fdc33B9F4C66dB4C3394FF139872C12f16/transactions",children:"0xF66823fdc33B9F4C66dB4C3394FF139872C12f16"})]}),"\n",(0,d.jsxs)(i.li,{children:["Uniswap Liquidity Mining - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0x072115DbD5c8b47E971890357d2951d4569F6B27",children:"0x072115DbD5c8b47E971890357d2951d4569F6B27"})]}),"\n",(0,d.jsxs)(i.li,{children:["Sushiswap Liquidity Mining - ",(0,d.jsx)(i.a,{href:"https://etherscan.io/address/0x89F2e26F20Bf66bBFAc947A3b628b4b4724AaA5c",children:"0x89F2e26F20Bf66bBFAc947A3b628b4b4724AaA5c"})]}),"\n"]}),"\n",(0,d.jsx)(i.h3,{id:"weekly-distribution",children:"Weekly Distribution"}),"\n",(0,d.jsx)(i.p,{children:"Round 1 (26 weeks) weekly NODE rewards distribution percentages based on LM supply are as follows:"}),"\n",(0,d.jsxs)(i.table,{children:[(0,d.jsx)(i.thead,{children:(0,d.jsxs)(i.tr,{children:[(0,d.jsx)(i.th,{children:"% per week"}),(0,d.jsx)(i.th,{children:"0.00%"}),(0,d.jsx)(i.th,{children:"3.80%"}),(0,d.jsx)(i.th,{children:"3.80%"}),(0,d.jsx)(i.th,{children:"3.00%"}),(0,d.jsx)(i.th,{children:"3.00%"}),(0,d.jsx)(i.th,{children:"2.50%"}),(0,d.jsx)(i.th,{children:"2.50%"}),(0,d.jsx)(i.th,{children:"2.50%"}),(0,d.jsx)(i.th,{children:"2.50%"}),(0,d.jsx)(i.th,{children:"2.60%"}),(0,d.jsx)(i.th,{children:"2.80%"}),(0,d.jsx)(i.th,{children:"3.00%"}),(0,d.jsx)(i.th,{children:"3.20%"}),(0,d.jsx)(i.th,{children:"3.40%"}),(0,d.jsx)(i.th,{children:"3.60%"}),(0,d.jsx)(i.th,{children:"3.80%"}),(0,d.jsx)(i.th,{children:"4.00%"}),(0,d.jsx)(i.th,{children:"4.20%"}),(0,d.jsx)(i.th,{children:"4.40%"}),(0,d.jsx)(i.th,{children:"4.60%"}),(0,d.jsx)(i.th,{children:"4.80%"}),(0,d.jsx)(i.th,{children:"5.00%"}),(0,d.jsx)(i.th,{children:"5.20%"}),(0,d.jsx)(i.th,{children:"5.40%"}),(0,d.jsx)(i.th,{children:"5.60%"}),(0,d.jsx)(i.th,{children:"5.80%"}),(0,d.jsx)(i.th,{children:"5.00%"})]})}),(0,d.jsx)(i.tbody,{children:(0,d.jsxs)(i.tr,{children:[(0,d.jsx)(i.td,{children:"Week"}),(0,d.jsx)(i.td,{children:"0"}),(0,d.jsx)(i.td,{children:"1"}),(0,d.jsx)(i.td,{children:"2"}),(0,d.jsx)(i.td,{children:"3"}),(0,d.jsx)(i.td,{children:"4"}),(0,d.jsx)(i.td,{children:"5"}),(0,d.jsx)(i.td,{children:"6"}),(0,d.jsx)(i.td,{children:"7"}),(0,d.jsx)(i.td,{children:"8"}),(0,d.jsx)(i.td,{children:"9"}),(0,d.jsx)(i.td,{children:"10"}),(0,d.jsx)(i.td,{children:"11"}),(0,d.jsx)(i.td,{children:"12"}),(0,d.jsx)(i.td,{children:"13"}),(0,d.jsx)(i.td,{children:"14"}),(0,d.jsx)(i.td,{children:"15"}),(0,d.jsx)(i.td,{children:"16"}),(0,d.jsx)(i.td,{children:"17"}),(0,d.jsx)(i.td,{children:"18"}),(0,d.jsx)(i.td,{children:"19"}),(0,d.jsx)(i.td,{children:"20"}),(0,d.jsx)(i.td,{children:"21"}),(0,d.jsx)(i.td,{children:"22"}),(0,d.jsx)(i.td,{children:"23"}),(0,d.jsx)(i.td,{children:"24"}),(0,d.jsx)(i.td,{children:"25"}),(0,d.jsx)(i.td,{children:"26"})]})})]})]})}function a(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,d.jsx)(i,{...e,children:(0,d.jsx)(o,{...e})}):o(e)}},1151:(e,i,n)=>{n.d(i,{Z:()=>c,a:()=>r});var d=n(7294);const s={},t=d.createContext(s);function r(e){const i=d.useContext(t);return d.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),d.createElement(t.Provider,{value:i},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89600f1f.4af1ac52.js b/assets/js/89600f1f.4af1ac52.js deleted file mode 100644 index c2568c4ac..000000000 --- a/assets/js/89600f1f.4af1ac52.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5599],{4137:(t,e,n)=>{n.d(e,{Zo:()=>u,kt:()=>k});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function i(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?l(Object(n),!0).forEach((function(e){r(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}function o(t,e){if(null==t)return{};var n,a,r=function(t,e){if(null==t)return{};var n,a,r={},l=Object.keys(t);for(a=0;a<l.length;a++)n=l[a],e.indexOf(n)>=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(a=0;a<l.length;a++)n=l[a],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var d=a.createContext({}),p=function(t){var e=a.useContext(d),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},u=function(t){var e=p(t.components);return a.createElement(d.Provider,{value:e},t.children)},s="mdxType",c={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},m=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,l=t.originalType,d=t.parentName,u=o(t,["components","mdxType","originalType","parentName"]),s=p(n),m=r,k=s["".concat(d,".").concat(m)]||s[m]||c[m]||l;return n?a.createElement(k,i(i({ref:e},u),{},{components:n})):a.createElement(k,i({ref:e},u))}));function k(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=n.length,i=new Array(l);i[0]=m;var o={};for(var d in e)hasOwnProperty.call(e,d)&&(o[d]=e[d]);o.originalType=t,o[s]="string"==typeof t?t:r,i[1]=o;for(var p=2;p<l;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},6993:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>d,contentTitle:()=>i,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>p});var a=n(7462),r=(n(7294),n(4137));const l={},i="Liquidity Mining",o={unversionedId:"dao/liquidity-mining",id:"dao/liquidity-mining",title:"Liquidity Mining",description:"Liquidity Mining (LM) launched on Jul 17 2021, 2000 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:",source:"@site/docs/dao/liquidity-mining.md",sourceDirName:"dao",slug:"/dao/liquidity-mining",permalink:"/docs/dao/liquidity-mining",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/liquidity-mining.md",tags:[],version:"current",frontMatter:{},sidebar:"daoSidebar",previous:{title:"The NODE Economy",permalink:"/docs/dao/node-basics"},next:{title:"Dappnode DAO FAQ",permalink:"/docs/dao/faq"}},d={},p=[{value:"Liquidity Provision Pools Contract Addresses",id:"liquidity-provision-pools-contract-addresses",level:3},{value:"LP Token Addresses (Mainnet)",id:"lp-token-addresses-mainnet",level:3},{value:"Liquidity Mining Contracts",id:"liquidity-mining-contracts",level:2},{value:"Weekly Distribution",id:"weekly-distribution",level:3}],u={toc:p},s="wrapper";function c(t){let{components:e,...n}=t;return(0,r.kt)(s,(0,a.Z)({},u,n,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"liquidity-mining"},"Liquidity Mining"),(0,r.kt)("p",null,"Liquidity Mining (LM) launched on Jul 17 2021, 20:00:00 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Sushiswap NODE/ETH Pool - 40% - 2,200,000 NODE"),(0,r.kt)("li",{parentName:"ul"},"Uniswap NODE/ETH Pool - 40% - 2,200,000 NODE"),(0,r.kt)("li",{parentName:"ul"},"NODE Governance Staking xDai - 10% - 550,000 NODE"),(0,r.kt)("li",{parentName:"ul"},"NODE Governance Staking Mainnet -10% - 550,000 NODE")),(0,r.kt)("p",null,"A further 5.5% of the token supply has been reserved for future rounds of LM. At the end of the first round the team will re-assess the Liquidity Mining program, potentially deploying new pools and distribution."),(0,r.kt)("h3",{id:"liquidity-provision-pools-contract-addresses"},"Liquidity Provision Pools Contract Addresses"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Sushiswap NODE/ETH Pool - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8"},"0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8")),(0,r.kt)("li",{parentName:"ul"},"Uniswap NODE/ETH Pool - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0xee3b01b2debd3df95bf24d4aacf8e70373113315"},"0xee3b01b2debd3df95bf24d4aacf8e70373113315"))),(0,r.kt)("h3",{id:"lp-token-addresses-mainnet"},"LP Token Addresses (Mainnet)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Uniswap v2 ETH/NODE LP - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0xee3b01b2debd3df95bf24d4aacf8e70373113315"},"0xee3b01b2debd3df95bf24d4aacf8e70373113315")),(0,r.kt)("li",{parentName:"ul"},"Sushiswap ETH/NODE LP - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8"},"0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8"))),(0,r.kt)("h2",{id:"liquidity-mining-contracts"},"Liquidity Mining Contracts"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"NODE Governance Staking Mainnet - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0x19992b52338B7B49De9679ae018A7027803dB1Aa"},"0x19992b52338B7B49De9679ae018A7027803dB1Aa")),(0,r.kt)("li",{parentName:"ul"},"NODE Governance Staking xDai - ",(0,r.kt)("a",{parentName:"li",href:"https://blockscout.com/xdai/mainnet/address/0xF66823fdc33B9F4C66dB4C3394FF139872C12f16/transactions"},"0xF66823fdc33B9F4C66dB4C3394FF139872C12f16")),(0,r.kt)("li",{parentName:"ul"},"Uniswap Liquidity Mining - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0x072115DbD5c8b47E971890357d2951d4569F6B27"},"0x072115DbD5c8b47E971890357d2951d4569F6B27")),(0,r.kt)("li",{parentName:"ul"},"Sushiswap Liquidity Mining - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0x89F2e26F20Bf66bBFAc947A3b628b4b4724AaA5c"},"0x89F2e26F20Bf66bBFAc947A3b628b4b4724AaA5c"))),(0,r.kt)("h3",{id:"weekly-distribution"},"Weekly Distribution"),(0,r.kt)("p",null,"Round 1 (26 weeks) weekly NODE rewards distribution percentages based on LM supply are as follows:"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"% per week"),(0,r.kt)("th",{parentName:"tr",align:null},"0.00%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.80%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.80%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.00%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.00%"),(0,r.kt)("th",{parentName:"tr",align:null},"2.50%"),(0,r.kt)("th",{parentName:"tr",align:null},"2.50%"),(0,r.kt)("th",{parentName:"tr",align:null},"2.50%"),(0,r.kt)("th",{parentName:"tr",align:null},"2.50%"),(0,r.kt)("th",{parentName:"tr",align:null},"2.60%"),(0,r.kt)("th",{parentName:"tr",align:null},"2.80%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.00%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.20%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.40%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.60%"),(0,r.kt)("th",{parentName:"tr",align:null},"3.80%"),(0,r.kt)("th",{parentName:"tr",align:null},"4.00%"),(0,r.kt)("th",{parentName:"tr",align:null},"4.20%"),(0,r.kt)("th",{parentName:"tr",align:null},"4.40%"),(0,r.kt)("th",{parentName:"tr",align:null},"4.60%"),(0,r.kt)("th",{parentName:"tr",align:null},"4.80%"),(0,r.kt)("th",{parentName:"tr",align:null},"5.00%"),(0,r.kt)("th",{parentName:"tr",align:null},"5.20%"),(0,r.kt)("th",{parentName:"tr",align:null},"5.40%"),(0,r.kt)("th",{parentName:"tr",align:null},"5.60%"),(0,r.kt)("th",{parentName:"tr",align:null},"5.80%"),(0,r.kt)("th",{parentName:"tr",align:null},"5.00%"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Week"),(0,r.kt)("td",{parentName:"tr",align:null},"0"),(0,r.kt)("td",{parentName:"tr",align:null},"1"),(0,r.kt)("td",{parentName:"tr",align:null},"2"),(0,r.kt)("td",{parentName:"tr",align:null},"3"),(0,r.kt)("td",{parentName:"tr",align:null},"4"),(0,r.kt)("td",{parentName:"tr",align:null},"5"),(0,r.kt)("td",{parentName:"tr",align:null},"6"),(0,r.kt)("td",{parentName:"tr",align:null},"7"),(0,r.kt)("td",{parentName:"tr",align:null},"8"),(0,r.kt)("td",{parentName:"tr",align:null},"9"),(0,r.kt)("td",{parentName:"tr",align:null},"10"),(0,r.kt)("td",{parentName:"tr",align:null},"11"),(0,r.kt)("td",{parentName:"tr",align:null},"12"),(0,r.kt)("td",{parentName:"tr",align:null},"13"),(0,r.kt)("td",{parentName:"tr",align:null},"14"),(0,r.kt)("td",{parentName:"tr",align:null},"15"),(0,r.kt)("td",{parentName:"tr",align:null},"16"),(0,r.kt)("td",{parentName:"tr",align:null},"17"),(0,r.kt)("td",{parentName:"tr",align:null},"18"),(0,r.kt)("td",{parentName:"tr",align:null},"19"),(0,r.kt)("td",{parentName:"tr",align:null},"20"),(0,r.kt)("td",{parentName:"tr",align:null},"21"),(0,r.kt)("td",{parentName:"tr",align:null},"22"),(0,r.kt)("td",{parentName:"tr",align:null},"23"),(0,r.kt)("td",{parentName:"tr",align:null},"24"),(0,r.kt)("td",{parentName:"tr",align:null},"25"),(0,r.kt)("td",{parentName:"tr",align:null},"26")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/89b6dee8.4af4ff6b.js b/assets/js/89b6dee8.4af4ff6b.js deleted file mode 100644 index 9466d1878..000000000 --- a/assets/js/89b6dee8.4af4ff6b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3423],{4137:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>g});var r=o(7294);function n(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function a(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach((function(t){n(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function s(e,t){if(null==e)return{};var o,r,n=function(e,t){if(null==e)return{};var o,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)o=i[r],t.indexOf(o)>=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)o=i[r],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var u=r.createContext({}),l=function(e){var t=r.useContext(u),o=t;return e&&(o="function"==typeof e?e(t):a(a({},t),e)),o},d=function(e){var t=l(e.components);return r.createElement(u.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,i=e.originalType,u=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=l(o),h=n,g=p["".concat(u,".").concat(h)]||p[h]||c[h]||i;return o?r.createElement(g,a(a({ref:t},d),{},{components:o})):r.createElement(g,a({ref:t},d))}));function g(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=o.length,a=new Array(i);a[0]=h;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[p]="string"==typeof e?e:n,a[1]=s;for(var l=2;l<i;l++)a[l]=o[l];return r.createElement.apply(null,a)}return r.createElement.apply(null,o)}h.displayName="MDXCreateElement"},4073:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var r=o(7462),n=(o(7294),o(4137));const i={},a="1. Initial Dappnode Setup",s={unversionedId:"user/videos-and-tutorials/driving-school/initial-setup",id:"user/videos-and-tutorials/driving-school/initial-setup",title:"1. Initial Dappnode Setup",description:"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered.",source:"@site/docs/user/videos-and-tutorials/driving-school/initial-setup.md",sourceDirName:"user/videos-and-tutorials/driving-school",slug:"/user/videos-and-tutorials/driving-school/initial-setup",permalink:"/docs/user/videos-and-tutorials/driving-school/initial-setup",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/driving-school/initial-setup.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"More coming soon",permalink:"/docs/user/dappnode-cloud/providers/coming-soon"},next:{title:"2. Configuring your Dappnode",permalink:"/docs/user/videos-and-tutorials/driving-school/configuration"}},u={},l=[{value:"\ud83d\udda5\ufe0f 1.1 Booting from the Dappnode ISO",id:"\ufe0f-11-booting-from-the-dappnode-iso",level:2},{value:"\ud83c\udf10 1.2 Accessing the Dappnode User Interface or Dashboard",id:"-12-accessing-the-dappnode-user-interface-or-dashboard",level:2},{value:"\ud83d\udd12 1.3 Setting up Dappnode Security",id:"-13-setting-up-dappnode-security",level:2},{value:"\ud83d\udd17 1.4 Configuring your Dappnode VPN",id:"-14-configuring-your-dappnode-vpn",level:2},{value:"\ud83d\udd04 1.5 Syncing your clients/An overview on node running",id:"-15-syncing-your-clientsan-overview-on-node-running",level:2},{value:"\ud83d\udcbe 1.6 Understanding your Dappnode's Hardware",id:"-16-understanding-your-dappnodes-hardware",level:2}],d={toc:l},p="wrapper";function c(e){let{components:t,...o}=e;return(0,n.kt)(p,(0,r.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"1-initial-dappnode-setup"},"1. Initial Dappnode Setup"),(0,n.kt)("p",null,"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered."),(0,n.kt)("h2",{id:"\ufe0f-11-booting-from-the-dappnode-iso"},"\ud83d\udda5\ufe0f 1.1 Booting from the Dappnode ISO"),(0,n.kt)("p",null,"The first step you will need to take when your hardware is ready for installing Dappnode. If you have experience installing Linux you'll know what this is about, but if you don't there's nothing to worry about, as most of the process is automated."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/lh5hADm1Iuk",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("br",null),(0,n.kt)("h2",{id:"-12-accessing-the-dappnode-user-interface-or-dashboard"},"\ud83c\udf10 1.2 Accessing the Dappnode User Interface or Dashboard"),(0,n.kt)("p",null,"The most common way to interact with your dappnode is through a web browser in another computer. This means that Dappnode works as a server, and doesn't have a traditional graphic interface as regular personal computers do, so if you're sitting in front of a login prompt wondering what's next you're doing great so far!"),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Z1uDv_J7wlg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("br",null),(0,n.kt)("h2",{id:"-13-setting-up-dappnode-security"},"\ud83d\udd12 1.3 Setting up Dappnode Security"),(0,n.kt)("p",null,"Now that you're inside your Dappnode we gotta make sure no unauthorized users have access! There are four kinds of security credentials in Dappnode and we'll go through each one of them in this video."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/TZUK39yiZ30",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("br",null),(0,n.kt)("h2",{id:"-14-configuring-your-dappnode-vpn"},"\ud83d\udd17 1.4 Configuring your Dappnode VPN"),(0,n.kt)("p",null,"The best way to remotely and safely access your Dappnode is through VPN. Discover the options that Dappnode has to offer for VPNs in this Dappnode Driving School lesson!"),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/qB0sMaNpXpU",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("br",null),(0,n.kt)("h2",{id:"-15-syncing-your-clientsan-overview-on-node-running"},"\ud83d\udd04 1.5 Syncing your clients/An overview on node running"),(0,n.kt)("p",null,"This is what you came here for! Let's start syncing your clients to get your nodes up and running. Whether you want them for better privacy while exploring web3 or because you're interested in validating, syncing your node is a must in your Dappnode journey."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/zJowD3X-MUc",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,n.kt)("br",null),(0,n.kt)("h2",{id:"-16-understanding-your-dappnodes-hardware"},"\ud83d\udcbe 1.6 Understanding your Dappnode's Hardware"),(0,n.kt)("p",null,"Now that everything is working as expected, here's some information on what keeps Dappnode running the way it's meant to. This video is also great if you're looking into putting your own hardware together, since it goes through the minimum requirements to run Dappnode."),(0,n.kt)("center",null,(0,n.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1GW-GbGKs7o?si=DZVO185qWNWiXFl4",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/89b6dee8.bf59031f.js b/assets/js/89b6dee8.bf59031f.js new file mode 100644 index 000000000..401b807c9 --- /dev/null +++ b/assets/js/89b6dee8.bf59031f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3423],{8069:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var r=n(5893),t=n(1151);const i={},s="1. Initial Dappnode Setup",a={id:"user/videos-and-tutorials/driving-school/initial-setup",title:"1. Initial Dappnode Setup",description:"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered.",source:"@site/docs/user/videos-and-tutorials/driving-school/initial-setup.md",sourceDirName:"user/videos-and-tutorials/driving-school",slug:"/user/videos-and-tutorials/driving-school/initial-setup",permalink:"/docs/user/videos-and-tutorials/driving-school/initial-setup",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/driving-school/initial-setup.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"More coming soon",permalink:"/docs/user/dappnode-cloud/providers/coming-soon"},next:{title:"2. Configuring your Dappnode",permalink:"/docs/user/videos-and-tutorials/driving-school/configuration"}},d={},u=[{value:"\ud83d\udda5\ufe0f 1.1 Booting from the Dappnode ISO",id:"\ufe0f-11-booting-from-the-dappnode-iso",level:2},{value:"\ud83c\udf10 1.2 Accessing the Dappnode User Interface or Dashboard",id:"-12-accessing-the-dappnode-user-interface-or-dashboard",level:2},{value:"\ud83d\udd12 1.3 Setting up Dappnode Security",id:"-13-setting-up-dappnode-security",level:2},{value:"\ud83d\udd17 1.4 Configuring your Dappnode VPN",id:"-14-configuring-your-dappnode-vpn",level:2},{value:"\ud83d\udd04 1.5 Syncing your clients/An overview on node running",id:"-15-syncing-your-clientsan-overview-on-node-running",level:2},{value:"\ud83d\udcbe 1.6 Understanding your Dappnode's Hardware",id:"-16-understanding-your-dappnodes-hardware",level:2}];function c(e){const o={h1:"h1",h2:"h2",p:"p",...(0,t.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.h1,{id:"1-initial-dappnode-setup",children:"1. Initial Dappnode Setup"}),"\n",(0,r.jsx)(o.p,{children:"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered."}),"\n",(0,r.jsx)(o.h2,{id:"\ufe0f-11-booting-from-the-dappnode-iso",children:"\ud83d\udda5\ufe0f 1.1 Booting from the Dappnode ISO"}),"\n",(0,r.jsx)(o.p,{children:"The first step you will need to take when your hardware is ready for installing Dappnode. If you have experience installing Linux you'll know what this is about, but if you don't there's nothing to worry about, as most of the process is automated."}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/lh5hADm1Iuk",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-12-accessing-the-dappnode-user-interface-or-dashboard",children:"\ud83c\udf10 1.2 Accessing the Dappnode User Interface or Dashboard"}),"\n",(0,r.jsx)(o.p,{children:"The most common way to interact with your dappnode is through a web browser in another computer. This means that Dappnode works as a server, and doesn't have a traditional graphic interface as regular personal computers do, so if you're sitting in front of a login prompt wondering what's next you're doing great so far!"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Z1uDv_J7wlg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-13-setting-up-dappnode-security",children:"\ud83d\udd12 1.3 Setting up Dappnode Security"}),"\n",(0,r.jsx)(o.p,{children:"Now that you're inside your Dappnode we gotta make sure no unauthorized users have access! There are four kinds of security credentials in Dappnode and we'll go through each one of them in this video."}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/TZUK39yiZ30",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-14-configuring-your-dappnode-vpn",children:"\ud83d\udd17 1.4 Configuring your Dappnode VPN"}),"\n",(0,r.jsx)(o.p,{children:"The best way to remotely and safely access your Dappnode is through VPN. Discover the options that Dappnode has to offer for VPNs in this Dappnode Driving School lesson!"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/qB0sMaNpXpU",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-15-syncing-your-clientsan-overview-on-node-running",children:"\ud83d\udd04 1.5 Syncing your clients/An overview on node running"}),"\n",(0,r.jsx)(o.p,{children:"This is what you came here for! Let's start syncing your clients to get your nodes up and running. Whether you want them for better privacy while exploring web3 or because you're interested in validating, syncing your node is a must in your Dappnode journey."}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/zJowD3X-MUc",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(o.h2,{id:"-16-understanding-your-dappnodes-hardware",children:"\ud83d\udcbe 1.6 Understanding your Dappnode's Hardware"}),"\n",(0,r.jsx)(o.p,{children:"Now that everything is working as expected, here's some information on what keeps Dappnode running the way it's meant to. This video is also great if you're looking into putting your own hardware together, since it goes through the minimum requirements to run Dappnode."}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1GW-GbGKs7o?si=DZVO185qWNWiXFl4",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})})]})}function p(e={}){const{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>a,a:()=>s});var r=n(7294);const t={},i=r.createContext(t);function s(e){const o=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),r.createElement(i.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89e2558e.153a1fa7.js b/assets/js/89e2558e.153a1fa7.js new file mode 100644 index 000000000..50628daa6 --- /dev/null +++ b/assets/js/89e2558e.153a1fa7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5510],{2499:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=s(5893),r=s(1151);const o={},t="How to Set Up an Instance",a={id:"user/dappnode-cloud/providers/aws/set-up-instance",title:"How to Set Up an Instance",description:"To launch a Dappnode AMI instance, follow these steps:",source:"@site/docs/user/dappnode-cloud/providers/aws/set-up-instance.md",sourceDirName:"user/dappnode-cloud/providers/aws",slug:"/user/dappnode-cloud/providers/aws/set-up-instance",permalink:"/docs/user/dappnode-cloud/providers/aws/set-up-instance",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/providers/aws/set-up-instance.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"AWS",permalink:"/docs/user/dappnode-cloud/providers/aws/overview"},next:{title:"FAQs & Troubleshooting",permalink:"/docs/user/dappnode-cloud/providers/aws/faqs"}},c={},d=[{value:"1. <strong>Navigate to AWS Marketplace</strong> \ud83e\udded",id:"1-navigate-to-aws-marketplace-",level:3},{value:"2. <strong>AWS Account</strong> \ud83d\udc64",id:"2-aws-account-",level:3},{value:"3. <strong>Subscribe to Dappnode AMI</strong> \ud83d\udcc0",id:"3-subscribe-to-dappnode-ami-",level:3},{value:"4. <strong>Set Up Telegram for Wireguard Credentials (Optional)</strong> \ud83d\udcac",id:"4-set-up-telegram-for-wireguard-credentials-optional-",level:3},{value:"5. <strong>Launch Instance</strong> \ud83d\ude80",id:"5-launch-instance-",level:3},{value:"6. <strong>Get wireguard credentials</strong> \ud83d\udd10",id:"6-get-wireguard-credentials-",level:3},{value:"7. <strong>Connect via Wireguard</strong> \ud83d\udd0c",id:"7-connect-via-wireguard-",level:3},{value:"8. <strong>Navigate to Dappnode's UI</strong> \ud83c\udfc1",id:"8-navigate-to-dappnodes-ui-",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"how-to-set-up-an-instance",children:"How to Set Up an Instance"}),"\n",(0,i.jsx)(n.p,{children:"To launch a Dappnode AMI instance, follow these steps:"}),"\n",(0,i.jsxs)(n.h3,{id:"1-navigate-to-aws-marketplace-",children:["1. ",(0,i.jsx)(n.strong,{children:"Navigate to AWS Marketplace"})," \ud83e\udded"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Go to the ",(0,i.jsx)(n.a,{href:"https://aws.amazon.com/marketplace/",children:"AWS Marketplace"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"2-aws-account-",children:["2. ",(0,i.jsx)(n.strong,{children:"AWS Account"})," \ud83d\udc64"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If you already have an AWS account, log in. If not, create an account. For more information on signing up, you can visit the ",(0,i.jsx)(n.a,{href:"https://docs.aws.amazon.com/SetUp/latest/UserGuide/setup-AWSsignup.html",children:"AWS Sign-Up Documentation"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["In case you end up on another website after signing up, navigate again to the ",(0,i.jsx)(n.a,{href:"https://aws.amazon.com/marketplace/",children:"AWS Marketplace"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"3-subscribe-to-dappnode-ami-",children:["3. ",(0,i.jsx)(n.strong,{children:"Subscribe to Dappnode AMI"})," \ud83d\udcc0"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Search "Dappnode" in the top search bar and choose the "Dappnode Cloud - Telegram Credentials - By Dappnode" option.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'On our Dappnode AMI page, you can check some information about our image. When you are ready, click "Continue to Subscribe".'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Accept the terms and click "Continue to Configuration".'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Check the region and click "Continue to Launch" to proceed with the instance launch.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'In the "Choose Action" dropdown, select "Launch through EC2" and click "Launch".'}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"4-set-up-telegram-for-wireguard-credentials-optional-",children:["4. ",(0,i.jsx)(n.strong,{children:"Set Up Telegram for Wireguard Credentials (Optional)"})," \ud83d\udcac"]}),"\n",(0,i.jsx)(n.p,{children:"This step is only necessary if you are planning to get your Wireguard credentials via Telegram."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Create a new bot using the ",(0,i.jsx)(n.code,{children:"/newbot"})," command via BotFather's chat. It will ask you for a name and username, then generate an authentication token for your new bot. Save this token, as you will need to provide it when launching the AWS instance."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["You will also need to provide your Telegram user ID. You can get it by sending ",(0,i.jsx)(n.code,{children:"/start"})," to a bot such as ",(0,i.jsx)(n.code,{children:"@RawDataBot"}),"."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"5-launch-instance-",children:["5. ",(0,i.jsx)(n.strong,{children:"Launch Instance"})," \ud83d\ude80"]}),"\n",(0,i.jsx)(n.p,{children:'Once in the EC2 "Launch an instance" UI you will have to choose the configuration of your instance. Next steps will explain you what configurations do you need to modify section by section.'}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Name:"})," Give a name to your instance. This name is for you to identify it in the EC2 UI."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Application and OS Images (Amazon Machine Image)"}),": No changes needed, it comes pre-configurted according to the Dappnode Image."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Instance type:"})," Choose an instance type. All selectable options are suitable for running Dappnode. For more context based on your requirements, check the ",(0,i.jsx)(n.a,{href:"/docs/user/dappnode-cloud/providers/aws/faqs",children:"FAQs section"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Key Pair:"})," If you already have a key pair linked to your AWS account, you can use it. Alternatively, you can import keys to the EC2 or create a new one. These keys are essential for SSH access to the instance. Losing these keys could result in losing access to your instance."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Network Settings:"})}),"\n",(0,i.jsx)(n.p,{children:"In this section, you will create a security group to allow necessary ports exposure. Follow these steps to ensure your Dappnode instance can perform optimally and access all required services:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'Click "Edit" under Network Settings and ensure the "Create security group" option is chosen.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'To add a new rule to the group, click the "Add security group rule" button below. Include the following rules:'}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"SSH:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: SSH"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"HTTP:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: HTTP"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"HTTPS:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: HTTPS"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Wireguard:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: Custom UDP"}),"\n",(0,i.jsx)(n.li,{children:"Port Range: 51820"}),"\n",(0,i.jsx)(n.li,{children:"Source: 0.0.0.0/0"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"General TCP:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: Custom TCP"}),"\n",(0,i.jsx)(n.li,{children:"Port Range: 1024-65535"}),"\n",(0,i.jsx)(n.li,{children:"Source: 0.0.0.0/0"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"General UDP:"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Type: Custom UDP"}),"\n",(0,i.jsx)(n.li,{children:"Port Range: 1024-65535"}),"\n",(0,i.jsx)(n.li,{children:"Source: 0.0.0.0/0"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["For more information about why this Inbound rules are needed and details about each one, visit the ",(0,i.jsx)(n.a,{href:"/docs/user/dappnode-cloud/providers/aws/faqs",children:"FAQs Section"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Storage:"})," Define the amount and type of storage for the instance. The storage requirements depend largely on your intended use."]}),"\n",(0,i.jsxs)(n.p,{children:["For more suggestions and context, refer to the ",(0,i.jsx)(n.a,{href:"/docs/user/dappnode-cloud/providers/aws/faqs",children:"FAQs section"}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"AWS also offers the possibility of extending storage once launched if needed."})}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Advanced details (optional):"})," No modifications are needed here unless you plan to get your ",(0,i.jsx)(n.strong,{children:"Wireguard credentials via Telegram"}),'. If so, provide your userID and botToken in the text area at the end of "Advanced details", separated by a comma in the following format: (',(0,i.jsx)(n.code,{children:"userID,botToken"}),").\nExample => ",(0,i.jsx)(n.code,{children:"123456789,1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456"})]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Summary:"})," Finally, review your configuration on the 'Summary' section located on the right and click the \"Launch instance\" button. Once clicked, your instance will be launched."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"6-get-wireguard-credentials-",children:["6. ",(0,i.jsx)(n.strong,{children:"Get wireguard credentials"})," \ud83d\udd10"]}),"\n",(0,i.jsx)(n.p,{children:"To obtain the Wireguard credentials for your instance, you have two different approaches:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Via Telegram Bot"})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"Ensure you have completed the optional Telegram setup steps mentioned earlier in the guide."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:"After launching the instance, go to your new bot's chat using the link provided by BotFather."}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Send any message to your bot. If the configuration is correct, you should receive a message saying ",(0,i.jsx)(n.code,{children:"\u2705 Successfully saved channel ID"}),"."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Send the command ",(0,i.jsx)(n.code,{children:"/get_wireguard_credentials"})," in the bot chat. The bot should return your Wireguard credentials. Copy them, as the next step will explain how to use these credentials."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.strong,{children:"Via SSH"})}),"\n",(0,i.jsx)(n.p,{children:"This approach is for more expiremented users, since you will have to use the terminal."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsx)(n.p,{children:'After launching the instance, click the "Connect" button in the AWS console.'}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:['Go to the "SSH client" tab where it will provide you with a command like this:\n',(0,i.jsx)(n.code,{children:'ssh -i "yourKeyPair-aws.pem" root@yourInstanceDNS'}),"\nOpen your terminal and modify the command to use the ",(0,i.jsx)(n.code,{children:"ubuntu"})," user and add ",(0,i.jsx)(n.code,{children:"sudo"})," for permissions:"]}),"\n"]}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:'sudo ssh -i "yourKeyPair-aws.pem" ubuntu@yourInstanceDNS\n'})}),"\n",(0,i.jsx)(n.admonition,{type:"tip",children:(0,i.jsx)(n.p,{children:"Ensure this command is run in the directory where your key pair file is located."})}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Once connected to your instance, run the following command:"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-sh",children:"dappnode_wireguard\n"})}),"\n",(0,i.jsxs)(n.p,{children:["This command will output your Wireguard credentials. Copy them from your terminal using ",(0,i.jsx)(n.code,{children:"Ctrl+Shift+C"})," / ",(0,i.jsx)(n.code,{children:"\u2318+Shift+C"}),". The next step will explain how to use these credentials."]}),"\n",(0,i.jsxs)(n.admonition,{type:"info",children:[(0,i.jsx)(n.p,{children:"The installation of Dappnode on your instance may take a few minutes. If you try to obtain the credentials before the installation is complete, you may not receive them. If this happens, wait a few minutes and try again."}),(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Via SSH"}),": If you encounter this issue, exit your SSH session with the ",(0,i.jsx)(n.code,{children:"exit"})," command and reconnect as explained above."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Via Telegram Bot"}),": Simply retry the ",(0,i.jsx)(n.code,{children:"/get_wireguard_credentials"})," command after a short wait."]}),"\n"]})]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.h3,{id:"7-connect-via-wireguard-",children:["7. ",(0,i.jsx)(n.strong,{children:"Connect via Wireguard"})," \ud83d\udd0c"]}),"\n",(0,i.jsxs)(n.p,{children:["The setup process for connecting via Wireguard will depend on the operating system you are using. Refer to the ",(0,i.jsx)(n.a,{href:"/docs/user/access-your-dappnode/vpn/wireguard#2-installing-wireguard-client",children:"Wireguard documentation section"})," specific to your OS for detailed instructions."]}),"\n",(0,i.jsx)(n.p,{children:"Once you have installed Wireguard and configured it with the credentials you obtained, you will be able to connect to your Dappnode instance securely."}),"\n",(0,i.jsxs)(n.h3,{id:"8-navigate-to-dappnodes-ui-",children:["8. ",(0,i.jsx)(n.strong,{children:"Navigate to Dappnode's UI"})," \ud83c\udfc1"]}),"\n",(0,i.jsxs)(n.p,{children:["Once your Wireguard tunnel is active, simply open your web browser and go to ",(0,i.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})," to begin your journey with Dappnode Cloud!"]})]})}function h(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var i=s(7294);const r={},o=i.createContext(r);function t(e){const n=i.useContext(o);return i.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:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/89e2558e.af9481f1.js b/assets/js/89e2558e.af9481f1.js deleted file mode 100644 index ce03e39fe..000000000 --- a/assets/js/89e2558e.af9481f1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5510],{4137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?o(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):o(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function p(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)a=o[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),s=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),c=s(a),m=r,k=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return a?n.createElement(k,i(i({ref:t},u),{},{components:a})):n.createElement(k,i({ref:t},u))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=m;var p={};for(var l in t)hasOwnProperty.call(t,l)&&(p[l]=t[l]);p.originalType=e,p[c]="string"==typeof e?e:r,i[1]=p;for(var s=2;s<o;s++)i[s]=a[s];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}m.displayName="MDXCreateElement"},2969:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>p,toc:()=>s});var n=a(7462),r=(a(7294),a(4137));const o={},i="How to Set Up an Instance",p={unversionedId:"user/dappnode-cloud/providers/aws/set-up-instance",id:"user/dappnode-cloud/providers/aws/set-up-instance",title:"How to Set Up an Instance",description:"To launch a Dappnode AMI instance, follow these steps:",source:"@site/docs/user/dappnode-cloud/providers/aws/set-up-instance.md",sourceDirName:"user/dappnode-cloud/providers/aws",slug:"/user/dappnode-cloud/providers/aws/set-up-instance",permalink:"/docs/user/dappnode-cloud/providers/aws/set-up-instance",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/providers/aws/set-up-instance.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"AWS",permalink:"/docs/user/dappnode-cloud/providers/aws/overview"},next:{title:"FAQs & Troubleshooting",permalink:"/docs/user/dappnode-cloud/providers/aws/faqs"}},l={},s=[{value:"1. <strong>Navigate to AWS Marketplace</strong> \ud83e\udded",id:"1-navigate-to-aws-marketplace-",level:3},{value:"2. <strong>AWS Account</strong> \ud83d\udc64",id:"2-aws-account-",level:3},{value:"3. <strong>Subscribe to Dappnode AMI</strong> \ud83d\udcc0",id:"3-subscribe-to-dappnode-ami-",level:3},{value:"4. <strong>Set Up Telegram for Wireguard Credentials (Optional)</strong> \ud83d\udcac",id:"4-set-up-telegram-for-wireguard-credentials-optional-",level:3},{value:"5. <strong>Launch Instance</strong> \ud83d\ude80",id:"5-launch-instance-",level:3},{value:"6. <strong>Get wireguard credentials</strong> \ud83d\udd10",id:"6-get-wireguard-credentials-",level:3},{value:"7. <strong>Connect via Wireguard</strong> \ud83d\udd0c",id:"7-connect-via-wireguard-",level:3},{value:"8. <strong>Navigate to Dappnode's UI</strong> \ud83c\udfc1",id:"8-navigate-to-dappnodes-ui-",level:3}],u={toc:s},c="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"how-to-set-up-an-instance"},"How to Set Up an Instance"),(0,r.kt)("p",null,"To launch a Dappnode AMI instance, follow these steps:"),(0,r.kt)("h3",{id:"1-navigate-to-aws-marketplace-"},"1. ",(0,r.kt)("strong",{parentName:"h3"},"Navigate to AWS Marketplace")," \ud83e\udded"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Go to the ",(0,r.kt)("a",{parentName:"li",href:"https://aws.amazon.com/marketplace/"},"AWS Marketplace"),".")),(0,r.kt)("h3",{id:"2-aws-account-"},"2. ",(0,r.kt)("strong",{parentName:"h3"},"AWS Account")," \ud83d\udc64"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"If you already have an AWS account, log in. If not, create an account. For more information on signing up, you can visit the ",(0,r.kt)("a",{parentName:"p",href:"https://docs.aws.amazon.com/SetUp/latest/UserGuide/setup-AWSsignup.html"},"AWS Sign-Up Documentation"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"In case you end up on another website after signing up, navigate again to the ",(0,r.kt)("a",{parentName:"p",href:"https://aws.amazon.com/marketplace/"},"AWS Marketplace"),"."))),(0,r.kt)("h3",{id:"3-subscribe-to-dappnode-ami-"},"3. ",(0,r.kt)("strong",{parentName:"h3"},"Subscribe to Dappnode AMI")," \ud83d\udcc0"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'Search "Dappnode" in the top search bar and choose the "Dappnode Cloud - Telegram Credentials - By Dappnode" option.')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'On our Dappnode AMI page, you can check some information about our image. When you are ready, click "Continue to Subscribe".')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'Accept the terms and click "Continue to Configuration".')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'Check the region and click "Continue to Launch" to proceed with the instance launch.')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'In the "Choose Action" dropdown, select "Launch through EC2" and click "Launch".'))),(0,r.kt)("h3",{id:"4-set-up-telegram-for-wireguard-credentials-optional-"},"4. ",(0,r.kt)("strong",{parentName:"h3"},"Set Up Telegram for Wireguard Credentials (Optional)")," \ud83d\udcac"),(0,r.kt)("p",null,"This step is only necessary if you are planning to get your Wireguard credentials via Telegram."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Create a new bot using the ",(0,r.kt)("inlineCode",{parentName:"p"},"/newbot")," command via BotFather's chat. It will ask you for a name and username, then generate an authentication token for your new bot. Save this token, as you will need to provide it when launching the AWS instance.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"You will also need to provide your Telegram user ID. You can get it by sending ",(0,r.kt)("inlineCode",{parentName:"p"},"/start")," to a bot such as ",(0,r.kt)("inlineCode",{parentName:"p"},"@RawDataBot"),"."))),(0,r.kt)("h3",{id:"5-launch-instance-"},"5. ",(0,r.kt)("strong",{parentName:"h3"},"Launch Instance")," \ud83d\ude80"),(0,r.kt)("p",null,'Once in the EC2 "Launch an instance" UI you will have to choose the configuration of your instance. Next steps will explain you what configurations do you need to modify section by section.'),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Name:")," Give a name to your instance. This name is for you to identify it in the EC2 UI.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Application and OS Images (Amazon Machine Image)"),": No changes needed, it comes pre-configurted according to the Dappnode Image.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Instance type:")," Choose an instance type. All selectable options are suitable for running Dappnode. For more context based on your requirements, check the ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/dappnode-cloud/providers/aws/faqs"},"FAQs section"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Key Pair:")," If you already have a key pair linked to your AWS account, you can use it. Alternatively, you can import keys to the EC2 or create a new one. These keys are essential for SSH access to the instance. Losing these keys could result in losing access to your instance.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Network Settings:")),(0,r.kt)("p",{parentName:"li"},"In this section, you will create a security group to allow necessary ports exposure. Follow these steps to ensure your Dappnode instance can perform optimally and access all required services:"),(0,r.kt)("ol",{parentName:"li"},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},'Click "Edit" under Network Settings and ensure the "Create security group" option is chosen.')),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},'To add a new rule to the group, click the "Add security group rule" button below. Include the following rules:'),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"SSH:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Type: SSH")),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"HTTP:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Type: HTTP")),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"HTTPS:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Type: HTTPS")),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Wireguard:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Type: Custom UDP"),(0,r.kt)("li",{parentName:"ul"},"Port Range: 51820"),(0,r.kt)("li",{parentName:"ul"},"Source: 0.0.0.0/0")),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"General TCP:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Type: Custom TCP"),(0,r.kt)("li",{parentName:"ul"},"Port Range: 1024-65535"),(0,r.kt)("li",{parentName:"ul"},"Source: 0.0.0.0/0")),(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"General UDP:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Type: Custom UDP"),(0,r.kt)("li",{parentName:"ul"},"Port Range: 1024-65535"),(0,r.kt)("li",{parentName:"ul"},"Source: 0.0.0.0/0")))),(0,r.kt)("p",{parentName:"li"},"For more information about why this Inbound rules are needed and details about each one, visit the ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/dappnode-cloud/providers/aws/faqs"},"FAQs Section"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Storage:")," Define the amount and type of storage for the instance. The storage requirements depend largely on your intended use."),(0,r.kt)("p",{parentName:"li"},"For more suggestions and context, refer to the ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/dappnode-cloud/providers/aws/faqs"},"FAQs section"),"."),(0,r.kt)("admonition",{parentName:"li",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"AWS also offers the possibility of extending storage once launched if needed."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Advanced details (optional):")," No modifications are needed here unless you plan to get your ",(0,r.kt)("strong",{parentName:"p"},"Wireguard credentials via Telegram"),'. If so, provide your userID and botToken in the text area at the end of "Advanced details", separated by a comma in the following format: (',(0,r.kt)("inlineCode",{parentName:"p"},"userID,botToken"),").\nExample => ",(0,r.kt)("inlineCode",{parentName:"p"},"123456789,1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Summary:")," Finally, review your configuration on the 'Summary' section located on the right and click the \"Launch instance\" button. Once clicked, your instance will be launched."))),(0,r.kt)("h3",{id:"6-get-wireguard-credentials-"},"6. ",(0,r.kt)("strong",{parentName:"h3"},"Get wireguard credentials")," \ud83d\udd10"),(0,r.kt)("p",null,"To obtain the Wireguard credentials for your instance, you have two different approaches:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Via Telegram Bot")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Ensure you have completed the optional Telegram setup steps mentioned earlier in the guide.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"After launching the instance, go to your new bot's chat using the link provided by BotFather.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Send any message to your bot. If the configuration is correct, you should receive a message saying ",(0,r.kt)("inlineCode",{parentName:"p"},"\u2705 Successfully saved channel ID"),".")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Send the command ",(0,r.kt)("inlineCode",{parentName:"p"},"/get_wireguard_credentials")," in the bot chat. The bot should return your Wireguard credentials. Copy them, as the next step will explain how to use these credentials.")))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Via SSH")),(0,r.kt)("p",{parentName:"li"},"This approach is for more expiremented users, since you will have to use the terminal."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'After launching the instance, click the "Connect" button in the AWS console.')),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},'Go to the "SSH client" tab where it will provide you with a command like this:\n',(0,r.kt)("inlineCode",{parentName:"p"},'ssh -i "yourKeyPair-aws.pem" root@yourInstanceDNS'),"\nOpen your terminal and modify the command to use the ",(0,r.kt)("inlineCode",{parentName:"p"},"ubuntu")," user and add ",(0,r.kt)("inlineCode",{parentName:"p"},"sudo")," for permissions:"))),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-sh"},'sudo ssh -i "yourKeyPair-aws.pem" ubuntu@yourInstanceDNS\n')),(0,r.kt)("admonition",{parentName:"li",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Ensure this command is run in the directory where your key pair file is located.")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Once connected to your instance, run the following command:")),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-sh"},"dappnode_wireguard\n")),(0,r.kt)("p",{parentName:"li"},"This command will output your Wireguard credentials. Copy them from your terminal using ",(0,r.kt)("inlineCode",{parentName:"p"},"Ctrl+Shift+C")," / ",(0,r.kt)("inlineCode",{parentName:"p"},"\u2318+Shift+C"),". The next step will explain how to use these credentials."),(0,r.kt)("admonition",{parentName:"li",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The installation of Dappnode on your instance may take a few minutes. If you try to obtain the credentials before the installation is complete, you may not receive them. If this happens, wait a few minutes and try again."),(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Via SSH"),": If you encounter this issue, exit your SSH session with the ",(0,r.kt)("inlineCode",{parentName:"li"},"exit")," command and reconnect as explained above."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Via Telegram Bot"),": Simply retry the ",(0,r.kt)("inlineCode",{parentName:"li"},"/get_wireguard_credentials")," command after a short wait.\n:::"))))),(0,r.kt)("h3",{id:"7-connect-via-wireguard-"},"7. ",(0,r.kt)("strong",{parentName:"h3"},"Connect via Wireguard")," \ud83d\udd0c"),(0,r.kt)("p",null,"The setup process for connecting via Wireguard will depend on the operating system you are using. Refer to the ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/vpn/wireguard#2-installing-wireguard-client"},"Wireguard documentation section")," specific to your OS for detailed instructions."),(0,r.kt)("p",null,"Once you have installed Wireguard and configured it with the credentials you obtained, you will be able to connect to your Dappnode instance securely."),(0,r.kt)("h3",{id:"8-navigate-to-dappnodes-ui-"},"8. ",(0,r.kt)("strong",{parentName:"h3"},"Navigate to Dappnode's UI")," \ud83c\udfc1"),(0,r.kt)("p",null,"Once your Wireguard tunnel is active, simply open your web browser and go to ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode"},"http://my.dappnode")," to begin your journey with Dappnode Cloud!"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8c6013e9.4f0ba9da.js b/assets/js/8c6013e9.4f0ba9da.js deleted file mode 100644 index 9f66ed26b..000000000 --- a/assets/js/8c6013e9.4f0ba9da.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6110],{4137:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>f});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var l=a.createContext({}),p=function(e){var n=a.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},u=function(e){var n=p(e.components);return a.createElement(l.Provider,{value:n},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(t),m=r,f=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return t?a.createElement(f,i(i({ref:n},u),{},{components:t})):a.createElement(f,i({ref:n},u))}));function f(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var p=2;p<o;p++)i[p]=t[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,t)}m.displayName="MDXCreateElement"},1631:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=t(7462),r=(t(7294),t(4137));const o={},i="GitHub Actions for Dappnode Packages",s={unversionedId:"dev/github-actions",id:"dev/github-actions",title:"GitHub Actions for Dappnode Packages",description:"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases.",source:"@site/docs/dev/github-actions.md",sourceDirName:"dev",slug:"/dev/github-actions",permalink:"/docs/dev/github-actions",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/github-actions.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Wizard Reference",permalink:"/docs/dev/references/setup-wizard"}},l={},p=[{value:"1. Auto Check for Upstream Updates (<code>auto_check.yml</code>)",id:"1-auto-check-for-upstream-updates-auto_checkyml",level:2},{value:"Workflow File:",id:"workflow-file",level:3},{value:"2. Main Build and Pre-release (<code>main.yml</code>)",id:"2-main-build-and-pre-release-mainyml",level:2},{value:"Workflow File:",id:"workflow-file-1",level:3}],u={toc:p},c="wrapper";function d(e){let{components:n,...t}=e;return(0,r.kt)(c,(0,a.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"github-actions-for-dappnode-packages"},"GitHub Actions for Dappnode Packages"),(0,r.kt)("p",null,"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases."),(0,r.kt)("h2",{id:"1-auto-check-for-upstream-updates-auto_checkyml"},"1. Auto Check for Upstream Updates (",(0,r.kt)("inlineCode",{parentName:"h2"},"auto_check.yml"),")"),(0,r.kt)("p",null,"This action checks if there's an available update from the upstream repository. If an update is found, it creates a Pull Request with the new version."),(0,r.kt)("h3",{id:"workflow-file"},"Workflow File:"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Filename:")," ",(0,r.kt)("inlineCode",{parentName:"p"},"auto_check.yml")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'name: Bump upstream version\n\non:\n schedule:\n - cron: "00 */4 * * *"\n push:\n branches:\n - "master"\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v3\n - run: npx @dappnode/dappnodesdk github-action bump-upstream\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}\n PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}\n')),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Features:")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Scheduled Runs"),": The action runs every 4 hours (as per the cron setting)."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Environment Variables"),": Uses ",(0,r.kt)("inlineCode",{parentName:"li"},"GITHUB_TOKEN")," for authentication, and ",(0,r.kt)("inlineCode",{parentName:"li"},"PINATA_API_KEY")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"PINATA_SECRET_API_KEY")," for interfacing with the IPFS pinning service Pinata.")),(0,r.kt)("h2",{id:"2-main-build-and-pre-release-mainyml"},"2. Main Build and Pre-release (",(0,r.kt)("inlineCode",{parentName:"h2"},"main.yml"),")"),(0,r.kt)("p",null,"This action builds the Dappnode package and creates a pre-release that's ready to be published."),(0,r.kt)("h3",{id:"workflow-file-1"},"Workflow File:"),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Filename:")," ",(0,r.kt)("inlineCode",{parentName:"p"},"main.yml")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'name: "Main"\non:\n pull_request:\n push:\n branches:\n - "main"\n - "master"\n - "v[0-9]+.[0-9]+.[0-9]+"\n paths-ignore:\n - "README.md"\n\njobs:\n build-test:\n runs-on: ubuntu-latest\n name: Build test\n if: github.event_name != \'push\'\n steps:\n - uses: actions/checkout@v3\n - run: npx @dappnode/dappnodesdk build --skip_save\n\n release:\n name: Release\n runs-on: ubuntu-latest\n if: github.event_name == \'push\'\n steps:\n - uses: actions/checkout@v3\n - name: Publish\n run: npx @dappnode/dappnodesdk publish patch --dappnode_team_preset\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n DEVELOPER_ADDRESS: "0xf35960302a07022aba880dffaec2fdd64d5bf1c1"\n')),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Features:")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Branch Filters"),": The action only triggers on the ",(0,r.kt)("inlineCode",{parentName:"li"},"main"),", ",(0,r.kt)("inlineCode",{parentName:"li"},"master"),", and version tags (e.g., ",(0,r.kt)("inlineCode",{parentName:"li"},"v1.0.0"),")."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Paths Ignore"),": Ignores changes solely related to ",(0,r.kt)("inlineCode",{parentName:"li"},"README.md"),"."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Conditional Runs"),": Different steps are executed based on the event that triggered the workflow (e.g., push event or pull request).")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8c6013e9.c974261e.js b/assets/js/8c6013e9.c974261e.js new file mode 100644 index 000000000..823e4fa71 --- /dev/null +++ b/assets/js/8c6013e9.c974261e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6110],{1542:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var t=s(5893),a=s(1151);const r={},o="GitHub Actions for Dappnode Packages",i={id:"dev/github-actions",title:"GitHub Actions for Dappnode Packages",description:"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases.",source:"@site/docs/dev/github-actions.md",sourceDirName:"dev",slug:"/dev/github-actions",permalink:"/docs/dev/github-actions",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/github-actions.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Wizard Reference",permalink:"/docs/dev/references/setup-wizard"}},c={},d=[{value:"1. Auto Check for Upstream Updates (<code>auto_check.yml</code>)",id:"1-auto-check-for-upstream-updates-auto_checkyml",level:2},{value:"Workflow File:",id:"workflow-file",level:3},{value:"2. Main Build and Pre-release (<code>main.yml</code>)",id:"2-main-build-and-pre-release-mainyml",level:2},{value:"Workflow File:",id:"workflow-file-1",level:3}];function l(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"github-actions-for-dappnode-packages",children:"GitHub Actions for Dappnode Packages"}),"\n",(0,t.jsx)(n.p,{children:"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases."}),"\n",(0,t.jsxs)(n.h2,{id:"1-auto-check-for-upstream-updates-auto_checkyml",children:["1. Auto Check for Upstream Updates (",(0,t.jsx)(n.code,{children:"auto_check.yml"}),")"]}),"\n",(0,t.jsx)(n.p,{children:"This action checks if there's an available update from the upstream repository. If an update is found, it creates a Pull Request with the new version."}),"\n",(0,t.jsx)(n.h3,{id:"workflow-file",children:"Workflow File:"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Filename:"})," ",(0,t.jsx)(n.code,{children:"auto_check.yml"})]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'name: Bump upstream version\n\non:\n schedule:\n - cron: "00 */4 * * *"\n push:\n branches:\n - "master"\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v3\n - run: npx @dappnode/dappnodesdk github-action bump-upstream\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}\n PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}\n'})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Features:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Scheduled Runs"}),": The action runs every 4 hours (as per the cron setting)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Environment Variables"}),": Uses ",(0,t.jsx)(n.code,{children:"GITHUB_TOKEN"})," for authentication, and ",(0,t.jsx)(n.code,{children:"PINATA_API_KEY"})," and ",(0,t.jsx)(n.code,{children:"PINATA_SECRET_API_KEY"})," for interfacing with the IPFS pinning service Pinata."]}),"\n"]}),"\n",(0,t.jsxs)(n.h2,{id:"2-main-build-and-pre-release-mainyml",children:["2. Main Build and Pre-release (",(0,t.jsx)(n.code,{children:"main.yml"}),")"]}),"\n",(0,t.jsx)(n.p,{children:"This action builds the Dappnode package and creates a pre-release that's ready to be published."}),"\n",(0,t.jsx)(n.h3,{id:"workflow-file-1",children:"Workflow File:"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Filename:"})," ",(0,t.jsx)(n.code,{children:"main.yml"})]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-yaml",children:'name: "Main"\non:\n pull_request:\n push:\n branches:\n - "main"\n - "master"\n - "v[0-9]+.[0-9]+.[0-9]+"\n paths-ignore:\n - "README.md"\n\njobs:\n build-test:\n runs-on: ubuntu-latest\n name: Build test\n if: github.event_name != \'push\'\n steps:\n - uses: actions/checkout@v3\n - run: npx @dappnode/dappnodesdk build --skip_save\n\n release:\n name: Release\n runs-on: ubuntu-latest\n if: github.event_name == \'push\'\n steps:\n - uses: actions/checkout@v3\n - name: Publish\n run: npx @dappnode/dappnodesdk publish patch --dappnode_team_preset\n env:\n GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n DEVELOPER_ADDRESS: "0xf35960302a07022aba880dffaec2fdd64d5bf1c1"\n'})}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Features:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Branch Filters"}),": The action only triggers on the ",(0,t.jsx)(n.code,{children:"main"}),", ",(0,t.jsx)(n.code,{children:"master"}),", and version tags (e.g., ",(0,t.jsx)(n.code,{children:"v1.0.0"}),")."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Paths Ignore"}),": Ignores changes solely related to ",(0,t.jsx)(n.code,{children:"README.md"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Conditional Runs"}),": Different steps are executed based on the event that triggered the workflow (e.g., push event or pull request)."]}),"\n"]})]})}function u(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>i,a:()=>o});var t=s(7294);const a={},r=t.createContext(a);function o(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8ec292b8.010408e1.js b/assets/js/8ec292b8.010408e1.js deleted file mode 100644 index 1d1fbd2a4..000000000 --- a/assets/js/8ec292b8.010408e1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9058],{4137:(e,t,n)=>{n.d(t,{Zo:()=>l,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)n=r[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var p=a.createContext({}),u=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},l=function(e){var t=u(e.components);return a.createElement(p.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,p=e.parentName,l=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=o,h=d["".concat(p,".").concat(m)]||d[m]||c[m]||r;return n?a.createElement(h,s(s({ref:t},l),{},{components:n})):a.createElement(h,s({ref:t},l))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,s=new Array(r);s[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[d]="string"==typeof e?e:o,s[1]=i;for(var u=2;u<r;u++)s[u]=n[u];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},8152:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>u});var a=n(7462),o=(n(7294),n(4137));const r={},s="Setup",i={unversionedId:"user/getting-started/setup",id:"user/getting-started/setup",title:"Setup",description:"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.",source:"@site/docs/user/getting-started/setup.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/setup",permalink:"/docs/user/getting-started/setup",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/setup.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Register",permalink:"/docs/user/getting-started/register"},next:{title:"Next Steps",permalink:"/docs/user/getting-started/next-steps"}},p={},u=[{value:"Choose Repository Source",id:"choose-repository-source",level:2},{value:"Enable/Disable System Auto Updates",id:"enabledisable-system-auto-updates",level:2},{value:"Enable system notifications",id:"enable-system-notifications",level:2},{value:"Change Host User Password",id:"change-host-user-password",level:2},{value:"All Set!",id:"all-set",level:2}],l={toc:u},d="wrapper";function c(e){let{components:t,...r}=e;return(0,o.kt)(d,(0,a.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"setup"},"Setup"),(0,o.kt)("p",null,"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-1",src:n(2202).Z,width:"2388",height:"638"})),(0,o.kt)("h2",{id:"choose-repository-source"},"Choose Repository Source"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-2",src:n(8399).Z,width:"2422",height:"1358"})),(0,o.kt)("p",null,"Before you dive in, choose the source from which Dappnode retrieves its data:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Remote Node"),": Connect your Dappnode to an external Ethereum node. This option is lightweight, as you won't need to host the blockchain data on your machine.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Full Node"),": Have your Dappnode host the complete Ethereum blockchain. This ensures maximum decentralization and independence, but it requires more storage and bandwidth."))),(0,o.kt)("admonition",{title:"Why is this important?",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Dappnode uses smart contracts to publish the dapps that are accessible in the dappstore. For this reason, Dappnode needs access to an Ethereum node to read the contents of said smart contract. Choosing between a remote and a full node directly impacts how decentralized your setup is."),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"Decentralization Benefits"),": By relying less on third-party services, you enhance security, reduce points of failure, and support the Ethereum network's robustness, but it might not work for you if you have limited storage or bandwidth.")),(0,o.kt)("h2",{id:"enabledisable-system-auto-updates"},"Enable/Disable System Auto Updates"),(0,o.kt)("p",null,"Dappnode comes with an auto-update feature. This means it will automatically update itself with new releases, ensuring you always have the latest and most secure version. Activate auto-updates to lessen maintenance and better guard against vulnerabilities."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-3",src:n(4602).Z,width:"2422",height:"948"})),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"We ",(0,o.kt)("strong",{parentName:"p"},"strongly")," recommend activating auto-updates to ensure your Dappnode is always up to date with the latest versions.")),(0,o.kt)("h2",{id:"enable-system-notifications"},"Enable system notifications"),(0,o.kt)("p",null,"Dappnode can send you notifications about important events, such as your dappnode being offline or high CPU usage. This is a great way to stay on top of your Dappnode's health and performance."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-4",src:n(4644).Z,width:"1926",height:"886"})),(0,o.kt)("h2",{id:"change-host-user-password"},"Change Host User Password"),(0,o.kt)("p",null,"Beneath the hood, Dappnode operates on a Linux framework, protected by a password, which will be needed to access your ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/terminal"},"Dappnode's terminal")," To amplify your Dappnode's defense:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Change")," the ",(0,o.kt)("strong",{parentName:"li"},"default Linux")," machine ",(0,o.kt)("strong",{parentName:"li"},"password")," for user ",(0,o.kt)("inlineCode",{parentName:"li"},"dappnode"),"."),(0,o.kt)("li",{parentName:"ol"},"Choose a ",(0,o.kt)("strong",{parentName:"li"},"strong, unique password")," that's not easily guessable."),(0,o.kt)("li",{parentName:"ol"},"Remember to ",(0,o.kt)("strong",{parentName:"li"},"store this password in a secure location"),". If you lose access to this password, you could be locked out of your Dappnode.")),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Always save and backup your password. This is crucial for ensuring uninterrupted access to your Dappnode.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-4",src:n(3782).Z,width:"2422",height:"1180"})),(0,o.kt)("h2",{id:"all-set"},"All Set!"),(0,o.kt)("p",null,"Congratulations! Your Dappnode is now configured and ready for use. Dive into the world of decentralized applications and enjoy the self-hosted, decentralized internet experience."),(0,o.kt)("p",null,"With these steps, your Dappnode should be up and running efficiently. Always refer to the official Dappnode documentation or community for any further queries or support."),(0,o.kt)("admonition",{title:"Keep your Dappnode up to date",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Remember to regularly check for updates and best practices to ensure your Dappnode stays secure and efficient.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"setup-5",src:n(2028).Z,width:"2422",height:"804"})))}c.isMDXComponent=!0},2202:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/setup-1-20f4539a87a606b2ab7be68a06080912.png"},8399:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/setup-2-a5a1f0456cdbb9e861104376a30d3047.png"},4602:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/setup-3-6b0500114fc971ac2b4e23aee5e2a6a7.png"},4644:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/setup-4-853e6ca7d1d4f5dea03695e39223e572.png"},3782:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/setup-5-7ef2fb5a75d77003c5192bafbd656ff8.png"},2028:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/setup-6-8ca9deab19513fdc4b62aa78b4a5297c.png"}}]); \ No newline at end of file diff --git a/assets/js/8ec292b8.80a3a62a.js b/assets/js/8ec292b8.80a3a62a.js new file mode 100644 index 000000000..11ca02a71 --- /dev/null +++ b/assets/js/8ec292b8.80a3a62a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9058],{277:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>a,default:()=>l,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var n=s(5893),o=s(1151);const i={},a="Setup",r={id:"user/getting-started/setup",title:"Setup",description:"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.",source:"@site/docs/user/getting-started/setup.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/setup",permalink:"/docs/user/getting-started/setup",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/setup.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Register",permalink:"/docs/user/getting-started/register"},next:{title:"Next Steps",permalink:"/docs/user/getting-started/next-steps"}},d={},c=[{value:"Choose Repository Source",id:"choose-repository-source",level:2},{value:"Enable/Disable System Auto Updates",id:"enabledisable-system-auto-updates",level:2},{value:"Enable system notifications",id:"enable-system-notifications",level:2},{value:"Change Host User Password",id:"change-host-user-password",level:2},{value:"All Set!",id:"all-set",level:2}];function p(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"setup",children:"Setup"}),"\n",(0,n.jsx)(t.p,{children:"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"setup-1",src:s(2202).Z+"",width:"2388",height:"638"})}),"\n",(0,n.jsx)(t.h2,{id:"choose-repository-source",children:"Choose Repository Source"}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"setup-2",src:s(8399).Z+"",width:"2422",height:"1358"})}),"\n",(0,n.jsx)(t.p,{children:"Before you dive in, choose the source from which Dappnode retrieves its data:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Remote Node"}),": Connect your Dappnode to an external Ethereum node. This option is lightweight, as you won't need to host the blockchain data on your machine."]}),"\n"]}),"\n",(0,n.jsxs)(t.li,{children:["\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Full Node"}),": Have your Dappnode host the complete Ethereum blockchain. This ensures maximum decentralization and independence, but it requires more storage and bandwidth."]}),"\n"]}),"\n"]}),"\n",(0,n.jsxs)(t.admonition,{title:"Why is this important?",type:"info",children:[(0,n.jsx)(t.p,{children:"Dappnode uses smart contracts to publish the dapps that are accessible in the dappstore. For this reason, Dappnode needs access to an Ethereum node to read the contents of said smart contract. Choosing between a remote and a full node directly impacts how decentralized your setup is."}),(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.strong,{children:"Decentralization Benefits"}),": By relying less on third-party services, you enhance security, reduce points of failure, and support the Ethereum network's robustness, but it might not work for you if you have limited storage or bandwidth."]})]}),"\n",(0,n.jsx)(t.h2,{id:"enabledisable-system-auto-updates",children:"Enable/Disable System Auto Updates"}),"\n",(0,n.jsx)(t.p,{children:"Dappnode comes with an auto-update feature. This means it will automatically update itself with new releases, ensuring you always have the latest and most secure version. Activate auto-updates to lessen maintenance and better guard against vulnerabilities."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"setup-3",src:s(4602).Z+"",width:"2422",height:"948"})}),"\n",(0,n.jsx)(t.admonition,{type:"tip",children:(0,n.jsxs)(t.p,{children:["We ",(0,n.jsx)(t.strong,{children:"strongly"})," recommend activating auto-updates to ensure your Dappnode is always up to date with the latest versions."]})}),"\n",(0,n.jsx)(t.h2,{id:"enable-system-notifications",children:"Enable system notifications"}),"\n",(0,n.jsx)(t.p,{children:"Dappnode can send you notifications about important events, such as your dappnode being offline or high CPU usage. This is a great way to stay on top of your Dappnode's health and performance."}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"setup-4",src:s(4644).Z+"",width:"1926",height:"886"})}),"\n",(0,n.jsx)(t.h2,{id:"change-host-user-password",children:"Change Host User Password"}),"\n",(0,n.jsxs)(t.p,{children:["Beneath the hood, Dappnode operates on a Linux framework, protected by a password, which will be needed to access your ",(0,n.jsx)(t.a,{href:"/docs/user/access-your-dappnode/terminal",children:"Dappnode's terminal"})," To amplify your Dappnode's defense:"]}),"\n",(0,n.jsxs)(t.ol,{children:["\n",(0,n.jsxs)(t.li,{children:[(0,n.jsx)(t.strong,{children:"Change"})," the ",(0,n.jsx)(t.strong,{children:"default Linux"})," machine ",(0,n.jsx)(t.strong,{children:"password"})," for user ",(0,n.jsx)(t.code,{children:"dappnode"}),"."]}),"\n",(0,n.jsxs)(t.li,{children:["Choose a ",(0,n.jsx)(t.strong,{children:"strong, unique password"})," that's not easily guessable."]}),"\n",(0,n.jsxs)(t.li,{children:["Remember to ",(0,n.jsx)(t.strong,{children:"store this password in a secure location"}),". If you lose access to this password, you could be locked out of your Dappnode."]}),"\n"]}),"\n",(0,n.jsx)(t.admonition,{type:"caution",children:(0,n.jsx)(t.p,{children:"Always save and backup your password. This is crucial for ensuring uninterrupted access to your Dappnode."})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"setup-4",src:s(3782).Z+"",width:"2422",height:"1180"})}),"\n",(0,n.jsx)(t.h2,{id:"all-set",children:"All Set!"}),"\n",(0,n.jsx)(t.p,{children:"Congratulations! Your Dappnode is now configured and ready for use. Dive into the world of decentralized applications and enjoy the self-hosted, decentralized internet experience."}),"\n",(0,n.jsx)(t.p,{children:"With these steps, your Dappnode should be up and running efficiently. Always refer to the official Dappnode documentation or community for any further queries or support."}),"\n",(0,n.jsx)(t.admonition,{title:"Keep your Dappnode up to date",type:"info",children:(0,n.jsx)(t.p,{children:"Remember to regularly check for updates and best practices to ensure your Dappnode stays secure and efficient."})}),"\n",(0,n.jsx)(t.p,{children:(0,n.jsx)(t.img,{alt:"setup-5",src:s(2028).Z+"",width:"2422",height:"804"})})]})}function l(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},2202:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/setup-1-20f4539a87a606b2ab7be68a06080912.png"},8399:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/setup-2-a5a1f0456cdbb9e861104376a30d3047.png"},4602:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/setup-3-6b0500114fc971ac2b4e23aee5e2a6a7.png"},4644:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/setup-4-853e6ca7d1d4f5dea03695e39223e572.png"},3782:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/setup-5-7ef2fb5a75d77003c5192bafbd656ff8.png"},2028:(e,t,s)=>{s.d(t,{Z:()=>n});const n=s.p+"assets/images/setup-6-8ca9deab19513fdc4b62aa78b4a5297c.png"},1151:(e,t,s)=>{s.d(t,{Z:()=>r,a:()=>a});var n=s(7294);const o={},i=n.createContext(o);function a(e){const t=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8f981d3f.3eade2e1.js b/assets/js/8f981d3f.3eade2e1.js new file mode 100644 index 000000000..3b218a391 --- /dev/null +++ b/assets/js/8f981d3f.3eade2e1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6967],{742:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var i=t(5893),o=t(1151);const s={},r="Diva package for Dappnode",a={id:"user/staking/ethereum/dvt-technologies/diva",title:"Diva package for Dappnode",description:"---",source:"@site/docs/user/staking/ethereum/dvt-technologies/diva.md",sourceDirName:"user/staking/ethereum/dvt-technologies",slug:"/user/staking/ethereum/dvt-technologies/diva",permalink:"/docs/user/staking/ethereum/dvt-technologies/diva",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/dvt-technologies/diva.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"SSV Distributed Validator package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/ssv-network"},next:{title:"Gnosis Chain",permalink:"/docs/user/staking/gnosis-chain/solo"}},d={},l=[{value:"<strong>Introduction</strong>",id:"introduction",level:3},{value:"<strong>Requirements</strong>",id:"requirements",level:3},{value:"<strong>Registering a Dappnode Diva Operator</strong>",id:"registering-a-dappnode-diva-operator",level:3},{value:"<strong>Monitoring your Diva nodes</strong>",id:"monitoring-your-diva-nodes",level:3}];function c(e){const n={a:"a",admonition:"admonition",h1:"h1",h3:"h3",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"diva-package-for-dappnode",children:"Diva package for Dappnode"}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.h3,{id:"introduction",children:(0,i.jsx)(n.strong,{children:"Introduction"})}),"\n",(0,i.jsx)(n.p,{children:"Diva is an Ethereum Liquid Staking protocol powered by Distributed Validator Technology (DVT). It extends Ethereum's Proof of Stake providing new functionality for Stakers and Operators:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Liquid Stakers receive divETH, a Liquid Staking Token which generates Ethereum Staking Rewards."}),"\n",(0,i.jsx)(n.li,{children:"Operators run a Distributed Validation node to fulfill staking duties and earn additional Operator Rewards."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["This package allows you to run a Diva Operator node, and it is available for the ",(0,i.jsx)(n.a,{href:"http://my.dappnode/installer/public/diva-holesky.public.dappnode.eth",children:"Holesky Testnet"}),". The Ethereum mainnet version of this package is still undergoing testing and will be available in the DAppStore soon."]}),"\n",(0,i.jsx)(n.h3,{id:"requirements",children:(0,i.jsx)(n.strong,{children:"Requirements"})}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"The first thing you'll need to do is set up a fully-synced node. This can be don through the Stakers Menu in Dappnode by selecting:"}),"\n"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"1 Execution Client (Geth, Besu, Erigon or Nethermind)"}),"\n",(0,i.jsx)(n.li,{children:"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"}),"\n",(0,i.jsx)(n.li,{children:"MEV Boost (optional)"}),"\n"]}),"\n",(0,i.jsxs)(n.ol,{start:"2",children:["\n",(0,i.jsxs)(n.li,{children:["Installing the Diva package for Dappnode. This can be done by visiting the ",(0,i.jsx)(n.a,{href:"http://my.dappnode/installer/dnp",children:"DAppStore"})," in the Dappnode UI. You'll be asked to set two passwords when going through the installation process, as well as your operator's address and Discord handle (for testnet purposes)."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Diva config tab",src:t(5816).Z+"",width:"1734",height:"748"})}),"\n",(0,i.jsx)(n.h3,{id:"registering-a-dappnode-diva-operator",children:(0,i.jsx)(n.strong,{children:"Registering a Dappnode Diva Operator"})}),"\n",(0,i.jsx)(n.p,{children:"After successfully installing the Diva package, you'll need to access the package's interface by clicking on UI. This will take you to the Diva app where you'll need to connect your wallet to register your Diva node as an operator. You can register multiple operators using the same wallet."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Diva wizard",src:t(516).Z+"",width:"1548",height:"680"})}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!"})}),"\n",(0,i.jsx)(n.h3,{id:"monitoring-your-diva-nodes",children:(0,i.jsx)(n.strong,{children:"Monitoring your Diva nodes"})}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://divascan.io",children:"Divascan"})," is a tool developed to monitor Diva nodes and operators. You can enter your operator address to get information on the validators' performances. You can also get more information on the Diva protocol."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},5816:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/diva-config1-9cd267af6aa4fb06df05a289a197b1c3.png"},516:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/diva-config2-2e49aba2fbe6e74b845fb85f19d955ea.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>r});var i=t(7294);const o={},s=i.createContext(o);function r(e){const n=i.useContext(s);return i.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(o):e.components||o:r(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/8f981d3f.8182e993.js b/assets/js/8f981d3f.8182e993.js deleted file mode 100644 index a85a9a62e..000000000 --- a/assets/js/8f981d3f.8182e993.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6967],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),p=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=p(n),g=o,h=u["".concat(l,".").concat(g)]||u[g]||c[g]||a;return n?r.createElement(h,i(i({ref:t},d),{},{components:n})):r.createElement(h,i({ref:t},d))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var p=2;p<a;p++)i[p]=n[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}g.displayName="MDXCreateElement"},2779:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var r=n(7462),o=(n(7294),n(4137));const a={},i="Diva package for Dappnode",s={unversionedId:"user/staking/ethereum/dvt-technologies/diva",id:"user/staking/ethereum/dvt-technologies/diva",title:"Diva package for Dappnode",description:"---",source:"@site/docs/user/staking/ethereum/dvt-technologies/diva.md",sourceDirName:"user/staking/ethereum/dvt-technologies",slug:"/user/staking/ethereum/dvt-technologies/diva",permalink:"/docs/user/staking/ethereum/dvt-technologies/diva",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/dvt-technologies/diva.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"SSV Distributed Validator package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/ssv-network"},next:{title:"Gnosis Chain",permalink:"/docs/user/staking/gnosis-chain/solo"}},l={},p=[{value:"<strong>Introduction</strong>",id:"introduction",level:3},{value:"<strong>Requirements</strong>",id:"requirements",level:3},{value:"<strong>Registering a Dappnode Diva Operator</strong>",id:"registering-a-dappnode-diva-operator",level:3},{value:"<strong>Monitoring your Diva nodes</strong>",id:"monitoring-your-diva-nodes",level:3}],d={toc:p},u="wrapper";function c(e){let{components:t,...a}=e;return(0,o.kt)(u,(0,r.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"diva-package-for-dappnode"},"Diva package for Dappnode"),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"introduction"},(0,o.kt)("strong",{parentName:"h3"},"Introduction")),(0,o.kt)("p",null,"Diva is an Ethereum Liquid Staking protocol powered by Distributed Validator Technology (DVT). It extends Ethereum's Proof of Stake providing new functionality for Stakers and Operators:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Liquid Stakers receive divETH, a Liquid Staking Token which generates Ethereum Staking Rewards."),(0,o.kt)("li",{parentName:"ul"},"Operators run a Distributed Validation node to fulfill staking duties and earn additional Operator Rewards.")),(0,o.kt)("p",null,"This package allows you to run a Diva Operator node, and it is available for the ",(0,o.kt)("a",{parentName:"p",href:"http://my.dappnode/installer/public/diva-holesky.public.dappnode.eth"},"Holesky Testnet"),". The Ethereum mainnet version of this package is still undergoing testing and will be available in the DAppStore soon."),(0,o.kt)("h3",{id:"requirements"},(0,o.kt)("strong",{parentName:"h3"},"Requirements")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"The first thing you'll need to do is set up a fully-synced node. This can be don through the Stakers Menu in Dappnode by selecting:")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"1 Execution Client (Geth, Besu, Erigon or Nethermind)"),(0,o.kt)("li",{parentName:"ul"},"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"),(0,o.kt)("li",{parentName:"ul"},"MEV Boost (optional)")),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"Installing the Diva package for Dappnode. This can be done by visiting the ",(0,o.kt)("a",{parentName:"li",href:"http://my.dappnode/installer/dnp"},"DAppStore")," in the Dappnode UI. You'll be asked to set two passwords when going through the installation process, as well as your operator's address and Discord handle (for testnet purposes).")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Diva config tab",src:n(5816).Z,width:"1734",height:"748"})),(0,o.kt)("h3",{id:"registering-a-dappnode-diva-operator"},(0,o.kt)("strong",{parentName:"h3"},"Registering a Dappnode Diva Operator")),(0,o.kt)("p",null,"After successfully installing the Diva package, you'll need to access the package's interface by clicking on UI. This will take you to the Diva app where you'll need to connect your wallet to register your Diva node as an operator. You can register multiple operators using the same wallet."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Diva wizard",src:n(516).Z,width:"1548",height:"680"})),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!")),(0,o.kt)("h3",{id:"monitoring-your-diva-nodes"},(0,o.kt)("strong",{parentName:"h3"},"Monitoring your Diva nodes")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://divascan.io"},"Divascan")," is a tool developed to monitor Diva nodes and operators. You can enter your operator address to get information on the validators' performances. You can also get more information on the Diva protocol."))}c.isMDXComponent=!0},5816:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/diva-config1-9cd267af6aa4fb06df05a289a197b1c3.png"},516:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/diva-config2-2e49aba2fbe6e74b845fb85f19d955ea.png"}}]); \ No newline at end of file diff --git a/assets/js/90558919.4e9ac069.js b/assets/js/90558919.4e9ac069.js new file mode 100644 index 000000000..843c98f6a --- /dev/null +++ b/assets/js/90558919.4e9ac069.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5458],{7597:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>l,frontMatter:()=>i,metadata:()=>d,toc:()=>a});var o=t(5893),s=t(1151);const i={},r="Access Dappnode via Wi-Fi",d={id:"user/getting-started/access-dappnode-via-wifi",title:"Access Dappnode via Wi-Fi",description:"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it.",source:"@site/docs/user/getting-started/access-dappnode-via-wifi.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/access-dappnode-via-wifi",permalink:"/docs/user/getting-started/access-dappnode-via-wifi",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/access-dappnode-via-wifi.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Connect your dappnode to the router and power",permalink:"/docs/user/getting-started/connect-dappnode-to-the-router"},next:{title:"Register",permalink:"/docs/user/getting-started/register"}},c={},a=[{value:"1. <strong>Connect to DappnodeWIFI</strong>:",id:"1-connect-to-dappnodewifi",level:2},{value:"2. <strong>Access the Dappnode Interface</strong>:",id:"2-access-the-dappnode-interface",level:2},{value:"Troubleshooting:",id:"troubleshooting",level:2}];function p(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"access-dappnode-via-wi-fi",children:"Access Dappnode via Wi-Fi"}),"\n",(0,o.jsx)(n.p,{children:"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it."}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["You ",(0,o.jsx)(n.strong,{children:"don't need"})," a monitor, keyboard, or mouse to use Dappnode. You just need to plug it to your router and you can access it from your laptop or mobile phone's browser!"]})}),"\n",(0,o.jsxs)(n.h2,{id:"1-connect-to-dappnodewifi",children:["1. ",(0,o.jsx)(n.strong,{children:"Connect to DappnodeWIFI"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"After a couple of minutes of being turned on, your dappnode will generate a WiFi hotspot"}),"\n",(0,o.jsxs)(n.li,{children:["From the device you wish to connect with, look for the Wi-Fi network named ",(0,o.jsx)(n.strong,{children:"DappnodeWIFI"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Connect using the default password: ",(0,o.jsx)(n.strong,{children:"dappnode"}),"."]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"Connect to Dappnode Wi-Fi",src:t(7023).Z+"",width:"912",height:"102"})}),"\n",(0,o.jsxs)(n.h2,{id:"2-access-the-dappnode-interface",children:["2. ",(0,o.jsx)(n.strong,{children:"Access the Dappnode Interface"}),":"]}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Open your web browser."}),"\n",(0,o.jsxs)(n.li,{children:["Navigate to: ",(0,o.jsx)(n.a,{href:"http://my.dappnode/login",children:"http://my.dappnode/login"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting:"}),"\n",(0,o.jsxs)(i,{children:[(0,o.jsxs)(n.p,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"How can I change my Dappnode Wi-Fi password?"})}),"\nTo change the Wi-Fi password:"]}),(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:["While connected to the Dappnode, go to ",(0,o.jsx)("a",{href:"http://my.dappnode/wireless-network/wifi",children:"Wi-Fi Settings"})]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:'Enter your new desired password in both the "New Password" and "Confirm New Password" fields.'}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsx)(n.p,{children:'Click on "Change Credentials".'}),"\n"]}),"\n"]})]}),"\n",(0,o.jsx)(i,{children:(0,o.jsxs)(n.p,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"I can't access my Dappnode via Wi-Fi"})}),"\nYou can explore other methods to access your Dappnode ",(0,o.jsx)("a",{href:"/docs/user/access-your-dappnode/overview",children:"here"}),"."]})})]})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},7023:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/dappnode-wifi-f5bea29ef163e8454642ea24484c4a55.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>d,a:()=>r});var o=t(7294);const s={},i=o.createContext(s);function r(e){const n=o.useContext(i);return o.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(s):e.components||s:r(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/90558919.addb6277.js b/assets/js/90558919.addb6277.js deleted file mode 100644 index 42c712930..000000000 --- a/assets/js/90558919.addb6277.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5458],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),c=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),l=c(n),m=r,f=l["".concat(s,".").concat(m)]||l[m]||u[m]||a;return n?o.createElement(f,i(i({ref:t},d),{},{components:n})):o.createElement(f,i({ref:t},d))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=m;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p[l]="string"==typeof e?e:r,i[1]=p;for(var c=2;c<a;c++)i[c]=n[c];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},4289:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var o=n(7462),r=(n(7294),n(4137));const a={},i="Access Dappnode via Wi-Fi",p={unversionedId:"user/getting-started/access-dappnode-via-wifi",id:"user/getting-started/access-dappnode-via-wifi",title:"Access Dappnode via Wi-Fi",description:"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it.",source:"@site/docs/user/getting-started/access-dappnode-via-wifi.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/access-dappnode-via-wifi",permalink:"/docs/user/getting-started/access-dappnode-via-wifi",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/access-dappnode-via-wifi.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Connect your dappnode to the router and power",permalink:"/docs/user/getting-started/connect-dappnode-to-the-router"},next:{title:"Register",permalink:"/docs/user/getting-started/register"}},s={},c=[{value:"1. <strong>Connect to DappnodeWIFI</strong>:",id:"1-connect-to-dappnodewifi",level:2},{value:"2. <strong>Access the Dappnode Interface</strong>:",id:"2-access-the-dappnode-interface",level:2},{value:"Troubleshooting:",id:"troubleshooting",level:2}],d={toc:c},l="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(l,(0,o.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"access-dappnode-via-wi-fi"},"Access Dappnode via Wi-Fi"),(0,r.kt)("p",null,"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it."),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"You ",(0,r.kt)("strong",{parentName:"p"},"don't need")," a monitor, keyboard, or mouse to use Dappnode. You just need to plug it to your router and you can access it from your laptop or mobile phone's browser!")),(0,r.kt)("h2",{id:"1-connect-to-dappnodewifi"},"1. ",(0,r.kt)("strong",{parentName:"h2"},"Connect to DappnodeWIFI"),":"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"After a couple of minutes of being turned on, your dappnode will generate a WiFi hotspot"),(0,r.kt)("li",{parentName:"ul"},"From the device you wish to connect with, look for the Wi-Fi network named ",(0,r.kt)("strong",{parentName:"li"},"DappnodeWIFI"),"."),(0,r.kt)("li",{parentName:"ul"},"Connect using the default password: ",(0,r.kt)("strong",{parentName:"li"},"dappnode"),".",(0,r.kt)("img",{alt:"Connect to Dappnode Wi-Fi",src:n(7023).Z,width:"912",height:"102"}))),(0,r.kt)("h2",{id:"2-access-the-dappnode-interface"},"2. ",(0,r.kt)("strong",{parentName:"h2"},"Access the Dappnode Interface"),":"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Open your web browser."),(0,r.kt)("li",{parentName:"ul"},"Navigate to: ",(0,r.kt)("a",{parentName:"li",href:"http://my.dappnode/login"},"http://my.dappnode/login"))),(0,r.kt)("h2",{id:"troubleshooting"},"Troubleshooting:"),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("b",null,"How can I change my Dappnode Wi-Fi password?")),"To change the Wi-Fi password:",(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"While connected to the Dappnode, go to ",(0,r.kt)("a",{href:"http://my.dappnode/wireless-network/wifi"},"Wi-Fi Settings"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},'Enter your new desired password in both the "New Password" and "Confirm New Password" fields.')),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},'Click on "Change Credentials".')))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("b",null,"I can't access my Dappnode via Wi-Fi")),"You can explore other methods to access your Dappnode ",(0,r.kt)("a",{href:"/docs/user/access-your-dappnode/overview"},"here"),"."))}u.isMDXComponent=!0},7023:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/dappnode-wifi-f5bea29ef163e8454642ea24484c4a55.png"}}]); \ No newline at end of file diff --git a/assets/js/91e54d81.137d5b07.js b/assets/js/91e54d81.137d5b07.js new file mode 100644 index 000000000..d3d28b95b --- /dev/null +++ b/assets/js/91e54d81.137d5b07.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2642],{7589:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>o,toc:()=>c});var a=t(5893),n=t(1151);const i={},r="Packages' Signature",o={id:"user/packages/signature",title:"Packages' Signature",description:"Dappnode's Packages Signatures",source:"@site/docs/user/packages/signature.md",sourceDirName:"user/packages",slug:"/user/packages/signature",permalink:"/docs/user/packages/signature",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/signature.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Understanding Dappnode Packages",permalink:"/docs/user/packages/understanding-dappnode-packages"},next:{title:"Dappnode Monitoring Service (DMS)",permalink:"/docs/user/packages/dms"}},d={},c=[{value:"Dappnode's Packages Signatures",id:"dappnodes-packages-signatures",level:2},{value:"Release trusted keys",id:"release-trusted-keys",level:2},{value:"Bypass trusted signature",id:"bypass-trusted-signature",level:2}];function u(e){const s={a:"a",h1:"h1",h2:"h2",img:"img",p:"p",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{id:"packages-signature",children:"Packages' Signature"}),"\n",(0,a.jsx)(s.h2,{id:"dappnodes-packages-signatures",children:"Dappnode's Packages Signatures"}),"\n",(0,a.jsx)(s.p,{children:"All Dappnode's packages must be on chain, which means that need a digital signature for verification. This cryptographic signature serves as a stamp of authenticity, enabling users to prove the identity of the package's author and ensuring the integrity of its source. Before installing any package into your Dappnode environment, is essential to ensure that it comes from a trusted author. This measure is vital for safeguarding your Dappnode infrastructure against unauthorized access or potential security breaches."}),"\n",(0,a.jsx)(s.h2,{id:"release-trusted-keys",children:"Release trusted keys"}),"\n",(0,a.jsxs)(s.p,{children:['By default, our software comes with a set of pre-approved keys that have validation by the Dappnode team to ensure their reliability. However, users have the flexibility to manage these trusted keys according to their preferences. If you want to check the addresses trusted by us, or even add an address trusted by yourself, you can do it in the "System" tab on the side menu, within the ',(0,a.jsx)(s.a,{href:"http://my.dappnode/system/advanced",children:'"Advanced" module'}),', in the "Release trusted keys" section.']}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Release trusted keys table",src:t(695).Z+"",width:"1713",height:"583"})}),"\n",(0,a.jsx)(s.p,{children:"This feature could be particularly useful when users intend to install Dappnode packages sourced from alternative providers or even when developing their own packages. Nevertheless, it is strongly advised to have caution when modifying trusted keys and to only incorporate new addresses after thorough verification of their credibility."}),"\n",(0,a.jsx)(s.h2,{id:"bypass-trusted-signature",children:"Bypass trusted signature"}),"\n",(0,a.jsx)(s.p,{children:"If a user attempts to install a package whose signature fails to match any of the trusted keys listed in the system, installation will be automatically blocked. However, is it possible to bypass this safeguard by toggling the trusted signature switch during the installation process. This one is only displayed if advanced options dropdown menu is active before the installation."}),"\n",(0,a.jsx)(s.p,{children:(0,a.jsx)(s.img,{alt:"Trusted signature switch",src:t(696).Z+"",width:"632",height:"95"})})]})}function p(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(u,{...e})}):u(e)}},695:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/release-trusted-keys-b7f251d78c925c3b5c2692777afbd842.png"},696:(e,s,t)=>{t.d(s,{Z:()=>a});const a=t.p+"assets/images/signed-safe-switch-e6d549eb68086ef3684269e4c7692474.png"},1151:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>r});var a=t(7294);const n={},i=a.createContext(n);function r(e){const s=a.useContext(i);return a.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(n):e.components||n:r(e.components),a.createElement(i.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/91e54d81.f96a4ff8.js b/assets/js/91e54d81.f96a4ff8.js deleted file mode 100644 index 43e2f5fc7..000000000 --- a/assets/js/91e54d81.f96a4ff8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2642],{4137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>y});var r=a(7294);function s(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?n(Object(a),!0).forEach((function(t){s(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,r,s=function(e,t){if(null==e)return{};var a,r,s={},n=Object.keys(e);for(r=0;r<n.length;r++)a=n[r],t.indexOf(a)>=0||(s[a]=e[a]);return s}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r<n.length;r++)a=n[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(s[a]=e[a])}return s}var u=r.createContext({}),c=function(e){var t=r.useContext(u),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return r.createElement(u.Provider,{value:t},e.children)},d="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var a=e.components,s=e.mdxType,n=e.originalType,u=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),d=c(a),g=s,y=d["".concat(u,".").concat(g)]||d[g]||l[g]||n;return a?r.createElement(y,i(i({ref:t},p),{},{components:a})):r.createElement(y,i({ref:t},p))}));function y(e,t){var a=arguments,s=t&&t.mdxType;if("string"==typeof e||s){var n=a.length,i=new Array(n);i[0]=g;var o={};for(var u in t)hasOwnProperty.call(t,u)&&(o[u]=t[u]);o.originalType=e,o[d]="string"==typeof e?e:s,i[1]=o;for(var c=2;c<n;c++)i[c]=a[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,a)}g.displayName="MDXCreateElement"},7253:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>l,frontMatter:()=>n,metadata:()=>o,toc:()=>c});var r=a(7462),s=(a(7294),a(4137));const n={},i="Packages' Signature",o={unversionedId:"user/packages/signature",id:"user/packages/signature",title:"Packages' Signature",description:"Dappnode's Packages Signatures",source:"@site/docs/user/packages/signature.md",sourceDirName:"user/packages",slug:"/user/packages/signature",permalink:"/docs/user/packages/signature",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/signature.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Understanding Dappnode Packages",permalink:"/docs/user/packages/understanding-dappnode-packages"},next:{title:"Dappnode Monitoring Service (DMS)",permalink:"/docs/user/packages/dms"}},u={},c=[{value:"Dappnode's Packages Signatures",id:"dappnodes-packages-signatures",level:2},{value:"Release trusted keys",id:"release-trusted-keys",level:2},{value:"Bypass trusted signature",id:"bypass-trusted-signature",level:2}],p={toc:c},d="wrapper";function l(e){let{components:t,...n}=e;return(0,s.kt)(d,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"packages-signature"},"Packages' Signature"),(0,s.kt)("h2",{id:"dappnodes-packages-signatures"},"Dappnode's Packages Signatures"),(0,s.kt)("p",null,"All Dappnode's packages must be on chain, which means that need a digital signature for verification. This cryptographic signature serves as a stamp of authenticity, enabling users to prove the identity of the package's author and ensuring the integrity of its source. Before installing any package into your Dappnode environment, is essential to ensure that it comes from a trusted author. This measure is vital for safeguarding your Dappnode infrastructure against unauthorized access or potential security breaches."),(0,s.kt)("h2",{id:"release-trusted-keys"},"Release trusted keys"),(0,s.kt)("p",null,'By default, our software comes with a set of pre-approved keys that have validation by the Dappnode team to ensure their reliability. However, users have the flexibility to manage these trusted keys according to their preferences. If you want to check the addresses trusted by us, or even add an address trusted by yourself, you can do it in the "System" tab on the side menu, within the ',(0,s.kt)("a",{parentName:"p",href:"http://my.dappnode/system/advanced"},'"Advanced" module'),', in the "Release trusted keys" section.'),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Release trusted keys table",src:a(695).Z,width:"1713",height:"583"})),(0,s.kt)("p",null,"This feature could be particularly useful when users intend to install Dappnode packages sourced from alternative providers or even when developing their own packages. Nevertheless, it is strongly advised to have caution when modifying trusted keys and to only incorporate new addresses after thorough verification of their credibility."),(0,s.kt)("h2",{id:"bypass-trusted-signature"},"Bypass trusted signature"),(0,s.kt)("p",null,"If a user attempts to install a package whose signature fails to match any of the trusted keys listed in the system, installation will be automatically blocked. However, is it possible to bypass this safeguard by toggling the trusted signature switch during the installation process. This one is only displayed if advanced options dropdown menu is active before the installation."),(0,s.kt)("p",null,(0,s.kt)("img",{alt:"Trusted signature switch",src:a(696).Z,width:"632",height:"95"})))}l.isMDXComponent=!0},695:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/release-trusted-keys-b7f251d78c925c3b5c2692777afbd842.png"},696:(e,t,a)=>{a.d(t,{Z:()=>r});const r=a.p+"assets/images/signed-safe-switch-e6d549eb68086ef3684269e4c7692474.png"}}]); \ No newline at end of file diff --git a/assets/js/925b3f96.2541a15e.js b/assets/js/925b3f96.2541a15e.js deleted file mode 100644 index 564d268dc..000000000 --- a/assets/js/925b3f96.2541a15e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9003],{4137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var u=o.createContext({}),l=function(e){var t=o.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=l(e.components);return o.createElement(u.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},g=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,u=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(r),g=n,f=p["".concat(u,".").concat(g)]||p[g]||m[g]||a;return r?o.createElement(f,i(i({ref:t},c),{},{components:r})):o.createElement(f,i({ref:t},c))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=g;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[p]="string"==typeof e?e:n,i[1]=s;for(var l=2;l<a;l++)i[l]=r[l];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}g.displayName="MDXCreateElement"},3858:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var o=r(7462),n=(r(7294),r(4137));const a={slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},i=void 0,s={permalink:"/blog/first-blog-post",source:"@site/blog/2019-05-28-first-blog-post.md",title:"First Blog Post",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",formattedDate:"May 28, 2019",tags:[{label:"hola",permalink:"/blog/tags/hola"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"}],frontMatter:{slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},prevItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},u={authorsImageUrls:[void 0]},l=[],c={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,o.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/925b3f96.b9118c97.js b/assets/js/925b3f96.b9118c97.js new file mode 100644 index 000000000..6713d7b56 --- /dev/null +++ b/assets/js/925b3f96.b9118c97.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9003],{3902:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>n,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>u,toc:()=>l});var s=o(5893),a=o(1151);const i={slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},r=void 0,u={permalink:"/blog/first-blog-post",source:"@site/blog/2019-05-28-first-blog-post.md",title:"First Blog Post",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",formattedDate:"May 28, 2019",tags:[{label:"hola",permalink:"/blog/tags/hola"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"}],frontMatter:{slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},unlisted:!1,prevItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},n={authorsImageUrls:[void 0]},l=[];function c(t){const e={p:"p",...(0,a.a)(),...t.components};return(0,s.jsx)(e.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})}function m(t={}){const{wrapper:e}={...(0,a.a)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(c,{...t})}):c(t)}},1151:(t,e,o)=>{o.d(e,{Z:()=>u,a:()=>r});var s=o(7294);const a={},i=s.createContext(a);function r(t){const e=s.useContext(i);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function u(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(a):t.components||a:r(t.components),s.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.d167092e.js b/assets/js/935f2afb.d167092e.js deleted file mode 100644 index fc14b588f..000000000 --- a/assets/js/935f2afb.d167092e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"userSidebar":[{"type":"category","label":"Getting started","items":[{"type":"link","label":"Choose your path","href":"/docs/user/getting-started/choose-your-path","docId":"user/getting-started/choose-your-path"},{"type":"link","label":"Connect your Dappnode to the router","href":"/docs/user/getting-started/connect-dappnode-to-the-router","docId":"user/getting-started/connect-dappnode-to-the-router"},{"type":"link","label":"Access your Dappnode via WiFi","href":"/docs/user/getting-started/access-dappnode-via-wifi","docId":"user/getting-started/access-dappnode-via-wifi"},{"type":"link","label":"Register","href":"/docs/user/getting-started/register","docId":"user/getting-started/register"},{"type":"link","label":"Setup","href":"/docs/user/getting-started/setup","docId":"user/getting-started/setup"},{"type":"link","label":"Next steps","href":"/docs/user/getting-started/next-steps","docId":"user/getting-started/next-steps"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Access your dappnode","items":[{"type":"link","label":"Overview","href":"/docs/user/access-your-dappnode/overview","docId":"user/access-your-dappnode/overview"},{"type":"link","label":"Wi-Fi","href":"/docs/user/access-your-dappnode/wifi","docId":"user/access-your-dappnode/wifi"},{"type":"category","label":"VPN","items":[{"type":"link","label":"Overview","href":"/docs/user/access-your-dappnode/vpn/overview","docId":"user/access-your-dappnode/vpn/overview"},{"type":"link","label":"Wireguard","href":"/docs/user/access-your-dappnode/vpn/wireguard","docId":"user/access-your-dappnode/vpn/wireguard"},{"type":"link","label":"OpenVPN","href":"/docs/user/access-your-dappnode/vpn/openvpn","docId":"user/access-your-dappnode/vpn/openvpn"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Terminal (Advanced)","href":"/docs/user/access-your-dappnode/terminal","docId":"user/access-your-dappnode/terminal"},{"type":"link","label":"Local Proxy (Recovery)","href":"/docs/user/access-your-dappnode/local","docId":"user/access-your-dappnode/local"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Hardware","items":[{"type":"link","label":"Overview","href":"/docs/user/hardware/overview","docId":"user/hardware/overview"},{"type":"link","label":"Maintenance","href":"/docs/user/hardware/maintenance","docId":"user/hardware/maintenance"},{"type":"link","label":"Temperature","href":"/docs/user/hardware/temperature","docId":"user/hardware/temperature"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Staking","items":[{"type":"link","label":"Earn with Staking","href":"/docs/user/staking/overview","docId":"user/staking/overview"},{"type":"category","label":"Ethereum","items":[{"type":"category","label":"Solo Staking","items":[{"type":"link","label":"Mainnet","href":"/docs/user/staking/ethereum/solo/mainnet","docId":"user/staking/ethereum/solo/mainnet"},{"type":"link","label":"Testnet","href":"/docs/user/staking/ethereum/solo/holesky","docId":"user/staking/ethereum/solo/holesky"}],"collapsed":true,"collapsible":true},{"type":"category","label":"LSD Pools","items":[{"type":"link","label":"Rocketpool","href":"/docs/user/staking/ethereum/lsd-pools/rocketpool","docId":"user/staking/ethereum/lsd-pools/rocketpool"},{"type":"link","label":"Stakewise","href":"/docs/user/staking/ethereum/lsd-pools/stakewise","docId":"user/staking/ethereum/lsd-pools/stakewise"},{"type":"link","label":"Stakehouse","href":"/docs/user/staking/ethereum/lsd-pools/stakehouse","docId":"user/staking/ethereum/lsd-pools/stakehouse"}],"collapsed":true,"collapsible":true},{"type":"category","label":"DVT Technologies","items":[{"type":"link","label":"Obol","href":"/docs/user/staking/ethereum/dvt-technologies/obol-network","docId":"user/staking/ethereum/dvt-technologies/obol-network"},{"type":"link","label":"SSV","href":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","docId":"user/staking/ethereum/dvt-technologies/ssv-network"},{"type":"link","label":"Diva","href":"/docs/user/staking/ethereum/dvt-technologies/diva","docId":"user/staking/ethereum/dvt-technologies/diva"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Gnosis Chain","items":[{"type":"link","label":"Gnosis Solo Staking","href":"/docs/user/staking/gnosis-chain/solo","docId":"user/staking/gnosis-chain/solo"}],"collapsed":true,"collapsible":true},{"type":"category","label":"LUKSO","items":[{"type":"link","label":"LUKSO Solo Staking","href":"/docs/user/staking/lukso/solo","docId":"user/staking/lukso/solo"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Rollups","items":[{"type":"link","label":"Overview","href":"/docs/user/rollups/overview","docId":"user/rollups/overview"},{"type":"link","label":"Optimism","href":"/docs/user/rollups/optimism","docId":"user/rollups/optimism"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Packages","items":[{"type":"link","label":"Understanding Dappnode Packages","href":"/docs/user/packages/understanding-dappnode-packages","docId":"user/packages/understanding-dappnode-packages"},{"type":"link","label":"Packages\' signature","href":"/docs/user/packages/signature","docId":"user/packages/signature"},{"type":"link","label":"DMS","href":"/docs/user/packages/dms","docId":"user/packages/dms"},{"type":"link","label":"Bitcoin","href":"/docs/user/packages/bitcoin","docId":"user/packages/bitcoin"},{"type":"link","label":"Eth Classic","href":"/docs/user/packages/ethclassic","docId":"user/packages/ethclassic"},{"type":"link","label":"Avalanche","href":"/docs/user/packages/avalanche","docId":"user/packages/avalanche"},{"type":"link","label":"Monero","href":"/docs/user/packages/monero","docId":"user/packages/monero"},{"type":"link","label":"Swarm","href":"/docs/user/packages/swarm","docId":"user/packages/swarm"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Repository","items":[{"type":"link","label":"Ethereum","href":"/docs/user/repository/ethereum","docId":"user/repository/ethereum"},{"type":"link","label":"IPFS","href":"/docs/user/repository/ipfs","docId":"user/repository/ipfs"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Install","items":[{"type":"link","label":"Overview","href":"/docs/user/install/overview","docId":"user/install/overview"},{"type":"link","label":"ISO","href":"/docs/user/install/iso","docId":"user/install/iso"},{"type":"link","label":"Script","href":"/docs/user/install/script","docId":"user/install/script"},{"type":"link","label":"ARM","href":"/docs/user/install/arm","docId":"user/install/arm"},{"type":"link","label":"Dappnode commands","href":"/docs/user/install/dappnode-commands","docId":"user/install/dappnode-commands"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Ethical metrics","items":[{"type":"link","label":"Overview","href":"/docs/user/ethical-metrics/overview","docId":"user/ethical-metrics/overview"},{"type":"link","label":"Setting up Notifications","href":"/docs/user/ethical-metrics/setup","docId":"user/ethical-metrics/setup"},{"type":"link","label":"Metrics collected","href":"/docs/user/ethical-metrics/metrics","docId":"user/ethical-metrics/metrics"},{"type":"link","label":"Troubleshooting","href":"/docs/user/ethical-metrics/troubleshooting","docId":"user/ethical-metrics/troubleshooting"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Dappnode Cloud","items":[{"type":"link","label":"Overview","href":"/docs/user/dappnode-cloud/overview","docId":"user/dappnode-cloud/overview"},{"type":"category","label":"Cloud Providers","items":[{"type":"category","label":"AWS","items":[{"type":"link","label":"AWS Overview","href":"/docs/user/dappnode-cloud/providers/aws/overview","docId":"user/dappnode-cloud/providers/aws/overview"},{"type":"link","label":"How to set up an Instance","href":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","docId":"user/dappnode-cloud/providers/aws/set-up-instance"},{"type":"link","label":"FAQs & Troubleshooting","href":"/docs/user/dappnode-cloud/providers/aws/faqs","docId":"user/dappnode-cloud/providers/aws/faqs"}],"collapsed":true,"collapsible":true},{"type":"link","label":"More coming soon","href":"/docs/user/dappnode-cloud/providers/coming-soon","docId":"user/dappnode-cloud/providers/coming-soon"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Videos and tutorials","items":[{"type":"category","label":"Driving School","items":[{"type":"link","label":"Initial setup","href":"/docs/user/videos-and-tutorials/driving-school/initial-setup","docId":"user/videos-and-tutorials/driving-school/initial-setup"},{"type":"link","label":"Configuration","href":"/docs/user/videos-and-tutorials/driving-school/configuration","docId":"user/videos-and-tutorials/driving-school/configuration"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Crash Course","href":"/docs/user/videos-and-tutorials/crash-course","docId":"user/videos-and-tutorials/crash-course"},{"type":"category","label":"Guides","items":[{"type":"link","label":"How to connect a wallet to my node","href":"/docs/user/videos-and-tutorials/guides/connect-node","docId":"user/videos-and-tutorials/guides/connect-node"}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"link","label":"FAQs","href":"/docs/user/faqs","docId":"user/faqs"}],"devSidebar":[{"type":"link","label":"Introduction","href":"/docs/dev","docId":"dev"},{"type":"category","label":"DappnodeSDK","items":[{"type":"link","label":"Overview","href":"/docs/dev/sdk/overview","docId":"dev/sdk/overview"},{"type":"link","label":"Commands","href":"/docs/dev/sdk/commands","docId":"dev/sdk/commands"}],"collapsed":true,"collapsible":true},{"type":"category","label":"File references","items":[{"type":"link","label":"Docker Compose","href":"/docs/dev/references/docker-compose","docId":"dev/references/docker-compose"},{"type":"link","label":"Dappnode Manifest","href":"/docs/dev/references/manifest","docId":"dev/references/manifest"},{"type":"link","label":"Setup Wizard","href":"/docs/dev/references/setup-wizard","docId":"dev/references/setup-wizard"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Github Actions","href":"/docs/dev/github-actions","docId":"dev/github-actions"}],"smoothSidebar":[{"type":"link","label":"Smooth","href":"/docs/smooth","docId":"smooth"},{"type":"category","label":"Deep dive into Smooth","items":[{"type":"link","label":"Overview","href":"/docs/smooth/deep-dive-into-smooth/overview","docId":"smooth/deep-dive-into-smooth/overview"},{"type":"link","label":"Rewards","href":"/docs/smooth/deep-dive-into-smooth/rewards","docId":"smooth/deep-dive-into-smooth/rewards"},{"type":"link","label":"Validator States","href":"/docs/smooth/deep-dive-into-smooth/states","docId":"smooth/deep-dive-into-smooth/states"},{"type":"link","label":"Oracle & Smart Contract","href":"/docs/smooth/deep-dive-into-smooth/oracle-sm","docId":"smooth/deep-dive-into-smooth/oracle-sm"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Subscribe to Smooth!","items":[{"type":"link","label":"Overview","href":"/docs/smooth/subscribe-to-smooth/overview","docId":"smooth/subscribe-to-smooth/overview"},{"type":"link","label":"Automatic subscription","href":"/docs/smooth/subscribe-to-smooth/automatic","docId":"smooth/subscribe-to-smooth/automatic"},{"type":"link","label":"Manual subscription","href":"/docs/smooth/subscribe-to-smooth/manual","docId":"smooth/subscribe-to-smooth/manual"}],"collapsed":true,"collapsible":true},{"type":"link","label":"Unsubscribe from Smooth","href":"/docs/smooth/unsubscribe-from-smooth","docId":"smooth/unsubscribe-from-smooth"},{"type":"link","label":"FAQ / Glossary","href":"/docs/smooth/faq-glossary","docId":"smooth/faq-glossary"}],"daoSidebar":[{"type":"link","label":"DAO","href":"/docs/dao","docId":"dao"},{"type":"link","label":"The NODE Economy","href":"/docs/dao/node-basics","docId":"dao/node-basics"},{"type":"link","label":"Liquidity Mining","href":"/docs/dao/liquidity-mining","docId":"dao/liquidity-mining"},{"type":"link","label":"Dappnode DAO FAQ","href":"/docs/dao/faq","docId":"dao/faq"}]},"docs":{"dao":{"id":"dao","title":"DAO","description":"DAO information","sidebar":"daoSidebar"},"dao/faq":{"id":"dao/faq","title":"Dappnode DAO FAQ","description":"What is a DAO?","sidebar":"daoSidebar"},"dao/liquidity-mining":{"id":"dao/liquidity-mining","title":"Liquidity Mining","description":"Liquidity Mining (LM) launched on Jul 17 2021, 2000 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:","sidebar":"daoSidebar"},"dao/node-basics":{"id":"dao/node-basics","title":"The NODE Economy","description":"NODE Basics","sidebar":"daoSidebar"},"dao/node-drop":{"id":"dao/node-drop","title":"NODEdrop","description":"\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\""},"dao/node-stream":{"id":"dao/node-stream","title":"NODEstream","description":"\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\""},"dev":{"id":"dev","title":"Welcome to the Developer Documentation!","description":"Welcome to the Dappnode\'s developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you\'re new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.","sidebar":"devSidebar"},"dev/github-actions":{"id":"dev/github-actions","title":"GitHub Actions for Dappnode Packages","description":"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases.","sidebar":"devSidebar"},"dev/references/docker-compose":{"id":"dev/references/docker-compose","title":"Docker compose file","description":"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.","sidebar":"devSidebar"},"dev/references/manifest":{"id":"dev/references/manifest","title":"Dappnode Package (DNP) manifest","description":"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:","sidebar":"devSidebar"},"dev/references/setup-wizard":{"id":"dev/references/setup-wizard","title":"Wizard Reference","description":"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.","sidebar":"devSidebar"},"dev/sdk/commands":{"id":"dev/sdk/commands","title":"Main commands","description":"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).","sidebar":"devSidebar"},"dev/sdk/overview":{"id":"dev/sdk/overview","title":"DappnodeSDK","description":"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.","sidebar":"devSidebar"},"smooth":{"id":"smooth","title":"Smooth","description":"Smooth introduction","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/oracle-sm":{"id":"smooth/deep-dive-into-smooth/oracle-sm","title":"Smooth\'s architecture","description":"Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible of computing the rewards of each validator.","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/overview":{"id":"smooth/deep-dive-into-smooth/overview","title":"Deep Dive into Smooth!","description":"In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/rewards":{"id":"smooth/deep-dive-into-smooth/rewards","title":"Rewards","description":"Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/states":{"id":"smooth/deep-dive-into-smooth/states","title":"Smooth Validator States","description":"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.","sidebar":"smoothSidebar"},"smooth/faq-glossary":{"id":"smooth/faq-glossary","title":"FAQ & Glossary","description":"FAQ","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/automatic":{"id":"smooth/subscribe-to-smooth/automatic","title":"Automatic Subscription","description":"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth\'s address and subscribing automatically when proposing your next block.","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/manual":{"id":"smooth/subscribe-to-smooth/manual","title":"Manual Subscription","description":"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you\'ll change your validator\'s fee recipient to Smooth\'s address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you\'ll immediately start accumulating rewards from Smooth.","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/overview":{"id":"smooth/subscribe-to-smooth/overview","title":"Subscribing to Smooth","description":"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.","sidebar":"smoothSidebar"},"smooth/unsubscribe-from-smooth":{"id":"smooth/unsubscribe-from-smooth","title":"Unsubscribing from Smooth.","description":"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth\'s website and it only takes one simple transaction.","sidebar":"smoothSidebar"},"user/access-your-dappnode/local":{"id":"user/access-your-dappnode/local","title":"Local Proxy Access to Dappnode","description":"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it\'s essential to understand that due to certain network incompatibilities, this method might not work for all users.","sidebar":"userSidebar"},"user/access-your-dappnode/overview":{"id":"user/access-your-dappnode/overview","title":"\ud83c\udf10 Access your Dappnode","description":"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.","sidebar":"userSidebar"},"user/access-your-dappnode/terminal":{"id":"user/access-your-dappnode/terminal","title":"Terminal Access to Dappnode","description":"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/openvpn":{"id":"user/access-your-dappnode/vpn/openvpn","title":"OpenVPN Access to Dappnode","description":"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here\'s how you can set it up with Dappnode.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/overview":{"id":"user/access-your-dappnode/vpn/overview","title":"VPN Access to Dappnode","description":"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/wireguard":{"id":"user/access-your-dappnode/vpn/wireguard","title":"WireGuard Access to Dappnode","description":"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.","sidebar":"userSidebar"},"user/access-your-dappnode/wifi":{"id":"user/access-your-dappnode/wifi","title":"Wi-Fi Access to Dappnode","description":"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode\'s Wi-Fi hotspot.","sidebar":"userSidebar"},"user/dappnode-cloud/overview":{"id":"user/dappnode-cloud/overview","title":"What is Dappnode Cloud?","description":"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/faqs":{"id":"user/dappnode-cloud/providers/aws/faqs","title":"FAQs & Troubleshooting","description":"Which machine should I choose?","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/overview":{"id":"user/dappnode-cloud/providers/aws/overview","title":"AWS","description":"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/set-up-instance":{"id":"user/dappnode-cloud/providers/aws/set-up-instance","title":"How to Set Up an Instance","description":"To launch a Dappnode AMI instance, follow these steps:","sidebar":"userSidebar"},"user/dappnode-cloud/providers/coming-soon":{"id":"user/dappnode-cloud/providers/coming-soon","title":"More coming soon","description":"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.","sidebar":"userSidebar"},"user/ethical-metrics/metrics":{"id":"user/ethical-metrics/metrics","title":"Metrics Collected by Ethical Metrics","description":"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community\'s continuous requests to offer alerts, we came up with a solution that doesn\'t compromise your privacy.","sidebar":"userSidebar"},"user/ethical-metrics/overview":{"id":"user/ethical-metrics/overview","title":"Ethical Metrics","description":"Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.","sidebar":"userSidebar"},"user/ethical-metrics/setup":{"id":"user/ethical-metrics/setup","title":"Setting up Ethical Metrics","description":"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.","sidebar":"userSidebar"},"user/ethical-metrics/troubleshooting":{"id":"user/ethical-metrics/troubleshooting","title":"Troubleshooting","description":"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn\'t listed, please pay us a visit in the Dappnode Discord and we\'ll be happy to assist you!","sidebar":"userSidebar"},"user/faqs":{"id":"user/faqs","title":"FAQs","description":"How can I start validating?","sidebar":"userSidebar"},"user/getting-started/access-dappnode-via-wifi":{"id":"user/getting-started/access-dappnode-via-wifi","title":"Access Dappnode via Wi-Fi","description":"After connecting your Dappnode to the router and power, and turning it on, it\'s time to connect to it.","sidebar":"userSidebar"},"user/getting-started/choose-your-path":{"id":"user/getting-started/choose-your-path","title":"Choose your path","description":"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode.","sidebar":"userSidebar"},"user/getting-started/connect-dappnode-to-the-router":{"id":"user/getting-started/connect-dappnode-to-the-router","title":"Connect your dappnode to the router and power","description":"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.","sidebar":"userSidebar"},"user/getting-started/next-steps":{"id":"user/getting-started/next-steps","title":"Next Steps","description":"Now that your DAppNode is set up and ready to go, it\'s time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:","sidebar":"userSidebar"},"user/getting-started/register":{"id":"user/getting-started/register","title":"Register","description":"1. Register as New User","sidebar":"userSidebar"},"user/getting-started/setup":{"id":"user/getting-started/setup","title":"Setup","description":"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.","sidebar":"userSidebar"},"user/hardware/maintenance":{"id":"user/hardware/maintenance","title":"Maintenance","description":"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they\'re always welcome in our Discord server.","sidebar":"userSidebar"},"user/hardware/overview":{"id":"user/hardware/overview","title":"Hardware","description":"In this section you will find information related to the hardware of the Dappnode\'s host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.","sidebar":"userSidebar"},"user/hardware/temperature":{"id":"user/hardware/temperature","title":"Temperature","description":"Keeping a close eye to your Dappnode\'s temperature is part of the Node Runner\'s basic good practices. Dappnode provides you with metrics \ud83d\udcca in the main dashboard to do so.","sidebar":"userSidebar"},"user/install/arm":{"id":"user/install/arm","title":"Install - ARM","description":"Hardware Recommendations","sidebar":"userSidebar"},"user/install/dappnode-commands":{"id":"user/install/dappnode-commands","title":"Dappnode commands","description":"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.","sidebar":"userSidebar"},"user/install/iso":{"id":"user/install/iso","title":"ISO Installation","description":"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.","sidebar":"userSidebar"},"user/install/overview":{"id":"user/install/overview","title":"Installation Overview","description":"Specifications & Minimum Requirements","sidebar":"userSidebar"},"user/install/script":{"id":"user/install/script","title":"Script installation","description":"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.","sidebar":"userSidebar"},"user/packages/avalanche":{"id":"user/packages/avalanche","title":"Avalanche","description":"Avalanche: A Revolutionary Consensus Protocol","sidebar":"userSidebar"},"user/packages/bitcoin":{"id":"user/packages/bitcoin","title":"Bitcoin","description":"Exploring Bitcoin: The Pioneer of Cryptocurrency","sidebar":"userSidebar"},"user/packages/dms":{"id":"user/packages/dms","title":"Dappnode Monitoring Service (DMS)","description":"As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or \\"health\\" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.","sidebar":"userSidebar"},"user/packages/ethclassic":{"id":"user/packages/ethclassic","title":"Ethereum Classic","description":"Introducing Ethereum Classic: Preserving Blockchain Principles","sidebar":"userSidebar"},"user/packages/monero":{"id":"user/packages/monero","title":"Monero","description":"Introducing Monero: A Privacy-Centric Cryptocurrency","sidebar":"userSidebar"},"user/packages/signature":{"id":"user/packages/signature","title":"Packages\' Signature","description":"Dappnode\'s Packages Signatures","sidebar":"userSidebar"},"user/packages/swarm":{"id":"user/packages/swarm","title":"Guide to Installing Bee Node on Dappnode","description":"Introduction to Swarm","sidebar":"userSidebar"},"user/packages/understanding-dappnode-packages":{"id":"user/packages/understanding-dappnode-packages","title":"Understanding Dappnode Packages","description":"What are Dappnode packages and what features do they offer?","sidebar":"userSidebar"},"user/repository/ethereum":{"id":"user/repository/ethereum","title":"Ethereum repository","description":"Dappnode uses smart contracts to distribute the dappnode packages available in the Dappstore. The smart contracts are deployed in the Ethereum blockchain and the Dappnode client interacts with them to get the list of available packages and to download them. Your dappnode will need a connection to an Ethereum node in order to read the smart contracts and download the packages. There are two ways to establish this connection:","sidebar":"userSidebar"},"user/repository/ipfs":{"id":"user/repository/ipfs","title":"IPFS repository","description":"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:","sidebar":"userSidebar"},"user/rollups/optimism":{"id":"user/rollups/optimism","title":"Optimism Rollup","description":"Optimism is Ethereum\'s Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.","sidebar":"userSidebar"},"user/rollups/overview":{"id":"user/rollups/overview","title":"Ethereum Rollups: An Overview","description":"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/diva":{"id":"user/staking/ethereum/dvt-technologies/diva","title":"Diva package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/obol-network":{"id":"user/staking/ethereum/dvt-technologies/obol-network","title":"Obol Distributed Validator package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/ssv-network":{"id":"user/staking/ethereum/dvt-technologies/ssv-network","title":"SSV Distributed Validator package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/rocketpool":{"id":"user/staking/ethereum/lsd-pools/rocketpool","title":"Rocketpool","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/stakehouse":{"id":"user/staking/ethereum/lsd-pools/stakehouse","title":"Stakehouse","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/stakewise":{"id":"user/staking/ethereum/lsd-pools/stakewise","title":"StakeWise","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/solo/holesky":{"id":"user/staking/ethereum/solo/holesky","title":"Holesky Testnet","description":"The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.","sidebar":"userSidebar"},"user/staking/ethereum/solo/mainnet":{"id":"user/staking/ethereum/solo/mainnet","title":"Ethereum mainnet","description":"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum\'s block production by staking ETH.","sidebar":"userSidebar"},"user/staking/gnosis-chain/solo":{"id":"user/staking/gnosis-chain/solo","title":"Gnosis Chain","description":"Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It\'s operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it\'s a testament to its popularity and accessibility.","sidebar":"userSidebar"},"user/staking/lukso/solo":{"id":"user/staking/lukso/solo","title":"LUKSO","description":"LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That\'s LUKSO for you!","sidebar":"userSidebar"},"user/staking/overview":{"id":"user/staking/overview","title":"Earn with Staking in Dappnode","description":"Decentralize Proof-of-Stake chains and earn","sidebar":"userSidebar"},"user/videos-and-tutorials/crash-course":{"id":"user/videos-and-tutorials/crash-course","title":"Crash Course","description":"Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!","sidebar":"userSidebar"},"user/videos-and-tutorials/driving-school/configuration":{"id":"user/videos-and-tutorials/driving-school/configuration","title":"2. Configuring your Dappnode","description":"We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.","sidebar":"userSidebar"},"user/videos-and-tutorials/driving-school/initial-setup":{"id":"user/videos-and-tutorials/driving-school/initial-setup","title":"1. Initial Dappnode Setup","description":"Welcome to Dappnode Driving School! Here you\'ll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we\'ve got you covered.","sidebar":"userSidebar"},"user/videos-and-tutorials/guides/connect-node":{"id":"user/videos-and-tutorials/guides/connect-node","title":"How to Connect to My Blockchain Node","description":"When you\'ve set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you\'ve selected. Below is a guide on how to do this:","sidebar":"userSidebar"},"user/videos-and-tutorials/overview":{"id":"user/videos-and-tutorials/overview","title":"Videos and Tutorials","description":"Welcome to the Videos and Tutorials section! Here, you\'ll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you\'re a beginner or an advanced user, there\'s something here for everyone."}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.faf505d0.js b/assets/js/935f2afb.faf505d0.js new file mode 100644 index 000000000..03c675197 --- /dev/null +++ b/assets/js/935f2afb.faf505d0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"userSidebar":[{"type":"category","label":"Getting started","items":[{"type":"link","label":"Choose your path","href":"/docs/user/getting-started/choose-your-path","docId":"user/getting-started/choose-your-path","unlisted":false},{"type":"link","label":"Connect your Dappnode to the router","href":"/docs/user/getting-started/connect-dappnode-to-the-router","docId":"user/getting-started/connect-dappnode-to-the-router","unlisted":false},{"type":"link","label":"Access your Dappnode via WiFi","href":"/docs/user/getting-started/access-dappnode-via-wifi","docId":"user/getting-started/access-dappnode-via-wifi","unlisted":false},{"type":"link","label":"Register","href":"/docs/user/getting-started/register","docId":"user/getting-started/register","unlisted":false},{"type":"link","label":"Setup","href":"/docs/user/getting-started/setup","docId":"user/getting-started/setup","unlisted":false},{"type":"link","label":"Next steps","href":"/docs/user/getting-started/next-steps","docId":"user/getting-started/next-steps","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Access your dappnode","items":[{"type":"link","label":"Overview","href":"/docs/user/access-your-dappnode/overview","docId":"user/access-your-dappnode/overview","unlisted":false},{"type":"link","label":"Wi-Fi","href":"/docs/user/access-your-dappnode/wifi","docId":"user/access-your-dappnode/wifi","unlisted":false},{"type":"category","label":"VPN","items":[{"type":"link","label":"Overview","href":"/docs/user/access-your-dappnode/vpn/overview","docId":"user/access-your-dappnode/vpn/overview","unlisted":false},{"type":"link","label":"Wireguard","href":"/docs/user/access-your-dappnode/vpn/wireguard","docId":"user/access-your-dappnode/vpn/wireguard","unlisted":false},{"type":"link","label":"OpenVPN","href":"/docs/user/access-your-dappnode/vpn/openvpn","docId":"user/access-your-dappnode/vpn/openvpn","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Terminal (Advanced)","href":"/docs/user/access-your-dappnode/terminal","docId":"user/access-your-dappnode/terminal","unlisted":false},{"type":"link","label":"Local Proxy (Recovery)","href":"/docs/user/access-your-dappnode/local","docId":"user/access-your-dappnode/local","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Hardware","items":[{"type":"link","label":"Overview","href":"/docs/user/hardware/overview","docId":"user/hardware/overview","unlisted":false},{"type":"link","label":"Maintenance","href":"/docs/user/hardware/maintenance","docId":"user/hardware/maintenance","unlisted":false},{"type":"link","label":"Temperature","href":"/docs/user/hardware/temperature","docId":"user/hardware/temperature","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Staking","items":[{"type":"link","label":"Earn with Staking","href":"/docs/user/staking/overview","docId":"user/staking/overview","unlisted":false},{"type":"category","label":"Ethereum","items":[{"type":"category","label":"Solo Staking","items":[{"type":"link","label":"Mainnet","href":"/docs/user/staking/ethereum/solo/mainnet","docId":"user/staking/ethereum/solo/mainnet","unlisted":false},{"type":"link","label":"Testnet","href":"/docs/user/staking/ethereum/solo/holesky","docId":"user/staking/ethereum/solo/holesky","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"LSD Pools","items":[{"type":"link","label":"Rocketpool","href":"/docs/user/staking/ethereum/lsd-pools/rocketpool","docId":"user/staking/ethereum/lsd-pools/rocketpool","unlisted":false},{"type":"link","label":"Stakewise","href":"/docs/user/staking/ethereum/lsd-pools/stakewise","docId":"user/staking/ethereum/lsd-pools/stakewise","unlisted":false},{"type":"link","label":"Stakehouse","href":"/docs/user/staking/ethereum/lsd-pools/stakehouse","docId":"user/staking/ethereum/lsd-pools/stakehouse","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"DVT Technologies","items":[{"type":"link","label":"Obol","href":"/docs/user/staking/ethereum/dvt-technologies/obol-network","docId":"user/staking/ethereum/dvt-technologies/obol-network","unlisted":false},{"type":"link","label":"SSV","href":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","docId":"user/staking/ethereum/dvt-technologies/ssv-network","unlisted":false},{"type":"link","label":"Diva","href":"/docs/user/staking/ethereum/dvt-technologies/diva","docId":"user/staking/ethereum/dvt-technologies/diva","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Gnosis Chain","items":[{"type":"link","label":"Gnosis Solo Staking","href":"/docs/user/staking/gnosis-chain/solo","docId":"user/staking/gnosis-chain/solo","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"LUKSO","items":[{"type":"link","label":"LUKSO Solo Staking","href":"/docs/user/staking/lukso/solo","docId":"user/staking/lukso/solo","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Rollups","items":[{"type":"link","label":"Overview","href":"/docs/user/rollups/overview","docId":"user/rollups/overview","unlisted":false},{"type":"link","label":"Optimism","href":"/docs/user/rollups/optimism","docId":"user/rollups/optimism","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Packages","items":[{"type":"link","label":"Understanding Dappnode Packages","href":"/docs/user/packages/understanding-dappnode-packages","docId":"user/packages/understanding-dappnode-packages","unlisted":false},{"type":"link","label":"Packages\' signature","href":"/docs/user/packages/signature","docId":"user/packages/signature","unlisted":false},{"type":"link","label":"DMS","href":"/docs/user/packages/dms","docId":"user/packages/dms","unlisted":false},{"type":"link","label":"Bitcoin","href":"/docs/user/packages/bitcoin","docId":"user/packages/bitcoin","unlisted":false},{"type":"link","label":"Eth Classic","href":"/docs/user/packages/ethclassic","docId":"user/packages/ethclassic","unlisted":false},{"type":"link","label":"Avalanche","href":"/docs/user/packages/avalanche","docId":"user/packages/avalanche","unlisted":false},{"type":"link","label":"Monero","href":"/docs/user/packages/monero","docId":"user/packages/monero","unlisted":false},{"type":"link","label":"Swarm","href":"/docs/user/packages/swarm","docId":"user/packages/swarm","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Repository","items":[{"type":"link","label":"Ethereum","href":"/docs/user/repository/ethereum","docId":"user/repository/ethereum","unlisted":false},{"type":"link","label":"IPFS","href":"/docs/user/repository/ipfs","docId":"user/repository/ipfs","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Install","items":[{"type":"link","label":"Overview","href":"/docs/user/install/overview","docId":"user/install/overview","unlisted":false},{"type":"link","label":"ISO","href":"/docs/user/install/iso","docId":"user/install/iso","unlisted":false},{"type":"link","label":"Script","href":"/docs/user/install/script","docId":"user/install/script","unlisted":false},{"type":"link","label":"ARM","href":"/docs/user/install/arm","docId":"user/install/arm","unlisted":false},{"type":"link","label":"Dappnode commands","href":"/docs/user/install/dappnode-commands","docId":"user/install/dappnode-commands","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Ethical metrics","items":[{"type":"link","label":"Overview","href":"/docs/user/ethical-metrics/overview","docId":"user/ethical-metrics/overview","unlisted":false},{"type":"link","label":"Setting up Notifications","href":"/docs/user/ethical-metrics/setup","docId":"user/ethical-metrics/setup","unlisted":false},{"type":"link","label":"Metrics collected","href":"/docs/user/ethical-metrics/metrics","docId":"user/ethical-metrics/metrics","unlisted":false},{"type":"link","label":"Troubleshooting","href":"/docs/user/ethical-metrics/troubleshooting","docId":"user/ethical-metrics/troubleshooting","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Dappnode Cloud","items":[{"type":"link","label":"Overview","href":"/docs/user/dappnode-cloud/overview","docId":"user/dappnode-cloud/overview","unlisted":false},{"type":"category","label":"Cloud Providers","items":[{"type":"category","label":"AWS","items":[{"type":"link","label":"AWS Overview","href":"/docs/user/dappnode-cloud/providers/aws/overview","docId":"user/dappnode-cloud/providers/aws/overview","unlisted":false},{"type":"link","label":"How to set up an Instance","href":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","docId":"user/dappnode-cloud/providers/aws/set-up-instance","unlisted":false},{"type":"link","label":"FAQs & Troubleshooting","href":"/docs/user/dappnode-cloud/providers/aws/faqs","docId":"user/dappnode-cloud/providers/aws/faqs","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"More coming soon","href":"/docs/user/dappnode-cloud/providers/coming-soon","docId":"user/dappnode-cloud/providers/coming-soon","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"category","label":"Videos and tutorials","items":[{"type":"category","label":"Driving School","items":[{"type":"link","label":"Initial setup","href":"/docs/user/videos-and-tutorials/driving-school/initial-setup","docId":"user/videos-and-tutorials/driving-school/initial-setup","unlisted":false},{"type":"link","label":"Configuration","href":"/docs/user/videos-and-tutorials/driving-school/configuration","docId":"user/videos-and-tutorials/driving-school/configuration","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Crash Course","href":"/docs/user/videos-and-tutorials/crash-course","docId":"user/videos-and-tutorials/crash-course","unlisted":false},{"type":"category","label":"Guides","items":[{"type":"link","label":"How to connect a wallet to my node","href":"/docs/user/videos-and-tutorials/guides/connect-node","docId":"user/videos-and-tutorials/guides/connect-node","unlisted":false}],"collapsed":true,"collapsible":true}],"collapsed":true,"collapsible":true},{"type":"link","label":"FAQs","href":"/docs/user/faqs","docId":"user/faqs","unlisted":false}],"devSidebar":[{"type":"link","label":"Introduction","href":"/docs/dev","docId":"dev","unlisted":false},{"type":"category","label":"DappnodeSDK","items":[{"type":"link","label":"Overview","href":"/docs/dev/sdk/overview","docId":"dev/sdk/overview","unlisted":false},{"type":"link","label":"Commands","href":"/docs/dev/sdk/commands","docId":"dev/sdk/commands","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"File references","items":[{"type":"link","label":"Docker Compose","href":"/docs/dev/references/docker-compose","docId":"dev/references/docker-compose","unlisted":false},{"type":"link","label":"Dappnode Manifest","href":"/docs/dev/references/manifest","docId":"dev/references/manifest","unlisted":false},{"type":"link","label":"Setup Wizard","href":"/docs/dev/references/setup-wizard","docId":"dev/references/setup-wizard","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Github Actions","href":"/docs/dev/github-actions","docId":"dev/github-actions","unlisted":false}],"smoothSidebar":[{"type":"link","label":"Smooth","href":"/docs/smooth","docId":"smooth","unlisted":false},{"type":"category","label":"Deep dive into Smooth","items":[{"type":"link","label":"Overview","href":"/docs/smooth/deep-dive-into-smooth/overview","docId":"smooth/deep-dive-into-smooth/overview","unlisted":false},{"type":"link","label":"Rewards","href":"/docs/smooth/deep-dive-into-smooth/rewards","docId":"smooth/deep-dive-into-smooth/rewards","unlisted":false},{"type":"link","label":"Validator States","href":"/docs/smooth/deep-dive-into-smooth/states","docId":"smooth/deep-dive-into-smooth/states","unlisted":false},{"type":"link","label":"Oracle & Smart Contract","href":"/docs/smooth/deep-dive-into-smooth/oracle-sm","docId":"smooth/deep-dive-into-smooth/oracle-sm","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Subscribe to Smooth!","items":[{"type":"link","label":"Overview","href":"/docs/smooth/subscribe-to-smooth/overview","docId":"smooth/subscribe-to-smooth/overview","unlisted":false},{"type":"link","label":"Automatic subscription","href":"/docs/smooth/subscribe-to-smooth/automatic","docId":"smooth/subscribe-to-smooth/automatic","unlisted":false},{"type":"link","label":"Manual subscription","href":"/docs/smooth/subscribe-to-smooth/manual","docId":"smooth/subscribe-to-smooth/manual","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"link","label":"Unsubscribe from Smooth","href":"/docs/smooth/unsubscribe-from-smooth","docId":"smooth/unsubscribe-from-smooth","unlisted":false},{"type":"link","label":"FAQ / Glossary","href":"/docs/smooth/faq-glossary","docId":"smooth/faq-glossary","unlisted":false}],"daoSidebar":[{"type":"link","label":"DAO","href":"/docs/dao","docId":"dao","unlisted":false},{"type":"link","label":"The NODE Economy","href":"/docs/dao/node-basics","docId":"dao/node-basics","unlisted":false},{"type":"link","label":"Liquidity Mining","href":"/docs/dao/liquidity-mining","docId":"dao/liquidity-mining","unlisted":false},{"type":"link","label":"Dappnode DAO FAQ","href":"/docs/dao/faq","docId":"dao/faq","unlisted":false}]},"docs":{"dao":{"id":"dao","title":"DAO","description":"DAO information","sidebar":"daoSidebar"},"dao/faq":{"id":"dao/faq","title":"Dappnode DAO FAQ","description":"What is a DAO?","sidebar":"daoSidebar"},"dao/liquidity-mining":{"id":"dao/liquidity-mining","title":"Liquidity Mining","description":"Liquidity Mining (LM) launched on Jul 17 2021, 2000 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:","sidebar":"daoSidebar"},"dao/node-basics":{"id":"dao/node-basics","title":"The NODE Economy","description":"NODE Basics","sidebar":"daoSidebar"},"dao/node-drop":{"id":"dao/node-drop","title":"NODEdrop","description":"\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\""},"dao/node-stream":{"id":"dao/node-stream","title":"NODEstream","description":"\\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\\""},"dev":{"id":"dev","title":"Welcome to the Developer Documentation!","description":"Welcome to the Dappnode\'s developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you\'re new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.","sidebar":"devSidebar"},"dev/github-actions":{"id":"dev/github-actions","title":"GitHub Actions for Dappnode Packages","description":"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases.","sidebar":"devSidebar"},"dev/references/docker-compose":{"id":"dev/references/docker-compose","title":"Docker compose file","description":"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.","sidebar":"devSidebar"},"dev/references/manifest":{"id":"dev/references/manifest","title":"Dappnode Package (DNP) manifest","description":"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:","sidebar":"devSidebar"},"dev/references/setup-wizard":{"id":"dev/references/setup-wizard","title":"Wizard Reference","description":"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.","sidebar":"devSidebar"},"dev/sdk/commands":{"id":"dev/sdk/commands","title":"Main commands","description":"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).","sidebar":"devSidebar"},"dev/sdk/overview":{"id":"dev/sdk/overview","title":"DappnodeSDK","description":"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.","sidebar":"devSidebar"},"smooth":{"id":"smooth","title":"Smooth","description":"Smooth introduction","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/oracle-sm":{"id":"smooth/deep-dive-into-smooth/oracle-sm","title":"Smooth\'s architecture","description":"Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible of computing the rewards of each validator.","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/overview":{"id":"smooth/deep-dive-into-smooth/overview","title":"Deep Dive into Smooth!","description":"In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/rewards":{"id":"smooth/deep-dive-into-smooth/rewards","title":"Rewards","description":"Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.","sidebar":"smoothSidebar"},"smooth/deep-dive-into-smooth/states":{"id":"smooth/deep-dive-into-smooth/states","title":"Smooth Validator States","description":"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.","sidebar":"smoothSidebar"},"smooth/faq-glossary":{"id":"smooth/faq-glossary","title":"FAQ & Glossary","description":"FAQ","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/automatic":{"id":"smooth/subscribe-to-smooth/automatic","title":"Automatic Subscription","description":"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth\'s address and subscribing automatically when proposing your next block.","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/manual":{"id":"smooth/subscribe-to-smooth/manual","title":"Manual Subscription","description":"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you\'ll change your validator\'s fee recipient to Smooth\'s address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you\'ll immediately start accumulating rewards from Smooth.","sidebar":"smoothSidebar"},"smooth/subscribe-to-smooth/overview":{"id":"smooth/subscribe-to-smooth/overview","title":"Subscribing to Smooth","description":"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.","sidebar":"smoothSidebar"},"smooth/unsubscribe-from-smooth":{"id":"smooth/unsubscribe-from-smooth","title":"Unsubscribing from Smooth.","description":"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth\'s website and it only takes one simple transaction.","sidebar":"smoothSidebar"},"user/access-your-dappnode/local":{"id":"user/access-your-dappnode/local","title":"Local Proxy Access to Dappnode","description":"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it\'s essential to understand that due to certain network incompatibilities, this method might not work for all users.","sidebar":"userSidebar"},"user/access-your-dappnode/overview":{"id":"user/access-your-dappnode/overview","title":"\ud83c\udf10 Access your Dappnode","description":"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.","sidebar":"userSidebar"},"user/access-your-dappnode/terminal":{"id":"user/access-your-dappnode/terminal","title":"Terminal Access to Dappnode","description":"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/openvpn":{"id":"user/access-your-dappnode/vpn/openvpn","title":"OpenVPN Access to Dappnode","description":"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here\'s how you can set it up with Dappnode.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/overview":{"id":"user/access-your-dappnode/vpn/overview","title":"VPN Access to Dappnode","description":"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.","sidebar":"userSidebar"},"user/access-your-dappnode/vpn/wireguard":{"id":"user/access-your-dappnode/vpn/wireguard","title":"WireGuard Access to Dappnode","description":"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.","sidebar":"userSidebar"},"user/access-your-dappnode/wifi":{"id":"user/access-your-dappnode/wifi","title":"Wi-Fi Access to Dappnode","description":"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode\'s Wi-Fi hotspot.","sidebar":"userSidebar"},"user/dappnode-cloud/overview":{"id":"user/dappnode-cloud/overview","title":"What is Dappnode Cloud?","description":"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/faqs":{"id":"user/dappnode-cloud/providers/aws/faqs","title":"FAQs & Troubleshooting","description":"Which machine should I choose?","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/overview":{"id":"user/dappnode-cloud/providers/aws/overview","title":"AWS","description":"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.","sidebar":"userSidebar"},"user/dappnode-cloud/providers/aws/set-up-instance":{"id":"user/dappnode-cloud/providers/aws/set-up-instance","title":"How to Set Up an Instance","description":"To launch a Dappnode AMI instance, follow these steps:","sidebar":"userSidebar"},"user/dappnode-cloud/providers/coming-soon":{"id":"user/dappnode-cloud/providers/coming-soon","title":"More coming soon","description":"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.","sidebar":"userSidebar"},"user/ethical-metrics/metrics":{"id":"user/ethical-metrics/metrics","title":"Metrics Collected by Ethical Metrics","description":"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community\'s continuous requests to offer alerts, we came up with a solution that doesn\'t compromise your privacy.","sidebar":"userSidebar"},"user/ethical-metrics/overview":{"id":"user/ethical-metrics/overview","title":"Ethical Metrics","description":"Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.","sidebar":"userSidebar"},"user/ethical-metrics/setup":{"id":"user/ethical-metrics/setup","title":"Setting up Ethical Metrics","description":"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.","sidebar":"userSidebar"},"user/ethical-metrics/troubleshooting":{"id":"user/ethical-metrics/troubleshooting","title":"Troubleshooting","description":"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn\'t listed, please pay us a visit in the Dappnode Discord and we\'ll be happy to assist you!","sidebar":"userSidebar"},"user/faqs":{"id":"user/faqs","title":"FAQs","description":"How can I start validating?","sidebar":"userSidebar"},"user/getting-started/access-dappnode-via-wifi":{"id":"user/getting-started/access-dappnode-via-wifi","title":"Access Dappnode via Wi-Fi","description":"After connecting your Dappnode to the router and power, and turning it on, it\'s time to connect to it.","sidebar":"userSidebar"},"user/getting-started/choose-your-path":{"id":"user/getting-started/choose-your-path","title":"Choose your path","description":"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode.","sidebar":"userSidebar"},"user/getting-started/connect-dappnode-to-the-router":{"id":"user/getting-started/connect-dappnode-to-the-router","title":"Connect your dappnode to the router and power","description":"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.","sidebar":"userSidebar"},"user/getting-started/next-steps":{"id":"user/getting-started/next-steps","title":"Next Steps","description":"Now that your DAppNode is set up and ready to go, it\'s time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:","sidebar":"userSidebar"},"user/getting-started/register":{"id":"user/getting-started/register","title":"Register","description":"1. Register as New User","sidebar":"userSidebar"},"user/getting-started/setup":{"id":"user/getting-started/setup","title":"Setup","description":"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.","sidebar":"userSidebar"},"user/hardware/maintenance":{"id":"user/hardware/maintenance","title":"Maintenance","description":"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they\'re always welcome in our Discord server.","sidebar":"userSidebar"},"user/hardware/overview":{"id":"user/hardware/overview","title":"Hardware","description":"In this section you will find information related to the hardware of the Dappnode\'s host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.","sidebar":"userSidebar"},"user/hardware/temperature":{"id":"user/hardware/temperature","title":"Temperature","description":"Keeping a close eye to your Dappnode\'s temperature is part of the Node Runner\'s basic good practices. Dappnode provides you with metrics \ud83d\udcca in the main dashboard to do so.","sidebar":"userSidebar"},"user/install/arm":{"id":"user/install/arm","title":"Install - ARM","description":"Hardware Recommendations","sidebar":"userSidebar"},"user/install/dappnode-commands":{"id":"user/install/dappnode-commands","title":"Dappnode commands","description":"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.","sidebar":"userSidebar"},"user/install/iso":{"id":"user/install/iso","title":"ISO Installation","description":"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.","sidebar":"userSidebar"},"user/install/overview":{"id":"user/install/overview","title":"Installation Overview","description":"Specifications & Minimum Requirements","sidebar":"userSidebar"},"user/install/script":{"id":"user/install/script","title":"Script installation","description":"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.","sidebar":"userSidebar"},"user/packages/avalanche":{"id":"user/packages/avalanche","title":"Avalanche","description":"Avalanche: A Revolutionary Consensus Protocol","sidebar":"userSidebar"},"user/packages/bitcoin":{"id":"user/packages/bitcoin","title":"Bitcoin","description":"Exploring Bitcoin: The Pioneer of Cryptocurrency","sidebar":"userSidebar"},"user/packages/dms":{"id":"user/packages/dms","title":"Dappnode Monitoring Service (DMS)","description":"As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or \\"health\\" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.","sidebar":"userSidebar"},"user/packages/ethclassic":{"id":"user/packages/ethclassic","title":"Ethereum Classic","description":"Introducing Ethereum Classic: Preserving Blockchain Principles","sidebar":"userSidebar"},"user/packages/monero":{"id":"user/packages/monero","title":"Monero","description":"Introducing Monero: A Privacy-Centric Cryptocurrency","sidebar":"userSidebar"},"user/packages/signature":{"id":"user/packages/signature","title":"Packages\' Signature","description":"Dappnode\'s Packages Signatures","sidebar":"userSidebar"},"user/packages/swarm":{"id":"user/packages/swarm","title":"Guide to Installing Bee Node on Dappnode","description":"Introduction to Swarm","sidebar":"userSidebar"},"user/packages/understanding-dappnode-packages":{"id":"user/packages/understanding-dappnode-packages","title":"Understanding Dappnode Packages","description":"What are Dappnode packages and what features do they offer?","sidebar":"userSidebar"},"user/repository/ethereum":{"id":"user/repository/ethereum","title":"Ethereum repository","description":"Dappnode uses smart contracts to distribute the dappnode packages available in the Dappstore. The smart contracts are deployed in the Ethereum blockchain and the Dappnode client interacts with them to get the list of available packages and to download them. Your dappnode will need a connection to an Ethereum node in order to read the smart contracts and download the packages. There are two ways to establish this connection:","sidebar":"userSidebar"},"user/repository/ipfs":{"id":"user/repository/ipfs","title":"IPFS repository","description":"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:","sidebar":"userSidebar"},"user/rollups/optimism":{"id":"user/rollups/optimism","title":"Optimism Rollup","description":"Optimism is Ethereum\'s Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.","sidebar":"userSidebar"},"user/rollups/overview":{"id":"user/rollups/overview","title":"Ethereum Rollups: An Overview","description":"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/diva":{"id":"user/staking/ethereum/dvt-technologies/diva","title":"Diva package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/obol-network":{"id":"user/staking/ethereum/dvt-technologies/obol-network","title":"Obol Distributed Validator package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/dvt-technologies/ssv-network":{"id":"user/staking/ethereum/dvt-technologies/ssv-network","title":"SSV Distributed Validator package for Dappnode","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/rocketpool":{"id":"user/staking/ethereum/lsd-pools/rocketpool","title":"Rocketpool","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/stakehouse":{"id":"user/staking/ethereum/lsd-pools/stakehouse","title":"Stakehouse","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/lsd-pools/stakewise":{"id":"user/staking/ethereum/lsd-pools/stakewise","title":"StakeWise","description":"---","sidebar":"userSidebar"},"user/staking/ethereum/solo/holesky":{"id":"user/staking/ethereum/solo/holesky","title":"Holesky Testnet","description":"The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.","sidebar":"userSidebar"},"user/staking/ethereum/solo/mainnet":{"id":"user/staking/ethereum/solo/mainnet","title":"Ethereum mainnet","description":"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum\'s block production by staking ETH.","sidebar":"userSidebar"},"user/staking/gnosis-chain/solo":{"id":"user/staking/gnosis-chain/solo","title":"Gnosis Chain","description":"Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It\'s operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it\'s a testament to its popularity and accessibility.","sidebar":"userSidebar"},"user/staking/lukso/solo":{"id":"user/staking/lukso/solo","title":"LUKSO","description":"LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That\'s LUKSO for you!","sidebar":"userSidebar"},"user/staking/overview":{"id":"user/staking/overview","title":"Earn with Staking in Dappnode","description":"Decentralize Proof-of-Stake chains and earn","sidebar":"userSidebar"},"user/videos-and-tutorials/crash-course":{"id":"user/videos-and-tutorials/crash-course","title":"Crash Course","description":"Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!","sidebar":"userSidebar"},"user/videos-and-tutorials/driving-school/configuration":{"id":"user/videos-and-tutorials/driving-school/configuration","title":"2. Configuring your Dappnode","description":"We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.","sidebar":"userSidebar"},"user/videos-and-tutorials/driving-school/initial-setup":{"id":"user/videos-and-tutorials/driving-school/initial-setup","title":"1. Initial Dappnode Setup","description":"Welcome to Dappnode Driving School! Here you\'ll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we\'ve got you covered.","sidebar":"userSidebar"},"user/videos-and-tutorials/guides/connect-node":{"id":"user/videos-and-tutorials/guides/connect-node","title":"How to Connect to My Blockchain Node","description":"When you\'ve set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you\'ve selected. Below is a guide on how to do this:","sidebar":"userSidebar"},"user/videos-and-tutorials/overview":{"id":"user/videos-and-tutorials/overview","title":"Videos and Tutorials","description":"Welcome to the Videos and Tutorials section! Here, you\'ll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you\'re a beginner or an advanced user, there\'s something here for everyone."}}}')}}]); \ No newline at end of file diff --git a/assets/js/94131f31.7685661d.js b/assets/js/94131f31.7685661d.js deleted file mode 100644 index 42966b3f3..000000000 --- a/assets/js/94131f31.7685661d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4307],{4137:(e,t,a)=>{a.d(t,{Zo:()=>m,kt:()=>c});var n=a(7294);function l(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?r(Object(a),!0).forEach((function(t){l(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):r(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function p(e,t){if(null==e)return{};var a,n,l=function(e,t){if(null==e)return{};var a,n,l={},r=Object.keys(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||(l[a]=e[a]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)a=r[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(l[a]=e[a])}return l}var o=n.createContext({}),u=function(e){var t=n.useContext(o),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},m=function(e){var t=u(e.components);return n.createElement(o.Provider,{value:t},e.children)},s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},k=n.forwardRef((function(e,t){var a=e.components,l=e.mdxType,r=e.originalType,o=e.parentName,m=p(e,["components","mdxType","originalType","parentName"]),s=u(a),k=l,c=s["".concat(o,".").concat(k)]||s[k]||d[k]||r;return a?n.createElement(c,i(i({ref:t},m),{},{components:a})):n.createElement(c,i({ref:t},m))}));function c(e,t){var a=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var r=a.length,i=new Array(r);i[0]=k;var p={};for(var o in t)hasOwnProperty.call(t,o)&&(p[o]=t[o]);p.originalType=e,p[s]="string"==typeof e?e:l,i[1]=p;for(var u=2;u<r;u++)i[u]=a[u];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}k.displayName="MDXCreateElement"},8566:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>p,toc:()=>u});var n=a(7462),l=(a(7294),a(4137));const r={},i="Wizard Reference",p={unversionedId:"dev/references/setup-wizard",id:"dev/references/setup-wizard",title:"Wizard Reference",description:"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.",source:"@site/docs/dev/references/setup-wizard.md",sourceDirName:"dev/references",slug:"/dev/references/setup-wizard",permalink:"/docs/dev/references/setup-wizard",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/references/setup-wizard.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Dappnode Package (DNP) manifest",permalink:"/docs/dev/references/manifest"},next:{title:"GitHub Actions for Dappnode Packages",permalink:"/docs/dev/github-actions"}},o={},u=[{value:"How to use",id:"how-to-use",level:2},{value:"Example",id:"example",level:2},{value:"version",id:"version",level:2},{value:"fields",id:"fields",level:2},{value:"id",id:"id",level:3},{value:"target",id:"target",level:3},{value:"environment",id:"environment",level:4},{value:"name",id:"name",level:5},{value:"service",id:"service",level:5},{value:"portMapping",id:"portmapping",level:4},{value:"containerPort",id:"containerport",level:5},{value:"service",id:"service-1",level:5},{value:"namedVolumeMountpoint",id:"namedvolumemountpoint",level:4},{value:"volumeName",id:"volumename",level:5},{value:"allNamedVolumesMountpoint",id:"allnamedvolumesmountpoint",level:4},{value:"fileUpload",id:"fileupload",level:4},{value:"path",id:"path",level:5},{value:"service",id:"service-2",level:5},{value:"title",id:"title",level:3},{value:"description",id:"description",level:3},{value:"secret",id:"secret",level:3},{value:"pattern",id:"pattern",level:3},{value:"patternErrorMessage",id:"patternerrormessage",level:3},{value:"enum",id:"enum",level:3},{value:"required",id:"required",level:3},{value:"if",id:"if",level:3}],m={toc:u},s="wrapper";function d(e){let{components:t,...a}=e;return(0,l.kt)(s,(0,n.Z)({},m,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"wizard-reference"},"Wizard Reference"),(0,l.kt)("p",null,"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package."),(0,l.kt)("h2",{id:"how-to-use"},"How to use"),(0,l.kt)("p",null,"To add this functionality, create a file ",(0,l.kt)("inlineCode",{parentName:"p"},"setup-wizard.yml")," in the root of your Dappnode package directory. Both JSON and YAML formats are supported, but YAML makes writing markdown text blocks much easier (its used in the ",(0,l.kt)("a",{parentName:"p",href:"#description"},(0,l.kt)("inlineCode",{parentName:"a"},"description"))," property)."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-diff"}," DappnodePackage-my-package.public.dappnode.eth/\n \u251c\u2500\u2500 build\n \u2502 \u251c\u2500\u2500 ...\n \u2502 \u2514\u2500\u2500 Dockerfile\n \u251c\u2500\u2500 avatar-my-package.png\n \u251c\u2500\u2500 dappnode_package.json\n \u251c\u2500\u2500 docker-compose.yml\n+ \u2514\u2500\u2500 setup-wizard.yml\n")),(0,l.kt)("h2",{id:"example"},"Example"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},'version: "2"\nfields:\n - id: payoutAddress,\n target:\n type: environment\n name: PAYOUT_ADDRESS\n service: service1\n title: Payout address\n description: >-\n Address to send **payouts** too. [More info](https://more.info)\n Supports markdown and multiline\n secret: true\n pattern: "^0x[a-fA-F0-9]{40}$"\n patternErrorMessage: Must be a valid address (0x1fd16a...)\n enum:\n - normal\n - archive\n - advanced\n required: true\n if: { "mode": { "enum": ["advanced"] } }\n')),(0,l.kt)("h2",{id:"version"},"version"),(0,l.kt)("p",null,"Identify this setup wizard version. Currently only supports version ",(0,l.kt)("inlineCode",{parentName:"p"},'"2"')),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string")),(0,l.kt)("li",{parentName:"ul"},"value: ",(0,l.kt)("inlineCode",{parentName:"li"},'"2"'))),(0,l.kt)("h2",{id:"fields"},"fields"),(0,l.kt)("p",null,"Setup wizard fields. Fields to show in the setup wizard form UI"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"object")," with the following properties:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Property"),(0,l.kt)("th",{parentName:"tr",align:null},"Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Required"),(0,l.kt)("th",{parentName:"tr",align:null},"Default"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"target")),(0,l.kt)("td",{parentName:"tr",align:null},"object"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"id")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required")),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"title")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required")),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"description")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("strong",{parentName:"td"},"Required")),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"secret")),(0,l.kt)("td",{parentName:"tr",align:null},"boolean"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"false"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"pattern")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"patternErrorMessage")),(0,l.kt)("td",{parentName:"tr",align:null},"string"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"enum")),(0,l.kt)("td",{parentName:"tr",align:null},"array"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"required")),(0,l.kt)("td",{parentName:"tr",align:null},"boolean"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"if")),(0,l.kt)("td",{parentName:"tr",align:null},"object"),(0,l.kt)("td",{parentName:"tr",align:null},"Optional"),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("h3",{id:"id"},"id"),(0,l.kt)("p",null,"Unique property ID required for internal form parsing, and to use the ",(0,l.kt)("inlineCode",{parentName:"p"},"if")," conditional block."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"id: payoutAddress\n")),(0,l.kt)("h3",{id:"target"},"target"),(0,l.kt)("p",null,"Maps the setup wizard field to a package configuration option. Supports:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#environment"},(0,l.kt)("inlineCode",{parentName:"a"},"environment")),": For environment variables"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#portMapping"},(0,l.kt)("inlineCode",{parentName:"a"},"portMapping")),": For port mapping"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#namedVolumeMountpoint"},(0,l.kt)("inlineCode",{parentName:"a"},"namedVolumeMountpoint")),": To allow hosting a specific package volume into a different drive or mountpoint"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#allNamedVolumesMountpoint"},(0,l.kt)("inlineCode",{parentName:"a"},"allNamedVolumesMountpoint")),": To allow hosting all package volumes into a different drive or mountpoint"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#fileUpload"},(0,l.kt)("inlineCode",{parentName:"a"},"fileUpload")),": To upload user files to the package container")),(0,l.kt)("h4",{id:"environment"},"environment"),(0,l.kt)("p",null,"To customize environment variables with user input. Targeted variables must be declared in the package's docker-compose. You can customize the type of input shown in the UI with this field properties"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#secret"},(0,l.kt)("inlineCode",{parentName:"a"},"secret")),": Hides input, to collect sensitive data."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#pattern"},(0,l.kt)("inlineCode",{parentName:"a"},"pattern")),": To validate input against any Regex expression."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"#enum"},(0,l.kt)("inlineCode",{parentName:"a"},"enum")),": Show as a select dropdown menu.")),(0,l.kt)("p",null,"It exists two ways of defining environment variables.\nThe first one, where you define one environment var for one service, you the format to do it is the following:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"target:\n type: environment\n name: PAYOUT_ADDRESS\n service: service1\n")),(0,l.kt)("p",null,"In case you want to define an environment variable that is used in multiple services you can define it in the next way:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"target:\n type: environment\n name: PAYOUT_ADDRESS\n service: [service1, service2, service2]\n")),(0,l.kt)("h5",{id:"name"},"name"),(0,l.kt)("p",null,"The name of the environment variable as declared in the docker-compose."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"name: PAYOUT_ADDRESS\n")),(0,l.kt)("h5",{id:"service"},"service"),(0,l.kt)("p",null,"In multi-service package, which service should be targeted with this setting."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"service: service1\n")),(0,l.kt)("h4",{id:"portmapping"},"portMapping"),(0,l.kt)("p",null,"To customize port mappings with user input. Targeted container port must be declared in the package's docker-compose."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"target:\n type: portMapping\n containerPort: 9554/UDP\n service: service1\n")),(0,l.kt)("h5",{id:"containerport"},"containerPort"),(0,l.kt)("p",null,"Exposed container port to map to. Must follow the format ",(0,l.kt)("inlineCode",{parentName:"p"},"{portNumber}")," or ",(0,l.kt)("inlineCode",{parentName:"p"},"{portNumber}/{PROTOCOL}"),", where PROTOCOL must be ",(0,l.kt)("inlineCode",{parentName:"p"},"TCP")," or ",(0,l.kt)("inlineCode",{parentName:"p"},"UDP")," in all caps."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"containerPort: 9554\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"containerPort: 9554/TCP\n")),(0,l.kt)("h5",{id:"service-1"},"service"),(0,l.kt)("p",null,"See ",(0,l.kt)("a",{parentName:"p",href:"#service"},"service")),(0,l.kt)("h4",{id:"namedvolumemountpoint"},"namedVolumeMountpoint"),(0,l.kt)("p",null,"To allow hosting a specific package volume into a different drive or mountpoint"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"target:\n type: namedVolumeMountpoint\n volumeName: blockchain_data\n")),(0,l.kt)("h5",{id:"volumename"},"volumeName"),(0,l.kt)("p",null,"Name of the docker volume to allow the user to change its mountpoint. Must have the exact same name as declared in the package's compose ",(0,l.kt)("inlineCode",{parentName:"p"},"volumes")," section."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"volumeName: blockchain_data\n")),(0,l.kt)("h4",{id:"allnamedvolumesmountpoint"},"allNamedVolumesMountpoint"),(0,l.kt)("p",null,"To allow hosting all package volumes into a different drive or mountpoint at once. Use this option if your package has multiple heavy volumes whose mountpoint should be changed at once."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"target:\n type: allNamedVolumesMountpoint\n")),(0,l.kt)("h4",{id:"fileupload"},"fileUpload"),(0,l.kt)("p",null,"To allow uploading user files to the package container"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"target:\n type: fileUpload\n path: /usr/src/config.json\n service: service1\n")),(0,l.kt)("h5",{id:"path"},"path"),(0,l.kt)("p",null,"Destination path to upload the file to. Must be a valid absolute path in the package container."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"path: /usr/src/config.json\n")),(0,l.kt)("h5",{id:"service-2"},"service"),(0,l.kt)("p",null,"See ",(0,l.kt)("a",{parentName:"p",href:"#service"},"service")),(0,l.kt)("h3",{id:"title"},"title"),(0,l.kt)("p",null,"The Title Schema"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"default: ",(0,l.kt)("inlineCode",{parentName:"li"},'""')),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"title: Payout address\n")),(0,l.kt)("h3",{id:"description"},"description"),(0,l.kt)("p",null,"The Description Schema"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is ",(0,l.kt)("strong",{parentName:"li"},"required")),(0,l.kt)("li",{parentName:"ul"},"default: ",(0,l.kt)("inlineCode",{parentName:"li"},'""')),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"description: >-\n Address to send **payouts** too. [More info](https://more.info)\n Supports markdown and multiline\n")),(0,l.kt)("h3",{id:"secret"},"secret"),(0,l.kt)("p",null,'Display field input as hidden. Use to collect sensitive data. It will automatically activate if the field name contains "secret" "passphrase" or "password". Only available with target environment.'),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"default: ",(0,l.kt)("inlineCode",{parentName:"li"},"false")),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"boolean"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"secret: true\n")),(0,l.kt)("h3",{id:"pattern"},"pattern"),(0,l.kt)("p",null,"Enforce this property to satisfy a regex before continuing. Only available with target environment. Use also ",(0,l.kt)("a",{parentName:"p",href:"#patternErrorMessage"},(0,l.kt)("inlineCode",{parentName:"a"},"patternErrorMessage"))," to show a nicer error message when regex validation fails."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},'pattern: "^0x[a-fA-F0-9]{40}$"\n')),(0,l.kt)("h3",{id:"patternerrormessage"},"patternErrorMessage"),(0,l.kt)("p",null,"Error to show if the regex pattern validation fails. Only available with target environment."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"patternErrorMessage: Must be a valid address (0x1fd16a...)\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"patternErrorMessage: Must be at least 8 characters long\n")),(0,l.kt)("h3",{id:"enum"},"enum"),(0,l.kt)("p",null,"List valid options. Will automatically display the input as a select menu. Only available with target environment."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: Array type: ",(0,l.kt)("inlineCode",{parentName:"li"},"string[]"))),(0,l.kt)("p",null,"All items must be of the type: ",(0,l.kt)("inlineCode",{parentName:"p"},"string")),(0,l.kt)("p",null,"Examples"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"enum:\n - normal\n - archive\n - advanced\n")),(0,l.kt)("h3",{id:"required"},"required"),(0,l.kt)("p",null,"Enforce this property to be provided before continuing"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"boolean"))),(0,l.kt)("p",null,"Examples"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},"required: true\n")),(0,l.kt)("h3",{id:"if"},"if"),(0,l.kt)("p",null,"Only display the field property if the ",(0,l.kt)("inlineCode",{parentName:"p"},"if")," schema is valid against the current form data provided by the user. The form data is an object with the structure ",(0,l.kt)("inlineCode",{parentName:"p"},"{ [field.id]: JSONSchema }"),"."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"is optional"),(0,l.kt)("li",{parentName:"ul"},"type: ",(0,l.kt)("inlineCode",{parentName:"li"},"object"))),(0,l.kt)("p",null,"Examples:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},'if: { "mode": { "enum": ["advanced"] } }\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-yaml"},'if: { "mode": { "enum": ["archive"] } }\n')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/94131f31.df2e8a1b.js b/assets/js/94131f31.df2e8a1b.js new file mode 100644 index 000000000..7ed986f93 --- /dev/null +++ b/assets/js/94131f31.df2e8a1b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4307],{6088:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>a,contentTitle:()=>d,default:()=>h,frontMatter:()=>l,metadata:()=>t,toc:()=>c});var r=i(5893),s=i(1151);const l={},d="Wizard Reference",t={id:"dev/references/setup-wizard",title:"Wizard Reference",description:"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.",source:"@site/docs/dev/references/setup-wizard.md",sourceDirName:"dev/references",slug:"/dev/references/setup-wizard",permalink:"/docs/dev/references/setup-wizard",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev/references/setup-wizard.md",tags:[],version:"current",frontMatter:{},sidebar:"devSidebar",previous:{title:"Dappnode Package (DNP) manifest",permalink:"/docs/dev/references/manifest"},next:{title:"GitHub Actions for Dappnode Packages",permalink:"/docs/dev/github-actions"}},a={},c=[{value:"How to use",id:"how-to-use",level:2},{value:"Example",id:"example",level:2},{value:"version",id:"version",level:2},{value:"fields",id:"fields",level:2},{value:"id",id:"id",level:3},{value:"target",id:"target",level:3},{value:"environment",id:"environment",level:4},{value:"name",id:"name",level:5},{value:"service",id:"service",level:5},{value:"portMapping",id:"portmapping",level:4},{value:"containerPort",id:"containerport",level:5},{value:"service",id:"service-1",level:5},{value:"namedVolumeMountpoint",id:"namedvolumemountpoint",level:4},{value:"volumeName",id:"volumename",level:5},{value:"allNamedVolumesMountpoint",id:"allnamedvolumesmountpoint",level:4},{value:"fileUpload",id:"fileupload",level:4},{value:"path",id:"path",level:5},{value:"service",id:"service-2",level:5},{value:"title",id:"title",level:3},{value:"description",id:"description",level:3},{value:"secret",id:"secret",level:3},{value:"pattern",id:"pattern",level:3},{value:"patternErrorMessage",id:"patternerrormessage",level:3},{value:"enum",id:"enum",level:3},{value:"required",id:"required",level:3},{value:"if",id:"if",level:3}];function o(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"wizard-reference",children:"Wizard Reference"}),"\n",(0,r.jsx)(n.p,{children:"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package."}),"\n",(0,r.jsx)(n.h2,{id:"how-to-use",children:"How to use"}),"\n",(0,r.jsxs)(n.p,{children:["To add this functionality, create a file ",(0,r.jsx)(n.code,{children:"setup-wizard.yml"})," in the root of your Dappnode package directory. Both JSON and YAML formats are supported, but YAML makes writing markdown text blocks much easier (its used in the ",(0,r.jsx)(n.a,{href:"#description",children:(0,r.jsx)(n.code,{children:"description"})})," property)."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-diff",children:" DappnodePackage-my-package.public.dappnode.eth/\n \u251c\u2500\u2500 build\n \u2502 \u251c\u2500\u2500 ...\n \u2502 \u2514\u2500\u2500 Dockerfile\n \u251c\u2500\u2500 avatar-my-package.png\n \u251c\u2500\u2500 dappnode_package.json\n \u251c\u2500\u2500 docker-compose.yml\n+ \u2514\u2500\u2500 setup-wizard.yml\n"})}),"\n",(0,r.jsx)(n.h2,{id:"example",children:"Example"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'version: "2"\nfields:\n - id: payoutAddress,\n target:\n type: environment\n name: PAYOUT_ADDRESS\n service: service1\n title: Payout address\n description: >-\n Address to send **payouts** too. [More info](https://more.info)\n Supports markdown and multiline\n secret: true\n pattern: "^0x[a-fA-F0-9]{40}$"\n patternErrorMessage: Must be a valid address (0x1fd16a...)\n enum:\n - normal\n - archive\n - advanced\n required: true\n if: { "mode": { "enum": ["advanced"] } }\n'})}),"\n",(0,r.jsx)(n.h2,{id:"version",children:"version"}),"\n",(0,r.jsxs)(n.p,{children:["Identify this setup wizard version. Currently only supports version ",(0,r.jsx)(n.code,{children:'"2"'})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsxs)(n.li,{children:["value: ",(0,r.jsx)(n.code,{children:'"2"'})]}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"fields",children:"fields"}),"\n",(0,r.jsx)(n.p,{children:"Setup wizard fields. Fields to show in the setup wizard form UI"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: Array type: ",(0,r.jsx)(n.code,{children:"object[]"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["All items must be of the type: ",(0,r.jsx)(n.code,{children:"object"})," with the following properties:"]}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Property"}),(0,r.jsx)(n.th,{children:"Type"}),(0,r.jsx)(n.th,{children:"Required"}),(0,r.jsx)(n.th,{children:"Default"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"target"})}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"id"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"title"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"description"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.strong,{children:"Required"})}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"secret"})}),(0,r.jsx)(n.td,{children:"boolean"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"false"})})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"pattern"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"patternErrorMessage"})}),(0,r.jsx)(n.td,{children:"string"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"enum"})}),(0,r.jsx)(n.td,{children:"array"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"required"})}),(0,r.jsx)(n.td,{children:"boolean"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:(0,r.jsx)(n.code,{children:"if"})}),(0,r.jsx)(n.td,{children:"object"}),(0,r.jsx)(n.td,{children:"Optional"}),(0,r.jsx)(n.td,{})]})]})]}),"\n",(0,r.jsx)(n.h3,{id:"id",children:"id"}),"\n",(0,r.jsxs)(n.p,{children:["Unique property ID required for internal form parsing, and to use the ",(0,r.jsx)(n.code,{children:"if"})," conditional block."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"id: payoutAddress\n"})}),"\n",(0,r.jsx)(n.h3,{id:"target",children:"target"}),"\n",(0,r.jsx)(n.p,{children:"Maps the setup wizard field to a package configuration option. Supports:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#environment",children:(0,r.jsx)(n.code,{children:"environment"})}),": For environment variables"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#portMapping",children:(0,r.jsx)(n.code,{children:"portMapping"})}),": For port mapping"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#namedVolumeMountpoint",children:(0,r.jsx)(n.code,{children:"namedVolumeMountpoint"})}),": To allow hosting a specific package volume into a different drive or mountpoint"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#allNamedVolumesMountpoint",children:(0,r.jsx)(n.code,{children:"allNamedVolumesMountpoint"})}),": To allow hosting all package volumes into a different drive or mountpoint"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#fileUpload",children:(0,r.jsx)(n.code,{children:"fileUpload"})}),": To upload user files to the package container"]}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"environment",children:"environment"}),"\n",(0,r.jsx)(n.p,{children:"To customize environment variables with user input. Targeted variables must be declared in the package's docker-compose. You can customize the type of input shown in the UI with this field properties"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#secret",children:(0,r.jsx)(n.code,{children:"secret"})}),": Hides input, to collect sensitive data."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#pattern",children:(0,r.jsx)(n.code,{children:"pattern"})}),": To validate input against any Regex expression."]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.a,{href:"#enum",children:(0,r.jsx)(n.code,{children:"enum"})}),": Show as a select dropdown menu."]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"It exists two ways of defining environment variables.\nThe first one, where you define one environment var for one service, you the format to do it is the following:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"target:\n type: environment\n name: PAYOUT_ADDRESS\n service: service1\n"})}),"\n",(0,r.jsx)(n.p,{children:"In case you want to define an environment variable that is used in multiple services you can define it in the next way:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"target:\n type: environment\n name: PAYOUT_ADDRESS\n service: [service1, service2, service2]\n"})}),"\n",(0,r.jsx)(n.h5,{id:"name",children:"name"}),"\n",(0,r.jsx)(n.p,{children:"The name of the environment variable as declared in the docker-compose."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"name: PAYOUT_ADDRESS\n"})}),"\n",(0,r.jsx)(n.h5,{id:"service",children:"service"}),"\n",(0,r.jsx)(n.p,{children:"In multi-service package, which service should be targeted with this setting."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"service: service1\n"})}),"\n",(0,r.jsx)(n.h4,{id:"portmapping",children:"portMapping"}),"\n",(0,r.jsx)(n.p,{children:"To customize port mappings with user input. Targeted container port must be declared in the package's docker-compose."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"target:\n type: portMapping\n containerPort: 9554/UDP\n service: service1\n"})}),"\n",(0,r.jsx)(n.h5,{id:"containerport",children:"containerPort"}),"\n",(0,r.jsxs)(n.p,{children:["Exposed container port to map to. Must follow the format ",(0,r.jsx)(n.code,{children:"{portNumber}"})," or ",(0,r.jsx)(n.code,{children:"{portNumber}/{PROTOCOL}"}),", where PROTOCOL must be ",(0,r.jsx)(n.code,{children:"TCP"})," or ",(0,r.jsx)(n.code,{children:"UDP"})," in all caps."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"containerPort: 9554\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"containerPort: 9554/TCP\n"})}),"\n",(0,r.jsx)(n.h5,{id:"service-1",children:"service"}),"\n",(0,r.jsxs)(n.p,{children:["See ",(0,r.jsx)(n.a,{href:"#service",children:"service"})]}),"\n",(0,r.jsx)(n.h4,{id:"namedvolumemountpoint",children:"namedVolumeMountpoint"}),"\n",(0,r.jsx)(n.p,{children:"To allow hosting a specific package volume into a different drive or mountpoint"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"target:\n type: namedVolumeMountpoint\n volumeName: blockchain_data\n"})}),"\n",(0,r.jsx)(n.h5,{id:"volumename",children:"volumeName"}),"\n",(0,r.jsxs)(n.p,{children:["Name of the docker volume to allow the user to change its mountpoint. Must have the exact same name as declared in the package's compose ",(0,r.jsx)(n.code,{children:"volumes"})," section."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"volumeName: blockchain_data\n"})}),"\n",(0,r.jsx)(n.h4,{id:"allnamedvolumesmountpoint",children:"allNamedVolumesMountpoint"}),"\n",(0,r.jsx)(n.p,{children:"To allow hosting all package volumes into a different drive or mountpoint at once. Use this option if your package has multiple heavy volumes whose mountpoint should be changed at once."}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"target:\n type: allNamedVolumesMountpoint\n"})}),"\n",(0,r.jsx)(n.h4,{id:"fileupload",children:"fileUpload"}),"\n",(0,r.jsx)(n.p,{children:"To allow uploading user files to the package container"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"target:\n type: fileUpload\n path: /usr/src/config.json\n service: service1\n"})}),"\n",(0,r.jsx)(n.h5,{id:"path",children:"path"}),"\n",(0,r.jsx)(n.p,{children:"Destination path to upload the file to. Must be a valid absolute path in the package container."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"path: /usr/src/config.json\n"})}),"\n",(0,r.jsx)(n.h5,{id:"service-2",children:"service"}),"\n",(0,r.jsxs)(n.p,{children:["See ",(0,r.jsx)(n.a,{href:"#service",children:"service"})]}),"\n",(0,r.jsx)(n.h3,{id:"title",children:"title"}),"\n",(0,r.jsx)(n.p,{children:"The Title Schema"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["default: ",(0,r.jsx)(n.code,{children:'""'})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"title: Payout address\n"})}),"\n",(0,r.jsx)(n.h3,{id:"description",children:"description"}),"\n",(0,r.jsx)(n.p,{children:"The Description Schema"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["is ",(0,r.jsx)(n.strong,{children:"required"})]}),"\n",(0,r.jsxs)(n.li,{children:["default: ",(0,r.jsx)(n.code,{children:'""'})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"description: >-\n Address to send **payouts** too. [More info](https://more.info)\n Supports markdown and multiline\n"})}),"\n",(0,r.jsx)(n.h3,{id:"secret",children:"secret"}),"\n",(0,r.jsx)(n.p,{children:'Display field input as hidden. Use to collect sensitive data. It will automatically activate if the field name contains "secret" "passphrase" or "password". Only available with target environment.'}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["default: ",(0,r.jsx)(n.code,{children:"false"})]}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"boolean"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"secret: true\n"})}),"\n",(0,r.jsx)(n.h3,{id:"pattern",children:"pattern"}),"\n",(0,r.jsxs)(n.p,{children:["Enforce this property to satisfy a regex before continuing. Only available with target environment. Use also ",(0,r.jsx)(n.a,{href:"#patternErrorMessage",children:(0,r.jsx)(n.code,{children:"patternErrorMessage"})})," to show a nicer error message when regex validation fails."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Example:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'pattern: "^0x[a-fA-F0-9]{40}$"\n'})}),"\n",(0,r.jsx)(n.h3,{id:"patternerrormessage",children:"patternErrorMessage"}),"\n",(0,r.jsx)(n.p,{children:"Error to show if the regex pattern validation fails. Only available with target environment."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"patternErrorMessage: Must be a valid address (0x1fd16a...)\n"})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"patternErrorMessage: Must be at least 8 characters long\n"})}),"\n",(0,r.jsx)(n.h3,{id:"enum",children:"enum"}),"\n",(0,r.jsx)(n.p,{children:"List valid options. Will automatically display the input as a select menu. Only available with target environment."}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: Array type: ",(0,r.jsx)(n.code,{children:"string[]"})]}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:["All items must be of the type: ",(0,r.jsx)(n.code,{children:"string"})]}),"\n",(0,r.jsx)(n.p,{children:"Examples"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"enum:\n - normal\n - archive\n - advanced\n"})}),"\n",(0,r.jsx)(n.h3,{id:"required",children:"required"}),"\n",(0,r.jsx)(n.p,{children:"Enforce this property to be provided before continuing"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"boolean"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:"required: true\n"})}),"\n",(0,r.jsx)(n.h3,{id:"if",children:"if"}),"\n",(0,r.jsxs)(n.p,{children:["Only display the field property if the ",(0,r.jsx)(n.code,{children:"if"})," schema is valid against the current form data provided by the user. The form data is an object with the structure ",(0,r.jsx)(n.code,{children:"{ [field.id]: JSONSchema }"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"is optional"}),"\n",(0,r.jsxs)(n.li,{children:["type: ",(0,r.jsx)(n.code,{children:"object"})]}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:"Examples:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'if: { "mode": { "enum": ["advanced"] } }\n'})}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'if: { "mode": { "enum": ["archive"] } }\n'})})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(o,{...e})}):o(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>t,a:()=>d});var r=i(7294);const s={},l=r.createContext(s);function d(e){const n=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function t(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:d(e.components),r.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/950718c7.52387e10.js b/assets/js/950718c7.52387e10.js new file mode 100644 index 000000000..b51396ba4 --- /dev/null +++ b/assets/js/950718c7.52387e10.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1796],{78:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>d,metadata:()=>a,toc:()=>s});var t=n(5893),i=n(1151);const d={sidebar_label:"Introduction"},r="Welcome to the Developer Documentation!",a={id:"dev",title:"Welcome to the Developer Documentation!",description:"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.",source:"@site/docs/dev.md",sourceDirName:".",slug:"/dev",permalink:"/docs/dev",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev.md",tags:[],version:"current",frontMatter:{sidebar_label:"Introduction"},sidebar:"devSidebar",next:{title:"DappnodeSDK",permalink:"/docs/dev/sdk/overview"}},c={},s=[{value:"Contributing",id:"contributing",level:2},{value:"Feedback and Support",id:"feedback-and-support",level:2}];function p(e){const o={a:"a",admonition:"admonition",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"welcome-to-the-developer-documentation",children:"Welcome to the Developer Documentation!"}),"\n",(0,t.jsx)(o.p,{children:"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment."}),"\n",(0,t.jsx)(o.admonition,{type:"caution",children:(0,t.jsxs)(o.p,{children:["This documentation is for experienced people in the dappnode ecosystem or developers who want to contribute to dappnode by creating new packages. If you're new to dappnode, we recommend starting with the ",(0,t.jsx)(o.a,{href:"/docs/user/getting-started/choose-your-path",children:"User Documentation"}),"."]})}),"\n",(0,t.jsx)(o.h2,{id:"contributing",children:"Contributing"}),"\n",(0,t.jsx)(o.p,{children:"We welcome contributions from the community! If you'd like to contribute to Dappnode, please review our [Contributing Guidelines] to understand how you can get involved."}),"\n",(0,t.jsx)(o.h2,{id:"feedback-and-support",children:"Feedback and Support"}),"\n",(0,t.jsx)(o.p,{children:"We're here to help! If you encounter any issues, have questions, or want to provide feedback, feel free to:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:["Join our community on ",(0,t.jsx)(o.a,{href:"https://discord.com/invite/dappnode",children:"Discord"})]}),"\n",(0,t.jsxs)(o.li,{children:["Open an issue on ",(0,t.jsx)(o.a,{href:"https://github.com/dappnode",children:"GitHub"})]}),"\n"]})]})}function u(e={}){const{wrapper:o}={...(0,i.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>a,a:()=>r});var t=n(7294);const i={},d=t.createContext(i);function r(e){const o=t.useContext(d);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(d.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/950718c7.6c460a57.js b/assets/js/950718c7.6c460a57.js deleted file mode 100644 index 97fd2c07e..000000000 --- a/assets/js/950718c7.6c460a57.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1796],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=o.createContext({}),d=function(e){var t=o.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=d(e.components);return o.createElement(c.Provider,{value:t},e.children)},l="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),l=d(n),m=r,h=l["".concat(c,".").concat(m)]||l[m]||s[m]||a;return n?o.createElement(h,i(i({ref:t},u),{},{components:n})):o.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=m;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p[l]="string"==typeof e?e:r,i[1]=p;for(var d=2;d<a;d++)i[d]=n[d];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},5670:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>p,toc:()=>d});var o=n(7462),r=(n(7294),n(4137));const a={sidebar_label:"Introduction"},i="Welcome to the Developer Documentation!",p={unversionedId:"dev",id:"dev",title:"Welcome to the Developer Documentation!",description:"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.",source:"@site/docs/dev.md",sourceDirName:".",slug:"/dev",permalink:"/docs/dev",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dev.md",tags:[],version:"current",frontMatter:{sidebar_label:"Introduction"},sidebar:"devSidebar",next:{title:"DappnodeSDK",permalink:"/docs/dev/sdk/overview"}},c={},d=[{value:"Contributing",id:"contributing",level:2},{value:"Feedback and Support",id:"feedback-and-support",level:2}],u={toc:d},l="wrapper";function s(e){let{components:t,...n}=e;return(0,r.kt)(l,(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"welcome-to-the-developer-documentation"},"Welcome to the Developer Documentation!"),(0,r.kt)("p",null,"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment."),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"This documentation is for experienced people in the dappnode ecosystem or developers who want to contribute to dappnode by creating new packages. If you're new to dappnode, we recommend starting with the ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/getting-started/choose-your-path"},"User Documentation"),".")),(0,r.kt)("h2",{id:"contributing"},"Contributing"),(0,r.kt)("p",null,"We welcome contributions from the community! If you'd like to contribute to Dappnode, please review our ","[Contributing Guidelines]"," to understand how you can get involved."),(0,r.kt)("h2",{id:"feedback-and-support"},"Feedback and Support"),(0,r.kt)("p",null,"We're here to help! If you encounter any issues, have questions, or want to provide feedback, feel free to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Join our community on ",(0,r.kt)("a",{parentName:"li",href:"https://discord.com/invite/dappnode"},"Discord")),(0,r.kt)("li",{parentName:"ul"},"Open an issue on ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/dappnode"},"GitHub"))))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.5de22c6a.js b/assets/js/9e4087bc.5de22c6a.js deleted file mode 100644 index d44809dad..000000000 --- a/assets/js/9e4087bc.5de22c6a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3608],{8151:(e,t,a)=>{a.r(t),a.d(t,{default:()=>o});var r=a(7294),l=a(3699),n=a(7325),c=a(5463),m=a(1009);function s(e){let{year:t,posts:a}=e;return r.createElement(r.Fragment,null,r.createElement("h3",null,t),r.createElement("ul",null,a.map((e=>r.createElement("li",{key:e.metadata.date},r.createElement(l.Z,{to:e.metadata.permalink},e.metadata.formattedDate," - ",e.metadata.title))))))}function i(e){let{years:t}=e;return r.createElement("section",{className:"margin-vert--lg"},r.createElement("div",{className:"container"},r.createElement("div",{className:"row"},t.map(((e,t)=>r.createElement("div",{key:t,className:"col col--4 margin-vert--lg"},r.createElement(s,e)))))))}function o(e){let{archive:t}=e;const a=(0,n.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),l=(0,n.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),s=function(e){const t=e.reduceRight(((e,t)=>{const a=t.metadata.date.split("-")[0],r=e.get(a)??[];return e.set(a,[t,...r])}),new Map);return Array.from(t,(e=>{let[t,a]=e;return{year:t,posts:a}}))}(t.blogPosts);return r.createElement(r.Fragment,null,r.createElement(c.d,{title:a,description:l}),r.createElement(m.Z,null,r.createElement("header",{className:"hero hero--primary"},r.createElement("div",{className:"container"},r.createElement("h1",{className:"hero__title"},a),r.createElement("p",{className:"hero__subtitle"},l))),r.createElement("main",null,s.length>0&&r.createElement(i,{years:s}))))}}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.e74391c6.js b/assets/js/9e4087bc.e74391c6.js new file mode 100644 index 000000000..5c2650bcf --- /dev/null +++ b/assets/js/9e4087bc.e74391c6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3608],{3169:(e,s,a)=>{a.r(s),a.d(s,{default:()=>o});a(7294);var r=a(9960),t=a(5999),i=a(1944),n=a(179),c=a(2503),l=a(5893);function d(e){let{year:s,posts:a}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.Z,{as:"h3",id:s,children:s}),(0,l.jsx)("ul",{children:a.map((e=>(0,l.jsx)("li",{children:(0,l.jsxs)(r.Z,{to:e.metadata.permalink,children:[e.metadata.formattedDate," - ",e.metadata.title]})},e.metadata.date)))})]})}function h(e){let{years:s}=e;return(0,l.jsx)("section",{className:"margin-vert--lg",children:(0,l.jsx)("div",{className:"container",children:(0,l.jsx)("div",{className:"row",children:s.map(((e,s)=>(0,l.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,l.jsx)(d,{...e})},s)))})})})}function o(e){let{archive:s}=e;const a=(0,t.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),r=(0,t.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),d=function(e){const s=e.reduce(((e,s)=>{const a=s.metadata.date.split("-")[0],r=e.get(a)??[];return e.set(a,[s,...r])}),new Map);return Array.from(s,(e=>{let[s,a]=e;return{year:s,posts:a}}))}(s.blogPosts);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.d,{title:a,description:r}),(0,l.jsxs)(n.Z,{children:[(0,l.jsx)("header",{className:"hero hero--primary",children:(0,l.jsxs)("div",{className:"container",children:[(0,l.jsx)(c.Z,{as:"h1",className:"hero__title",children:a}),(0,l.jsx)("p",{className:"hero__subtitle",children:r})]})}),(0,l.jsx)("main",{children:d.length>0&&(0,l.jsx)(h,{years:d})})]})]})}}}]); \ No newline at end of file diff --git a/assets/js/9e93dc42.067f400a.js b/assets/js/9e93dc42.067f400a.js deleted file mode 100644 index 733f12dfc..000000000 --- a/assets/js/9e93dc42.067f400a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[938],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},d=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,h=u["".concat(s,".").concat(m)]||u[m]||c[m]||i;return n?a.createElement(h,r(r({ref:t},d),{},{components:n})):a.createElement(h,r({ref:t},d))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:o,r[1]=l;for(var p=2;p<i;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},8795:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var a=n(7462),o=(n(7294),n(4137));const i={},r="ISO Installation",l={unversionedId:"user/install/iso",id:"user/install/iso",title:"ISO Installation",description:"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.",source:"@site/docs/user/install/iso.md",sourceDirName:"user/install",slug:"/user/install/iso",permalink:"/docs/user/install/iso",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/iso.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Installation Overview",permalink:"/docs/user/install/overview"},next:{title:"Script installation",permalink:"/docs/user/install/script"}},s={},p=[{value:"Get the ISO",id:"get-the-iso",level:2},{value:"Burn the ISO in a USB",id:"burn-the-iso-in-a-usb",level:2},{value:"Boot from the USB",id:"boot-from-the-usb",level:2},{value:"Follow the Installation Prompts",id:"follow-the-installation-prompts",level:2},{value:"Final Steps",id:"final-steps",level:2}],d={toc:p},u="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"iso-installation"},"ISO Installation"),(0,o.kt)("p",null,"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian."),(0,o.kt)("h2",{id:"get-the-iso"},"Get the ISO"),(0,o.kt)("p",null,"You can get the image downloading directly from ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/dappnode/Dappnode/releases"},"Dappnode ISO")," or if you prefer you can build it from the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/dappnode/Dappnode#install-dappnode-with-iso"},"source"),"."),(0,o.kt)("admonition",{title:"Attended VS Unattended ISO",type:"note"},(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Attended ISO"),": An attended ISO installation involves a manual setup process where the user must be present to make choices, answer prompts, and guide the installation through its various stages. It provides more control over the configuration, allowing for customization based on specific needs.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Unattended ISO"),": The unattended ISO installation is an automated process where pre-defined settings are used to install Dappnode without user intervention. This is ideal for straightforward installations where default configurations are preferred. It speeds up the process and ensures consistency in the setup."))),(0,o.kt)("p",{parentName:"admonition"},"Consider your specific requirements and the level of customization you need when deciding between these two installation methods.")),(0,o.kt)("h2",{id:"burn-the-iso-in-a-usb"},"Burn the ISO in a USB"),(0,o.kt)("p",null,"Burn the ISO to an USB stick. To do so we recommend using ",(0,o.kt)("a",{parentName:"p",href:"https://www.balena.io/etcher/"},"Balena Etcher")," for the OS with which you will prepare the USB to boot from your server and install Dappnode."),(0,o.kt)("admonition",{type:"danger"},(0,o.kt)("p",{parentName:"admonition"},"If you trigger the installation in a machine containing data, all existing data will be erased.")),(0,o.kt)("h2",{id:"boot-from-the-usb"},"Boot from the USB"),(0,o.kt)("p",null,"After burning the ISO to the USB stick:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Insert")," the USB stick into the machine where you want to install Dappnode."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Reboot")," the machine."),(0,o.kt)("li",{parentName:"ol"},"During the boot process, access the ",(0,o.kt)("strong",{parentName:"li"},"boot menu")," (the key to press varies depending on the machine manufacturer; commonly used keys include F2, F10, F12, ESC, or DEL)."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Select")," the USB stick as the boot device.")),(0,o.kt)("p",null,"The machine should now boot from the USB, and you'll see the Dappnode installation interface."),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Make sure that an Ethernet cable is plugged in to your device during the installation process, otherwise it will fail.")),(0,o.kt)("h2",{id:"follow-the-installation-prompts"},"Follow the Installation Prompts"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"If you've chosen the ",(0,o.kt)("strong",{parentName:"li"},"Attended ISO"),", you'll be presented with a series of prompts asking for configuration details and preferences. Follow the on-screen instructions and provide the necessary input to proceed."),(0,o.kt)("li",{parentName:"ul"},"If you've opted for the ",(0,o.kt)("strong",{parentName:"li"},"Unattended ISO"),", the installation will proceed automatically, using predefined settings.")),(0,o.kt)("admonition",{title:"Default Credentials",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"If you're using the Unattended ISO, the default credentials are:"),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"user"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"dappnode")," "),(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"pass"),": ",(0,o.kt)("inlineCode",{parentName:"p"},"dappnode.s0"))),(0,o.kt)("h2",{id:"final-steps"},"Final Steps"),(0,o.kt)("p",null,"Once the installation is complete:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Remove")," the USB stick."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Reboot")," the machine (you might need to do this twice)"),(0,o.kt)("li",{parentName:"ol"},"On startup, Dappnode should be running. You can check it by executing ",(0,o.kt)("inlineCode",{parentName:"li"},"docker ps")," in the terminal and some of the ",(0,o.kt)("a",{parentName:"li",href:"/docs/user/install/dappnode-commands"},"Dappnode Commands")),(0,o.kt)("li",{parentName:"ol"},"Finally, you can begin the post-installation setup and configuration.")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Remember to keep your Dappnode running 24/7 for optimal performance, especially if you are hosting blockchain nodes or other continuous services.")),(0,o.kt)("p",null,"Congratulations! You've successfully installed Dappnode using the ISO method. For any further assistance or troubleshooting, always refer to the official Dappnode documentation or community support."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9e93dc42.edf13b8d.js b/assets/js/9e93dc42.edf13b8d.js new file mode 100644 index 000000000..1d43995a5 --- /dev/null +++ b/assets/js/9e93dc42.edf13b8d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[938],{6559:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var i=t(5893),s=t(1151);const o={},l="ISO Installation",r={id:"user/install/iso",title:"ISO Installation",description:"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.",source:"@site/docs/user/install/iso.md",sourceDirName:"user/install",slug:"/user/install/iso",permalink:"/docs/user/install/iso",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/iso.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Installation Overview",permalink:"/docs/user/install/overview"},next:{title:"Script installation",permalink:"/docs/user/install/script"}},a={},d=[{value:"Get the ISO",id:"get-the-iso",level:2},{value:"Burn the ISO in a USB",id:"burn-the-iso-in-a-usb",level:2},{value:"Boot from the USB",id:"boot-from-the-usb",level:2},{value:"Follow the Installation Prompts",id:"follow-the-installation-prompts",level:2},{value:"Final Steps",id:"final-steps",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"iso-installation",children:"ISO Installation"}),"\n",(0,i.jsx)(n.p,{children:"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian."}),"\n",(0,i.jsx)(n.h2,{id:"get-the-iso",children:"Get the ISO"}),"\n",(0,i.jsxs)(n.p,{children:["You can get the image downloading directly from ",(0,i.jsx)(n.a,{href:"https://github.com/dappnode/Dappnode/releases",children:"Dappnode ISO"})," or if you prefer you can build it from the ",(0,i.jsx)(n.a,{href:"https://github.com/dappnode/Dappnode#install-dappnode-with-iso",children:"source"}),"."]}),"\n",(0,i.jsxs)(n.admonition,{title:"Attended VS Unattended ISO",type:"note",children:[(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Attended ISO"}),": An attended ISO installation involves a manual setup process where the user must be present to make choices, answer prompts, and guide the installation through its various stages. It provides more control over the configuration, allowing for customization based on specific needs."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"Unattended ISO"}),": The unattended ISO installation is an automated process where pre-defined settings are used to install Dappnode without user intervention. This is ideal for straightforward installations where default configurations are preferred. It speeds up the process and ensures consistency in the setup."]}),"\n"]}),"\n"]}),(0,i.jsx)(n.p,{children:"Consider your specific requirements and the level of customization you need when deciding between these two installation methods."})]}),"\n",(0,i.jsx)(n.h2,{id:"burn-the-iso-in-a-usb",children:"Burn the ISO in a USB"}),"\n",(0,i.jsxs)(n.p,{children:["Burn the ISO to an USB stick. To do so we recommend using ",(0,i.jsx)(n.a,{href:"https://www.balena.io/etcher/",children:"Balena Etcher"})," for the OS with which you will prepare the USB to boot from your server and install Dappnode."]}),"\n",(0,i.jsx)(n.admonition,{type:"danger",children:(0,i.jsx)(n.p,{children:"If you trigger the installation in a machine containing data, all existing data will be erased."})}),"\n",(0,i.jsx)(n.h2,{id:"boot-from-the-usb",children:"Boot from the USB"}),"\n",(0,i.jsx)(n.p,{children:"After burning the ISO to the USB stick:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Insert"})," the USB stick into the machine where you want to install Dappnode."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Reboot"})," the machine."]}),"\n",(0,i.jsxs)(n.li,{children:["During the boot process, access the ",(0,i.jsx)(n.strong,{children:"boot menu"})," (the key to press varies depending on the machine manufacturer; commonly used keys include F2, F10, F12, ESC, or DEL)."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Select"})," the USB stick as the boot device."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"The machine should now boot from the USB, and you'll see the Dappnode installation interface."}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Make sure that an Ethernet cable is plugged in to your device during the installation process, otherwise it will fail."})}),"\n",(0,i.jsx)(n.h2,{id:"follow-the-installation-prompts",children:"Follow the Installation Prompts"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If you've chosen the ",(0,i.jsx)(n.strong,{children:"Attended ISO"}),", you'll be presented with a series of prompts asking for configuration details and preferences. Follow the on-screen instructions and provide the necessary input to proceed."]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["If you've opted for the ",(0,i.jsx)(n.strong,{children:"Unattended ISO"}),", the installation will proceed automatically, using predefined settings."]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.admonition,{title:"Default Credentials",type:"tip",children:[(0,i.jsx)(n.p,{children:"If you're using the Unattended ISO, the default credentials are:"}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"user"}),": ",(0,i.jsx)(n.code,{children:"dappnode"})]}),(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"pass"}),": ",(0,i.jsx)(n.code,{children:"dappnode.s0"})]})]}),"\n",(0,i.jsx)(n.h2,{id:"final-steps",children:"Final Steps"}),"\n",(0,i.jsx)(n.p,{children:"Once the installation is complete:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Remove"})," the USB stick."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Reboot"})," the machine (you might need to do this twice)"]}),"\n",(0,i.jsxs)(n.li,{children:["On startup, Dappnode should be running. You can check it by executing ",(0,i.jsx)(n.code,{children:"docker ps"})," in the terminal and some of the ",(0,i.jsx)(n.a,{href:"/docs/user/install/dappnode-commands",children:"Dappnode Commands"})]}),"\n",(0,i.jsx)(n.li,{children:"Finally, you can begin the post-installation setup and configuration."}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:"Remember to keep your Dappnode running 24/7 for optimal performance, especially if you are hosting blockchain nodes or other continuous services."})}),"\n",(0,i.jsx)(n.p,{children:"Congratulations! You've successfully installed Dappnode using the ISO method. For any further assistance or troubleshooting, always refer to the official Dappnode documentation or community support."})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>l});var i=t(7294);const s={},o=i.createContext(s);function l(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:l(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a33eb6a8.9d9a935e.js b/assets/js/a33eb6a8.9d9a935e.js new file mode 100644 index 000000000..b3d4272f7 --- /dev/null +++ b/assets/js/a33eb6a8.9d9a935e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3680],{7749:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var t=n(5893),i=n(1151);const r={},a="StakeWise",o={id:"user/staking/ethereum/lsd-pools/stakewise",title:"StakeWise",description:"---",source:"@site/docs/user/staking/ethereum/lsd-pools/stakewise.md",sourceDirName:"user/staking/ethereum/lsd-pools",slug:"/user/staking/ethereum/lsd-pools/stakewise",permalink:"/docs/user/staking/ethereum/lsd-pools/stakewise",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/lsd-pools/stakewise.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Rocketpool",permalink:"/docs/user/staking/ethereum/lsd-pools/rocketpool"},next:{title:"Stakehouse",permalink:"/docs/user/staking/ethereum/lsd-pools/stakehouse"}},l={},d=[{value:"<strong>StakeWise Overview</strong>",id:"stakewise-overview",level:3},{value:"<strong>Package Key Features</strong>",id:"package-key-features",level:3},{value:"<strong>First Steps to Start Staking with StakeWise and Dappnode</strong>",id:"first-steps-to-start-staking-with-stakewise-and-dappnode",level:3}];function c(e){const s={h1:"h1",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(s.h1,{id:"stakewise",children:"StakeWise"}),"\n",(0,t.jsx)(s.hr,{}),"\n",(0,t.jsx)(s.h3,{id:"stakewise-overview",children:(0,t.jsx)(s.strong,{children:"StakeWise Overview"})}),"\n",(0,t.jsx)(s.p,{children:"StakeWise is an LSD network service that allows anyone to benefit from the yields available on the Ethereum Beacon Chain. StakeWise runs secure and stable institutional-grade infrastructure, combined with unique tokenomics, to provide the highest possible staking yields for its users. As a liquid staking platform, users are free to un-stake at any time or utilise their staked ETH capital to earn enhanced yields throughout DeFi. There is no minimum ETH requirement to stake with StakeWise and the platform fees are the lowest seen across the industry."}),"\n",(0,t.jsx)(s.hr,{}),"\n",(0,t.jsx)(s.h3,{id:"package-key-features",children:(0,t.jsx)(s.strong,{children:"Package Key Features"})}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Solo and Pooled Staking:"})," StakeWise allows users the flexibility to choose between solo staking and joining a staking pool."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Tokenized Staking Rewards:"})," StakeWise tokenizes staking rewards, which users can trade, providing liquidity and flexibility."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Comprehensive Dashboard:"})," Users have access to a detailed dashboard that displays staking performance, rewards, and other essential metrics."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Transparent Fee Structure:"})," StakeWise prides itself on transparent fees with no hidden charges, ensuring users retain maximum rewards."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Integrated with DappNode:"})," Easy setup, monitoring, and management of StakeWise directly from your DappNode interface."]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsxs)(s.p,{children:[(0,t.jsx)(s.strong,{children:"Active Community Engagement:"})," StakeWise boasts an active community, ensuring users get timely support and updates."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.hr,{}),"\n",(0,t.jsx)(s.h3,{id:"first-steps-to-start-staking-with-stakewise-and-dappnode",children:(0,t.jsx)(s.strong,{children:"First Steps to Start Staking with StakeWise and Dappnode"})}),"\n",(0,t.jsxs)(s.ol,{children:["\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Package Installation:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Go to the DappNode Admin UI."}),"\n",(0,t.jsx)(s.li,{children:"In the 'Packages' section, search for the StakeWise package."}),"\n",(0,t.jsx)(s.li,{children:"Click 'Install'. Once installed, StakeWise should appear in your installed packages list."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Setting up the Environment:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Ensure you have connected your DappNode to the Ethereum network."}),"\n",(0,t.jsx)(s.li,{children:"For best results, secure a stable and fast internet connection for your DappNode."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Beginning the Staking Process:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Navigate to the StakeWise dashboard in the DappNode UI."}),"\n",(0,t.jsx)(s.li,{children:"Decide between solo staking or joining a staking pool."}),"\n",(0,t.jsx)(s.li,{children:"Specify the amount of ETH you wish to stake."}),"\n",(0,t.jsx)(s.li,{children:"Follow the on-screen instructions to initiate your staking."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Funding your Staking:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"Transfer your chosen ETH amount to the provided staking address. Be sure to safely store and remember this address."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(s.li,{children:["\n",(0,t.jsx)(s.p,{children:(0,t.jsx)(s.strong,{children:"Monitoring and Management:"})}),"\n",(0,t.jsxs)(s.ul,{children:["\n",(0,t.jsx)(s.li,{children:"With staking active, use the StakeWise dashboard on DappNode to oversee performance, track rewards, and manage other staking aspects."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(s.hr,{}),"\n",(0,t.jsx)(s.p,{children:"Staking on Ethereum 2.0, though potentially profitable, isn't without risks. While StakeWise makes the process user-friendly, it's vital to understand all potential implications and prioritize your investments' security."}),"\n",(0,t.jsx)(s.p,{children:"For more in-depth insights and assistance, consider exploring StakeWise's official documentation and joining the discussions on DappNode's community forums."})]})}function h(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,t.jsx)(s,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1151:(e,s,n)=>{n.d(s,{Z:()=>o,a:()=>a});var t=n(7294);const i={},r=t.createContext(i);function a(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(i):e.components||i:a(e.components),t.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a33eb6a8.d90f5bc3.js b/assets/js/a33eb6a8.d90f5bc3.js deleted file mode 100644 index 48bf4c612..000000000 --- a/assets/js/a33eb6a8.d90f5bc3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3680],{4137:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>m});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?s(Object(a),!0).forEach((function(t){r(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):s(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function o(e,t){if(null==e)return{};var a,n,r=function(e,t){if(null==e)return{};var a,n,r={},s=Object.keys(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},k="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),k=p(a),c=r,m=k["".concat(l,".").concat(c)]||k[c]||d[c]||s;return a?n.createElement(m,i(i({ref:t},u),{},{components:a})):n.createElement(m,i({ref:t},u))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,i=new Array(s);i[0]=c;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[k]="string"==typeof e?e:r,i[1]=o;for(var p=2;p<s;p++)i[p]=a[p];return n.createElement.apply(null,i)}return n.createElement.apply(null,a)}c.displayName="MDXCreateElement"},2601:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>s,metadata:()=>o,toc:()=>p});var n=a(7462),r=(a(7294),a(4137));const s={},i="StakeWise",o={unversionedId:"user/staking/ethereum/lsd-pools/stakewise",id:"user/staking/ethereum/lsd-pools/stakewise",title:"StakeWise",description:"---",source:"@site/docs/user/staking/ethereum/lsd-pools/stakewise.md",sourceDirName:"user/staking/ethereum/lsd-pools",slug:"/user/staking/ethereum/lsd-pools/stakewise",permalink:"/docs/user/staking/ethereum/lsd-pools/stakewise",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/lsd-pools/stakewise.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Rocketpool",permalink:"/docs/user/staking/ethereum/lsd-pools/rocketpool"},next:{title:"Stakehouse",permalink:"/docs/user/staking/ethereum/lsd-pools/stakehouse"}},l={},p=[{value:"<strong>StakeWise Overview</strong>",id:"stakewise-overview",level:3},{value:"<strong>Package Key Features</strong>",id:"package-key-features",level:3},{value:"<strong>First Steps to Start Staking with StakeWise and Dappnode</strong>",id:"first-steps-to-start-staking-with-stakewise-and-dappnode",level:3}],u={toc:p},k="wrapper";function d(e){let{components:t,...a}=e;return(0,r.kt)(k,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"stakewise"},"StakeWise"),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"stakewise-overview"},(0,r.kt)("strong",{parentName:"h3"},"StakeWise Overview")),(0,r.kt)("p",null,"StakeWise is an LSD network service that allows anyone to benefit from the yields available on the Ethereum Beacon Chain. StakeWise runs secure and stable institutional-grade infrastructure, combined with unique tokenomics, to provide the highest possible staking yields for its users. As a liquid staking platform, users are free to un-stake at any time or utilise their staked ETH capital to earn enhanced yields throughout DeFi. There is no minimum ETH requirement to stake with StakeWise and the platform fees are the lowest seen across the industry."),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"package-key-features"},(0,r.kt)("strong",{parentName:"h3"},"Package Key Features")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Solo and Pooled Staking:")," StakeWise allows users the flexibility to choose between solo staking and joining a staking pool."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Tokenized Staking Rewards:")," StakeWise tokenizes staking rewards, which users can trade, providing liquidity and flexibility."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Comprehensive Dashboard:")," Users have access to a detailed dashboard that displays staking performance, rewards, and other essential metrics."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Transparent Fee Structure:")," StakeWise prides itself on transparent fees with no hidden charges, ensuring users retain maximum rewards."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Integrated with DappNode:")," Easy setup, monitoring, and management of StakeWise directly from your DappNode interface."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Active Community Engagement:")," StakeWise boasts an active community, ensuring users get timely support and updates.")),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"first-steps-to-start-staking-with-stakewise-and-dappnode"},(0,r.kt)("strong",{parentName:"h3"},"First Steps to Start Staking with StakeWise and Dappnode")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Package Installation:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Go to the DappNode Admin UI."),(0,r.kt)("li",{parentName:"ul"},"In the 'Packages' section, search for the StakeWise package."),(0,r.kt)("li",{parentName:"ul"},"Click 'Install'. Once installed, StakeWise should appear in your installed packages list."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Setting up the Environment:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Ensure you have connected your DappNode to the Ethereum network."),(0,r.kt)("li",{parentName:"ul"},"For best results, secure a stable and fast internet connection for your DappNode."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Beginning the Staking Process:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Navigate to the StakeWise dashboard in the DappNode UI."),(0,r.kt)("li",{parentName:"ul"},"Decide between solo staking or joining a staking pool."),(0,r.kt)("li",{parentName:"ul"},"Specify the amount of ETH you wish to stake."),(0,r.kt)("li",{parentName:"ul"},"Follow the on-screen instructions to initiate your staking."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Funding your Staking:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Transfer your chosen ETH amount to the provided staking address. Be sure to safely store and remember this address."))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Monitoring and Management:")),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"With staking active, use the StakeWise dashboard on DappNode to oversee performance, track rewards, and manage other staking aspects.")))),(0,r.kt)("hr",null),(0,r.kt)("p",null,"Staking on Ethereum 2.0, though potentially profitable, isn't without risks. While StakeWise makes the process user-friendly, it's vital to understand all potential implications and prioritize your investments' security."),(0,r.kt)("p",null,"For more in-depth insights and assistance, consider exploring StakeWise's official documentation and joining the discussions on DappNode's community forums."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.7f9a3445.js b/assets/js/a6aa9e1f.7f9a3445.js deleted file mode 100644 index 0ed4eef94..000000000 --- a/assets/js/a6aa9e1f.7f9a3445.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3089],{9928:(e,t,a)=>{a.r(t),a.d(t,{default:()=>u});var n=a(7294),l=a(6010),r=a(9962),i=a(5463),o=a(3702),s=a(2506),c=a(2568),m=a(3647),p=a(8389);function g(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,r.Z)(),{blogDescription:l,blogTitle:o,permalink:s}=t,c="/"===s?a:o;return n.createElement(n.Fragment,null,n.createElement(i.d,{title:c,description:l}),n.createElement(m.Z,{tag:"blog_posts_list"}))}function d(e){const{metadata:t,items:a,sidebar:l}=e;return n.createElement(s.Z,{sidebar:l},n.createElement(p.Z,{items:a}),n.createElement(c.Z,{metadata:t}))}function u(e){return n.createElement(i.FG,{className:(0,l.Z)(o.k.wrapper.blogPages,o.k.page.blogListPage)},n.createElement(g,e),n.createElement(d,e))}},2568:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),l=a(7325),r=a(3672);function i(e){const{metadata:t}=e,{previousPage:a,nextPage:i}=t;return n.createElement("nav",{className:"pagination-nav","aria-label":(0,l.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"})},a&&n.createElement(r.Z,{permalink:a,title:n.createElement(l.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)"},"Newer Entries")}),i&&n.createElement(r.Z,{permalink:i,title:n.createElement(l.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)"},"Older Entries"),isNext:!0}))}},8389:(e,t,a)=>{a.d(t,{Z:()=>i});var n=a(7294),l=a(9107),r=a(1116);function i(e){let{items:t,component:a=r.Z}=e;return n.createElement(n.Fragment,null,t.map((e=>{let{content:t}=e;return n.createElement(l.n,{key:t.metadata.permalink,content:t},n.createElement(a,null,n.createElement(t,null)))})))}}}]); \ No newline at end of file diff --git a/assets/js/a6aa9e1f.a18e22ce.js b/assets/js/a6aa9e1f.a18e22ce.js new file mode 100644 index 000000000..4189ac137 --- /dev/null +++ b/assets/js/a6aa9e1f.a18e22ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3089],{46:(e,t,a)=>{a.r(t),a.d(t,{default:()=>h});a(7294);var n=a(6010),s=a(2263),i=a(1944),r=a(5281),o=a(1460),l=a(9703),d=a(197),p=a(9985),g=a(5893);function c(e){const{metadata:t}=e,{siteConfig:{title:a}}=(0,s.Z)(),{blogDescription:n,blogTitle:r,permalink:o}=t,l="/"===o?a:r;return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(i.d,{title:l,description:n}),(0,g.jsx)(d.Z,{tag:"blog_posts_list"})]})}function m(e){const{metadata:t,items:a,sidebar:n}=e;return(0,g.jsxs)(o.Z,{sidebar:n,children:[(0,g.jsx)(p.Z,{items:a}),(0,g.jsx)(l.Z,{metadata:t})]})}function h(e){return(0,g.jsxs)(i.FG,{className:(0,n.Z)(r.k.wrapper.blogPages,r.k.page.blogListPage),children:[(0,g.jsx)(c,{...e}),(0,g.jsx)(m,{...e})]})}},9703:(e,t,a)=>{a.d(t,{Z:()=>r});a(7294);var n=a(5999),s=a(2244),i=a(5893);function r(e){const{metadata:t}=e,{previousPage:a,nextPage:r}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,n.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[a&&(0,i.jsx)(s.Z,{permalink:a,title:(0,i.jsx)(n.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),r&&(0,i.jsx)(s.Z,{permalink:r,title:(0,i.jsx)(n.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},9985:(e,t,a)=>{a.d(t,{Z:()=>r});a(7294);var n=a(9460),s=a(390),i=a(5893);function r(e){let{items:t,component:a=s.Z}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(n.n,{content:t,children:(0,i.jsx)(a,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.66954c82.js b/assets/js/a7bd4aaa.66954c82.js new file mode 100644 index 000000000..61f5f82c3 --- /dev/null +++ b/assets/js/a7bd4aaa.66954c82.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8518],{8564:(n,e,s)=>{s.r(e),s.d(e,{default:()=>l});s(7294);var o=s(1944),r=s(3320),t=s(4477),c=s(8790),d=s(197),i=s(5893);function a(n){const{version:e}=n;return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(d.Z,{version:e.version,tag:(0,r.os)(e.pluginId,e.version)}),(0,i.jsx)(o.d,{children:e.noIndex&&(0,i.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function u(n){const{version:e,route:s}=n;return(0,i.jsx)(o.FG,{className:e.className,children:(0,i.jsx)(t.q,{version:e,children:(0,c.H)(s.routes)})})}function l(n){return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(a,{...n}),(0,i.jsx)(u,{...n})]})}}}]); \ No newline at end of file diff --git a/assets/js/a80da1cf.5e2a619b.js b/assets/js/a80da1cf.da804b84.js similarity index 77% rename from assets/js/a80da1cf.5e2a619b.js rename to assets/js/a80da1cf.da804b84.js index c912c5e19..8c4f6b388 100644 --- a/assets/js/a80da1cf.5e2a619b.js +++ b/assets/js/a80da1cf.da804b84.js @@ -1 +1 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3205],{4863:s=>{s.exports=JSON.parse('{"label":"docusaurus","permalink":"/blog/tags/docusaurus","allTagsPath":"/blog/tags","count":4}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3205],{4863:s=>{s.exports=JSON.parse('{"label":"docusaurus","permalink":"/blog/tags/docusaurus","allTagsPath":"/blog/tags","count":4,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/a83bdfda.327f0737.js b/assets/js/a83bdfda.327f0737.js deleted file mode 100644 index 3be9d2e94..000000000 --- a/assets/js/a83bdfda.327f0737.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8769],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=r.createContext({}),l=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=l(n),m=a,f=p["".concat(c,".").concat(m)]||p[m]||u[m]||o;return n?r.createElement(f,i(i({ref:t},d),{},{components:n})):r.createElement(f,i({ref:t},d))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:a,i[1]=s;for(var l=2;l<o;l++)i[l]=n[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},7200:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var r=n(7462),a=(n(7294),n(4137));const o={title:"Dappnode DAO FAQ"},i=void 0,s={unversionedId:"dao/faq",id:"dao/faq",title:"Dappnode DAO FAQ",description:"What is a DAO?",source:"@site/docs/dao/faq.md",sourceDirName:"dao",slug:"/dao/faq",permalink:"/docs/dao/faq",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/faq.md",tags:[],version:"current",frontMatter:{title:"Dappnode DAO FAQ"},sidebar:"daoSidebar",previous:{title:"Liquidity Mining",permalink:"/docs/dao/liquidity-mining"}},c={},l=[],d={toc:l},p="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("details",null,(0,a.kt)("summary",null,(0,a.kt)("b",null,"What is a DAO?")),(0,a.kt)("p",null,"A DAO, or Decentralized Autonomous Organization, is an organization represented by rules encoded as a computer program that is transparent, controlled by the organization members, and not influenced by a centralized government. It operates autonomously and can execute actions such as making decisions and managing resources based on pre-defined rules or through a consensus mechanism.")),(0,a.kt)("details",null,(0,a.kt)("summary",null,(0,a.kt)("b",null,"What is the purpose and mission of the Dappnode DAO?")," "),(0,a.kt)("p",null,"DappNode's DAO aims to promote and simplify the use of decentralized infrastructure. It aspires to create a more decentralized web by providing tools that make running nodes, DApps, and blockchain-related software more user-friendly and accessible to a wider audience. By establishing a DAO, DappNode ensures that its mission and direction are decided collectively by its community, allowing for a more democratic and transparent decision-making process. The DappNode DAO encourages collaboration, fostering a community that is actively involved in the project's evolution, and ensuring the sustainability and success of the platform in the decentralized space.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a83bdfda.5639167b.js b/assets/js/a83bdfda.5639167b.js new file mode 100644 index 000000000..cb9d02e65 --- /dev/null +++ b/assets/js/a83bdfda.5639167b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8769],{9618:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>l,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var o=t(5893),a=t(1151);const i={title:"Dappnode DAO FAQ"},s=void 0,r={id:"dao/faq",title:"Dappnode DAO FAQ",description:"What is a DAO?",source:"@site/docs/dao/faq.md",sourceDirName:"dao",slug:"/dao/faq",permalink:"/docs/dao/faq",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/faq.md",tags:[],version:"current",frontMatter:{title:"Dappnode DAO FAQ"},sidebar:"daoSidebar",previous:{title:"Liquidity Mining",permalink:"/docs/dao/liquidity-mining"}},d={},c=[];function p(e){const n={p:"p",...(0,a.a)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(t,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"What is a DAO?"})}),(0,o.jsx)(n.p,{children:"A DAO, or Decentralized Autonomous Organization, is an organization represented by rules encoded as a computer program that is transparent, controlled by the organization members, and not influenced by a centralized government. It operates autonomously and can execute actions such as making decisions and managing resources based on pre-defined rules or through a consensus mechanism."})]}),"\n",(0,o.jsxs)(t,{children:[(0,o.jsxs)("summary",{children:[(0,o.jsx)("b",{children:"What is the purpose and mission of the Dappnode DAO?"})," "]}),(0,o.jsx)(n.p,{children:"DappNode's DAO aims to promote and simplify the use of decentralized infrastructure. It aspires to create a more decentralized web by providing tools that make running nodes, DApps, and blockchain-related software more user-friendly and accessible to a wider audience. By establishing a DAO, DappNode ensures that its mission and direction are decided collectively by its community, allowing for a more democratic and transparent decision-making process. The DappNode DAO encourages collaboration, fostering a community that is actively involved in the project's evolution, and ensuring the sustainability and success of the platform in the decentralized space."})]})]})}function l(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>s});var o=t(7294);const a={},i=o.createContext(a);function s(e){const n=o.useContext(i);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),o.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a9241739.a6af1d30.js b/assets/js/a9241739.a6af1d30.js deleted file mode 100644 index cd1fed249..000000000 --- a/assets/js/a9241739.a6af1d30.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3295],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),c=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=c(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(n),m=o,h=p["".concat(l,".").concat(m)]||p[m]||d[m]||i;return n?r.createElement(h,a(a({ref:t},u),{},{components:n})):r.createElement(h,a({ref:t},u))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,a=new Array(i);a[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:o,a[1]=s;for(var c=2;c<i;c++)a[c]=n[c];return r.createElement.apply(null,a)}return r.createElement.apply(null,n)}m.displayName="MDXCreateElement"},7207:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=n(7462),o=(n(7294),n(4137));const i={},a="Troubleshooting",s={unversionedId:"user/ethical-metrics/troubleshooting",id:"user/ethical-metrics/troubleshooting",title:"Troubleshooting",description:"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the Dappnode Discord and we'll be happy to assist you!",source:"@site/docs/user/ethical-metrics/troubleshooting.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/troubleshooting",permalink:"/docs/user/ethical-metrics/troubleshooting",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/troubleshooting.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Metrics Collected by Ethical Metrics",permalink:"/docs/user/ethical-metrics/metrics"},next:{title:"What is Dappnode Cloud?",permalink:"/docs/user/dappnode-cloud/overview"}},l={},c=[],u={toc:c},p="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"troubleshooting"},"Troubleshooting"),(0,o.kt)("p",null,"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the ",(0,o.kt)("a",{parentName:"p",href:"https://discord.gg/dappnode"},"Dappnode Discord")," and we'll be happy to assist you!"),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("strong",null,"How can I make sure my Dappnode is registered?")),(0,o.kt)("b",null,"Email:")," Upon registering, an email will be sent to your configured email address. If you don't receive this email, please check your spam folder. ",(0,o.kt)("br",null),(0,o.kt)("b",null,"Telegram:"),' Once your bot has been set up, you can press the "Send Test Notification" button to see if everything is working as expected.'),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("strong",null,'How can I test a "Dappnode down" notification?')),'There are various ways to test a "Dappnode down" notification. The easiest way is to stop your Dappnode temporarily, but you can also test it by stopping the "Prometheus" service of your Ethical Metrics package. After an hour, you should receive a "Dappnode down" notification in your Email and/or Telegram.'),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("strong",null,"How can I unregister from the Ethical Metrics monitoring system?")),(0,o.kt)("p",null,(0,o.kt)("strong",null," 1. Using the Dappnode Interface:")," From the active Dappnode, simply navigate to ",(0,o.kt)("a",{href:"http://my.dappnode/system/notifications"},"System > Notifications")," and toggle off ",(0,o.kt)("b",null,"Ethical Metrics"),". This will stop all notifications and halt metric collection from your Dappnode. As long as Ethical Metrics notifications are enabled in the Dappnode UI, your device remains registered in our monitoring system."),(0,o.kt)("p",null,(0,o.kt)("strong",null,"2. For Inactive Dappnodes:")," If your Dappnode is no longer accessible, locate the ",(0,o.kt)("b",null,"unregister link")," in the welcome email you received upon registration. Keep in mind that using this method won't employ our IP hiding measures, but you can enhance security using tools like a VPN. Please keep in mind that if your Dappnode is still up and running with Ethical Metrics notifications turned on, it'll register again by itself."),(0,o.kt)("p",null,(0,o.kt)("strong",null,"3. Manual Unregistration:")," Lost the welcome email? You can also unregister by inputting the following URL into your browser: ",(0,o.kt)("code",null,"https://ethical-metrics.dappnode.io/unregister-from-email/?instance=",(0,o.kt)("i",null,"YOUR_INSTANCE"),".onion%3A9090"),". Make sure to replace ",(0,o.kt)("i",null,"YOUR_INSTANCE"),' with the unique identifier for your Dappnode, excluding ".onion:9090", which is already included in the provided URL.')))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a9241739.f087813d.js b/assets/js/a9241739.f087813d.js new file mode 100644 index 000000000..f89120004 --- /dev/null +++ b/assets/js/a9241739.f087813d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3295],{5137:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>p,frontMatter:()=>s,metadata:()=>a,toc:()=>l});var n=i(5893),o=i(1151);const s={},r="Troubleshooting",a={id:"user/ethical-metrics/troubleshooting",title:"Troubleshooting",description:"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the Dappnode Discord and we'll be happy to assist you!",source:"@site/docs/user/ethical-metrics/troubleshooting.md",sourceDirName:"user/ethical-metrics",slug:"/user/ethical-metrics/troubleshooting",permalink:"/docs/user/ethical-metrics/troubleshooting",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/ethical-metrics/troubleshooting.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Metrics Collected by Ethical Metrics",permalink:"/docs/user/ethical-metrics/metrics"},next:{title:"What is Dappnode Cloud?",permalink:"/docs/user/dappnode-cloud/overview"}},c={},l=[];function d(e){const t={a:"a",h1:"h1",p:"p",...(0,o.a)(),...e.components},{Details:i}=t;return i||function(e,t){throw new Error("Expected "+(t?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,n.jsxs)(t.p,{children:["Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the ",(0,n.jsx)(t.a,{href:"https://discord.gg/dappnode",children:"Dappnode Discord"})," and we'll be happy to assist you!"]}),"\n",(0,n.jsxs)(i,{children:[(0,n.jsx)("summary",{children:(0,n.jsx)("strong",{children:"How can I make sure my Dappnode is registered?"})}),(0,n.jsxs)(t.p,{children:[(0,n.jsx)("b",{children:"Email:"})," Upon registering, an email will be sent to your configured email address. If you don't receive this email, please check your spam folder. ",(0,n.jsx)("br",{})]}),(0,n.jsxs)(t.p,{children:[(0,n.jsx)("b",{children:"Telegram:"}),' Once your bot has been set up, you can press the "Send Test Notification" button to see if everything is working as expected.']})]}),"\n",(0,n.jsxs)(i,{children:[(0,n.jsx)("summary",{children:(0,n.jsx)("strong",{children:'How can I test a "Dappnode down" notification?'})}),(0,n.jsx)(t.p,{children:'There are various ways to test a "Dappnode down" notification. The easiest way is to stop your Dappnode temporarily, but you can also test it by stopping the "Prometheus" service of your Ethical Metrics package. After an hour, you should receive a "Dappnode down" notification in your Email and/or Telegram.'})]}),"\n",(0,n.jsxs)(i,{children:[(0,n.jsx)("summary",{children:(0,n.jsx)("strong",{children:"How can I unregister from the Ethical Metrics monitoring system?"})}),(0,n.jsxs)("p",{children:[(0,n.jsx)("strong",{children:" 1. Using the Dappnode Interface:"})," From the active Dappnode, simply navigate to ",(0,n.jsx)("a",{href:"http://my.dappnode/system/notifications",children:"System > Notifications"})," and toggle off ",(0,n.jsx)("b",{children:"Ethical Metrics"}),". This will stop all notifications and halt metric collection from your Dappnode. As long as Ethical Metrics notifications are enabled in the Dappnode UI, your device remains registered in our monitoring system."]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("strong",{children:"2. For Inactive Dappnodes:"})," If your Dappnode is no longer accessible, locate the ",(0,n.jsx)("b",{children:"unregister link"})," in the welcome email you received upon registration. Keep in mind that using this method won't employ our IP hiding measures, but you can enhance security using tools like a VPN. Please keep in mind that if your Dappnode is still up and running with Ethical Metrics notifications turned on, it'll register again by itself."]}),(0,n.jsxs)("p",{children:[(0,n.jsx)("strong",{children:"3. Manual Unregistration:"})," Lost the welcome email? You can also unregister by inputting the following URL into your browser: ",(0,n.jsxs)("code",{children:[(0,n.jsx)(t.a,{href:"https://ethical-metrics.dappnode.io/unregister-from-email/?instance=",children:"https://ethical-metrics.dappnode.io/unregister-from-email/?instance="}),(0,n.jsx)("i",{children:"YOUR_INSTANCE"}),".onion%3A9090"]}),". Make sure to replace ",(0,n.jsx)("i",{children:"YOUR_INSTANCE"}),' with the unique identifier for your Dappnode, excluding ".onion:9090", which is already included in the provided URL.']})]})]})}function p(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(d,{...e})}):d(e)}},1151:(e,t,i)=>{i.d(t,{Z:()=>a,a:()=>r});var n=i(7294);const o={},s=n.createContext(o);function r(e){const t=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),n.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.0206c29e.js b/assets/js/a94703ab.0206c29e.js new file mode 100644 index 000000000..7ec75ac74 --- /dev/null +++ b/assets/js/a94703ab.0206c29e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4368],{2674:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(7294),o=n(6010),i=n(1944),s=n(5281),l=n(2802),r=n(1116),c=n(5999),d=n(2466),u=n(5936);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(5893);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.Ct)();return(0,d.RF)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,u.S)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",s.k.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(1442),x=n(6550),f=n(7524),j=n(6668),_=n(1327);function k(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const v={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",v.collapseSidebarButton),onClick:t,children:(0,b.jsx)(k,{className:v.collapseSidebarButtonIcon})})}var C=n(9689),S=n(902);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(6043),Z=n(8596),A=n(9960),L=n(2389);function y(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.I)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.I)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),type:"button",className:"clean-btn menu__caret",onClick:a})}function w(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.L)(),_=function(e){const t=(0,L.Z)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.LM)(e):void 0),[e,t])}(t),k=(0,l._F)(t,i),v=(0,Z.Mg)(x,i),{collapsed:g,setCollapsed:C}=(0,B.u)({initialState:()=>!!h&&(!k&&t.collapsed)}),{expandedItem:T,setExpandedItem:w}=function(){const e=(0,a.useContext)(N);if(e===I)throw new S.i6("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!g),w(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,S.D9)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:k,collapsed:g,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==c&&f&&C(!0)}),[h,T,c,C,f]),(0,b.jsxs)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemCategory,s.k.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v}),children:[(0,b.jsx)(A.Z,{className:(0,o.Z)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":k}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":h?!g:void 0,href:h?_??"#":_,...d,children:m}),x&&h&&(0,b.jsx)(y,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var E=n(3919),H=n(9471);const M={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l._F)(t,a),x=(0,E.Z)(d);return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(A.Z,{className:(0,o.Z)("menu__link",!x&&M.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.Z,{})]})},u)}const W={menuHtmlItem:"menuHtmlItem_M9Kj"};function F(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(n),l&&[W.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function P(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(w,{item:t,...n});case"html":return(0,b.jsx)(F,{item:t,...n});default:return(0,b.jsx)(R,{item:t,...n})}}function D(e){let{items:t,...n}=e;const a=(0,l.f)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(P,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(D),U={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function K(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,C.nT)(),[t,n]=(0,a.useState)(e);return(0,d.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",U.menu,l&&U.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const Y="sidebar_njMd",z="sidebarWithHideableNavbar_wUlq",G="sidebarHidden_VK0M",O="sidebarLogo_isFc";function q(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.L)();return(0,b.jsxs)("div",{className:(0,o.Z)(Y,s&&z,i&&G),children:[s&&(0,b.jsx)(_.Z,{tabIndex:-1,className:O}),(0,b.jsx)(K,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const J=a.memo(q);var Q=n(3102),X=n(2961);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,X.e)();return(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(Q.Zo,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.i)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(J,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(k,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,r.V)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.TH)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.n)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.Z)(s.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.Z)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.V)();return(0,b.jsx)("main",{className:(0,o.Z)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,r.V)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(5658);function be(e){const t=(0,l.SN)(e);if(!t)return(0,b.jsx)(me.Z,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.FG,{className:(0,o.Z)(s.k.page.docsDocPage),children:(0,b.jsx)(r.b,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},5658:(e,t,n)=>{n.d(t,{Z:()=>l});n(7294);var a=n(6010),o=n(5999),i=n(2503),s=n(5893);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.Z,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"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/assets/js/a960b763.23498b33.js b/assets/js/a960b763.23498b33.js deleted file mode 100644 index 8aab9dcf5..000000000 --- a/assets/js/a960b763.23498b33.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7484],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>h});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=p(n),m=r,h=u["".concat(l,".").concat(m)]||u[m]||c[m]||o;return n?a.createElement(h,i(i({ref:t},d),{},{components:n})):a.createElement(h,i({ref:t},d))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:r,i[1]=s;for(var p=2;p<o;p++)i[p]=n[p];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},4452:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=n(7462),r=(n(7294),n(4137));const o={},i="Guide to Installing Bee Node on Dappnode",s={unversionedId:"user/packages/swarm",id:"user/packages/swarm",title:"Guide to Installing Bee Node on Dappnode",description:"Introduction to Swarm",source:"@site/docs/user/packages/swarm.md",sourceDirName:"user/packages",slug:"/user/packages/swarm",permalink:"/docs/user/packages/swarm",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/swarm.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Monero",permalink:"/docs/user/packages/monero"},next:{title:"Ethereum repository",permalink:"/docs/user/repository/ethereum"}},l={},p=[{value:"Introduction to Swarm",id:"introduction-to-swarm",level:2},{value:"Introduction to Dappnode",id:"introduction-to-dappnode",level:2},{value:"Gnosis Chain",id:"gnosis-chain",level:2},{value:"Installing a Bee node",id:"installing-a-bee-node",level:2},{value:"Engage in Storage Incentives by Staking Your BZZ",id:"engage-in-storage-incentives-by-staking-your-bzz",level:3}],d={toc:p},u="wrapper";function c(e){let{components:t,...n}=e;return(0,r.kt)(u,(0,a.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"guide-to-installing-bee-node-on-dappnode"},"Guide to Installing Bee Node on Dappnode"),(0,r.kt)("h2",{id:"introduction-to-swarm"},"Introduction to Swarm"),(0,r.kt)("p",null,"Swarm is a decentralized data storage and distribution technology. Ready to power the next generation of censorship-resistant, unstoppable, serverless dApps."),(0,r.kt)("p",null,"Node operators can ",(0,r.kt)("a",{parentName:"p",href:"https://docs.ethswarm.org/docs/bee/working-with-bee/staking/#stake-your-node-with-bee"},"stake BZZ")," to participate in the redistribution of funds, allowing Bee node operators to receive BZZ in return for providing storage and bandwidth."),(0,r.kt)("p",null,"Node operators are rewarded with BZZ tokens, the native ERC-20 token."),(0,r.kt)("p",null,"Beyond earning rewards, the Bee node serves as your personalized gateway to the Swarm network, offering you interactive access to content and dApps hosted on Swarm. The app enables you to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Securely store (upload and download) files on Swarm's decentralized storage."),(0,r.kt)("li",{parentName:"ul"},"Share files privately and securely with others."),(0,r.kt)("li",{parentName:"ul"},"Host and manage HTML websites conveniently.")),(0,r.kt)("h2",{id:"introduction-to-dappnode"},"Introduction to Dappnode"),(0,r.kt)("p",null,"DappNode is a decentralized platform that serves as critical infrastructure for launching and managing decentralized applications (dApps) with an essence of providing users with self-sovereign data management and secure, uncensorable application interfaces."),(0,r.kt)("p",null,"Node operators on DappNode can gain enhanced control over their participation in various blockchain networks and ensure that their activities, whether it be validating transactions, participating in consensus mechanisms, or supporting network security, are conducted in a seamless, autonomous manner."),(0,r.kt)("p",null,"The unique DappNode ecosystem ensures:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Seamless deployment and management of decentralized applications and nodes."),(0,r.kt)("li",{parentName:"ul"},"Enhanced user control over data and privacy."),(0,r.kt)("li",{parentName:"ul"},"Autonomous and secure participation in various blockchain networks."),(0,r.kt)("li",{parentName:"ul"},"Simplification of running blockchain nodes, reducing technical barriers for participants.")),(0,r.kt)("h2",{id:"gnosis-chain"},"Gnosis Chain"),(0,r.kt)("p",null,"Swarm uses ",(0,r.kt)("a",{parentName:"p",href:"https://www.gnosis.io/"},"Gnosis Chain"),", formerly known as xDai, for managing its incentives."),(0,r.kt)("p",null,"Therefore, the Swarm Bee client necessitates a connection to the Gnosis Chain. As such, we recommend installing Nethermind (direct Dappnode install link) as your RPC endpoint."),(0,r.kt)("h2",{id:"installing-a-bee-node"},"Installing a Bee node"),(0,r.kt)("p",null,"Step 1: Navigate to the package installer \u2014 ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode/installer/public/swarm.public.dappnode.eth"},"Install Swarm"),"(direct Dappnode install link). Click Install to initiate the installation."),(0,r.kt)("p",null,"Step 2: Setup optional parameters:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Swap RPC Endpoint (Gnosis Chain)")," \u2014 if you installed Nethermind and are running your own node, you can leave the default settings. Otherwise, if you use an external RPC endpoint, this is where you should set it."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ENS resolver RPC (Ethereum Mainnet)")," \u2014 As bee can resolve ENS (a special type of blockchain name), it requires an Ethereum mainnet RPC endpoint. Install links are available for a variety of clients, or you can use an Infura RPC endpoint, or alternatively leave it blank to disable the ENS resolver."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Initial chequebook deposit (xBZZ)")," \u2014 is the amount of xBZZ the bee node must have deposited to its address in order to deploy the chequebook. You have the option to set this to 0 and deposit BZZ into the chequebook later via the UI."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Welcome message")," \u2014 some graffiti that you can admire at Swarm Scan or if you happen to be peering through the logs"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Full node mode")," \u2014 must be set to true or false, in order to stake and participate in storage incentives, and subsequently be rewarded, it should be set to true"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Storage data mountpoint")," \u2014 for advanced users; recommended to leave at default.")),(0,r.kt)("h3",{id:"engage-in-storage-incentives-by-staking-your-bzz"},"Engage in Storage Incentives by Staking Your BZZ"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Import your gift code into Metamask or another web3 wallet on Gnosis chain. Remember, the gift code is a private key that holds 12 BZZ and 0.12xDAI."),(0,r.kt)("li",{parentName:"ol"},"Transfer funds to your Node wallet address, which can be found in the logs or at Swarm UI/Account/",(0,r.kt)("a",{parentName:"li",href:"http://dashboard.swarm.public.dappnode/#/account/wallet"},"Wallet"),"."),(0,r.kt)("li",{parentName:"ol"},"Visit Account/",(0,r.kt)("a",{parentName:"li",href:"http://dashboard.swarm.public.dappnode/#/account/staking"},"Staking"),"."),(0,r.kt)("li",{parentName:"ol"},"Click on 'Stake', input an amount of 10 BZZ, and then press the 'Stake' button.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a960b763.3537f263.js b/assets/js/a960b763.3537f263.js new file mode 100644 index 000000000..0edafbc83 --- /dev/null +++ b/assets/js/a960b763.3537f263.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7484],{377:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>s,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var i=t(5893),a=t(1151);const o={},s="Guide to Installing Bee Node on Dappnode",r={id:"user/packages/swarm",title:"Guide to Installing Bee Node on Dappnode",description:"Introduction to Swarm",source:"@site/docs/user/packages/swarm.md",sourceDirName:"user/packages",slug:"/user/packages/swarm",permalink:"/docs/user/packages/swarm",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/swarm.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Monero",permalink:"/docs/user/packages/monero"},next:{title:"Ethereum repository",permalink:"/docs/user/repository/ethereum"}},d={},l=[{value:"Introduction to Swarm",id:"introduction-to-swarm",level:2},{value:"Introduction to Dappnode",id:"introduction-to-dappnode",level:2},{value:"Gnosis Chain",id:"gnosis-chain",level:2},{value:"Installing a Bee node",id:"installing-a-bee-node",level:2},{value:"Engage in Storage Incentives by Staking Your BZZ",id:"engage-in-storage-incentives-by-staking-your-bzz",level:3}];function c(e){const n={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"guide-to-installing-bee-node-on-dappnode",children:"Guide to Installing Bee Node on Dappnode"}),"\n",(0,i.jsx)(n.h2,{id:"introduction-to-swarm",children:"Introduction to Swarm"}),"\n",(0,i.jsx)(n.p,{children:"Swarm is a decentralized data storage and distribution technology. Ready to power the next generation of censorship-resistant, unstoppable, serverless dApps."}),"\n",(0,i.jsxs)(n.p,{children:["Node operators can ",(0,i.jsx)(n.a,{href:"https://docs.ethswarm.org/docs/bee/working-with-bee/staking/#stake-your-node-with-bee",children:"stake BZZ"})," to participate in the redistribution of funds, allowing Bee node operators to receive BZZ in return for providing storage and bandwidth."]}),"\n",(0,i.jsx)(n.p,{children:"Node operators are rewarded with BZZ tokens, the native ERC-20 token."}),"\n",(0,i.jsx)(n.p,{children:"Beyond earning rewards, the Bee node serves as your personalized gateway to the Swarm network, offering you interactive access to content and dApps hosted on Swarm. The app enables you to:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Securely store (upload and download) files on Swarm's decentralized storage."}),"\n",(0,i.jsx)(n.li,{children:"Share files privately and securely with others."}),"\n",(0,i.jsx)(n.li,{children:"Host and manage HTML websites conveniently."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"introduction-to-dappnode",children:"Introduction to Dappnode"}),"\n",(0,i.jsx)(n.p,{children:"DappNode is a decentralized platform that serves as critical infrastructure for launching and managing decentralized applications (dApps) with an essence of providing users with self-sovereign data management and secure, uncensorable application interfaces."}),"\n",(0,i.jsx)(n.p,{children:"Node operators on DappNode can gain enhanced control over their participation in various blockchain networks and ensure that their activities, whether it be validating transactions, participating in consensus mechanisms, or supporting network security, are conducted in a seamless, autonomous manner."}),"\n",(0,i.jsx)(n.p,{children:"The unique DappNode ecosystem ensures:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Seamless deployment and management of decentralized applications and nodes."}),"\n",(0,i.jsx)(n.li,{children:"Enhanced user control over data and privacy."}),"\n",(0,i.jsx)(n.li,{children:"Autonomous and secure participation in various blockchain networks."}),"\n",(0,i.jsx)(n.li,{children:"Simplification of running blockchain nodes, reducing technical barriers for participants."}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"gnosis-chain",children:"Gnosis Chain"}),"\n",(0,i.jsxs)(n.p,{children:["Swarm uses ",(0,i.jsx)(n.a,{href:"https://www.gnosis.io/",children:"Gnosis Chain"}),", formerly known as xDai, for managing its incentives."]}),"\n",(0,i.jsx)(n.p,{children:"Therefore, the Swarm Bee client necessitates a connection to the Gnosis Chain. As such, we recommend installing Nethermind (direct Dappnode install link) as your RPC endpoint."}),"\n",(0,i.jsx)(n.h2,{id:"installing-a-bee-node",children:"Installing a Bee node"}),"\n",(0,i.jsxs)(n.p,{children:["Step 1: Navigate to the package installer \u2014 ",(0,i.jsx)(n.a,{href:"http://my.dappnode/installer/public/swarm.public.dappnode.eth",children:"Install Swarm"}),"(direct Dappnode install link). Click Install to initiate the installation."]}),"\n",(0,i.jsx)(n.p,{children:"Step 2: Setup optional parameters:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Swap RPC Endpoint (Gnosis Chain)"})," \u2014 if you installed Nethermind and are running your own node, you can leave the default settings. Otherwise, if you use an external RPC endpoint, this is where you should set it."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"ENS resolver RPC (Ethereum Mainnet)"})," \u2014 As bee can resolve ENS (a special type of blockchain name), it requires an Ethereum mainnet RPC endpoint. Install links are available for a variety of clients, or you can use an Infura RPC endpoint, or alternatively leave it blank to disable the ENS resolver."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Initial chequebook deposit (xBZZ)"})," \u2014 is the amount of xBZZ the bee node must have deposited to its address in order to deploy the chequebook. You have the option to set this to 0 and deposit BZZ into the chequebook later via the UI."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Welcome message"})," \u2014 some graffiti that you can admire at Swarm Scan or if you happen to be peering through the logs"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Full node mode"})," \u2014 must be set to true or false, in order to stake and participate in storage incentives, and subsequently be rewarded, it should be set to true"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.strong,{children:"Storage data mountpoint"})," \u2014 for advanced users; recommended to leave at default."]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"engage-in-storage-incentives-by-staking-your-bzz",children:"Engage in Storage Incentives by Staking Your BZZ"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Import your gift code into Metamask or another web3 wallet on Gnosis chain. Remember, the gift code is a private key that holds 12 BZZ and 0.12xDAI."}),"\n",(0,i.jsxs)(n.li,{children:["Transfer funds to your Node wallet address, which can be found in the logs or at Swarm UI/Account/",(0,i.jsx)(n.a,{href:"http://dashboard.swarm.public.dappnode/#/account/wallet",children:"Wallet"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Visit Account/",(0,i.jsx)(n.a,{href:"http://dashboard.swarm.public.dappnode/#/account/staking",children:"Staking"}),"."]}),"\n",(0,i.jsx)(n.li,{children:"Click on 'Stake', input an amount of 10 BZZ, and then press the 'Stake' button."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>s});var i=t(7294);const a={},o=i.createContext(a);function s(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/af26485d.bb17cc6d.js b/assets/js/af26485d.bb17cc6d.js deleted file mode 100644 index 9e8e4b521..000000000 --- a/assets/js/af26485d.bb17cc6d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2217],{4137:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>y});var n=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?r(Object(o),!0).forEach((function(t){a(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function p(e,t){if(null==e)return{};var o,n,a=function(e,t){if(null==e)return{};var o,n,a={},r=Object.keys(e);for(n=0;n<r.length;n++)o=r[n],t.indexOf(o)>=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n<r.length;n++)o=r[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var s=n.createContext({}),l=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,u=p(e,["components","mdxType","originalType","parentName"]),d=l(o),m=a,y=d["".concat(s,".").concat(m)]||d[m]||c[m]||r;return o?n.createElement(y,i(i({ref:t},u),{},{components:o})):n.createElement(y,i({ref:t},u))}));function y(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=o.length,i=new Array(r);i[0]=m;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p[d]="string"==typeof e?e:a,i[1]=p;for(var l=2;l<r;l++)i[l]=o[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,o)}m.displayName="MDXCreateElement"},4843:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>p,toc:()=>l});var n=o(7462),a=(o(7294),o(4137));const r={},i="IPFS repository",p={unversionedId:"user/repository/ipfs",id:"user/repository/ipfs",title:"IPFS repository",description:"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:",source:"@site/docs/user/repository/ipfs.md",sourceDirName:"user/repository",slug:"/user/repository/ipfs",permalink:"/docs/user/repository/ipfs",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/repository/ipfs.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethereum repository",permalink:"/docs/user/repository/ethereum"},next:{title:"Installation Overview",permalink:"/docs/user/install/overview"}},s={},l=[{value:"Run your own IPFS node",id:"run-your-own-ipfs-node",level:2},{value:"Use a remote IPFS node",id:"use-a-remote-ipfs-node",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}],u={toc:l},d="wrapper";function c(e){let{components:t,...r}=e;return(0,a.kt)(d,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"ipfs-repository"},"IPFS repository"),(0,a.kt)("p",null,"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Run Your Own IPFS Node"),": By opting for this, you maintain full control, ensuring that you directly access the distributed packages without intermediaries. However, it might require some disk space."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Use a Remote Node"),": This is a convenient option, but it comes with the caveat of needing to trust the remote node operator. It is really useful in case your own IPFS node becomes unreliable or unavailable.")),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"To configure your dappnode IPFS repository go to ",(0,a.kt)("a",{parentName:"p",href:"http://my.dappnode/repository/ipfs"},"http://my.dappnode/repository/ipfs"))),(0,a.kt)("h2",{id:"run-your-own-ipfs-node"},"Run your own IPFS node"),(0,a.kt)("p",null,"You can run your own IPFS node to connect to the IPFS network. This is the recommended option for those users who want to have full control over their dappnode. Dappnode comes with an IPFS node preinstalled and configured. You can access the ",(0,a.kt)("a",{parentName:"p",href:"http://ipfs.dappnode:5001/webui"},"IPFS Web UI")," while connected to your Dappnode."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"ipfs-remote-local",src:o(9796).Z,width:"2562",height:"1068"})),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Running your own IPFS node may affect your internet connection. If you don't want to run your own IPFS node, you can use a remote IPFS node. Consider stopping your IPFS node if you are not using it at ",(0,a.kt)("a",{parentName:"p",href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info"},"IPFS Package"))),(0,a.kt)("h2",{id:"use-a-remote-ipfs-node"},"Use a remote IPFS node"),(0,a.kt)("p",null,"You can use a remote IPFS node gateway to connect to the IPFS network. You will need to trust the node operator. Dappnode provides an ",(0,a.kt)("a",{parentName:"p",href:"https://gateway.ipfs.dappnode.io"},"Official IPFS gateway")," by default, but you can choose any other IPFS gateway."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"ipfs-remote-node",src:o(8493).Z,width:"2562",height:"1068"})),(0,a.kt)("admonition",{title:"IPFS gateways and security",type:"note"},(0,a.kt)("p",{parentName:"admonition"},"Connecting to IPFS remote gateways could entail security risks. For example, the gateway could attempt to serve malicious content to the user. We mitigate this risk by verifying the content downladed with ",(0,a.kt)("a",{parentName:"p",href:"https://docs.ipfs.io/concepts/content-addressing/"},"CID technology"),"."),(0,a.kt)("p",{parentName:"admonition"},"If the Dappnode IPFS gateway is not available (we make no uptime guarantees and we offer it on a best-effort basis) the user can set another IPFS gateway in the input field as last resort. Check out all the ",(0,a.kt)("a",{parentName:"p",href:"https://ipfs.github.io/public-gateway-checker/"},"IPFS gateways available"))),(0,a.kt)("hr",null),(0,a.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,a.kt)("details",null,(0,a.kt)("summary",null,(0,a.kt)("b",null,"I can't see the logos of the packages in the Dappstore/Stakers tab. Why?")),(0,a.kt)("p",null,(0,a.kt)("p",null,"This might be related to an issue with IPFS. Try the following solutions:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"IPFS Mode"),":"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Navigate to the ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/repository/ipfs"},"repository"),"."),(0,a.kt)("li",{parentName:"ul"},"Toggle between ",(0,a.kt)("inlineCode",{parentName:"li"},"local")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"remote")," IPFS modes to see which one works."))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"IPFS Package Status"),":"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"If your IPFS mode is set to ",(0,a.kt)("inlineCode",{parentName:"li"},"local"),", ensure that the IPFS package is running."),(0,a.kt)("li",{parentName:"ul"},"Visit ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info"},"IPFS Package"),' to verify its status and click on "Start" if it is stopped.'),(0,a.kt)("li",{parentName:"ul"},"If it's restarting, consider updating the IPFS package to its latest version. Post update, remove its volumes to address any potential database migration issues."))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Gateway Validity"),":"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"For ",(0,a.kt)("inlineCode",{parentName:"li"},"remote")," IPFS mode, make sure the gateway URL in the ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/repository/ipfs"},"repository")," is correct.")))))),(0,a.kt)("details",null,(0,a.kt)("summary",null,(0,a.kt)("b",null,"I'm using local IPFS and encountering issues downloading packages. What should I do?")),(0,a.kt)("p",null,(0,a.kt)("p",null,"This could arise from various factors:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Internet Connection"),":"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Your connection might be unstable. Consider switching your IPFS node mode to ",(0,a.kt)("inlineCode",{parentName:"li"},"lowpower")," by accessing ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/config"},"IPFS config"),"."))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Disk Space"),":"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Your local IPFS node might be out of storage."),(0,a.kt)("li",{parentName:"ul"},'Clear the storage by opting for "Remove volumes" at ',(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info"},"IPFS package info"),"."))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Dappnode Official Gateway as Peer"),":"),(0,a.kt)("ul",{parentName:"li"},(0,a.kt)("li",{parentName:"ul"},"Ensure that the Dappnode Official Gateway is added as a peer to your local IPFS."),(0,a.kt)("li",{parentName:"ul"},"You can add it directly by clicking ",(0,a.kt)("a",{parentName:"li",href:"http://my.dappnode/system/add-ipfs-peer/%2Fdns4%2Fipfs.dappnode.io%2Ftcp%2F4001%2Fipfs%2FQmfB6dT5zxUq1BXiXisgcZKYkvjywdDYBK5keRaqDKH633"},"here"),".")))),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Tip"),": If these solutions don't resolve the issue, switch to the ",(0,a.kt)("inlineCode",{parentName:"p"},"remote IPFS mode")," at ",(0,a.kt)("a",{parentName:"p",href:"http://my.dappnode/repository/ipfs"},"IPFS repository"),"."))))}c.isMDXComponent=!0},9796:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/repository-ipfs-local-da32632842c89e3f1c4448b01ad12284.png"},8493:(e,t,o)=>{o.d(t,{Z:()=>n});const n=o.p+"assets/images/repository-ipfs-remote-7292c798454f1b0a934e647dacb1b055.png"}}]); \ No newline at end of file diff --git a/assets/js/af26485d.e05f3298.js b/assets/js/af26485d.e05f3298.js new file mode 100644 index 000000000..a5162d209 --- /dev/null +++ b/assets/js/af26485d.e05f3298.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2217],{9316:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=o(5893),t=o(1151);const i={},r="IPFS repository",a={id:"user/repository/ipfs",title:"IPFS repository",description:"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:",source:"@site/docs/user/repository/ipfs.md",sourceDirName:"user/repository",slug:"/user/repository/ipfs",permalink:"/docs/user/repository/ipfs",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/repository/ipfs.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethereum repository",permalink:"/docs/user/repository/ethereum"},next:{title:"Installation Overview",permalink:"/docs/user/install/overview"}},d={},c=[{value:"Run your own IPFS node",id:"run-your-own-ipfs-node",level:2},{value:"Use a remote IPFS node",id:"use-a-remote-ipfs-node",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}];function l(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:i}=n;return i||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ipfs-repository",children:"IPFS repository"}),"\n",(0,s.jsx)(n.p,{children:"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Run Your Own IPFS Node"}),": By opting for this, you maintain full control, ensuring that you directly access the distributed packages without intermediaries. However, it might require some disk space."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Use a Remote Node"}),": This is a convenient option, but it comes with the caveat of needing to trust the remote node operator. It is really useful in case your own IPFS node becomes unreliable or unavailable."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["To configure your dappnode IPFS repository go to ",(0,s.jsx)(n.a,{href:"http://my.dappnode/repository/ipfs",children:"http://my.dappnode/repository/ipfs"})]})}),"\n",(0,s.jsx)(n.h2,{id:"run-your-own-ipfs-node",children:"Run your own IPFS node"}),"\n",(0,s.jsxs)(n.p,{children:["You can run your own IPFS node to connect to the IPFS network. This is the recommended option for those users who want to have full control over their dappnode. Dappnode comes with an IPFS node preinstalled and configured. You can access the ",(0,s.jsx)(n.a,{href:"http://ipfs.dappnode:5001/webui",children:"IPFS Web UI"})," while connected to your Dappnode."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"ipfs-remote-local",src:o(9796).Z+"",width:"2562",height:"1068"})}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsxs)(n.p,{children:["Running your own IPFS node may affect your internet connection. If you don't want to run your own IPFS node, you can use a remote IPFS node. Consider stopping your IPFS node if you are not using it at ",(0,s.jsx)(n.a,{href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info",children:"IPFS Package"})]})}),"\n",(0,s.jsx)(n.h2,{id:"use-a-remote-ipfs-node",children:"Use a remote IPFS node"}),"\n",(0,s.jsxs)(n.p,{children:["You can use a remote IPFS node gateway to connect to the IPFS network. You will need to trust the node operator. Dappnode provides an ",(0,s.jsx)(n.a,{href:"https://gateway.ipfs.dappnode.io",children:"Official IPFS gateway"})," by default, but you can choose any other IPFS gateway."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"ipfs-remote-node",src:o(8493).Z+"",width:"2562",height:"1068"})}),"\n",(0,s.jsxs)(n.admonition,{title:"IPFS gateways and security",type:"note",children:[(0,s.jsxs)(n.p,{children:["Connecting to IPFS remote gateways could entail security risks. For example, the gateway could attempt to serve malicious content to the user. We mitigate this risk by verifying the content downladed with ",(0,s.jsx)(n.a,{href:"https://docs.ipfs.io/concepts/content-addressing/",children:"CID technology"}),"."]}),(0,s.jsxs)(n.p,{children:["If the Dappnode IPFS gateway is not available (we make no uptime guarantees and we offer it on a best-effort basis) the user can set another IPFS gateway in the input field as last resort. Check out all the ",(0,s.jsx)(n.a,{href:"https://ipfs.github.io/public-gateway-checker/",children:"IPFS gateways available"})]})]}),"\n",(0,s.jsx)("hr",{}),"\n",(0,s.jsx)(n.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsxs)(i,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"I can't see the logos of the packages in the Dappstore/Stakers tab. Why?"})}),(0,s.jsxs)("p",{children:[(0,s.jsx)(n.p,{children:"This might be related to an issue with IPFS. Try the following solutions:"}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"IPFS Mode"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Navigate to the ",(0,s.jsx)(n.a,{href:"http://my.dappnode/repository/ipfs",children:"repository"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Toggle between ",(0,s.jsx)(n.code,{children:"local"})," and ",(0,s.jsx)(n.code,{children:"remote"})," IPFS modes to see which one works."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"IPFS Package Status"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["If your IPFS mode is set to ",(0,s.jsx)(n.code,{children:"local"}),", ensure that the IPFS package is running."]}),"\n",(0,s.jsxs)(n.li,{children:["Visit ",(0,s.jsx)(n.a,{href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info",children:"IPFS Package"}),' to verify its status and click on "Start" if it is stopped.']}),"\n",(0,s.jsx)(n.li,{children:"If it's restarting, consider updating the IPFS package to its latest version. Post update, remove its volumes to address any potential database migration issues."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Gateway Validity"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["For ",(0,s.jsx)(n.code,{children:"remote"})," IPFS mode, make sure the gateway URL in the ",(0,s.jsx)(n.a,{href:"http://my.dappnode/repository/ipfs",children:"repository"})," is correct."]}),"\n"]}),"\n"]}),"\n"]})]})]}),"\n",(0,s.jsxs)(i,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"I'm using local IPFS and encountering issues downloading packages. What should I do?"})}),(0,s.jsxs)("p",{children:[(0,s.jsx)(n.p,{children:"This could arise from various factors:"}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Internet Connection"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Your connection might be unstable. Consider switching your IPFS node mode to ",(0,s.jsx)(n.code,{children:"lowpower"})," by accessing ",(0,s.jsx)(n.a,{href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/config",children:"IPFS config"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Disk Space"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Your local IPFS node might be out of storage."}),"\n",(0,s.jsxs)(n.li,{children:['Clear the storage by opting for "Remove volumes" at ',(0,s.jsx)(n.a,{href:"http://my.dappnode/packages/system/ipfs.dnp.dappnode.eth/info",children:"IPFS package info"}),"."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Dappnode Official Gateway as Peer"}),":"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Ensure that the Dappnode Official Gateway is added as a peer to your local IPFS."}),"\n",(0,s.jsxs)(n.li,{children:["You can add it directly by clicking ",(0,s.jsx)(n.a,{href:"http://my.dappnode/system/add-ipfs-peer/%2Fdns4%2Fipfs.dappnode.io%2Ftcp%2F4001%2Fipfs%2FQmfB6dT5zxUq1BXiXisgcZKYkvjywdDYBK5keRaqDKH633",children:"here"}),"."]}),"\n"]}),"\n"]}),"\n"]}),(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Tip"}),": If these solutions don't resolve the issue, switch to the ",(0,s.jsx)(n.code,{children:"remote IPFS mode"})," at ",(0,s.jsx)(n.a,{href:"http://my.dappnode/repository/ipfs",children:"IPFS repository"}),"."]})]})]})]})}function p(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},9796:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/repository-ipfs-local-da32632842c89e3f1c4448b01ad12284.png"},8493:(e,n,o)=>{o.d(n,{Z:()=>s});const s=o.p+"assets/images/repository-ipfs-remote-7292c798454f1b0a934e647dacb1b055.png"},1151:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>r});var s=o(7294);const t={},i=s.createContext(t);function r(e){const n=s.useContext(i);return s.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(t):e.components||t:r(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.916cd470.js b/assets/js/b2f554cd.916cd470.js deleted file mode 100644 index 1e78b74a6..000000000 --- a/assets/js/b2f554cd.916cd470.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1477],{10:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"welcome","metadata":{"permalink":"/blog/welcome","source":"@site/blog/2021-08-26-welcome/index.md","title":"Welcome","description":"Docusaurus blogging features are powered by the blog plugin.","date":"2021-08-26T00:00:00.000Z","formattedDate":"August 26, 2021","tags":[{"label":"facebook","permalink":"/blog/tags/facebook"},{"label":"hello","permalink":"/blog/tags/hello"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.405,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Yangshun Tay","title":"Front End Engineer @ Facebook","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"slug":"welcome","title":"Welcome","authors":["slorber","yangshun"],"tags":["facebook","hello","docusaurus"]},"nextItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"}},"content":"[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog).\\n\\nSimply add Markdown files (or folders) to the `blog` directory.\\n\\nRegular blog authors can be added to `authors.yml`.\\n\\nThe blog post date can be extracted from filenames, such as:\\n\\n- `2019-05-30-welcome.md`\\n- `2019-05-30-welcome/index.md`\\n\\nA blog post folder can be convenient to co-locate blog post images:\\n\\n![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg)\\n\\nThe blog supports tags as well!\\n\\n**And if you don\'t want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config."},{"id":"mdx-blog-post","metadata":{"permalink":"/blog/mdx-blog-post","source":"@site/blog/2021-08-01-mdx-blog-post.mdx","title":"MDX Blog Post","description":"Blog posts support Docusaurus Markdown features, such as MDX.","date":"2021-08-01T00:00:00.000Z","formattedDate":"August 1, 2021","tags":[{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.175,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"slug":"mdx-blog-post","title":"MDX Blog Post","authors":["slorber"],"tags":["docusaurus"]},"prevItem":{"title":"Welcome","permalink":"/blog/welcome"},"nextItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}},"content":"Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/).\\n\\n:::tip\\n\\nUse the power of React to create interactive blog posts.\\n\\n```js\\n<button onClick={() => alert(\'button clicked!\')}>Click me!</button>\\n```\\n\\n<button onClick={() => alert(\'button clicked!\')}>Click me!</button>\\n\\n:::"},{"id":"long-blog-post","metadata":{"permalink":"/blog/long-blog-post","source":"@site/blog/2019-05-29-long-blog-post.md","title":"Long Blog Post","description":"This is the summary of a very long blog post,","date":"2019-05-29T00:00:00.000Z","formattedDate":"May 29, 2019","tags":[{"label":"hello","permalink":"/blog/tags/hello"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":2.05,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endi"}],"frontMatter":{"slug":"long-blog-post","title":"Long Blog Post","authors":"endi","tags":["hello","docusaurus"]},"prevItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"},"nextItem":{"title":"First Blog Post","permalink":"/blog/first-blog-post"}},"content":"This is the summary of a very long blog post,\\n\\nUse a `\x3c!--` `truncate` `--\x3e` comment to limit blog post size in the list view.\\n\\n\x3c!--truncate--\x3e\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"},{"id":"first-blog-post","metadata":{"permalink":"/blog/first-blog-post","source":"@site/blog/2019-05-28-first-blog-post.md","title":"First Blog Post","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","date":"2019-05-28T00:00:00.000Z","formattedDate":"May 28, 2019","tags":[{"label":"hola","permalink":"/blog/tags/hola"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":false,"authors":[{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png"}],"frontMatter":{"slug":"first-blog-post","title":"First Blog Post","authors":{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png"},"tags":["hola","docusaurus"]},"prevItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}},"content":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}]}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.f646151d.js b/assets/js/b2f554cd.f646151d.js new file mode 100644 index 000000000..971fc0b0e --- /dev/null +++ b/assets/js/b2f554cd.f646151d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1477],{4556:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"welcome","metadata":{"permalink":"/blog/welcome","source":"@site/blog/2021-08-26-welcome/index.md","title":"Welcome","description":"Docusaurus blogging features are powered by the blog plugin.","date":"2021-08-26T00:00:00.000Z","formattedDate":"August 26, 2021","tags":[{"label":"facebook","permalink":"/blog/tags/facebook"},{"label":"hello","permalink":"/blog/tags/hello"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.405,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber"},{"name":"Yangshun Tay","title":"Front End Engineer @ Facebook","url":"https://github.com/yangshun","imageURL":"https://github.com/yangshun.png","key":"yangshun"}],"frontMatter":{"slug":"welcome","title":"Welcome","authors":["slorber","yangshun"],"tags":["facebook","hello","docusaurus"]},"unlisted":false,"nextItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"}},"content":"[Docusaurus blogging features](https://docusaurus.io/docs/blog) are powered by the [blog plugin](https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog).\\n\\nSimply add Markdown files (or folders) to the `blog` directory.\\n\\nRegular blog authors can be added to `authors.yml`.\\n\\nThe blog post date can be extracted from filenames, such as:\\n\\n- `2019-05-30-welcome.md`\\n- `2019-05-30-welcome/index.md`\\n\\nA blog post folder can be convenient to co-locate blog post images:\\n\\n![Docusaurus Plushie](./docusaurus-plushie-banner.jpeg)\\n\\nThe blog supports tags as well!\\n\\n**And if you don\'t want a blog**: just delete this directory, and use `blog: false` in your Docusaurus config."},{"id":"mdx-blog-post","metadata":{"permalink":"/blog/mdx-blog-post","source":"@site/blog/2021-08-01-mdx-blog-post.mdx","title":"MDX Blog Post","description":"Blog posts support Docusaurus Markdown features, such as MDX.","date":"2021-08-01T00:00:00.000Z","formattedDate":"August 1, 2021","tags":[{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.175,"hasTruncateMarker":false,"authors":[{"name":"S\xe9bastien Lorber","title":"Docusaurus maintainer","url":"https://sebastienlorber.com","imageURL":"https://github.com/slorber.png","key":"slorber"}],"frontMatter":{"slug":"mdx-blog-post","title":"MDX Blog Post","authors":["slorber"],"tags":["docusaurus"]},"unlisted":false,"prevItem":{"title":"Welcome","permalink":"/blog/welcome"},"nextItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}},"content":"Blog posts support [Docusaurus Markdown features](https://docusaurus.io/docs/markdown-features), such as [MDX](https://mdxjs.com/).\\n\\n:::tip\\n\\nUse the power of React to create interactive blog posts.\\n\\n```js\\n<button onClick={() => alert(\'button clicked!\')}>Click me!</button>\\n```\\n\\n<button onClick={() => alert(\'button clicked!\')}>Click me!</button>\\n\\n:::"},{"id":"long-blog-post","metadata":{"permalink":"/blog/long-blog-post","source":"@site/blog/2019-05-29-long-blog-post.md","title":"Long Blog Post","description":"This is the summary of a very long blog post,","date":"2019-05-29T00:00:00.000Z","formattedDate":"May 29, 2019","tags":[{"label":"hello","permalink":"/blog/tags/hello"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":2.05,"hasTruncateMarker":true,"authors":[{"name":"Endilie Yacop Sucipto","title":"Maintainer of Docusaurus","url":"https://github.com/endiliey","imageURL":"https://github.com/endiliey.png","key":"endi"}],"frontMatter":{"slug":"long-blog-post","title":"Long Blog Post","authors":"endi","tags":["hello","docusaurus"]},"unlisted":false,"prevItem":{"title":"MDX Blog Post","permalink":"/blog/mdx-blog-post"},"nextItem":{"title":"First Blog Post","permalink":"/blog/first-blog-post"}},"content":"This is the summary of a very long blog post,\\n\\nUse a `\x3c!--` `truncate` `--\x3e` comment to limit blog post size in the list view.\\n\\n\x3c!--truncate--\x3e\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet\\n\\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"},{"id":"first-blog-post","metadata":{"permalink":"/blog/first-blog-post","source":"@site/blog/2019-05-28-first-blog-post.md","title":"First Blog Post","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","date":"2019-05-28T00:00:00.000Z","formattedDate":"May 28, 2019","tags":[{"label":"hola","permalink":"/blog/tags/hola"},{"label":"docusaurus","permalink":"/blog/tags/docusaurus"}],"readingTime":0.12,"hasTruncateMarker":false,"authors":[{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png"}],"frontMatter":{"slug":"first-blog-post","title":"First Blog Post","authors":{"name":"Gao Wei","title":"Docusaurus Core Team","url":"https://github.com/wgao19","image_url":"https://github.com/wgao19.png","imageURL":"https://github.com/wgao19.png"},"tags":["hola","docusaurus"]},"unlisted":false,"prevItem":{"title":"Long Blog Post","permalink":"/blog/long-blog-post"}},"content":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"}]}')}}]); \ No newline at end of file diff --git a/assets/js/b4800274.6101b4c4.js b/assets/js/b4800274.6101b4c4.js new file mode 100644 index 000000000..86c62d025 --- /dev/null +++ b/assets/js/b4800274.6101b4c4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5561],{9620:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var o=t(5893),s=t(1151);const r={},i="Ethereum Rollups: An Overview",l={id:"user/rollups/overview",title:"Ethereum Rollups: An Overview",description:"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.",source:"@site/docs/user/rollups/overview.md",sourceDirName:"user/rollups",slug:"/user/rollups/overview",permalink:"/docs/user/rollups/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/rollups/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"LUKSO",permalink:"/docs/user/staking/lukso/solo"},next:{title:"Optimism Rollup",permalink:"/docs/user/rollups/optimism"}},a={},u=[{value:"Enable rollups",id:"enable-rollups",level:2}];function c(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"ethereum-rollups-an-overview",children:"Ethereum Rollups: An Overview"}),"\n",(0,o.jsx)(n.p,{children:"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs."}),"\n",(0,o.jsx)(n.p,{children:"Currently, we support:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.a,{href:"/docs/user/rollups/optimism",children:(0,o.jsxs)(n.strong,{children:["\ud83c\udf40"," Optimism"]})}),": An optimistic Layer 2 solution for Ethereum, enhancing speed and efficiency."]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"enable-rollups",children:"Enable rollups"}),"\n",(0,o.jsx)(n.p,{children:"To enable this feature, you need to switch on the rollups module in the top bar of the Dappnode UI (Dappmanager):"}),"\n",(0,o.jsx)("p",{align:"center",children:(0,o.jsx)("img",{width:"70%",src:"/img/rollups-module.png"})})]})}function p(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>i});var o=t(7294);const s={},r=o.createContext(s);function i(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b4800274.89df982d.js b/assets/js/b4800274.89df982d.js deleted file mode 100644 index 1ba4ccb97..000000000 --- a/assets/js/b4800274.89df982d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5561],{4137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(r),m=o,f=c["".concat(s,".").concat(m)]||c[m]||d[m]||a;return r?n.createElement(f,l(l({ref:t},u),{},{components:r})):n.createElement(f,l({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[c]="string"==typeof e?e:o,l[1]=i;for(var p=2;p<a;p++)l[p]=r[p];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},1e3:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(4137));const a={},l="Ethereum Rollups: An Overview",i={unversionedId:"user/rollups/overview",id:"user/rollups/overview",title:"Ethereum Rollups: An Overview",description:"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.",source:"@site/docs/user/rollups/overview.md",sourceDirName:"user/rollups",slug:"/user/rollups/overview",permalink:"/docs/user/rollups/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/rollups/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"LUKSO",permalink:"/docs/user/staking/lukso/solo"},next:{title:"Optimism Rollup",permalink:"/docs/user/rollups/optimism"}},s={},p=[{value:"Enable rollups",id:"enable-rollups",level:2}],u={toc:p},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ethereum-rollups-an-overview"},"Ethereum Rollups: An Overview"),(0,o.kt)("p",null,"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs."),(0,o.kt)("p",null,"Currently, we support:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"/docs/user/rollups/optimism"},(0,o.kt)("strong",{parentName:"a"},"\ud83c\udf40 Optimism")),": An optimistic Layer 2 solution for Ethereum, enhancing speed and efficiency.")),(0,o.kt)("h2",{id:"enable-rollups"},"Enable rollups"),(0,o.kt)("p",null,"To enable this feature, you need to switch on the rollups module in the top bar of the Dappnode UI (Dappmanager):"),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{width:"70%",src:"/img/rollups-module.png"})))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b9c10046.95b35c48.js b/assets/js/b9c10046.95b35c48.js new file mode 100644 index 000000000..7895e44c2 --- /dev/null +++ b/assets/js/b9c10046.95b35c48.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4765],{7821:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>d,contentTitle:()=>r,default:()=>l,frontMatter:()=>a,metadata:()=>n,toc:()=>c});var s=o(5893),i=o(1151);const a={},r="Automatic Subscription",n={id:"smooth/subscribe-to-smooth/automatic",title:"Automatic Subscription",description:"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block.",source:"@site/docs/smooth/subscribe-to-smooth/automatic.md",sourceDirName:"smooth/subscribe-to-smooth",slug:"/smooth/subscribe-to-smooth/automatic",permalink:"/docs/smooth/subscribe-to-smooth/automatic",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/subscribe-to-smooth/automatic.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Subscribing to Smooth",permalink:"/docs/smooth/subscribe-to-smooth/overview"},next:{title:"Manual Subscription",permalink:"/docs/smooth/subscribe-to-smooth/manual"}},d={},c=[{value:"Step 1: Change your fee recipient to Smooth's address.",id:"step-1-change-your-fee-recipient-to-smooths-address",level:3},{value:"Step 2: Check your subscription status!",id:"step-2-check-your-subscription-status",level:3}];function h(t){const e={a:"a",admonition:"admonition",code:"code",h1:"h1",h3:"h3",img:"img",p:"p",...(0,i.a)(),...t.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.h1,{id:"automatic-subscription",children:"Automatic Subscription"}),"\n",(0,s.jsxs)(e.p,{children:["This is the simplest way to subscribe to ",(0,s.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block."]}),"\n",(0,s.jsxs)(e.admonition,{title:"Before automatically subscribing to Smooth!",type:"danger",children:[(0,s.jsx)(e.p,{children:"Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth."}),(0,s.jsx)(e.p,{children:"Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth."})]}),"\n",(0,s.jsx)(e.h3,{id:"step-1-change-your-fee-recipient-to-smooths-address",children:"Step 1: Change your fee recipient to Smooth's address."}),"\n",(0,s.jsxs)(e.p,{children:["Go to your dappnode's ",(0,s.jsx)(e.a,{href:"http://brain.web3signer.dappnode/",children:"staking brain"})," and change the fee recipient of the validators you want to subscribe to Smooth's address (",(0,s.jsx)(e.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),"). Once ",(0,s.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," receives the rewards from your validator, it will automatically subscribe your validator, and you will start receiving rewards from other members.\n",(0,s.jsx)(e.img,{alt:"fee_recipient",src:o(4257).Z+"",width:"2728",height:"552"})]}),"\n",(0,s.jsx)(e.admonition,{title:"Keep the fee recipient set to Smooth's address!",type:"danger",children:(0,s.jsxs)(e.p,{children:["It is extremely important that you keep the fee recipient of your validator set to Smooth's address (",(0,s.jsx)(e.code,{children:"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"}),") as long as it is subscribed to ",(0,s.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from ",(0,s.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and will not be able to participate in it again."]})}),"\n",(0,s.jsx)(e.h3,{id:"step-2-check-your-subscription-status",children:"Step 2: Check your subscription status!"}),"\n",(0,s.jsxs)(e.p,{children:["Go to ",(0,s.jsx)(e.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear. Once the validator proposes a block, it will appear as subscribed. We recommend you familiarize yourself with this website! It is the place where you will manage your validators going forward."]})]})}function l(t={}){const{wrapper:e}={...(0,i.a)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(h,{...t})}):h(t)}},4257:(t,e,o)=>{o.d(e,{Z:()=>s});const s=o.p+"assets/images/smooth_fee_recipient-9a97308ed0c601ccc84b0295efe34cd4.png"},1151:(t,e,o)=>{o.d(e,{Z:()=>n,a:()=>r});var s=o(7294);const i={},a=s.createContext(i);function r(t){const e=s.useContext(a);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function n(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(i):t.components||i:r(t.components),s.createElement(a.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/b9c10046.aaa11874.js b/assets/js/b9c10046.aaa11874.js deleted file mode 100644 index 72e5e6b4c..000000000 --- a/assets/js/b9c10046.aaa11874.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4765],{4137:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>m});var r=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function s(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach((function(t){a(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function n(e,t){if(null==e)return{};var o,r,a=function(e,t){if(null==e)return{};var o,r,a={},i=Object.keys(e);for(r=0;r<i.length;r++)o=i[r],t.indexOf(o)>=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)o=i[r],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var c=r.createContext({}),p=function(e){var t=r.useContext(c),o=t;return e&&(o="function"==typeof e?e(t):s(s({},t),e)),o},d=function(e){var t=p(e.components);return r.createElement(c.Provider,{value:t},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var o=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,d=n(e,["components","mdxType","originalType","parentName"]),l=p(o),h=a,m=l["".concat(c,".").concat(h)]||l[h]||u[h]||i;return o?r.createElement(m,s(s({ref:t},d),{},{components:o})):r.createElement(m,s({ref:t},d))}));function m(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=o.length,s=new Array(i);s[0]=h;var n={};for(var c in t)hasOwnProperty.call(t,c)&&(n[c]=t[c]);n.originalType=e,n[l]="string"==typeof e?e:a,s[1]=n;for(var p=2;p<i;p++)s[p]=o[p];return r.createElement.apply(null,s)}return r.createElement.apply(null,o)}h.displayName="MDXCreateElement"},1740:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>i,metadata:()=>n,toc:()=>p});var r=o(7462),a=(o(7294),o(4137));const i={},s="Automatic Subscription",n={unversionedId:"smooth/subscribe-to-smooth/automatic",id:"smooth/subscribe-to-smooth/automatic",title:"Automatic Subscription",description:"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block.",source:"@site/docs/smooth/subscribe-to-smooth/automatic.md",sourceDirName:"smooth/subscribe-to-smooth",slug:"/smooth/subscribe-to-smooth/automatic",permalink:"/docs/smooth/subscribe-to-smooth/automatic",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/subscribe-to-smooth/automatic.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Subscribing to Smooth",permalink:"/docs/smooth/subscribe-to-smooth/overview"},next:{title:"Manual Subscription",permalink:"/docs/smooth/subscribe-to-smooth/manual"}},c={},p=[{value:"Step 1: Change your fee recipient to Smooth's address.",id:"step-1-change-your-fee-recipient-to-smooths-address",level:3},{value:"Step 2: Check your subscription status!",id:"step-2-check-your-subscription-status",level:3}],d={toc:p},l="wrapper";function u(e){let{components:t,...i}=e;return(0,a.kt)(l,(0,r.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"automatic-subscription"},"Automatic Subscription"),(0,a.kt)("p",null,"This is the simplest way to subscribe to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block."),(0,a.kt)("admonition",{title:"Before automatically subscribing to Smooth!",type:"danger"},(0,a.kt)("p",{parentName:"admonition"},"Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth."),(0,a.kt)("p",{parentName:"admonition"},"Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth.")),(0,a.kt)("h3",{id:"step-1-change-your-fee-recipient-to-smooths-address"},"Step 1: Change your fee recipient to Smooth's address."),(0,a.kt)("p",null,"Go to your dappnode's ",(0,a.kt)("a",{parentName:"p",href:"http://brain.web3signer.dappnode/"},"staking brain")," and change the fee recipient of the validators you want to subscribe to Smooth's address (",(0,a.kt)("inlineCode",{parentName:"p"},"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"),"). Once ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," receives the rewards from your validator, it will automatically subscribe your validator, and you will start receiving rewards from other members.\n",(0,a.kt)("img",{alt:"fee_recipient",src:o(4257).Z,width:"2728",height:"552"})),(0,a.kt)("admonition",{title:"Keep the fee recipient set to Smooth's address!",type:"danger"},(0,a.kt)("p",{parentName:"admonition"},"It is extremely important that you keep the fee recipient of your validator set to Smooth's address (",(0,a.kt)("inlineCode",{parentName:"p"},"0xAdFb8D27671F14f297eE94135e266aAFf8752e35"),") as long as it is subscribed to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," and will not be able to participate in it again.")),(0,a.kt)("h3",{id:"step-2-check-your-subscription-status"},"Step 2: Check your subscription status!"),(0,a.kt)("p",null,"Go to ",(0,a.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth's website")," and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear. Once the validator proposes a block, it will appear as subscribed. We recommend you familiarize yourself with this website! It is the place where you will manage your validators going forward."))}u.isMDXComponent=!0},4257:(e,t,o)=>{o.d(t,{Z:()=>r});const r=o.p+"assets/images/smooth_fee_recipient-9a97308ed0c601ccc84b0295efe34cd4.png"}}]); \ No newline at end of file diff --git a/assets/js/c38c9aa9.6c6bbdc1.js b/assets/js/c38c9aa9.6c6bbdc1.js deleted file mode 100644 index 8ff314197..000000000 --- a/assets/js/c38c9aa9.6c6bbdc1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8330],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){a(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,i,a=function(e,t){if(null==e)return{};var n,i,a={},o=Object.keys(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)n=o[i],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=i.createContext({}),p=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=p(e.components);return i.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(n),m=a,f=c["".concat(l,".").concat(m)]||c[m]||d[m]||o;return n?i.createElement(f,r(r({ref:t},u),{},{components:n})):i.createElement(f,r({ref:t},u))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,r=new Array(o);r[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:a,r[1]=s;for(var p=2;p<o;p++)r[p]=n[p];return i.createElement.apply(null,r)}return i.createElement.apply(null,n)}m.displayName="MDXCreateElement"},5224:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var i=n(7462),a=(n(7294),n(4137));const o={},r="Installation Overview",s={unversionedId:"user/install/overview",id:"user/install/overview",title:"Installation Overview",description:"Specifications & Minimum Requirements",source:"@site/docs/user/install/overview.md",sourceDirName:"user/install",slug:"/user/install/overview",permalink:"/docs/user/install/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"IPFS repository",permalink:"/docs/user/repository/ipfs"},next:{title:"ISO Installation",permalink:"/docs/user/install/iso"}},l={},p=[{value:"Specifications & Minimum Requirements",id:"specifications--minimum-requirements",level:2},{value:"Installation Methods",id:"installation-methods",level:2},{value:"1. ISO Installation",id:"1-iso-installation",level:3},{value:"2. Script Installation over Debian-based Distribution",id:"2-script-installation-over-debian-based-distribution",level:3}],u={toc:p},c="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,i.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"installation-overview"},"Installation Overview"),(0,a.kt)("h2",{id:"specifications--minimum-requirements"},"Specifications & Minimum Requirements"),(0,a.kt)("p",null,"Dappnode is a Debian-based OS, which makes it friendly with most available commercial hardware. Depending on what you intend to run in your Dappnode you might need higher specifications, but a great number of available features can be used with the following recommendations:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Intel Core i5/i7"),(0,a.kt)("li",{parentName:"ul"},"32 GB RAM"),(0,a.kt)("li",{parentName:"ul"},"4 TB NVMe storage")),(0,a.kt)("p",null,"As minimum requirements we recommend:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Intel Core i3"),(0,a.kt)("li",{parentName:"ul"},"16 GB RAM"),(0,a.kt)("li",{parentName:"ul"},"2 TB NVMe or fast SSD storage")),(0,a.kt)("p",null,"If you don't have enough technical experience to customize your own hardware, remember you can always get a plug n play ",(0,a.kt)("a",{parentName:"p",href:"https://dappnode.com/collections/all"},"Dappnode Home")," in our online shop."),(0,a.kt)("h2",{id:"installation-methods"},"Installation Methods"),(0,a.kt)("p",null,"Installing Dappnode can be achieved through two primary methods:"),(0,a.kt)("h3",{id:"1-iso-installation"},"1. ",(0,a.kt)("a",{parentName:"h3",href:"/docs/user/install/iso"},"ISO Installation")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Description"),": This method involves downloading the Dappnode ISO file and using it to directly install Dappnode on your system."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Best for"),": Most users as it provides a comprehensive setup designed specifically for Dappnode.")),(0,a.kt)("h3",{id:"2-script-installation-over-debian-based-distribution"},"2. ",(0,a.kt)("a",{parentName:"h3",href:"/docs/user/install/script"},"Script Installation")," over Debian-based Distribution"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Description"),": If you're already running a Debian-based distribution, you can utilize the Dappnode script to facilitate the installation process."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Best for"),": Users who want to install Dappnode on a cloud server, ARM device (where it's the only option), or those who desire a specific Debian-based distro.")),(0,a.kt)("admonition",{type:"note"},(0,a.kt)("p",{parentName:"admonition"},"For ARM-based systems, only the script installation method is available.")),(0,a.kt)("p",null,"Choose the method that best fits your needs and system setup. Make sure to follow the respective installation instructions carefully for a smooth and successful Dappnode deployment."),(0,a.kt)("admonition",{title:"Continuous Uptime",type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Dappnode is designed to run 24/7. Many features and functions within Dappnode, especially blockchain nodes, rely on continuous uptime to maintain their state, sync, and functionality. For instance:"),(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Blockchain Nodes"),": If you have a synced blockchain node and you turn off Dappnode, the node will lose its sync. This means when you turn it back on, it'll take time to catch up to the latest state, which can be resource-intensive and time-consuming.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Validator Nodes"),": For users staking on certain blockchain networks, continuous uptime is crucial. Being offline might result in missed opportunities or even penalties."))),(0,a.kt)("p",{parentName:"admonition"},"Considering these aspects, it's recommended to ensure your Dappnode device remains powered on and running at all times.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c38c9aa9.7435fbbf.js b/assets/js/c38c9aa9.7435fbbf.js new file mode 100644 index 000000000..58cf68bed --- /dev/null +++ b/assets/js/c38c9aa9.7435fbbf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8330],{6993:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var s=i(5893),t=i(1151);const o={},a="Installation Overview",r={id:"user/install/overview",title:"Installation Overview",description:"Specifications & Minimum Requirements",source:"@site/docs/user/install/overview.md",sourceDirName:"user/install",slug:"/user/install/overview",permalink:"/docs/user/install/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/overview.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"IPFS repository",permalink:"/docs/user/repository/ipfs"},next:{title:"ISO Installation",permalink:"/docs/user/install/iso"}},l={},d=[{value:"Specifications & Minimum Requirements",id:"specifications--minimum-requirements",level:2},{value:"Installation Methods",id:"installation-methods",level:2},{value:"1. ISO Installation",id:"1-iso-installation",level:3},{value:"2. Script Installation over Debian-based Distribution",id:"2-script-installation-over-debian-based-distribution",level:3}];function c(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"installation-overview",children:"Installation Overview"}),"\n",(0,s.jsx)(n.h2,{id:"specifications--minimum-requirements",children:"Specifications & Minimum Requirements"}),"\n",(0,s.jsx)(n.p,{children:"Dappnode is a Debian-based OS, which makes it friendly with most available commercial hardware. Depending on what you intend to run in your Dappnode you might need higher specifications, but a great number of available features can be used with the following recommendations:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Intel Core i5/i7"}),"\n",(0,s.jsx)(n.li,{children:"32 GB RAM"}),"\n",(0,s.jsx)(n.li,{children:"4 TB NVMe storage"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"As minimum requirements we recommend:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Intel Core i3"}),"\n",(0,s.jsx)(n.li,{children:"16 GB RAM"}),"\n",(0,s.jsx)(n.li,{children:"2 TB NVMe or fast SSD storage"}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["If you don't have enough technical experience to customize your own hardware, remember you can always get a plug n play ",(0,s.jsx)(n.a,{href:"https://dappnode.com/collections/all",children:"Dappnode Home"})," in our online shop."]}),"\n",(0,s.jsx)(n.h2,{id:"installation-methods",children:"Installation Methods"}),"\n",(0,s.jsx)(n.p,{children:"Installing Dappnode can be achieved through two primary methods:"}),"\n",(0,s.jsxs)(n.h3,{id:"1-iso-installation",children:["1. ",(0,s.jsx)(n.a,{href:"/docs/user/install/iso",children:"ISO Installation"})]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Description"}),": This method involves downloading the Dappnode ISO file and using it to directly install Dappnode on your system."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Best for"}),": Most users as it provides a comprehensive setup designed specifically for Dappnode."]}),"\n"]}),"\n",(0,s.jsxs)(n.h3,{id:"2-script-installation-over-debian-based-distribution",children:["2. ",(0,s.jsx)(n.a,{href:"/docs/user/install/script",children:"Script Installation"})," over Debian-based Distribution"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Description"}),": If you're already running a Debian-based distribution, you can utilize the Dappnode script to facilitate the installation process."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Best for"}),": Users who want to install Dappnode on a cloud server, ARM device (where it's the only option), or those who desire a specific Debian-based distro."]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"For ARM-based systems, only the script installation method is available."})}),"\n",(0,s.jsx)(n.p,{children:"Choose the method that best fits your needs and system setup. Make sure to follow the respective installation instructions carefully for a smooth and successful Dappnode deployment."}),"\n",(0,s.jsxs)(n.admonition,{title:"Continuous Uptime",type:"caution",children:[(0,s.jsx)(n.p,{children:"Dappnode is designed to run 24/7. Many features and functions within Dappnode, especially blockchain nodes, rely on continuous uptime to maintain their state, sync, and functionality. For instance:"}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Blockchain Nodes"}),": If you have a synced blockchain node and you turn off Dappnode, the node will lose its sync. This means when you turn it back on, it'll take time to catch up to the latest state, which can be resource-intensive and time-consuming."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Validator Nodes"}),": For users staking on certain blockchain networks, continuous uptime is crucial. Being offline might result in missed opportunities or even penalties."]}),"\n"]}),"\n"]}),(0,s.jsx)(n.p,{children:"Considering these aspects, it's recommended to ensure your Dappnode device remains powered on and running at all times."})]})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>r,a:()=>a});var s=i(7294);const t={},o=s.createContext(t);function a(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c7a466cb.479665d6.js b/assets/js/c7a466cb.479665d6.js new file mode 100644 index 000000000..c8fe86d11 --- /dev/null +++ b/assets/js/c7a466cb.479665d6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[78],{5367:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var s=r(5893),t=r(1151);const o={},i="Register",c={id:"user/getting-started/register",title:"Register",description:"1. Register as New User",source:"@site/docs/user/getting-started/register.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/register",permalink:"/docs/user/getting-started/register",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/register.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Access Dappnode via Wi-Fi",permalink:"/docs/user/getting-started/access-dappnode-via-wifi"},next:{title:"Setup",permalink:"/docs/user/getting-started/setup"}},d={},l=[{value:"1. Register as New User",id:"1-register-as-new-user",level:2},{value:"2. Secure Your Recovery Token",id:"2-secure-your-recovery-token",level:2},{value:"3. Logging In",id:"3-logging-in",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}];function a(e){const n={admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:r}=n;return r||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"register",children:"Register"}),"\n",(0,s.jsx)(n.h2,{id:"1-register-as-new-user",children:"1. Register as New User"}),"\n",(0,s.jsx)(n.p,{children:"Start by setting up your new account:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Input"})," your desired ",(0,s.jsx)(n.strong,{children:"Username"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Select a secure password"}),". It should include a combination of characters, numbers, and special symbols for optimal security."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Confirm your password"})," to ensure accuracy."]}),"\n",(0,s.jsxs)(n.li,{children:["Click the ",(0,s.jsx)(n.strong,{children:"Register"})," button."]}),"\n"]}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{width:"50%",src:"/img/register.png",alt:"Register"})}),"\n",(0,s.jsx)(n.h2,{id:"2-secure-your-recovery-token",children:"2. Secure Your Recovery Token"}),"\n",(0,s.jsx)(n.p,{children:"Upon successful registration, you'll be provided with a Recovery Token. This token is crucial for:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Retrieving your password if forgotten."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Regaining account access if needed."}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"To safeguard your token"}),":"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:'Click the button or link labeled "View Recovery Token".'}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Diligently copy the token and store it in a safe location."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"We recommend that you store your token in both digital (encrypted) and physical forms (noted and stored securely). If you lose access to both your password and token, you will lose access to your account."})}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{width:"50%",src:"/img/register-token.png",alt:"Recovery Token"})}),"\n",(0,s.jsx)(n.h2,{id:"3-logging-in",children:"3. Logging In"}),"\n",(0,s.jsx)(n.p,{children:"With your account ready and Recovery Token secured:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["Proceed to the ",(0,s.jsx)(n.strong,{children:"Login"})," page."]}),"\n",(0,s.jsxs)(n.li,{children:["Input your ",(0,s.jsx)(n.strong,{children:"Username"})," and ",(0,s.jsx)(n.strong,{children:"Password"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["Press the ",(0,s.jsx)(n.strong,{children:"Login"})," button to dive into your Dappnode account."]}),"\n"]}),"\n",(0,s.jsx)("p",{align:"center",children:(0,s.jsx)("img",{width:"50%",src:"/img/register-login.png",alt:"Login"})}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsx)(r,{children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"Want to change your password?"})}),"\nVisit ",(0,s.jsx)("a",{href:"http://my.dappnode/system/profile",children:"Profile Settings"})," to reset it."]})}),"\n",(0,s.jsx)(r,{children:(0,s.jsxs)(n.p,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"Forgot your password?"})}),"\nGo to the ",(0,s.jsx)("a",{href:"http://my.dappnode/",children:"Login"})," page and click on \"Forgot your password?\". You'll be prompted to enter the recovery token you saved during registration. Once entered, you'll be able to reset your password."]})}),"\n",(0,s.jsxs)(r,{children:[(0,s.jsxs)(n.p,{children:[(0,s.jsx)("summary",{children:(0,s.jsx)("b",{children:"Lost your recovery token?"})}),"\nIf you've lost your recovery token, there is still a chance to regain access to the Dappmanager UI. However, you will require ",(0,s.jsx)("a",{href:"/docs/user/access-your-dappnode/terminal",children:"accessing via terminal"}),". Once you are in, you can get your recovery token by running the following command:"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cat /usr/src/dappnode/DNCORE/admin-recovery-token.txt\n"})})]})]})}function u(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},1151:(e,n,r)=>{r.d(n,{Z:()=>c,a:()=>i});var s=r(7294);const t={},o=s.createContext(t);function i(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(t):e.components||t:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c7a466cb.e0d756fb.js b/assets/js/c7a466cb.e0d756fb.js deleted file mode 100644 index 48c598a0c..000000000 --- a/assets/js/c7a466cb.e0d756fb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[78],{4137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),u=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(r),d=o,m=p["".concat(l,".").concat(d)]||p[d]||g[d]||a;return r?n.createElement(m,i(i({ref:t},c),{},{components:r})):n.createElement(m,i({ref:t},c))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:o,i[1]=s;for(var u=2;u<a;u++)i[u]=r[u];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}d.displayName="MDXCreateElement"},6497:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>g,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var n=r(7462),o=(r(7294),r(4137));const a={},i="Register",s={unversionedId:"user/getting-started/register",id:"user/getting-started/register",title:"Register",description:"1. Register as New User",source:"@site/docs/user/getting-started/register.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/register",permalink:"/docs/user/getting-started/register",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/register.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Access Dappnode via Wi-Fi",permalink:"/docs/user/getting-started/access-dappnode-via-wifi"},next:{title:"Setup",permalink:"/docs/user/getting-started/setup"}},l={},u=[{value:"1. Register as New User",id:"1-register-as-new-user",level:2},{value:"2. Secure Your Recovery Token",id:"2-secure-your-recovery-token",level:2},{value:"3. Logging In",id:"3-logging-in",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}],c={toc:u},p="wrapper";function g(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"register"},"Register"),(0,o.kt)("h2",{id:"1-register-as-new-user"},"1. Register as New User"),(0,o.kt)("p",null,"Start by setting up your new account:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Input")," your desired ",(0,o.kt)("strong",{parentName:"li"},"Username"),"."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Select a secure password"),". It should include a combination of characters, numbers, and special symbols for optimal security."),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("strong",{parentName:"li"},"Confirm your password")," to ensure accuracy."),(0,o.kt)("li",{parentName:"ol"},"Click the ",(0,o.kt)("strong",{parentName:"li"},"Register")," button.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{width:"50%",src:"/img/register.png",alt:"Register"})),(0,o.kt)("h2",{id:"2-secure-your-recovery-token"},"2. Secure Your Recovery Token"),(0,o.kt)("p",null,"Upon successful registration, you'll be provided with a Recovery Token. This token is crucial for:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Retrieving your password if forgotten.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Regaining account access if needed."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"To safeguard your token"),":")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},'Click the button or link labeled "View Recovery Token".')),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},"Diligently copy the token and store it in a safe location."))),(0,o.kt)("admonition",{type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"We recommend that you store your token in both digital (encrypted) and physical forms (noted and stored securely). If you lose access to both your password and token, you will lose access to your account.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{width:"50%",src:"/img/register-token.png",alt:"Recovery Token"})),(0,o.kt)("h2",{id:"3-logging-in"},"3. Logging In"),(0,o.kt)("p",null,"With your account ready and Recovery Token secured:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Proceed to the ",(0,o.kt)("strong",{parentName:"li"},"Login")," page."),(0,o.kt)("li",{parentName:"ol"},"Input your ",(0,o.kt)("strong",{parentName:"li"},"Username")," and ",(0,o.kt)("strong",{parentName:"li"},"Password"),"."),(0,o.kt)("li",{parentName:"ol"},"Press the ",(0,o.kt)("strong",{parentName:"li"},"Login")," button to dive into your Dappnode account.")),(0,o.kt)("p",{align:"center"},(0,o.kt)("img",{width:"50%",src:"/img/register-login.png",alt:"Login"})),(0,o.kt)("hr",null),(0,o.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"Want to change your password?")),"Visit ",(0,o.kt)("a",{href:"http://my.dappnode/system/profile"},"Profile Settings")," to reset it."),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"Forgot your password?")),"Go to the ",(0,o.kt)("a",{href:"http://my.dappnode/"},"Login")," page and click on \"Forgot your password?\". You'll be prompted to enter the recovery token you saved during registration. Once entered, you'll be able to reset your password."),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("b",null,"Lost your recovery token?")),"If you've lost your recovery token, there is still a chance to regain access to the Dappmanager UI. However, you will require ",(0,o.kt)("a",{href:"/docs/user/access-your-dappnode/terminal"},"accessing via terminal"),". Once you are in, you can get your recovery token by running the following command:",(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cat /usr/src/dappnode/DNCORE/admin-recovery-token.txt\n"))))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c9627cbc.93c4a5f2.js b/assets/js/c9627cbc.93c4a5f2.js deleted file mode 100644 index 0f88c219d..000000000 --- a/assets/js/c9627cbc.93c4a5f2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[468],{4137:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>w});var r=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?n(Object(o),!0).forEach((function(t){a(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function s(e,t){if(null==e)return{};var o,r,a=function(e,t){if(null==e)return{};var o,r,a={},n=Object.keys(e);for(r=0;r<n.length;r++)o=n[r],t.indexOf(o)>=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r<n.length;r++)o=n[r],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var u=r.createContext({}),c=function(e){var t=r.useContext(u),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},d=function(e){var t=c(e.components);return r.createElement(u.Provider,{value:t},e.children)},l="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var o=e.components,a=e.mdxType,n=e.originalType,u=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),l=c(o),h=a,w=l["".concat(u,".").concat(h)]||l[h]||p[h]||n;return o?r.createElement(w,i(i({ref:t},d),{},{components:o})):r.createElement(w,i({ref:t},d))}));function w(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=o.length,i=new Array(n);i[0]=h;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[l]="string"==typeof e?e:a,i[1]=s;for(var c=2;c<n;c++)i[c]=o[c];return r.createElement.apply(null,i)}return r.createElement.apply(null,o)}h.displayName="MDXCreateElement"},3581:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>p,frontMatter:()=>n,metadata:()=>s,toc:()=>c});var r=o(7462),a=(o(7294),o(4137));const n={},i="Crash Course",s={unversionedId:"user/videos-and-tutorials/crash-course",id:"user/videos-and-tutorials/crash-course",title:"Crash Course",description:"Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!",source:"@site/docs/user/videos-and-tutorials/crash-course.md",sourceDirName:"user/videos-and-tutorials",slug:"/user/videos-and-tutorials/crash-course",permalink:"/docs/user/videos-and-tutorials/crash-course",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/crash-course.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"2. Configuring your Dappnode",permalink:"/docs/user/videos-and-tutorials/driving-school/configuration"},next:{title:"How to Connect to My Blockchain Node",permalink:"/docs/user/videos-and-tutorials/guides/connect-node"}},u={},c=[{value:"1. How to set up Dappnode from scratch using your own hardware",id:"1-how-to-set-up-dappnode-from-scratch-using-your-own-hardware",level:2},{value:"2. How to set up a validator",id:"2-how-to-set-up-a-validator",level:2},{value:"3. How to setup Stakehouse node operator",id:"3-how-to-setup-stakehouse-node-operator",level:2},{value:"4. How to withdraw your staked ETH",id:"4-how-to-withdraw-your-staked-eth",level:2},{value:"5. How to subscribe your validator to Smooth \ud83d\ude0e",id:"5-how-to-subscribe-your-validator-to-smooth-",level:2},{value:"6. How to earn rewards with your Dappnode without investing",id:"6-how-to-earn-rewards-with-your-dappnode-without-investing",level:2}],d={toc:c},l="wrapper";function p(e){let{components:t,...o}=e;return(0,a.kt)(l,(0,r.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"crash-course"},"Crash Course"),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Want to learn more about Dappnode through video tutorials? Check out our ",(0,a.kt)("strong",{parentName:"p"},(0,a.kt)("a",{parentName:"strong",href:"/docs/user/videos-and-tutorials/driving-school/initial-setup"},"Dappnode Driving School!"))," ")),(0,a.kt)("p",null,"Every now and then we get together in our Dappnode Discord Community to offer live workshops on how to achieve different features and tricks with your Dappnode. These sessions are uploaded to our YouTube channel, so you can watch them at your own pace. Here are a few past editions you might find interesting!"),(0,a.kt)("h2",{id:"1-how-to-set-up-dappnode-from-scratch-using-your-own-hardware"},"1. How to set up Dappnode from scratch using your own hardware"),(0,a.kt)("center",null,(0,a.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/VBUIIV8Jo_U",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,a.kt)("h2",{id:"2-how-to-set-up-a-validator"},"2. How to set up a validator"),(0,a.kt)("center",null,(0,a.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Bc6FomfhkbI",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,a.kt)("h2",{id:"3-how-to-setup-stakehouse-node-operator"},"3. How to setup Stakehouse node operator"),(0,a.kt)("center",null,(0,a.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/tQwy096M8L8",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,a.kt)("h2",{id:"4-how-to-withdraw-your-staked-eth"},"4. How to withdraw your staked ETH"),(0,a.kt)("center",null,(0,a.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1uxOIcR92uQ",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,a.kt)("h2",{id:"5-how-to-subscribe-your-validator-to-smooth-"},"5. How to subscribe your validator to Smooth \ud83d\ude0e"),(0,a.kt)("center",null,(0,a.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1ZJUEiAFtSw",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})),(0,a.kt)("h2",{id:"6-how-to-earn-rewards-with-your-dappnode-without-investing"},"6. How to earn rewards with your Dappnode without investing"),(0,a.kt)("center",null,(0,a.kt)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/nLH4632sAKg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c9627cbc.c22bd77f.js b/assets/js/c9627cbc.c22bd77f.js new file mode 100644 index 000000000..9ef28a104 --- /dev/null +++ b/assets/js/c9627cbc.c22bd77f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[468],{1726:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>d,contentTitle:()=>n,default:()=>h,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var r=t(5893),s=t(1151);const a={},n="Crash Course",i={id:"user/videos-and-tutorials/crash-course",title:"Crash Course",description:"Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!",source:"@site/docs/user/videos-and-tutorials/crash-course.md",sourceDirName:"user/videos-and-tutorials",slug:"/user/videos-and-tutorials/crash-course",permalink:"/docs/user/videos-and-tutorials/crash-course",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/crash-course.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"2. Configuring your Dappnode",permalink:"/docs/user/videos-and-tutorials/driving-school/configuration"},next:{title:"How to Connect to My Blockchain Node",permalink:"/docs/user/videos-and-tutorials/guides/connect-node"}},d={},u=[{value:"1. How to set up Dappnode from scratch using your own hardware",id:"1-how-to-set-up-dappnode-from-scratch-using-your-own-hardware",level:2},{value:"2. How to set up a validator",id:"2-how-to-set-up-a-validator",level:2},{value:"3. How to setup Stakehouse node operator",id:"3-how-to-setup-stakehouse-node-operator",level:2},{value:"4. How to withdraw your staked ETH",id:"4-how-to-withdraw-your-staked-eth",level:2},{value:"5. How to subscribe your validator to Smooth \ud83d\ude0e",id:"5-how-to-subscribe-your-validator-to-smooth-",level:2},{value:"6. How to earn rewards with your Dappnode without investing",id:"6-how-to-earn-rewards-with-your-dappnode-without-investing",level:2}];function c(e){const o={a:"a",admonition:"admonition",h1:"h1",h2:"h2",p:"p",strong:"strong",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(o.h1,{id:"crash-course",children:"Crash Course"}),"\n",(0,r.jsx)(o.admonition,{type:"info",children:(0,r.jsxs)(o.p,{children:["Want to learn more about Dappnode through video tutorials? Check out our ",(0,r.jsx)(o.strong,{children:(0,r.jsx)(o.a,{href:"/docs/user/videos-and-tutorials/driving-school/initial-setup",children:"Dappnode Driving School!"})})]})}),"\n",(0,r.jsx)(o.p,{children:"Every now and then we get together in our Dappnode Discord Community to offer live workshops on how to achieve different features and tricks with your Dappnode. These sessions are uploaded to our YouTube channel, so you can watch them at your own pace. Here are a few past editions you might find interesting!"}),"\n",(0,r.jsx)(o.h2,{id:"1-how-to-set-up-dappnode-from-scratch-using-your-own-hardware",children:"1. How to set up Dappnode from scratch using your own hardware"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/VBUIIV8Jo_U",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)(o.h2,{id:"2-how-to-set-up-a-validator",children:"2. How to set up a validator"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/Bc6FomfhkbI",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)(o.h2,{id:"3-how-to-setup-stakehouse-node-operator",children:"3. How to setup Stakehouse node operator"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/tQwy096M8L8",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)(o.h2,{id:"4-how-to-withdraw-your-staked-eth",children:"4. How to withdraw your staked ETH"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1uxOIcR92uQ",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)(o.h2,{id:"5-how-to-subscribe-your-validator-to-smooth-",children:"5. How to subscribe your validator to Smooth \ud83d\ude0e"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/1ZJUEiAFtSw",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})}),"\n",(0,r.jsx)(o.h2,{id:"6-how-to-earn-rewards-with-your-dappnode-without-investing",children:"6. How to earn rewards with your Dappnode without investing"}),"\n",(0,r.jsx)("center",{children:(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/nLH4632sAKg",frameborder:"0",allow:"accelerometer; autoplay; fullscreen"})})]})}function h(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,r.jsx)(o,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},1151:(e,o,t)=>{t.d(o,{Z:()=>i,a:()=>n});var r=t(7294);const s={},a=r.createContext(s);function n(e){const o=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:n(e.components),r.createElement(a.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/caaf4754.2c80a9aa.js b/assets/js/caaf4754.2c80a9aa.js new file mode 100644 index 000000000..9bbde0ea7 --- /dev/null +++ b/assets/js/caaf4754.2c80a9aa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5914],{6450:(e,a,n)=>{n.r(a),n.d(a,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>r,toc:()=>c});var s=n(5893),t=n(1151);const i={},o="Understanding Dappnode Packages",r={id:"user/packages/understanding-dappnode-packages",title:"Understanding Dappnode Packages",description:"What are Dappnode packages and what features do they offer?",source:"@site/docs/user/packages/understanding-dappnode-packages.md",sourceDirName:"user/packages",slug:"/user/packages/understanding-dappnode-packages",permalink:"/docs/user/packages/understanding-dappnode-packages",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/understanding-dappnode-packages.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Optimism Rollup",permalink:"/docs/user/rollups/optimism"},next:{title:"Packages' Signature",permalink:"/docs/user/packages/signature"}},d={},c=[{value:"What are Dappnode packages and what features do they offer?",id:"what-are-dappnode-packages-and-what-features-do-they-offer",level:2},{value:"<strong>Introduction</strong>",id:"introduction",level:3},{value:"Info",id:"info",level:4},{value:"Config",id:"config",level:4},{value:"Network",id:"network",level:4},{value:"Logs",id:"logs",level:4},{value:"Backup",id:"backup",level:4},{value:"File Manager",id:"file-manager",level:4}];function l(e){const a={code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",hr:"hr",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(a.h1,{id:"understanding-dappnode-packages",children:"Understanding Dappnode Packages"}),"\n",(0,s.jsx)(a.h2,{id:"what-are-dappnode-packages-and-what-features-do-they-offer",children:"What are Dappnode packages and what features do they offer?"}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h3,{id:"introduction",children:(0,s.jsx)(a.strong,{children:"Introduction"})}),"\n",(0,s.jsx)(a.p,{children:"One of Dappnode's top features is to offer a user-friendly interface to interact with different packages that contain clients and other applications. This section will go over the basic features you'll find in any Dappnode package."}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h4,{id:"info",children:"Info"}),"\n",(0,s.jsxs)(a.ul,{children:["\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Version"}),": You'll find both the package's version and its upstream version here."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Getting Started"}),": Some of the basic information needed to run the package."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"URLs"}),": These will offer a number of different options, starting with bundled package UI/Dashboards and related tools such as Launchpads or external documentation."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Package Status"}),": Will provide information about the package's status, for example if it's running fine or if it has crashed or in the process of restarting."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Pause/Restart Package"}),": Useful for troubleshooting or restarting a stopped package."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Remove Volumes"}),': Also known as the "gray trash bin", this option will wipe all of the package\'s data and start syncing from scratch in the case of clients.']}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Remove Package"}),': This would be the "red trash bin", and clicking it will give you the option to preserve or delete the associated database.']}),"\n"]}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages1",src:n(9561).Z+"",width:"1741",height:"1091"})}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h4,{id:"config",children:"Config"}),"\n",(0,s.jsx)(a.p,{children:"The package's settings will be available under this tab in both a simple and advanced mode. The advanced mode can be accessed by clicking the lower-right corner of the screen when available."}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages2",src:n(899).Z+"",width:"1741",height:"1091"})}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h4,{id:"network",children:"Network"}),"\n",(0,s.jsxs)(a.ul,{children:["\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Service"}),": Some packages may have multiple services running as part of the same container. This option will allow you to adjust each of their network settings separately."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"Public port mapping"}),": Need to change your package's port mapping? You can change this setting in this field as well as its protocol between TCP and UDP."]}),"\n",(0,s.jsxs)(a.li,{children:[(0,s.jsx)(a.strong,{children:"HTTPs domain mapping"}),": Do you want to expose your package to the internet? You'll be able to add multiple public domains to your package here. This is a great way to share your node's RPC with friends and family!"]}),"\n"]}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages3",src:n(8454).Z+"",width:"1741",height:"1091"})}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h4,{id:"logs",children:"Logs"}),"\n",(0,s.jsxs)(a.p,{children:['This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top "Service" bar, something common for consensus clients for example, which usually run one service for the ',(0,s.jsx)(a.code,{children:"beacon-chain"})," and another one for ",(0,s.jsx)(a.code,{children:"validator"}),". Whenever you request for support in the Dappnode community, keep these handy!"]}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages4",src:n(7908).Z+"",width:"1741",height:"1091"})}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h4,{id:"backup",children:"Backup"}),"\n",(0,s.jsx)(a.p,{children:'This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You\'ll have two very self-explainatory options: "Backup Now" and "Restore Backup".'}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages5",src:n(4418).Z+"",width:"1741",height:"1091"})}),"\n",(0,s.jsx)(a.hr,{}),"\n",(0,s.jsx)(a.h4,{id:"file-manager",children:"File Manager"}),"\n",(0,s.jsx)(a.p,{children:"Also handy whenever your package has a database you'll need to access or modify, but without going through a terminal. Download and upload files in an easy way with the File Manager."}),"\n",(0,s.jsx)(a.p,{children:(0,s.jsx)(a.img,{alt:"dappnode_packages6",src:n(6274).Z+"",width:"1741",height:"1091"})})]})}function p(e={}){const{wrapper:a}={...(0,t.a)(),...e.components};return a?(0,s.jsx)(a,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},9561:(e,a,n)=>{n.d(a,{Z:()=>s});const s=n.p+"assets/images/dappnode_packages1-9986b39b271ef6adbc6d4a98e907f5c7.png"},899:(e,a,n)=>{n.d(a,{Z:()=>s});const s=n.p+"assets/images/dappnode_packages2-bfcef9f7947159b0341c2c914f93378e.png"},8454:(e,a,n)=>{n.d(a,{Z:()=>s});const s=n.p+"assets/images/dappnode_packages3-96bce25fad6818075d28d1f51529b442.png"},7908:(e,a,n)=>{n.d(a,{Z:()=>s});const s=n.p+"assets/images/dappnode_packages4-bb2f5a5218ea06c59a09858997773adf.png"},4418:(e,a,n)=>{n.d(a,{Z:()=>s});const s=n.p+"assets/images/dappnode_packages5-dd905b985e061e57968acfccca3cd1f1.png"},6274:(e,a,n)=>{n.d(a,{Z:()=>s});const s=n.p+"assets/images/dappnode_packages6-3da72f7cab4ec4f639799523d3274ff8.png"},1151:(e,a,n)=>{n.d(a,{Z:()=>r,a:()=>o});var s=n(7294);const t={},i=s.createContext(t);function o(e){const a=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function r(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(i.Provider,{value:a},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/caaf4754.eb8046b2.js b/assets/js/caaf4754.eb8046b2.js deleted file mode 100644 index 232b415c7..000000000 --- a/assets/js/caaf4754.eb8046b2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5914],{4137:(e,a,t)=>{t.d(a,{Zo:()=>d,kt:()=>h});var n=t(7294);function r(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var a=1;a<arguments.length;a++){var t=null!=arguments[a]?arguments[a]:{};a%2?o(Object(t),!0).forEach((function(a){r(e,a,t[a])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(a){Object.defineProperty(e,a,Object.getOwnPropertyDescriptor(t,a))}))}return e}function s(e,a){if(null==e)return{};var t,n,r=function(e,a){if(null==e)return{};var t,n,r={},o=Object.keys(e);for(n=0;n<o.length;n++)t=o[n],a.indexOf(t)>=0||(r[t]=e[t]);return r}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)t=o[n],a.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=n.createContext({}),l=function(e){var a=n.useContext(p),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},d=function(e){var a=l(e.components);return n.createElement(p.Provider,{value:a},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},g=n.forwardRef((function(e,a){var t=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=l(t),g=r,h=c["".concat(p,".").concat(g)]||c[g]||u[g]||o;return t?n.createElement(h,i(i({ref:a},d),{},{components:t})):n.createElement(h,i({ref:a},d))}));function h(e,a){var t=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=g;var s={};for(var p in a)hasOwnProperty.call(a,p)&&(s[p]=a[p]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var l=2;l<o;l++)i[l]=t[l];return n.createElement.apply(null,i)}return n.createElement.apply(null,t)}g.displayName="MDXCreateElement"},6420:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=t(7462),r=(t(7294),t(4137));const o={},i="Understanding Dappnode Packages",s={unversionedId:"user/packages/understanding-dappnode-packages",id:"user/packages/understanding-dappnode-packages",title:"Understanding Dappnode Packages",description:"What are Dappnode packages and what features do they offer?",source:"@site/docs/user/packages/understanding-dappnode-packages.md",sourceDirName:"user/packages",slug:"/user/packages/understanding-dappnode-packages",permalink:"/docs/user/packages/understanding-dappnode-packages",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/understanding-dappnode-packages.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Optimism Rollup",permalink:"/docs/user/rollups/optimism"},next:{title:"Packages' Signature",permalink:"/docs/user/packages/signature"}},p={},l=[{value:"What are Dappnode packages and what features do they offer?",id:"what-are-dappnode-packages-and-what-features-do-they-offer",level:2},{value:"<strong>Introduction</strong>",id:"introduction",level:3},{value:"Info",id:"info",level:4},{value:"Config",id:"config",level:4},{value:"Network",id:"network",level:4},{value:"Logs",id:"logs",level:4},{value:"Backup",id:"backup",level:4},{value:"File Manager",id:"file-manager",level:4}],d={toc:l},c="wrapper";function u(e){let{components:a,...o}=e;return(0,r.kt)(c,(0,n.Z)({},d,o,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"understanding-dappnode-packages"},"Understanding Dappnode Packages"),(0,r.kt)("h2",{id:"what-are-dappnode-packages-and-what-features-do-they-offer"},"What are Dappnode packages and what features do they offer?"),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"introduction"},(0,r.kt)("strong",{parentName:"h3"},"Introduction")),(0,r.kt)("p",null,"One of Dappnode's top features is to offer a user-friendly interface to interact with different packages that contain clients and other applications. This section will go over the basic features you'll find in any Dappnode package."),(0,r.kt)("hr",null),(0,r.kt)("h4",{id:"info"},"Info"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Version"),": You'll find both the package's version and its upstream version here."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Getting Started"),": Some of the basic information needed to run the package."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"URLs"),": These will offer a number of different options, starting with bundled package UI/Dashboards and related tools such as Launchpads or external documentation."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Package Status"),": Will provide information about the package's status, for example if it's running fine or if it has crashed or in the process of restarting."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Pause/Restart Package"),": Useful for troubleshooting or restarting a stopped package."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Remove Volumes"),': Also known as the "gray trash bin", this option will wipe all of the package\'s data and start syncing from scratch in the case of clients.'),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Remove Package"),': This would be the "red trash bin", and clicking it will give you the option to preserve or delete the associated database.')),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dappnode_packages1",src:t(9561).Z,width:"1741",height:"1091"})),(0,r.kt)("hr",null),(0,r.kt)("h4",{id:"config"},"Config"),(0,r.kt)("p",null,"The package's settings will be available under this tab in both a simple and advanced mode. The advanced mode can be accessed by clicking the lower-right corner of the screen when available."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dappnode_packages2",src:t(899).Z,width:"1741",height:"1091"})),(0,r.kt)("hr",null),(0,r.kt)("h4",{id:"network"},"Network"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Service"),": Some packages may have multiple services running as part of the same container. This option will allow you to adjust each of their network settings separately."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Public port mapping"),": Need to change your package's port mapping? You can change this setting in this field as well as its protocol between TCP and UDP."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"HTTPs domain mapping"),": Do you want to expose your package to the internet? You'll be able to add multiple public domains to your package here. This is a great way to share your node's RPC with friends and family!")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dappnode_packages3",src:t(2802).Z,width:"1741",height:"1091"})),(0,r.kt)("hr",null),(0,r.kt)("h4",{id:"logs"},"Logs"),(0,r.kt)("p",null,'This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top "Service" bar, something common for consensus clients for example, which usually run one service for the ',(0,r.kt)("inlineCode",{parentName:"p"},"beacon-chain")," and another one for ",(0,r.kt)("inlineCode",{parentName:"p"},"validator"),". Whenever you request for support in the Dappnode community, keep these handy!"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dappnode_packages4",src:t(7908).Z,width:"1741",height:"1091"})),(0,r.kt)("hr",null),(0,r.kt)("h4",{id:"backup"},"Backup"),(0,r.kt)("p",null,'This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You\'ll have two very self-explainatory options: "Backup Now" and "Restore Backup".'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dappnode_packages5",src:t(4418).Z,width:"1741",height:"1091"})),(0,r.kt)("hr",null),(0,r.kt)("h4",{id:"file-manager"},"File Manager"),(0,r.kt)("p",null,"Also handy whenever your package has a database you'll need to access or modify, but without going through a terminal. Download and upload files in an easy way with the File Manager."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"dappnode_packages6",src:t(6274).Z,width:"1741",height:"1091"})))}u.isMDXComponent=!0},9561:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dappnode_packages1-9986b39b271ef6adbc6d4a98e907f5c7.png"},899:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dappnode_packages2-bfcef9f7947159b0341c2c914f93378e.png"},2802:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dappnode_packages3-96bce25fad6818075d28d1f51529b442.png"},7908:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dappnode_packages4-bb2f5a5218ea06c59a09858997773adf.png"},4418:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dappnode_packages5-dd905b985e061e57968acfccca3cd1f1.png"},6274:(e,a,t)=>{t.d(a,{Z:()=>n});const n=t.p+"assets/images/dappnode_packages6-3da72f7cab4ec4f639799523d3274ff8.png"}}]); \ No newline at end of file diff --git a/assets/js/cbc5934e.7adfcf05.js b/assets/js/cbc5934e.7adfcf05.js deleted file mode 100644 index daa631c3c..000000000 --- a/assets/js/cbc5934e.7adfcf05.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[651],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var c=o.createContext({}),p=function(e){var t=o.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=p(e.components);return o.createElement(c.Provider,{value:t},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),l=p(n),h=r,m=l["".concat(c,".").concat(h)]||l[h]||u[h]||a;return n?o.createElement(m,i(i({ref:t},d),{},{components:n})):o.createElement(m,i({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=h;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[l]="string"==typeof e?e:r,i[1]=s;for(var p=2;p<a;p++)i[p]=n[p];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}h.displayName="MDXCreateElement"},828:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>p});var o=n(7462),r=(n(7294),n(4137));const a={title:"DAO",description:"DAO information"},i=void 0,s={unversionedId:"dao",id:"dao",title:"DAO",description:"DAO information",source:"@site/docs/dao.md",sourceDirName:".",slug:"/dao",permalink:"/docs/dao",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao.md",tags:[],version:"current",frontMatter:{title:"DAO",description:"DAO information"},sidebar:"daoSidebar",next:{title:"The NODE Economy",permalink:"/docs/dao/node-basics"}},c={},p=[{value:"Token Addresses",id:"token-addresses",level:3},{value:"Mission & Membership",id:"mission--membership",level:3},{value:"Architecture",id:"architecture",level:3},{value:"DAO Projects",id:"dao-projects",level:3}],d={toc:p},l="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(l,(0,o.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("admonition",{title:"Documentation alert",type:"danger"},(0,r.kt)("p",{parentName:"admonition"},"The DAO section of our documentation is currently outdated due to a security incident. For a detailed explanation of the issue and our response plan, please refer to our ",(0,r.kt)("a",{parentName:"p",href:"https://discourse.dappnode.io/t/node-hack-post-mortem-and-recovery-plan/1826"},"post-mortem report on the node hack"),".")),(0,r.kt)("h1",{id:"governance"},"Governance"),(0,r.kt)("h3",{id:"token-addresses"},"Token Addresses"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"NODE Mainnet - ",(0,r.kt)("a",{parentName:"li",href:"https://etherscan.io/address/0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0"},"0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0")),(0,r.kt)("li",{parentName:"ul"},"NODE xDai - ",(0,r.kt)("a",{parentName:"li",href:"https://blockscout.com/xdai/mainnet/address/0xc60e38C6352875c051B481Cbe79Dd0383AdB7817/transactions"},"0xc60e38C6352875c051B481Cbe79Dd0383AdB7817"))),(0,r.kt)("h3",{id:"mission--membership"},"Mission & Membership"),(0,r.kt)("p",null,"The Dappnode DAO will be an inclusive hub in which Dappnode\u2019s community will carry on its mission to keep the web decentralized, uncensored and resilient. Active DAO members will have the opportunity to vote on Dappnode\u2019s future projects and on how to expand its array of hardware and software solutions."),(0,r.kt)("p",null,"To get involved in Governance, DAO aspirants will need to make contributions to the ecosystem and help kick-start the NODE economy. Those who provide liquidity in the sanctioned pools (Uniswap and Sushiswap) or commit NODE to Governance Staking on Ethereum Mainnet or xDai will be granted voting powers proportional to their contributions. This way we can ensure that those with a voice are also those with a stake, and are not merely speculating with the token."),(0,r.kt)("h3",{id:"architecture"},"Architecture"),(0,r.kt)("p",null,"DAppnode has tapped ",(0,r.kt)("a",{parentName:"p",href:"https://snapshot.org/#/"},"Snapshot")," technology to build its Governance structure. Snapshot is a novel piece of technology that allows off-chain voting for on-chain actions. It removes the prohibitive gas costs of participating in on-chain governance by taking snapshots of members\u2019 NODE currently being staked. Voting and creating proposals with Snapshot is done with a simple crypto wallet signature, no gas needed."),(0,r.kt)("h3",{id:"dao-projects"},"DAO Projects"),(0,r.kt)("p",null,"The first Dappnode project post-launch will be the hotly awaited ValidatorDAO. You can read this ",(0,r.kt)("a",{parentName:"p",href:"https://medium.com/dappnode/guardians-of-ethereum-a-validator-dao-proposal-d82e76231b45"},"Medium article")," to learn more about how ValidatorDAO is poised to revolutionize the relationship between Validators and Nominators!"))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cbc5934e.9fd61c20.js b/assets/js/cbc5934e.9fd61c20.js new file mode 100644 index 000000000..cbbcb653a --- /dev/null +++ b/assets/js/cbc5934e.9fd61c20.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[651],{4759:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var o=t(5893),i=t(1151);const s={title:"DAO",description:"DAO information"},a="Governance",r={id:"dao",title:"DAO",description:"DAO information",source:"@site/docs/dao.md",sourceDirName:".",slug:"/dao",permalink:"/docs/dao",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao.md",tags:[],version:"current",frontMatter:{title:"DAO",description:"DAO information"},sidebar:"daoSidebar",next:{title:"The NODE Economy",permalink:"/docs/dao/node-basics"}},d={},c=[{value:"Token Addresses",id:"token-addresses",level:3},{value:"Mission & Membership",id:"mission--membership",level:3},{value:"Architecture",id:"architecture",level:3},{value:"DAO Projects",id:"dao-projects",level:3}];function l(e){const n={a:"a",admonition:"admonition",h1:"h1",h3:"h3",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.admonition,{title:"Documentation alert",type:"danger",children:(0,o.jsxs)(n.p,{children:["The DAO section of our documentation is currently outdated due to a security incident. For a detailed explanation of the issue and our response plan, please refer to our ",(0,o.jsx)(n.a,{href:"https://discourse.dappnode.io/t/node-hack-post-mortem-and-recovery-plan/1826",children:"post-mortem report on the node hack"}),"."]})}),"\n",(0,o.jsx)(n.h1,{id:"governance",children:"Governance"}),"\n",(0,o.jsx)(n.h3,{id:"token-addresses",children:"Token Addresses"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["NODE Mainnet - ",(0,o.jsx)(n.a,{href:"https://etherscan.io/address/0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0",children:"0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0"})]}),"\n",(0,o.jsxs)(n.li,{children:["NODE xDai - ",(0,o.jsx)(n.a,{href:"https://blockscout.com/xdai/mainnet/address/0xc60e38C6352875c051B481Cbe79Dd0383AdB7817/transactions",children:"0xc60e38C6352875c051B481Cbe79Dd0383AdB7817"})]}),"\n"]}),"\n",(0,o.jsx)(n.h3,{id:"mission--membership",children:"Mission & Membership"}),"\n",(0,o.jsx)(n.p,{children:"The Dappnode DAO will be an inclusive hub in which Dappnode\u2019s community will carry on its mission to keep the web decentralized, uncensored and resilient. Active DAO members will have the opportunity to vote on Dappnode\u2019s future projects and on how to expand its array of hardware and software solutions."}),"\n",(0,o.jsx)(n.p,{children:"To get involved in Governance, DAO aspirants will need to make contributions to the ecosystem and help kick-start the NODE economy. Those who provide liquidity in the sanctioned pools (Uniswap and Sushiswap) or commit NODE to Governance Staking on Ethereum Mainnet or xDai will be granted voting powers proportional to their contributions. This way we can ensure that those with a voice are also those with a stake, and are not merely speculating with the token."}),"\n",(0,o.jsx)(n.h3,{id:"architecture",children:"Architecture"}),"\n",(0,o.jsxs)(n.p,{children:["DAppnode has tapped ",(0,o.jsx)(n.a,{href:"https://snapshot.org/#/",children:"Snapshot"})," technology to build its Governance structure. Snapshot is a novel piece of technology that allows off-chain voting for on-chain actions. It removes the prohibitive gas costs of participating in on-chain governance by taking snapshots of members\u2019 NODE currently being staked. Voting and creating proposals with Snapshot is done with a simple crypto wallet signature, no gas needed."]}),"\n",(0,o.jsx)(n.h3,{id:"dao-projects",children:"DAO Projects"}),"\n",(0,o.jsxs)(n.p,{children:["The first Dappnode project post-launch will be the hotly awaited ValidatorDAO. You can read this ",(0,o.jsx)(n.a,{href:"https://medium.com/dappnode/guardians-of-ethereum-a-validator-dao-proposal-d82e76231b45",children:"Medium article"})," to learn more about how ValidatorDAO is poised to revolutionize the relationship between Validators and Nominators!"]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>a});var o=t(7294);const i={},s=o.createContext(i);function a(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.1fab23a6.js b/assets/js/ccc49370.1fab23a6.js new file mode 100644 index 000000000..dbda41587 --- /dev/null +++ b/assets/js/ccc49370.1fab23a6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6103],{5203:(e,n,t)=>{t.r(n),t.d(n,{default:()=>p});t(7294);var a=t(6010),i=t(1944),s=t(5281),o=t(9460),l=t(1460),r=t(390),c=t(5999),d=t(2244),u=t(5893);function m(e){const{nextItem:n,prevItem:t}=e;return(0,u.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"}),children:[t&&(0,u.jsx)(d.Z,{...t,subLabel:(0,u.jsx)(c.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer Post"})}),n&&(0,u.jsx)(d.Z,{...n,subLabel:(0,u.jsx)(c.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older Post"}),isNext:!0})]})}function g(){const{assets:e,metadata:n}=(0,o.C)(),{title:t,description:a,date:s,tags:l,authors:r,frontMatter:c}=n,{keywords:d}=c,m=e.image??c.image;return(0,u.jsxs)(i.d,{title:t,description:a,keywords:d,image:m,children:[(0,u.jsx)("meta",{property:"og:type",content:"article"}),(0,u.jsx)("meta",{property:"article:published_time",content:s}),r.some((e=>e.url))&&(0,u.jsx)("meta",{property:"article:author",content:r.map((e=>e.url)).filter(Boolean).join(",")}),l.length>0&&(0,u.jsx)("meta",{property:"article:tag",content:l.map((e=>e.label)).join(",")})]})}var h=t(9407),f=t(2212);function v(e){let{sidebar:n,children:t}=e;const{metadata:a,toc:i}=(0,o.C)(),{nextItem:s,prevItem:c,frontMatter:d,unlisted:g}=a,{hide_table_of_contents:v,toc_min_heading_level:p,toc_max_heading_level:x}=d;return(0,u.jsxs)(l.Z,{sidebar:n,toc:!v&&i.length>0?(0,u.jsx)(h.Z,{toc:i,minHeadingLevel:p,maxHeadingLevel:x}):void 0,children:[g&&(0,u.jsx)(f.Z,{}),(0,u.jsx)(r.Z,{children:t}),(s||c)&&(0,u.jsx)(m,{nextItem:s,prevItem:c})]})}function p(e){const n=e.content;return(0,u.jsx)(o.n,{content:e.content,isBlogPostPage:!0,children:(0,u.jsxs)(i.FG,{className:(0,a.Z)(s.k.wrapper.blogPages,s.k.page.blogPostPage),children:[(0,u.jsx)(g,{}),(0,u.jsx)(v,{sidebar:e.sidebar,children:(0,u.jsx)(n,{})})]})})}},9407:(e,n,t)=>{t.d(n,{Z:()=>c});t(7294);var a=t(6010),i=t(3743);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var o=t(5893);const l="table-of-contents__link toc-highlight",r="table-of-contents__link--active";function c(e){let{className:n,...t}=e;return(0,o.jsx)("div",{className:(0,a.Z)(s.tableOfContents,"thin-scrollbar",n),children:(0,o.jsx)(i.Z,{...t,linkClassName:l,linkActiveClassName:r})})}},3743:(e,n,t)=>{t.d(n,{Z:()=>f});var a=t(7294),i=t(6668);function s(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const a=t.slice(2,e.level);e.parentIndex=Math.max(...a),t[e.level]=n}));const a=[];return n.forEach((e=>{const{parentIndex:t,...i}=e;t>=0?n[t].children.push(i):a.push(i)})),a}function o(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return n.flatMap((e=>{const n=o({toc:e.children,minHeadingLevel:t,maxHeadingLevel:a});return function(e){return e.level>=t&&e.level<=a}(e)?[{...e,children:n}]:n}))}function l(e){const n=e.getBoundingClientRect();return n.top===n.bottom?l(e.parentNode):n}function r(e,n){let{anchorTopOffset:t}=n;const a=e.find((e=>l(e).top>=t));if(a){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(l(a))?a:e[e.indexOf(a)-1]??null}return e[e.length-1]??null}function c(){const e=(0,a.useRef)(0),{navbar:{hideOnScroll:n}}=(0,i.L)();return(0,a.useEffect)((()=>{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,a.useRef)(void 0),t=c();(0,a.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:i,minHeadingLevel:s,maxHeadingLevel:o}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),l=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const a=[];for(let i=n;i<=t;i+=1)a.push(`h${i}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:s,maxHeadingLevel:o}),c=r(l,{anchorTopOffset:t.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(i),e.classList.add(i),n.current=e):e.classList.remove(i)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,t])}var u=t(9960),m=t(5893);function g(e){let{toc:n,className:t,linkClassName:a,isChild:i}=e;return n.length?(0,m.jsx)("ul",{className:i?void 0:t,children:n.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.Z,{to:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(g,{isChild:!0,toc:e.children,className:t,linkClassName:a})]},e.id)))}):null}const h=a.memo(g);function f(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:c,maxHeadingLevel:u,...g}=e;const f=(0,i.L)(),v=c??f.tableOfContents.minHeadingLevel,p=u??f.tableOfContents.maxHeadingLevel,x=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:i}=e;return(0,a.useMemo)((()=>o({toc:s(n),minHeadingLevel:t,maxHeadingLevel:i})),[n,t,i])}({toc:n,minHeadingLevel:v,maxHeadingLevel:p});return d((0,a.useMemo)((()=>{if(l&&r)return{linkClassName:l,linkActiveClassName:r,minHeadingLevel:v,maxHeadingLevel:p}}),[l,r,v,p])),(0,m.jsx)(h,{toc:x,className:t,linkClassName:l,...g})}},2212:(e,n,t)=>{t.d(n,{Z:()=>g});t(7294);var a=t(6010),i=t(5999),s=t(5742),o=t(5893);function l(){return(0,o.jsx)(i.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,o.jsx)(i.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,o.jsx)(s.Z,{children:(0,o.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(5281),u=t(9047);function m(e){let{className:n}=e;return(0,o.jsx)(u.Z,{type:"caution",title:(0,o.jsx)(l,{}),className:(0,a.Z)(n,d.k.common.unlistedBanner),children:(0,o.jsx)(r,{})})}function g(e){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(c,{}),(0,o.jsx)(m,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.88a7723b.js b/assets/js/ccc49370.88a7723b.js deleted file mode 100644 index 3e850c0a0..000000000 --- a/assets/js/ccc49370.88a7723b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6103],{324:(e,t,n)=>{n.r(t),n.d(t,{default:()=>h});var a=n(7294),l=n(6010),o=n(5463),r=n(3702),i=n(9107),c=n(2506),s=n(1116),m=n(7462),d=n(7325),u=n(3672);function g(e){const{nextItem:t,prevItem:n}=e;return a.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,d.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"})},n&&a.createElement(u.Z,(0,m.Z)({},n,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post"},"Newer Post")})),t&&a.createElement(u.Z,(0,m.Z)({},t,{subLabel:a.createElement(d.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post"},"Older Post"),isNext:!0})))}function f(){const{assets:e,metadata:t}=(0,i.C)(),{title:n,description:l,date:r,tags:c,authors:s,frontMatter:m}=t,{keywords:d}=m,u=e.image??m.image;return a.createElement(o.d,{title:n,description:l,keywords:d,image:u},a.createElement("meta",{property:"og:type",content:"article"}),a.createElement("meta",{property:"article:published_time",content:r}),s.some((e=>e.url))&&a.createElement("meta",{property:"article:author",content:s.map((e=>e.url)).filter(Boolean).join(",")}),c.length>0&&a.createElement("meta",{property:"article:tag",content:c.map((e=>e.label)).join(",")}))}var v=n(7086);function p(e){let{sidebar:t,children:n}=e;const{metadata:l,toc:o}=(0,i.C)(),{nextItem:r,prevItem:m,frontMatter:d}=l,{hide_table_of_contents:u,toc_min_heading_level:f,toc_max_heading_level:p}=d;return a.createElement(c.Z,{sidebar:t,toc:!u&&o.length>0?a.createElement(v.Z,{toc:o,minHeadingLevel:f,maxHeadingLevel:p}):void 0},a.createElement(s.Z,null,n),(r||m)&&a.createElement(g,{nextItem:r,prevItem:m}))}function h(e){const t=e.content;return a.createElement(i.n,{content:e.content,isBlogPostPage:!0},a.createElement(o.FG,{className:(0,l.Z)(r.k.wrapper.blogPages,r.k.page.blogPostPage)},a.createElement(f,null),a.createElement(p,{sidebar:e.sidebar},a.createElement(t,null))))}},7086:(e,t,n)=>{n.d(t,{Z:()=>m});var a=n(7462),l=n(7294),o=n(6010),r=n(2728);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},c="table-of-contents__link toc-highlight",s="table-of-contents__link--active";function m(e){let{className:t,...n}=e;return l.createElement("div",{className:(0,o.Z)(i.tableOfContents,"thin-scrollbar",t)},l.createElement(r.Z,(0,a.Z)({},n,{linkClassName:c,linkActiveClassName:s})))}},2728:(e,t,n)=>{n.d(t,{Z:()=>f});var a=n(7462),l=n(7294),o=n(107);function r(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const a=n.slice(2,e.level);e.parentIndex=Math.max(...a),n[e.level]=t}));const a=[];return t.forEach((e=>{const{parentIndex:n,...l}=e;n>=0?t[n].children.push(l):a.push(l)})),a}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return t.flatMap((e=>{const t=i({toc:e.children,minHeadingLevel:n,maxHeadingLevel:a});return function(e){return e.level>=n&&e.level<=a}(e)?[{...e,children:t}]:t}))}function c(e){const t=e.getBoundingClientRect();return t.top===t.bottom?c(e.parentNode):t}function s(e,t){let{anchorTopOffset:n}=t;const a=e.find((e=>c(e).top>=n));if(a){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(c(a))?a:e[e.indexOf(a)-1]??null}return e[e.length-1]??null}function m(){const e=(0,l.useRef)(0),{navbar:{hideOnScroll:t}}=(0,o.L)();return(0,l.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,l.useRef)(void 0),n=m();(0,l.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:a,linkActiveClassName:l,minHeadingLevel:o,maxHeadingLevel:r}=e;function i(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(a),i=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const a=[];for(let l=t;l<=n;l+=1)a.push(`h${l}.anchor`);return Array.from(document.querySelectorAll(a.join()))}({minHeadingLevel:o,maxHeadingLevel:r}),c=s(i,{anchorTopOffset:n.current}),m=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(l),e.classList.add(l),t.current=e):e.classList.remove(l)}(e,e===m)}))}return document.addEventListener("scroll",i),document.addEventListener("resize",i),i(),()=>{document.removeEventListener("scroll",i),document.removeEventListener("resize",i)}}),[e,n])}function u(e){let{toc:t,className:n,linkClassName:a,isChild:o}=e;return t.length?l.createElement("ul",{className:o?void 0:n},t.map((e=>l.createElement("li",{key:e.id},l.createElement("a",{href:`#${e.id}`,className:a??void 0,dangerouslySetInnerHTML:{__html:e.value}}),l.createElement(u,{isChild:!0,toc:e.children,className:n,linkClassName:a}))))):null}const g=l.memo(u);function f(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:c="table-of-contents__link",linkActiveClassName:s,minHeadingLevel:m,maxHeadingLevel:u,...f}=e;const v=(0,o.L)(),p=m??v.tableOfContents.minHeadingLevel,h=u??v.tableOfContents.maxHeadingLevel,b=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,l.useMemo)((()=>i({toc:r(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:p,maxHeadingLevel:h});return d((0,l.useMemo)((()=>{if(c&&s)return{linkClassName:c,linkActiveClassName:s,minHeadingLevel:p,maxHeadingLevel:h}}),[c,s,p,h])),l.createElement(g,(0,a.Z)({toc:b,className:n,linkClassName:c},f))}}}]); \ No newline at end of file diff --git a/assets/js/cdc6bc37.1a361d72.js b/assets/js/cdc6bc37.1a361d72.js deleted file mode 100644 index 18e0cc71a..000000000 --- a/assets/js/cdc6bc37.1a361d72.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4407],{4137:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>u});var r=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?n(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):n(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function s(e,t){if(null==e)return{};var a,r,o=function(e,t){if(null==e)return{};var a,r,o={},n=Object.keys(e);for(r=0;r<n.length;r++)a=n[r],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r<n.length;r++)a=n[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var d=r.createContext({}),l=function(e){var t=r.useContext(d),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=l(e.components);return r.createElement(d.Provider,{value:t},e.children)},h="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,o=e.mdxType,n=e.originalType,d=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),h=l(a),c=o,u=h["".concat(d,".").concat(c)]||h[c]||m[c]||n;return a?r.createElement(u,i(i({ref:t},p),{},{components:a})):r.createElement(u,i({ref:t},p))}));function u(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=a.length,i=new Array(n);i[0]=c;var s={};for(var d in t)hasOwnProperty.call(t,d)&&(s[d]=t[d]);s.originalType=e,s[h]="string"==typeof e?e:o,i[1]=s;for(var l=2;l<n;l++)i[l]=a[l];return r.createElement.apply(null,i)}return r.createElement.apply(null,a)}c.displayName="MDXCreateElement"},6514:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>m,frontMatter:()=>n,metadata:()=>s,toc:()=>l});var r=a(7462),o=(a(7294),a(4137));const n={},i="Rewards",s={unversionedId:"smooth/deep-dive-into-smooth/rewards",id:"smooth/deep-dive-into-smooth/rewards",title:"Rewards",description:"Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.",source:"@site/docs/smooth/deep-dive-into-smooth/rewards.md",sourceDirName:"smooth/deep-dive-into-smooth",slug:"/smooth/deep-dive-into-smooth/rewards",permalink:"/docs/smooth/deep-dive-into-smooth/rewards",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/deep-dive-into-smooth/rewards.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Deep Dive into Smooth!",permalink:"/docs/smooth/deep-dive-into-smooth/overview"},next:{title:"Smooth Validator States",permalink:"/docs/smooth/deep-dive-into-smooth/states"}},d={},l=[{value:"Smooth's source of rewards",id:"smooths-source-of-rewards",level:2},{value:"How rewards are distributed",id:"how-rewards-are-distributed",level:2},{value:"How rewards are claimed",id:"how-rewards-are-claimed",level:2}],p={toc:l},h="wrapper";function m(e){let{components:t,...a}=e;return(0,o.kt)(h,(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"rewards"},"Rewards"),(0,o.kt)("p",null,"Receiving and distributing rewards is one of the core functionalities of ",(0,o.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". In this section we will explain how rewards are handled by ",(0,o.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," and how they are distributed to validators, as well as how users can claim their rewards."),(0,o.kt)("h2",{id:"smooths-source-of-rewards"},"Smooth's source of rewards"),(0,o.kt)("p",null,"A ",(0,o.kt)("inlineCode",{parentName:"p"},"Reward")," is considered to be any balance denominated in ETH that is sent to Smooth's address. When recieved, it is shared fairly among all the participants in the pool."),(0,o.kt)("p",null,"There are 2 main sources of rewards in Smooth:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Block Proposal rewards"),": These rewards are generated by validators within the pool. Whenever a validator successfully proposes a block, it sends the block reward to Smooth's address."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Donations"),": This are the rewards that are sent to Smooth's address by anyone who wants to support the project. ",(0,o.kt)("a",{parentName:"li",href:"https://smooth.dappnode.io/"},"Smooth")," only accepts donations in ETH.")),(0,o.kt)("h2",{id:"how-rewards-are-distributed"},"How rewards are distributed"),(0,o.kt)("p",null,"When a validator has an active subscription to the pool (",(0,o.kt)("inlineCode",{parentName:"p"},"Active")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"YellowCard")," state) it is eligible for rewards, meaning that it will receive a given share of each reward that is sent to the pool. Validators in ",(0,o.kt)("inlineCode",{parentName:"p"},"RedCard")," are considered subscribed, but don't earn rewards until they become active again."),(0,o.kt)("p",null,"Smooth's distributes rewards to the validators as ",(0,o.kt)("inlineCode",{parentName:"p"},"Pending Rewards"),". These are rewards that are not ",(0,o.kt)("em",{parentName:"p"},"consolidated")," yet, meaning that they belong to the validator but they can not be claimed yet, until a valid block proposal is sent to ",(0,o.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," by that validator."),(0,o.kt)("p",null,"Later on, when a validator sends a valid block proposal to ",(0,o.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),", all its ",(0,o.kt)("inlineCode",{parentName:"p"},"Pending Rewards")," are transformed into ",(0,o.kt)("inlineCode",{parentName:"p"},"Accumulated Rewards"),". These rewards are consolidated and can be claimed by the validator."),(0,o.kt)("p",null,"Therefore, we consider that a validator has 2 types of rewards:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Pending Rewards"),": Rewards that are not consolidated yet. They can not be claimed."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Accumulated Rewards"),": Rewards that are consolidated and can be claimed by the validator.")),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Dappnode receives a ",(0,o.kt)("strong",{parentName:"p"},"7%")," fee of all rewards distributed by ",(0,o.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth"),". This fee is automatically deducted from the rewards before they are distributed to validators. This fee serves to support the development and sustainability of ",(0,o.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," and Dappnode!")),(0,o.kt)("h2",{id:"how-rewards-are-claimed"},"How rewards are claimed"),(0,o.kt)("p",null,"As a ",(0,o.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," user, you have a third type of reward: ",(0,o.kt)("inlineCode",{parentName:"p"},"Claimable Rewards"),". These are the sum of all your validator's ",(0,o.kt)("inlineCode",{parentName:"p"},"Accumulated Rewards")," with the same withdrawal address that you have not already claimed."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Claimable Rewards"),": Rewards that you can claim as a ",(0,o.kt)("a",{parentName:"li",href:"https://smooth.dappnode.io/"},"Smooth")," user. Sum of all your validator's unclaimed ",(0,o.kt)("inlineCode",{parentName:"li"},"Accumulated Rewards"),".")),(0,o.kt)("p",null,"Smooth's users can claim their rewards by visting ",(0,o.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth's website")," and clicking on the ",(0,o.kt)("inlineCode",{parentName:"p"},"Claim All")," button once logged in. This trigger a transaction that will send all claimable rewards to the user's address."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("a",{parentName:"p",href:"https://smooth.dappnode.io/"},"Smooth")," identifies users through an ETH1 address, which serves as the withdrawal address for all your validators. If you have multiple validators associated with distinct withdrawal addresses, you will need to claim your rewards for each of them separately.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cdc6bc37.7cdc5c32.js b/assets/js/cdc6bc37.7cdc5c32.js new file mode 100644 index 000000000..7be95f435 --- /dev/null +++ b/assets/js/cdc6bc37.7cdc5c32.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4407],{4855:(e,o,s)=>{s.r(o),s.d(o,{assets:()=>n,contentTitle:()=>d,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>h});var t=s(5893),a=s(1151);const r={},d="Rewards",i={id:"smooth/deep-dive-into-smooth/rewards",title:"Rewards",description:"Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.",source:"@site/docs/smooth/deep-dive-into-smooth/rewards.md",sourceDirName:"smooth/deep-dive-into-smooth",slug:"/smooth/deep-dive-into-smooth/rewards",permalink:"/docs/smooth/deep-dive-into-smooth/rewards",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/smooth/deep-dive-into-smooth/rewards.md",tags:[],version:"current",frontMatter:{},sidebar:"smoothSidebar",previous:{title:"Deep Dive into Smooth!",permalink:"/docs/smooth/deep-dive-into-smooth/overview"},next:{title:"Smooth Validator States",permalink:"/docs/smooth/deep-dive-into-smooth/states"}},n={},h=[{value:"Smooth's source of rewards",id:"smooths-source-of-rewards",level:2},{value:"How rewards are distributed",id:"how-rewards-are-distributed",level:2},{value:"How rewards are claimed",id:"how-rewards-are-claimed",level:2}];function l(e){const o={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,a.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"rewards",children:"Rewards"}),"\n",(0,t.jsxs)(o.p,{children:["Receiving and distributing rewards is one of the core functionalities of ",(0,t.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". In this section we will explain how rewards are handled by ",(0,t.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and how they are distributed to validators, as well as how users can claim their rewards."]}),"\n",(0,t.jsx)(o.h2,{id:"smooths-source-of-rewards",children:"Smooth's source of rewards"}),"\n",(0,t.jsxs)(o.p,{children:["A ",(0,t.jsx)(o.code,{children:"Reward"})," is considered to be any balance denominated in ETH that is sent to Smooth's address. When recieved, it is shared fairly among all the participants in the pool."]}),"\n",(0,t.jsx)(o.p,{children:"There are 2 main sources of rewards in Smooth:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Block Proposal rewards"}),": These rewards are generated by validators within the pool. Whenever a validator successfully proposes a block, it sends the block reward to Smooth's address."]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Donations"}),": This are the rewards that are sent to Smooth's address by anyone who wants to support the project. ",(0,t.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," only accepts donations in ETH."]}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"how-rewards-are-distributed",children:"How rewards are distributed"}),"\n",(0,t.jsxs)(o.p,{children:["When a validator has an active subscription to the pool (",(0,t.jsx)(o.code,{children:"Active"})," or ",(0,t.jsx)(o.code,{children:"YellowCard"})," state) it is eligible for rewards, meaning that it will receive a given share of each reward that is sent to the pool. Validators in ",(0,t.jsx)(o.code,{children:"RedCard"})," are considered subscribed, but don't earn rewards until they become active again."]}),"\n",(0,t.jsxs)(o.p,{children:["Smooth's distributes rewards to the validators as ",(0,t.jsx)(o.code,{children:"Pending Rewards"}),". These are rewards that are not ",(0,t.jsx)(o.em,{children:"consolidated"})," yet, meaning that they belong to the validator but they can not be claimed yet, until a valid block proposal is sent to ",(0,t.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," by that validator."]}),"\n",(0,t.jsxs)(o.p,{children:["Later on, when a validator sends a valid block proposal to ",(0,t.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),", all its ",(0,t.jsx)(o.code,{children:"Pending Rewards"})," are transformed into ",(0,t.jsx)(o.code,{children:"Accumulated Rewards"}),". These rewards are consolidated and can be claimed by the validator."]}),"\n",(0,t.jsx)(o.p,{children:"Therefore, we consider that a validator has 2 types of rewards:"}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Pending Rewards"}),": Rewards that are not consolidated yet. They can not be claimed."]}),"\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Accumulated Rewards"}),": Rewards that are consolidated and can be claimed by the validator."]}),"\n"]}),"\n",(0,t.jsx)(o.admonition,{type:"info",children:(0,t.jsxs)(o.p,{children:["Dappnode receives a ",(0,t.jsx)(o.strong,{children:"7%"})," fee of all rewards distributed by ",(0,t.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"}),". This fee is automatically deducted from the rewards before they are distributed to validators. This fee serves to support the development and sustainability of ",(0,t.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," and Dappnode!"]})}),"\n",(0,t.jsx)(o.h2,{id:"how-rewards-are-claimed",children:"How rewards are claimed"}),"\n",(0,t.jsxs)(o.p,{children:["As a ",(0,t.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," user, you have a third type of reward: ",(0,t.jsx)(o.code,{children:"Claimable Rewards"}),". These are the sum of all your validator's ",(0,t.jsx)(o.code,{children:"Accumulated Rewards"})," with the same withdrawal address that you have not already claimed."]}),"\n",(0,t.jsxs)(o.ul,{children:["\n",(0,t.jsxs)(o.li,{children:[(0,t.jsx)(o.strong,{children:"Claimable Rewards"}),": Rewards that you can claim as a ",(0,t.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," user. Sum of all your validator's unclaimed ",(0,t.jsx)(o.code,{children:"Accumulated Rewards"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(o.p,{children:["Smooth's users can claim their rewards by visting ",(0,t.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth's website"})," and clicking on the ",(0,t.jsx)(o.code,{children:"Claim All"})," button once logged in. This trigger a transaction that will send all claimable rewards to the user's address."]}),"\n",(0,t.jsx)(o.admonition,{type:"tip",children:(0,t.jsxs)(o.p,{children:[(0,t.jsx)(o.a,{href:"https://smooth.dappnode.io/",children:"Smooth"})," identifies users through an ETH1 address, which serves as the withdrawal address for all your validators. If you have multiple validators associated with distinct withdrawal addresses, you will need to claim your rewards for each of them separately."]})})]})}function c(e={}){const{wrapper:o}={...(0,a.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,o,s)=>{s.d(o,{Z:()=>i,a:()=>d});var t=s(7294);const a={},r=t.createContext(a);function d(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:d(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d267b4aa.b4ea9152.js b/assets/js/d267b4aa.b4ea9152.js new file mode 100644 index 000000000..17433b3e5 --- /dev/null +++ b/assets/js/d267b4aa.b4ea9152.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7563],{9409:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>p,frontMatter:()=>n,metadata:()=>i,toc:()=>d});var r=o(5893),s=o(1151);const n={},a="Next Steps",i={id:"user/getting-started/next-steps",title:"Next Steps",description:"Now that your DAppNode is set up and ready to go, it's time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:",source:"@site/docs/user/getting-started/next-steps.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/next-steps",permalink:"/docs/user/getting-started/next-steps",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/next-steps.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Setup",permalink:"/docs/user/getting-started/setup"},next:{title:"\ud83c\udf10 Access your Dappnode",permalink:"/docs/user/access-your-dappnode/overview"}},c={},d=[];function u(e){const t={a:"a",h1:"h1",p:"p",strong:"strong",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"next-steps",children:"Next Steps"}),"\n",(0,r.jsx)(t.p,{children:"Now that your DAppNode is set up and ready to go, it's time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:"}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"/docs/user/access-your-dappnode/vpn/overview",children:(0,r.jsx)(t.strong,{children:"\ud83d\udd10 Configure VPN access"})}),": Using either Wireguard or OpenVPN, you will be able to connect to your Dappnode from wherever you are in the world. You will be able to access your dappnode outside of the range of the wifi, while on holidays or during your commute!"]}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"/docs/user/staking/overview",children:(0,r.jsx)(t.strong,{children:"\ud83d\udcb0 Start Staking and Earning Rewards"})}),": You can start validating Proof-of-Stake networks like Ethereum, Gnosis Chain or LUKSO and earn rewards for securing the network."]}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.a,{href:"/docs/user/ethical-metrics/overview",children:(0,r.jsx)(t.strong,{children:"\ud83d\udd14 Configure Ethical Metrics"})}),": Ethical metrics is a privacy-focused monitoring tool for Dappnode. You will be able to receive alerts related to your Dappnode's performance and health."]})]})}function p(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},1151:(e,t,o)=>{o.d(t,{Z:()=>i,a:()=>a});var r=o(7294);const s={},n=r.createContext(s);function a(e){const t=r.useContext(n);return r.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(s):e.components||s:a(e.components),r.createElement(n.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d267b4aa.c80f1fca.js b/assets/js/d267b4aa.c80f1fca.js deleted file mode 100644 index 119e80e1c..000000000 --- a/assets/js/d267b4aa.c80f1fca.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7563],{4137:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},l="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),l=c(r),f=o,m=l["".concat(p,".").concat(f)]||l[f]||d[f]||a;return r?n.createElement(m,s(s({ref:t},u),{},{components:r})):n.createElement(m,s({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,s=new Array(a);s[0]=f;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[l]="string"==typeof e?e:o,s[1]=i;for(var c=2;c<a;c++)s[c]=r[c];return n.createElement.apply(null,s)}return n.createElement.apply(null,r)}f.displayName="MDXCreateElement"},8809:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var n=r(7462),o=(r(7294),r(4137));const a={},s="Next Steps",i={unversionedId:"user/getting-started/next-steps",id:"user/getting-started/next-steps",title:"Next Steps",description:"Now that your DAppNode is set up and ready to go, it's time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:",source:"@site/docs/user/getting-started/next-steps.md",sourceDirName:"user/getting-started",slug:"/user/getting-started/next-steps",permalink:"/docs/user/getting-started/next-steps",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/getting-started/next-steps.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Setup",permalink:"/docs/user/getting-started/setup"},next:{title:"\ud83c\udf10 Access your Dappnode",permalink:"/docs/user/access-your-dappnode/overview"}},p={},c=[],u={toc:c},l="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(l,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"next-steps"},"Next Steps"),(0,o.kt)("p",null,"Now that your DAppNode is set up and ready to go, it's time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/vpn/overview"},(0,o.kt)("strong",{parentName:"a"},"\ud83d\udd10 Configure VPN access")),": Using either Wireguard or OpenVPN, you will be able to connect to your Dappnode from wherever you are in the world. You will be able to access your dappnode outside of the range of the wifi, while on holidays or during your commute!"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/user/staking/overview"},(0,o.kt)("strong",{parentName:"a"},"\ud83d\udcb0 Start Staking and Earning Rewards")),": You can start validating Proof-of-Stake networks like Ethereum, Gnosis Chain or LUKSO and earn rewards for securing the network."),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"/docs/user/ethical-metrics/overview"},(0,o.kt)("strong",{parentName:"a"},"\ud83d\udd14 Configure Ethical Metrics")),": Ethical metrics is a privacy-focused monitoring tool for Dappnode. You will be able to receive alerts related to your Dappnode's performance and health."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d36fd63a.5b547693.js b/assets/js/d36fd63a.5b547693.js new file mode 100644 index 000000000..22a091c27 --- /dev/null +++ b/assets/js/d36fd63a.5b547693.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6593],{2825:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>r,toc:()=>d});var t=s(5893),o=s(1151);const a={},i="LUKSO",r={id:"user/staking/lukso/solo",title:"LUKSO",description:"LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That's LUKSO for you!",source:"@site/docs/user/staking/lukso/solo.md",sourceDirName:"user/staking/lukso",slug:"/user/staking/lukso/solo",permalink:"/docs/user/staking/lukso/solo",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/lukso/solo.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Gnosis Chain",permalink:"/docs/user/staking/gnosis-chain/solo"},next:{title:"Ethereum Rollups: An Overview",permalink:"/docs/user/rollups/overview"}},l={},d=[{value:"What Makes LUKSO Special?",id:"what-makes-lukso-special",level:2},{value:"Joining LUKSO as a validator",id:"joining-lukso-as-a-validator",level:2},{value:"1. Install the necessary LUKSO packages on Dappnode.",id:"1-install-the-necessary-lukso-packages-on-dappnode",level:2},{value:"2. Creating validator keys for LUKSO",id:"2-creating-validator-keys-for-lukso",level:2},{value:"3: Deposit LYX into the LUKSO deposit contract",id:"3-deposit-lyx-into-the-lukso-deposit-contract",level:2},{value:"3. Adding a Withdrawal Address to your LUKSO validator",id:"3-adding-a-withdrawal-address-to-your-lukso-validator",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"lukso",children:"LUKSO"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"LUKSO"})," is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That's LUKSO for you!"]}),"\n",(0,t.jsx)(n.h2,{id:"what-makes-lukso-special",children:"What Makes LUKSO Special?"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Universal Profiles (UPs)"}),", supported by the ERC-725 standard, are LUKSO's magic trick. They act like digital passports in the LUKSO universe, ensuring that every creation and transaction carries the unique signature of its creator."]}),"\n",(0,t.jsx)(n.h2,{id:"joining-lukso-as-a-validator",children:"Joining LUKSO as a validator"}),"\n",(0,t.jsx)(n.p,{children:"LUKSO shares more than just roots with Ethereum. It uses the same trusted tools to run its network. Some of the main Ethereum clients are also compatible with LUKSO. For becoming a validator in LUKSO, you'll need to:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Install the necessary LUKSO packages on Dappnode."}),"\n",(0,t.jsx)(n.li,{children:"Create validator keys for LUKSO."}),"\n",(0,t.jsx)(n.li,{children:"Deposit LYX into the LUKSO Consensus Chain deposit contract."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"1-install-the-necessary-lukso-packages-on-dappnode",children:"1. Install the necessary LUKSO packages on Dappnode."}),"\n",(0,t.jsx)(n.p,{children:"Similar to Ethereum mainnet, Dappnode makes it very easy to set up your LUKSO validator. Here's what the Stakers UI looks like for LUKSO:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Stakers",src:s(5542).Z+"",width:"2846",height:"1512"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Execution Clients"})," (Choose one):","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Lukso Geth"}),"\n",(0,t.jsx)(n.li,{children:"Lukso Erigon (Coming soon to Dappnode)"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Consensus Clients"})," (Choose one):","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Prysm Lukso"}),"\n",(0,t.jsx)(n.li,{children:"Teku Lukso\n-Web3Signer LUKSO"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"Checkpoint Sync is your friend for syncing Consensus Clients",type:"tip",children:(0,t.jsx)(n.p,{children:'Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.'})}),"\n",(0,t.jsx)(n.p,{children:"After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs."}),"\n",(0,t.jsx)(n.h2,{id:"2-creating-validator-keys-for-lukso",children:"2. Creating validator keys for LUKSO"}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["This guide will use the ",(0,t.jsx)(n.a,{href:"https://github.com/lukso-network/tools-wagyu-key-gen/releases",children:"LUKSO Wagyu Keygen Tool"})," to generate your validator keys. This is a fork of the ",(0,t.jsx)(n.a,{href:"https://github.com/stake-house/wagyu-key-gen/releases",children:"Wagyu Keygen tool"})," for Ethereum mainnet."]})}),"\n",(0,t.jsxs)(n.admonition,{title:"What are all these keys?",type:"caution",children:[(0,t.jsxs)(n.p,{children:["\ud83d\udd12 ",(0,t.jsx)(n.strong,{children:"Validator keys"})," will be online (stored in your Dappnode) and signing the blocks of the LUKSO blockchain. You will create them from a ",(0,t.jsx)(n.strong,{children:"mnemonic phrase"}),", which is important to keep safe as it's the ",(0,t.jsx)(n.strong,{children:"only way"})," to regenerate these validator keys if you lose them."]}),(0,t.jsxs)(n.p,{children:["\ud83d\udee1\ufe0f The damage of getting your ",(0,t.jsx)(n.strong,{children:"mnemonic phrase"})," compromised has been reduced dramatically since withdrawals are already activated in LUKSO (Shapella upgrade), as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your ",(0,t.jsx)(n.strong,{children:"mnemonic phrase"}),". Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever."]}),(0,t.jsxs)(n.p,{children:["\ud83d\udd11 ",(0,t.jsx)(n.strong,{children:"Withdrawal address"})," this brings us to the withdrawal address, which is the address that will receive all the balance above 32 LYX while your validator is active, and all your balance above 32 LYX when you exit the validator set. You need to keep this address safe as it's where your LYX will go, and cannot be changed."]})]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Download the latest release of the LUKSO Wagyu Keygen Tool from ",(0,t.jsx)(n.a,{href:"https://github.com/lukso-network/tools-wagyu-key-gen/releases",children:"here"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the LUKSO Wagyu Keygen Tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"LUKSO Wagyu - 1st screen",src:s(6583).Z+"",width:"1896",height:"1606"})}),"\n",(0,t.jsx)(n.p,{children:"You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place."}),"\n",(0,t.jsx)(n.p,{children:"To ensure that you have copied it somewhere, it will ask you to type it again."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"LUKSO Wagyu - 2nd screen",src:s(9862).Z+"",width:"1896",height:"1606"})}),"\n",(0,t.jsx)(n.p,{children:"Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"LUKSO Wagyu - 3rd screen",src:s(1131).Z+"",width:"1888",height:"1430"})}),"\n",(0,t.jsx)(n.p,{children:"Select a folder where to save the keys."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"LUKSO Wagyu - 4th screen",src:s(5421).Z+"",width:"1886",height:"1424"})}),"\n",(0,t.jsx)(n.p,{children:"Wait for the keys to be generated."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"LUKSO Wagyu - 5th screen",src:s(8058).Z+"",width:"1888",height:"1426"})}),"\n",(0,t.jsx)(n.p,{children:"And you are done! You will find your keys in the folder you selected."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"LUKSO Wagyu - 6th screen",src:s(8613).Z+"",width:"1886",height:"1430"})}),"\n",(0,t.jsx)(n.p,{children:"You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page."}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["\ud83d\udca1 *",(0,t.jsx)(n.code,{children:"Want to learn more about Ethereum keys and key generation?"}),"*\ud83d\udca1",(0,t.jsx)(n.a,{href:"https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/keys/#two-types-of-keys",children:"Learn more"})]})}),"\n",(0,t.jsx)(n.p,{children:"Now that you\u2019ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer LUKSO, the package that you installed during step 1."}),"\n",(0,t.jsxs)(n.p,{children:["Return to the Dappnode UI and navigate to the Stakers > LUKSO menu. Your Web3Signer will have a link saying ",(0,t.jsx)(n.code,{children:"Upload Keystores"})," . If it doesn\u2019t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page."]}),"\n",(0,t.jsxs)(n.p,{children:["Then click on the ",(0,t.jsx)(n.code,{children:"Import Keystores"})," button on the lower part of the Web3Signer LUKSO UI."]}),"\n",(0,t.jsx)(n.p,{children:"Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores."}),"\n",(0,t.jsx)(n.p,{children:"You are now ready to fund these validator accounts and start validating in LUKSO!"}),"\n",(0,t.jsx)(n.h2,{id:"3-deposit-lyx-into-the-lukso-deposit-contract",children:"3: Deposit LYX into the LUKSO deposit contract"}),"\n",(0,t.jsx)(n.p,{children:"The final step is to fund your validator with the 32 LYX necessary to register as a validator and start receiving validation work!"}),"\n",(0,t.jsx)(n.p,{children:"To do this, you will need to send 32 LYX to the LUKSO deposit contract. We will be using the official LUKSO launchpad for this."}),"\n",(0,t.jsxs)(n.p,{children:["Navigate to ",(0,t.jsx)(n.a,{href:"https://deposit.mainnet.lukso.network/en/",children:"the LUKSO launchpad"})]}),"\n",(0,t.jsx)(n.p,{children:"Read all the advisories... they contain important information that will help you understand the whole process!"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"LUKSO Launchpad 1",src:s(5773).Z+"",width:"2218",height:"1460"})}),"\n",(0,t.jsx)(n.p,{children:"Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"LUKSO Launchpad 2",src:s(8846).Z+"",width:"2878",height:"1480"})}),"\n",(0,t.jsx)(n.p,{children:'We continue until the "Upload Deposit Data" section.'}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"LUKSO Launchpad 3",src:s(8257).Z+"",width:"2602",height:"1502"})}),"\n",(0,t.jsxs)(n.p,{children:["Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called ",(0,t.jsx)(n.code,{children:"deposit_data-*.json"})]}),"\n",(0,t.jsxs)(n.p,{children:["The moment to do the deposit is here! Connect your wallet with the 32 LYX and ",(0,t.jsx)(n.a,{href:"https://chainlist.org/chain/42",children:"make sure"})," you're in the LUKSO network."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"LUKSO Launchpad 4",src:s(6135).Z+"",width:"2602",height:"1502"})}),"\n",(0,t.jsx)(n.p,{children:"And follow the steps to send the 32 LYX to the deposit contract!"}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"Please review your deposit address! MAKE SURE YOU ARE SENDING THE 32 LYX TO THE RIGHT DEPOSIT ADDRESS!"})}),"\n",(0,t.jsxs)(n.p,{children:["After the deposit is done, you will be able to check the progress of your deposit by searching for your validator key in the ",(0,t.jsx)(n.a,{href:"https://explorer.consensus.mainnet.lukso.network/",children:"LUKSO Consensus Explorer"}),". You can get a direct link to this by clicking on the ",(0,t.jsx)(n.code,{children:"View in Beaconcha.in"})," button in the upper, right corner of the Dappnode Web3signer LUKSO UI, where you uploaded the keystores"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"LUKSO Web3Signer",src:s(1952).Z+"",width:"2822",height:"1398"})}),"\n",(0,t.jsx)(n.h2,{id:"3-adding-a-withdrawal-address-to-your-lukso-validator",children:"3. Adding a Withdrawal Address to your LUKSO validator"}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["This step is only necessary if your validator doesn't have a withdrawal address configured. In the ",(0,t.jsx)(n.a,{href:"https://explorer.consensus.mainnet.lukso.network/",children:"consensus explorer"}),", it shows as an address that starts with a ",(0,t.jsx)(n.code,{children:"0x00"})," and needs to be upgraded to a ",(0,t.jsx)(n.code,{children:"0x01"}),". If your validator already shows a ",(0,t.jsx)(n.code,{children:"0x01"})," address, you DON'T need to follow these steps."]})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Step 1"}),": Open the ",(0,t.jsx)(n.a,{href:"https://github.com/lukso-network/tools-wagyu-key-gen/releases",children:"LUKSO Wagyu Keygen tool"}),' and click "Use existing recovery phrase", then you\'ll need to select "Generate your BLS to Execution change" option. Type in your seed phrase and follow the steps to generate a JSON file you\'ll need in step 3. Make sure you are offline during this step!']}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Step 2"}),": You'll have to locate your LUKSO consensus client's container IP. If you're using Prysm, you can find it ",(0,t.jsx)(n.a,{href:"http://my.dappnode/packages/my/prysm-lukso.dnp.dappnode.eth/network",children:"here"})," under the service box in the upper part, and if you're using Teku, you'll be able to find it ",(0,t.jsx)(n.a,{href:"http://my.dappnode/packages/my/teku-lukso.dnp.dappnode.eth/network",children:"here"})," in the same location."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Step 3"}),": Open a terminal window where you'll need to input:\n",(0,t.jsx)(n.code,{children:"curl -X 'POST' \\ '<node-url>/eth/v1/beacon/pool/bls_to_execution_changes' \\ -H 'accept: */*' \\ -H 'Content-Type: application/json' \\ -d '<post-request-content>'"}),"\nWhere ",(0,t.jsx)(n.code,{children:"<node-url>"})," is your LUKSO consensus client's container IP, and ",(0,t.jsx)(n.code,{children:"<post-request-content>"})," the JSON file you generated in step 1."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Step 4"}),": After successfully broadcasting the message, check your validator in the ",(0,t.jsx)(n.a,{href:"https://explorer.consensus.mainnet.lukso.network/",children:"LUKSO Consensus Explorer"}),", where you should now be able to see a ",(0,t.jsx)(n.code,{children:"0x01"})," withdrawal address."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Remember"}),": Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions."]})]})}function c(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},5773:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/lukso-launchpad1-feee8e797237cfdda9065a0778c87e82.png"},8846:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/lukso-launchpad2-a06471841b30d5377c567417d618aa98.png"},8257:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/lukso-launchpad3-bca6aef08176b4d71d978494ad6c947e.png"},6135:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/lukso-launchpad4-fda4750d49c92053aff1fe0e3a0a02f2.png"},5542:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/lukso-staking-screenshot-605e7ed6329f5a73b11a6b8cc4015c9c.png"},6583:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/lukso-wagyu1-e38f326b1d87e8192b3cfe2193d5c8ed.png"},9862:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/lukso-wagyu2-118e3f6a51c4c39294effac0a4a6afe3.png"},1952:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/lukso-web3signer-31c35566a88612cb0658f7eade5b358a.png"},1131:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/wagyu4-0673a83463eb844993339ecfdcc59b41.png"},5421:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/wagyu5-644261c1588e13ba1177d70aef9ecf19.png"},8058:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/wagyu6-d5538d2bbd5a01f47d94c6c5b29b3abf.png"},8613:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/wagyu7-8c346a2c9519b98a530d1005a69247f2.png"},1151:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>i});var t=s(7294);const o={},a=t.createContext(o);function i(e){const n=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d36fd63a.9869b593.js b/assets/js/d36fd63a.9869b593.js deleted file mode 100644 index f8223dc51..000000000 --- a/assets/js/d36fd63a.9869b593.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6593],{4137:(e,t,a)=>{a.d(t,{Zo:()=>d,kt:()=>k});var n=a(7294);function o(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?s(Object(a),!0).forEach((function(t){o(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):s(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function i(e,t){if(null==e)return{};var a,n,o=function(e,t){if(null==e)return{};var a,n,o={},s=Object.keys(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)a=s[n],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},d=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var a=e.components,o=e.mdxType,s=e.originalType,l=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),u=p(a),c=o,k=u["".concat(l,".").concat(c)]||u[c]||h[c]||s;return a?n.createElement(k,r(r({ref:t},d),{},{components:a})):n.createElement(k,r({ref:t},d))}));function k(e,t){var a=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=a.length,r=new Array(s);r[0]=c;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[u]="string"==typeof e?e:o,r[1]=i;for(var p=2;p<s;p++)r[p]=a[p];return n.createElement.apply(null,r)}return n.createElement.apply(null,a)}c.displayName="MDXCreateElement"},2401:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>p});var n=a(7462),o=(a(7294),a(4137));const s={},r="LUKSO",i={unversionedId:"user/staking/lukso/solo",id:"user/staking/lukso/solo",title:"LUKSO",description:"LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That's LUKSO for you!",source:"@site/docs/user/staking/lukso/solo.md",sourceDirName:"user/staking/lukso",slug:"/user/staking/lukso/solo",permalink:"/docs/user/staking/lukso/solo",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/lukso/solo.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Gnosis Chain",permalink:"/docs/user/staking/gnosis-chain/solo"},next:{title:"Ethereum Rollups: An Overview",permalink:"/docs/user/rollups/overview"}},l={},p=[{value:"What Makes LUKSO Special?",id:"what-makes-lukso-special",level:2},{value:"Joining LUKSO as a validator",id:"joining-lukso-as-a-validator",level:2},{value:"1. Install the necessary LUKSO packages on Dappnode.",id:"1-install-the-necessary-lukso-packages-on-dappnode",level:2},{value:"2. Creating validator keys for LUKSO",id:"2-creating-validator-keys-for-lukso",level:2},{value:"3: Deposit LYX into the LUKSO deposit contract",id:"3-deposit-lyx-into-the-lukso-deposit-contract",level:2},{value:"3. Adding a Withdrawal Address to your LUKSO validator",id:"3-adding-a-withdrawal-address-to-your-lukso-validator",level:2}],d={toc:p},u="wrapper";function h(e){let{components:t,...s}=e;return(0,o.kt)(u,(0,n.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"lukso"},"LUKSO"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"LUKSO")," is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That's LUKSO for you!"),(0,o.kt)("h2",{id:"what-makes-lukso-special"},"What Makes LUKSO Special?"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Universal Profiles (UPs)"),", supported by the ERC-725 standard, are LUKSO's magic trick. They act like digital passports in the LUKSO universe, ensuring that every creation and transaction carries the unique signature of its creator."),(0,o.kt)("h2",{id:"joining-lukso-as-a-validator"},"Joining LUKSO as a validator"),(0,o.kt)("p",null,"LUKSO shares more than just roots with Ethereum. It uses the same trusted tools to run its network. Some of the main Ethereum clients are also compatible with LUKSO. For becoming a validator in LUKSO, you'll need to:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Install the necessary LUKSO packages on Dappnode."),(0,o.kt)("li",{parentName:"ol"},"Create validator keys for LUKSO."),(0,o.kt)("li",{parentName:"ol"},"Deposit LYX into the LUKSO Consensus Chain deposit contract.")),(0,o.kt)("h2",{id:"1-install-the-necessary-lukso-packages-on-dappnode"},"1. Install the necessary LUKSO packages on Dappnode."),(0,o.kt)("p",null,"Similar to Ethereum mainnet, Dappnode makes it very easy to set up your LUKSO validator. Here's what the Stakers UI looks like for LUKSO:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Stakers",src:a(5542).Z,width:"2846",height:"1512"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Execution Clients")," (Choose one):",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Lukso Geth"),(0,o.kt)("li",{parentName:"ul"},"Lukso Erigon (Coming soon to Dappnode)"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Consensus Clients")," (Choose one):",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Prysm Lukso"),(0,o.kt)("li",{parentName:"ul"},"Teku Lukso\n-Web3Signer LUKSO")))),(0,o.kt)("admonition",{title:"Checkpoint Sync is your friend for syncing Consensus Clients",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},'Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.')),(0,o.kt)("p",null,"After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs."),(0,o.kt)("h2",{id:"2-creating-validator-keys-for-lukso"},"2. Creating validator keys for LUKSO"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This guide will use the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/lukso-network/tools-wagyu-key-gen/releases"},"LUKSO Wagyu Keygen Tool")," to generate your validator keys. This is a fork of the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/stake-house/wagyu-key-gen/releases"},"Wagyu Keygen tool")," for Ethereum mainnet.")),(0,o.kt)("admonition",{title:"What are all these keys?",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udd12 ",(0,o.kt)("strong",{parentName:"p"},"Validator keys")," will be online (stored in your Dappnode) and signing the blocks of the LUKSO blockchain. You will create them from a ",(0,o.kt)("strong",{parentName:"p"},"mnemonic phrase"),", which is important to keep safe as it's the ",(0,o.kt)("strong",{parentName:"p"},"only way")," to regenerate these validator keys if you lose them."),(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udee1\ufe0f The damage of getting your ",(0,o.kt)("strong",{parentName:"p"},"mnemonic phrase")," compromised has been reduced dramatically since withdrawals are already activated in LUKSO (Shapella upgrade), as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your ",(0,o.kt)("strong",{parentName:"p"},"mnemonic phrase"),". Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever."),(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udd11 ",(0,o.kt)("strong",{parentName:"p"},"Withdrawal address")," this brings us to the withdrawal address, which is the address that will receive all the balance above 32 LYX while your validator is active, and all your balance above 32 LYX when you exit the validator set. You need to keep this address safe as it's where your LYX will go, and cannot be changed.")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Download the latest release of the LUKSO Wagyu Keygen Tool from ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/lukso-network/tools-wagyu-key-gen/releases"},"here"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the LUKSO Wagyu Keygen Tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way."))),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"LUKSO Wagyu - 1st screen",src:a(6583).Z,width:"1896",height:"1606"})),(0,o.kt)("p",null,"You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place."),(0,o.kt)("p",null,"To ensure that you have copied it somewhere, it will ask you to type it again."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"LUKSO Wagyu - 2nd screen",src:a(9862).Z,width:"1896",height:"1606"})),(0,o.kt)("p",null,"Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"LUKSO Wagyu - 3rd screen",src:a(1131).Z,width:"1888",height:"1430"})),(0,o.kt)("p",null,"Select a folder where to save the keys."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"LUKSO Wagyu - 4th screen",src:a(5421).Z,width:"1886",height:"1424"})),(0,o.kt)("p",null,"Wait for the keys to be generated."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"LUKSO Wagyu - 5th screen",src:a(8058).Z,width:"1888",height:"1426"})),(0,o.kt)("p",null,"And you are done! You will find your keys in the folder you selected."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"LUKSO Wagyu - 6th screen",src:a(8613).Z,width:"1886",height:"1430"})),(0,o.kt)("p",null,"You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udca1 ",(0,o.kt)("em",{parentName:"p"},(0,o.kt)("inlineCode",{parentName:"em"},"Want to learn more about Ethereum keys and key generation?")),"\ud83d\udca1",(0,o.kt)("a",{parentName:"p",href:"https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/keys/#two-types-of-keys"},"Learn more"))),(0,o.kt)("p",null,"Now that you\u2019ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer LUKSO, the package that you installed during step 1."),(0,o.kt)("p",null,"Return to the Dappnode UI and navigate to the Stakers > LUKSO menu. Your Web3Signer will have a link saying ",(0,o.kt)("inlineCode",{parentName:"p"},"Upload Keystores")," . If it doesn\u2019t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page."),(0,o.kt)("p",null,"Then click on the ",(0,o.kt)("inlineCode",{parentName:"p"},"Import Keystores")," button on the lower part of the Web3Signer LUKSO UI."),(0,o.kt)("p",null,"Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores."),(0,o.kt)("p",null,"You are now ready to fund these validator accounts and start validating in LUKSO!"),(0,o.kt)("h2",{id:"3-deposit-lyx-into-the-lukso-deposit-contract"},"3: Deposit LYX into the LUKSO deposit contract"),(0,o.kt)("p",null,"The final step is to fund your validator with the 32 LYX necessary to register as a validator and start receiving validation work!"),(0,o.kt)("p",null,"To do this, you will need to send 32 LYX to the LUKSO deposit contract. We will be using the official LUKSO launchpad for this."),(0,o.kt)("p",null,"Navigate to ",(0,o.kt)("a",{parentName:"p",href:"https://deposit.mainnet.lukso.network/en/"},"the LUKSO launchpad")),(0,o.kt)("p",null,"Read all the advisories... they contain important information that will help you understand the whole process!"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"LUKSO Launchpad 1",src:a(5773).Z,width:"2218",height:"1460"})),(0,o.kt)("p",null,"Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"LUKSO Launchpad 2",src:a(8846).Z,width:"2878",height:"1480"})),(0,o.kt)("p",null,'We continue until the "Upload Deposit Data" section.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"LUKSO Launchpad 3",src:a(8257).Z,width:"2602",height:"1502"})),(0,o.kt)("p",null,"Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called ",(0,o.kt)("inlineCode",{parentName:"p"},"deposit_data-*.json")),(0,o.kt)("p",null,"The moment to do the deposit is here! Connect your wallet with the 32 LYX and ",(0,o.kt)("a",{parentName:"p",href:"https://chainlist.org/chain/42"},"make sure")," you're in the LUKSO network."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"LUKSO Launchpad 4",src:a(6135).Z,width:"2602",height:"1502"})),(0,o.kt)("p",null,"And follow the steps to send the 32 LYX to the deposit contract!"),(0,o.kt)("admonition",{type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"Please review your deposit address! MAKE SURE YOU ARE SENDING THE 32 LYX TO THE RIGHT DEPOSIT ADDRESS!")),(0,o.kt)("p",null,"After the deposit is done, you will be able to check the progress of your deposit by searching for your validator key in the ",(0,o.kt)("a",{parentName:"p",href:"https://explorer.consensus.mainnet.lukso.network/"},"LUKSO Consensus Explorer"),". You can get a direct link to this by clicking on the ",(0,o.kt)("inlineCode",{parentName:"p"},"View in Beaconcha.in")," button in the upper, right corner of the Dappnode Web3signer LUKSO UI, where you uploaded the keystores"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"LUKSO Web3Signer",src:a(1952).Z,width:"2822",height:"1398"})),(0,o.kt)("h2",{id:"3-adding-a-withdrawal-address-to-your-lukso-validator"},"3. Adding a Withdrawal Address to your LUKSO validator"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This step is only necessary if your validator doesn't have a withdrawal address configured. In the ",(0,o.kt)("a",{parentName:"p",href:"https://explorer.consensus.mainnet.lukso.network/"},"consensus explorer"),", it shows as an address that starts with a ",(0,o.kt)("inlineCode",{parentName:"p"},"0x00")," and needs to be upgraded to a ",(0,o.kt)("inlineCode",{parentName:"p"},"0x01"),". If your validator already shows a ",(0,o.kt)("inlineCode",{parentName:"p"},"0x01")," address, you DON'T need to follow these steps.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Step 1"),": Open the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/lukso-network/tools-wagyu-key-gen/releases"},"LUKSO Wagyu Keygen tool"),' and click "Use existing recovery phrase", then you\'ll need to select "Generate your BLS to Execution change" option. Type in your seed phrase and follow the steps to generate a JSON file you\'ll need in step 3. Make sure you are offline during this step!'),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Step 2"),": You'll have to locate your LUKSO consensus client's container IP. If you're using Prysm, you can find it ",(0,o.kt)("a",{parentName:"p",href:"http://my.dappnode/packages/my/prysm-lukso.dnp.dappnode.eth/network"},"here")," under the service box in the upper part, and if you're using Teku, you'll be able to find it ",(0,o.kt)("a",{parentName:"p",href:"http://my.dappnode/packages/my/teku-lukso.dnp.dappnode.eth/network"},"here")," in the same location."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Step 3"),": Open a terminal window where you'll need to input:\n",(0,o.kt)("inlineCode",{parentName:"p"},"curl -X 'POST' \\\n '<node-url>/eth/v1/beacon/pool/bls_to_execution_changes' \\\n -H 'accept: */*' \\\n -H 'Content-Type: application/json' \\\n -d '<post-request-content>'"),"\nWhere ",(0,o.kt)("inlineCode",{parentName:"p"},"<node-url>")," is your LUKSO consensus client's container IP, and ",(0,o.kt)("inlineCode",{parentName:"p"},"<post-request-content>")," the JSON file you generated in step 1."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Step 4"),": After successfully broadcasting the message, check your validator in the ",(0,o.kt)("a",{parentName:"p",href:"https://explorer.consensus.mainnet.lukso.network/"},"LUKSO Consensus Explorer"),", where you should now be able to see a ",(0,o.kt)("inlineCode",{parentName:"p"},"0x01")," withdrawal address."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Remember"),": Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions."))}h.isMDXComponent=!0},5773:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/lukso-launchpad1-feee8e797237cfdda9065a0778c87e82.png"},8846:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/lukso-launchpad2-a06471841b30d5377c567417d618aa98.png"},8257:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/lukso-launchpad3-bca6aef08176b4d71d978494ad6c947e.png"},6135:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/lukso-launchpad4-fda4750d49c92053aff1fe0e3a0a02f2.png"},5542:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/lukso-staking-screenshot-605e7ed6329f5a73b11a6b8cc4015c9c.png"},6583:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/lukso-wagyu1-e38f326b1d87e8192b3cfe2193d5c8ed.png"},9862:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/lukso-wagyu2-118e3f6a51c4c39294effac0a4a6afe3.png"},1952:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/lukso-web3signer-31c35566a88612cb0658f7eade5b358a.png"},1131:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/wagyu4-0673a83463eb844993339ecfdcc59b41.png"},5421:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/wagyu5-644261c1588e13ba1177d70aef9ecf19.png"},8058:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/wagyu6-d5538d2bbd5a01f47d94c6c5b29b3abf.png"},8613:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/wagyu7-8c346a2c9519b98a530d1005a69247f2.png"}}]); \ No newline at end of file diff --git a/assets/js/d47e1b16.5f6576f1.js b/assets/js/d47e1b16.5f6576f1.js new file mode 100644 index 000000000..d77020b29 --- /dev/null +++ b/assets/js/d47e1b16.5f6576f1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9739],{3453:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>s,contentTitle:()=>r,default:()=>l,frontMatter:()=>a,metadata:()=>c,toc:()=>d});var t=o(5893),i=o(1151);const a={},r="Bitcoin",c={id:"user/packages/bitcoin",title:"Bitcoin",description:"Exploring Bitcoin: The Pioneer of Cryptocurrency",source:"@site/docs/user/packages/bitcoin.md",sourceDirName:"user/packages",slug:"/user/packages/bitcoin",permalink:"/docs/user/packages/bitcoin",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/bitcoin.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Dappnode Monitoring Service (DMS)",permalink:"/docs/user/packages/dms"},next:{title:"Ethereum Classic",permalink:"/docs/user/packages/ethclassic"}},s={},d=[{value:"Exploring Bitcoin: The Pioneer of Cryptocurrency",id:"exploring-bitcoin-the-pioneer-of-cryptocurrency",level:2},{value:"Running a Bitcoin Node on Dappnode and Supporting the Network",id:"running-a-bitcoin-node-on-dappnode-and-supporting-the-network",level:2},{value:"Bitcoin\u2019s Role in Decentralization: A Decade of Innovation",id:"bitcoins-role-in-decentralization-a-decade-of-innovation",level:2}];function p(e){const n={h1:"h1",h2:"h2",p:"p",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"bitcoin",children:"Bitcoin"}),"\n",(0,t.jsx)(n.h2,{id:"exploring-bitcoin-the-pioneer-of-cryptocurrency",children:"Exploring Bitcoin: The Pioneer of Cryptocurrency"}),"\n",(0,t.jsx)(n.p,{children:"Bitcoin, the first and most well-known cryptocurrency, is a digital asset that introduced the concept of blockchain technology to the world. Created by an anonymous person or group under the pseudonym Satoshi Nakamoto, Bitcoin revolutionized the financial landscape by offering a decentralized and borderless form of value transfer."}),"\n",(0,t.jsx)(n.h2,{id:"running-a-bitcoin-node-on-dappnode-and-supporting-the-network",children:"Running a Bitcoin Node on Dappnode and Supporting the Network"}),"\n",(0,t.jsx)(n.p,{children:"Running a Bitcoin node on Dappnode allows you to actively participate in the Bitcoin network\u2019s operations. As a node operator, you help validate transactions, maintain a copy of the blockchain, and contribute to the network\u2019s overall security and resilience. Operating a Bitcoin node not only benefits the network by enhancing its decentralization but also provides you with an opportunity to engage with the technology that powers the cryptocurrency revolution."}),"\n",(0,t.jsx)(n.h2,{id:"bitcoins-role-in-decentralization-a-decade-of-innovation",children:"Bitcoin\u2019s Role in Decentralization: A Decade of Innovation"}),"\n",(0,t.jsx)(n.p,{children:"Bitcoin\u2019s journey over the past decade has been marked by remarkable advancements and widespread adoption. As the original cryptocurrency, Bitcoin has demonstrated the potential of blockchain technology to disrupt traditional financial systems. Its decentralized nature, limited supply, and transparent ledger have positioned it as a store of value and a medium of exchange. By running a Bitcoin node on Dappnode, you contribute to the continued success and decentralization of the Bitcoin network."})]})}function l(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>c,a:()=>r});var t=o(7294);const i={},a=t.createContext(i);function r(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(i):e.components||i:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d47e1b16.bd0b4ce3.js b/assets/js/d47e1b16.bd0b4ce3.js deleted file mode 100644 index 6e3171e78..000000000 --- a/assets/js/d47e1b16.bd0b4ce3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9739],{4137:(e,n,t)=>{t.d(n,{Zo:()=>l,kt:()=>f});var o=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function a(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?i(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):i(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function c(e,n){if(null==e)return{};var t,o,r=function(e,n){if(null==e)return{};var t,o,r={},i=Object.keys(e);for(o=0;o<i.length;o++)t=i[o],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++)t=i[o],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var p=o.createContext({}),s=function(e){var n=o.useContext(p),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},l=function(e){var n=s(e.components);return o.createElement(p.Provider,{value:n},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},y=o.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,l=c(e,["components","mdxType","originalType","parentName"]),d=s(t),y=r,f=d["".concat(p,".").concat(y)]||d[y]||u[y]||i;return t?o.createElement(f,a(a({ref:n},l),{},{components:t})):o.createElement(f,a({ref:n},l))}));function f(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,a=new Array(i);a[0]=y;var c={};for(var p in n)hasOwnProperty.call(n,p)&&(c[p]=n[p]);c.originalType=e,c[d]="string"==typeof e?e:r,a[1]=c;for(var s=2;s<i;s++)a[s]=t[s];return o.createElement.apply(null,a)}return o.createElement.apply(null,t)}y.displayName="MDXCreateElement"},4001:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>p,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>c,toc:()=>s});var o=t(7462),r=(t(7294),t(4137));const i={},a="Bitcoin",c={unversionedId:"user/packages/bitcoin",id:"user/packages/bitcoin",title:"Bitcoin",description:"Exploring Bitcoin: The Pioneer of Cryptocurrency",source:"@site/docs/user/packages/bitcoin.md",sourceDirName:"user/packages",slug:"/user/packages/bitcoin",permalink:"/docs/user/packages/bitcoin",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/bitcoin.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Dappnode Monitoring Service (DMS)",permalink:"/docs/user/packages/dms"},next:{title:"Ethereum Classic",permalink:"/docs/user/packages/ethclassic"}},p={},s=[{value:"Exploring Bitcoin: The Pioneer of Cryptocurrency",id:"exploring-bitcoin-the-pioneer-of-cryptocurrency",level:2},{value:"Running a Bitcoin Node on Dappnode and Supporting the Network",id:"running-a-bitcoin-node-on-dappnode-and-supporting-the-network",level:2},{value:"Bitcoin\u2019s Role in Decentralization: A Decade of Innovation",id:"bitcoins-role-in-decentralization-a-decade-of-innovation",level:2}],l={toc:s},d="wrapper";function u(e){let{components:n,...t}=e;return(0,r.kt)(d,(0,o.Z)({},l,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"bitcoin"},"Bitcoin"),(0,r.kt)("h2",{id:"exploring-bitcoin-the-pioneer-of-cryptocurrency"},"Exploring Bitcoin: The Pioneer of Cryptocurrency"),(0,r.kt)("p",null,"Bitcoin, the first and most well-known cryptocurrency, is a digital asset that introduced the concept of blockchain technology to the world. Created by an anonymous person or group under the pseudonym Satoshi Nakamoto, Bitcoin revolutionized the financial landscape by offering a decentralized and borderless form of value transfer."),(0,r.kt)("h2",{id:"running-a-bitcoin-node-on-dappnode-and-supporting-the-network"},"Running a Bitcoin Node on Dappnode and Supporting the Network"),(0,r.kt)("p",null,"Running a Bitcoin node on Dappnode allows you to actively participate in the Bitcoin network\u2019s operations. As a node operator, you help validate transactions, maintain a copy of the blockchain, and contribute to the network\u2019s overall security and resilience. Operating a Bitcoin node not only benefits the network by enhancing its decentralization but also provides you with an opportunity to engage with the technology that powers the cryptocurrency revolution."),(0,r.kt)("h2",{id:"bitcoins-role-in-decentralization-a-decade-of-innovation"},"Bitcoin\u2019s Role in Decentralization: A Decade of Innovation"),(0,r.kt)("p",null,"Bitcoin\u2019s journey over the past decade has been marked by remarkable advancements and widespread adoption. As the original cryptocurrency, Bitcoin has demonstrated the potential of blockchain technology to disrupt traditional financial systems. Its decentralized nature, limited supply, and transparent ledger have positioned it as a store of value and a medium of exchange. By running a Bitcoin node on Dappnode, you contribute to the continued success and decentralization of the Bitcoin network."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d508510a.12aa7031.js b/assets/js/d508510a.12aa7031.js new file mode 100644 index 000000000..b5a210012 --- /dev/null +++ b/assets/js/d508510a.12aa7031.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2245],{9065:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>a,contentTitle:()=>r,default:()=>l,frontMatter:()=>s,metadata:()=>d,toc:()=>u});var t=n(5893),i=n(1151);const s={},r="Videos and Tutorials",d={id:"user/videos-and-tutorials/overview",title:"Videos and Tutorials",description:"Welcome to the Videos and Tutorials section! Here, you'll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you're a beginner or an advanced user, there's something here for everyone.",source:"@site/docs/user/videos-and-tutorials/overview.md",sourceDirName:"user/videos-and-tutorials",slug:"/user/videos-and-tutorials/overview",permalink:"/docs/user/videos-and-tutorials/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/overview.md",tags:[],version:"current",frontMatter:{}},a={},u=[{value:"Tutorial docs",id:"tutorial-docs",level:2},{value:"Dappnode Driving School",id:"dappnode-driving-school",level:2},{value:"I. Initial Dappnode Setup",id:"i-initial-dappnode-setup",level:3},{value:"II. Configuring your Dappnode",id:"ii-configuring-your-dappnode",level:3},{value:"III. Dappnode Troubleshooting",id:"iii-dappnode-troubleshooting",level:3}];function p(e){const o={a:"a",h1:"h1",h2:"h2",h3:"h3",p:"p",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"videos-and-tutorials",children:"Videos and Tutorials"}),"\n",(0,t.jsx)(o.p,{children:"Welcome to the Videos and Tutorials section! Here, you'll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you're a beginner or an advanced user, there's something here for everyone."}),"\n",(0,t.jsx)(o.h2,{id:"tutorial-docs",children:"Tutorial docs"}),"\n",(0,t.jsx)(o.p,{children:"In this section, you will find comprehensive written guides that provide step-by-step instructions on various topics related to Dappnode. These documents are a valuable resource for anyone looking to deepen their understanding and enhance their Dappnode experience."}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udd17 ",(0,t.jsx)(o.a,{href:"/docs/user/videos-and-tutorials/guides/connect-node",children:"How to connect a wallet to my node"})]}),"\n",(0,t.jsx)(o.h2,{id:"dappnode-driving-school",children:"Dappnode Driving School"}),"\n",(0,t.jsxs)(o.p,{children:["The Dappnode Driving School is a set of video tutorials that will help you understand the basics about setting up your Dappnode for the first time. These videos are made for newcommers and non-technical users, but if you have questions don't hesitate to drop by our ",(0,t.jsx)(o.a,{href:"https://discord.gg/dappnode",children:"Dappnode Discord Community"}),", where the community will be happy to provide as much help as you need."]}),"\n",(0,t.jsx)(o.h3,{id:"i-initial-dappnode-setup",children:"I. Initial Dappnode Setup"}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udda5\ufe0f ",(0,t.jsx)(o.a,{href:"https://youtu.be/lh5hADm1Iuk",children:"Booting from the Dappnode ISO"})]}),"\n",(0,t.jsxs)(o.p,{children:["\ud83c\udf10 ",(0,t.jsx)(o.a,{href:"https://youtu.be/Z1uDv_J7wlg",children:"Accessing the Dappnode User Interface (UI)/Dashboard"})]}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udd12 ",(0,t.jsx)(o.a,{href:"https://youtu.be/TZUK39yiZ30",children:"Setting up Dappnode Security"})]}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udd17 ",(0,t.jsx)(o.a,{href:"https://youtu.be/qB0sMaNpXpU",children:"Configuring your Dappnode VPN"})]}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udd04 ",(0,t.jsx)(o.a,{href:"https://youtu.be/zJowD3X-MUc",children:"Syncing your clients/An overview on node running"})]}),"\n",(0,t.jsxs)(o.p,{children:["\ud83d\udcbe ",(0,t.jsx)(o.a,{href:"https://youtu.be/1GW-GbGKs7o",children:"Understanding your Dappnode's Hardware"})]}),"\n",(0,t.jsx)(o.h3,{id:"ii-configuring-your-dappnode",children:"II. Configuring your Dappnode"}),"\n",(0,t.jsx)(o.p,{children:"\ud83d\udee0\ufe0f Coming soon..."}),"\n",(0,t.jsx)(o.h3,{id:"iii-dappnode-troubleshooting",children:"III. Dappnode Troubleshooting"}),"\n",(0,t.jsx)(o.p,{children:"\ud83d\udd27 Coming soon..."})]})}function l(e={}){const{wrapper:o}={...(0,i.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},1151:(e,o,n)=>{n.d(o,{Z:()=>d,a:()=>r});var t=n(7294);const i={},s=t.createContext(i);function r(e){const o=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),t.createElement(s.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d508510a.208ba570.js b/assets/js/d508510a.208ba570.js deleted file mode 100644 index 43ded191f..000000000 --- a/assets/js/d508510a.208ba570.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2245],{4137:(e,t,o)=>{o.d(t,{Zo:()=>s,kt:()=>f});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function a(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?i(Object(o),!0).forEach((function(t){r(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):i(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function p(e,t){if(null==e)return{};var o,n,r=function(e,t){if(null==e)return{};var o,n,r={},i=Object.keys(e);for(n=0;n<i.length;n++)o=i[n],t.indexOf(o)>=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)o=i[n],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var u=n.createContext({}),d=function(e){var t=n.useContext(u),o=t;return e&&(o="function"==typeof e?e(t):a(a({},t),e)),o},s=function(e){var t=d(e.components);return n.createElement(u.Provider,{value:t},e.children)},l="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,i=e.originalType,u=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),l=d(o),h=r,f=l["".concat(u,".").concat(h)]||l[h]||c[h]||i;return o?n.createElement(f,a(a({ref:t},s),{},{components:o})):n.createElement(f,a({ref:t},s))}));function f(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=o.length,a=new Array(i);a[0]=h;var p={};for(var u in t)hasOwnProperty.call(t,u)&&(p[u]=t[u]);p.originalType=e,p[l]="string"==typeof e?e:r,a[1]=p;for(var d=2;d<i;d++)a[d]=o[d];return n.createElement.apply(null,a)}return n.createElement.apply(null,o)}h.displayName="MDXCreateElement"},3599:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>u,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>p,toc:()=>d});var n=o(7462),r=(o(7294),o(4137));const i={},a="Videos and Tutorials",p={unversionedId:"user/videos-and-tutorials/overview",id:"user/videos-and-tutorials/overview",title:"Videos and Tutorials",description:"Welcome to the Videos and Tutorials section! Here, you'll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you're a beginner or an advanced user, there's something here for everyone.",source:"@site/docs/user/videos-and-tutorials/overview.md",sourceDirName:"user/videos-and-tutorials",slug:"/user/videos-and-tutorials/overview",permalink:"/docs/user/videos-and-tutorials/overview",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/overview.md",tags:[],version:"current",frontMatter:{}},u={},d=[{value:"Tutorial docs",id:"tutorial-docs",level:2},{value:"Dappnode Driving School",id:"dappnode-driving-school",level:2},{value:"I. Initial Dappnode Setup",id:"i-initial-dappnode-setup",level:3},{value:"II. Configuring your Dappnode",id:"ii-configuring-your-dappnode",level:3},{value:"III. Dappnode Troubleshooting",id:"iii-dappnode-troubleshooting",level:3}],s={toc:d},l="wrapper";function c(e){let{components:t,...o}=e;return(0,r.kt)(l,(0,n.Z)({},s,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"videos-and-tutorials"},"Videos and Tutorials"),(0,r.kt)("p",null,"Welcome to the Videos and Tutorials section! Here, you'll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you're a beginner or an advanced user, there's something here for everyone."),(0,r.kt)("h2",{id:"tutorial-docs"},"Tutorial docs"),(0,r.kt)("p",null,"In this section, you will find comprehensive written guides that provide step-by-step instructions on various topics related to Dappnode. These documents are a valuable resource for anyone looking to deepen their understanding and enhance their Dappnode experience."),(0,r.kt)("p",null,"\ud83d\udd17 ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/videos-and-tutorials/guides/connect-node"},"How to connect a wallet to my node")),(0,r.kt)("h2",{id:"dappnode-driving-school"},"Dappnode Driving School"),(0,r.kt)("p",null,"The Dappnode Driving School is a set of video tutorials that will help you understand the basics about setting up your Dappnode for the first time. These videos are made for newcommers and non-technical users, but if you have questions don't hesitate to drop by our ",(0,r.kt)("a",{parentName:"p",href:"https://discord.gg/dappnode"},"Dappnode Discord Community"),", where the community will be happy to provide as much help as you need."),(0,r.kt)("h3",{id:"i-initial-dappnode-setup"},"I. Initial Dappnode Setup"),(0,r.kt)("p",null,"\ud83d\udda5\ufe0f ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/lh5hADm1Iuk"},"Booting from the Dappnode ISO")),(0,r.kt)("p",null,"\ud83c\udf10 ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/Z1uDv_J7wlg"},"Accessing the Dappnode User Interface (UI)/Dashboard")),(0,r.kt)("p",null,"\ud83d\udd12 ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/TZUK39yiZ30"},"Setting up Dappnode Security")),(0,r.kt)("p",null,"\ud83d\udd17 ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/qB0sMaNpXpU"},"Configuring your Dappnode VPN")),(0,r.kt)("p",null,"\ud83d\udd04 ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/zJowD3X-MUc"},"Syncing your clients/An overview on node running")),(0,r.kt)("p",null,"\ud83d\udcbe ",(0,r.kt)("a",{parentName:"p",href:"https://youtu.be/1GW-GbGKs7o"},"Understanding your Dappnode's Hardware")),(0,r.kt)("h3",{id:"ii-configuring-your-dappnode"},"II. Configuring your Dappnode"),(0,r.kt)("p",null,"\ud83d\udee0\ufe0f Coming soon..."),(0,r.kt)("h3",{id:"iii-dappnode-troubleshooting"},"III. Dappnode Troubleshooting"),(0,r.kt)("p",null,"\ud83d\udd27 Coming soon..."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d61c7726.a1dc1a69.js b/assets/js/d61c7726.a1dc1a69.js new file mode 100644 index 000000000..8a9946587 --- /dev/null +++ b/assets/js/d61c7726.a1dc1a69.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5940],{2546:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>a,toc:()=>o});var t=s(5893),d=s(1151);const r={},i="Install - ARM",a={id:"user/install/arm",title:"Install - ARM",description:"Hardware Recommendations",source:"@site/docs/user/install/arm.md",sourceDirName:"user/install",slug:"/user/install/arm",permalink:"/docs/user/install/arm",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/arm.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Script installation",permalink:"/docs/user/install/script"},next:{title:"Dappnode commands",permalink:"/docs/user/install/dappnode-commands"}},l={},o=[{value:"Hardware Recommendations",id:"hardware-recommendations",level:2},{value:"Install Dappnode via Script",id:"install-dappnode-via-script",level:2},{value:"Add an external SSD",id:"add-an-external-ssd",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,d.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"install---arm",children:"Install - ARM"}),"\n",(0,t.jsx)(n.h2,{id:"hardware-recommendations",children:"Hardware Recommendations"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"8 Gb RAM memory"}),"\n",(0,t.jsx)(n.li,{children:"Screen and keyboard (Only for the first installation)"}),"\n",(0,t.jsx)(n.li,{children:"Wired connection to the Dappnode"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"install-dappnode-via-script",children:"Install Dappnode via Script"}),"\n",(0,t.jsxs)(n.p,{children:["Follow the instructions you can find in ",(0,t.jsx)(n.a,{href:"/docs/user/install/script",children:"Script Installation"})]}),"\n",(0,t.jsx)(n.h2,{id:"add-an-external-ssd",children:"Add an external SSD"}),"\n",(0,t.jsx)(n.p,{children:"In case you have installed Dappnode in a Raspberry using a SD card and you want to add an external SSD you should mount docker data in it. To do this, follow the next steps:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Stop Docker service\n",(0,t.jsx)(n.code,{children:"systemctl stop docker"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Create a new mountpoint for docker data. As an example:\n",(0,t.jsx)(n.code,{children:"mkdir /data"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Add your partition on the new device to ",(0,t.jsx)(n.code,{children:"/etc/fstab"}),". You can identify its UUID using the ",(0,t.jsx)(n.code,{children:"blkid"})," tool. Make sure your device is properly partitioned first. Your line in ",(0,t.jsx)(n.code,{children:"/etc/fstab"})," should look like this:\n",(0,t.jsx)(n.code,{children:"UUID=b311b983-bda6-4e9f-835c-266d40d64f07 /data/ ext4 defaults 0 0"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Mount your SSD drive\n",(0,t.jsx)(n.code,{children:"mount /data"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Move docker data to the mountpoint\n",(0,t.jsx)(n.code,{children:"mv /var/lib/docker/* /data/"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Edit Docker settings to use the alternative location. Edit ",(0,t.jsx)(n.code,{children:"/etc/docker/daemon.json"})," as follows:"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-json",children:'{\n "data-root": "/data"\n}\n'})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Restart docker"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.code,{children:"systemctl start docker"})})]})}function p(e={}){const{wrapper:n}={...(0,d.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>i});var t=s(7294);const d={},r=t.createContext(d);function i(e){const n=t.useContext(r);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(d):e.components||d:i(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d61c7726.a8ea57dc.js b/assets/js/d61c7726.a8ea57dc.js deleted file mode 100644 index df82298c2..000000000 --- a/assets/js/d61c7726.a8ea57dc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5940],{4137:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function l(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),d=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},s=function(e){var t=d(e.components);return a.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),c=d(n),m=r,k=c["".concat(p,".").concat(m)]||c[m]||u[m]||o;return n?a.createElement(k,l(l({ref:t},s),{},{components:n})):a.createElement(k,l({ref:t},s))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,l=new Array(o);l[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[c]="string"==typeof e?e:r,l[1]=i;for(var d=2;d<o;d++)l[d]=n[d];return a.createElement.apply(null,l)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},6210:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var a=n(7462),r=(n(7294),n(4137));const o={},l="Install - ARM",i={unversionedId:"user/install/arm",id:"user/install/arm",title:"Install - ARM",description:"Hardware Recommendations",source:"@site/docs/user/install/arm.md",sourceDirName:"user/install",slug:"/user/install/arm",permalink:"/docs/user/install/arm",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/arm.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Script installation",permalink:"/docs/user/install/script"},next:{title:"Dappnode commands",permalink:"/docs/user/install/dappnode-commands"}},p={},d=[{value:"Hardware Recommendations",id:"hardware-recommendations",level:2},{value:"Install Dappnode via Script",id:"install-dappnode-via-script",level:2},{value:"Add an external SSD",id:"add-an-external-ssd",level:2}],s={toc:d},c="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(c,(0,a.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"install---arm"},"Install - ARM"),(0,r.kt)("h2",{id:"hardware-recommendations"},"Hardware Recommendations"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"8 Gb RAM memory"),(0,r.kt)("li",{parentName:"ul"},"Screen and keyboard (Only for the first installation)"),(0,r.kt)("li",{parentName:"ul"},"Wired connection to the Dappnode")),(0,r.kt)("h2",{id:"install-dappnode-via-script"},"Install Dappnode via Script"),(0,r.kt)("p",null,"Follow the instructions you can find in ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/install/script"},"Script Installation")),(0,r.kt)("h2",{id:"add-an-external-ssd"},"Add an external SSD"),(0,r.kt)("p",null,"In case you have installed Dappnode in a Raspberry using a SD card and you want to add an external SSD you should mount docker data in it. To do this, follow the next steps:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Stop Docker service\n",(0,r.kt)("inlineCode",{parentName:"p"},"systemctl stop docker"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Create a new mountpoint for docker data. As an example:\n",(0,r.kt)("inlineCode",{parentName:"p"},"mkdir /data"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Add your partition on the new device to ",(0,r.kt)("inlineCode",{parentName:"p"},"/etc/fstab"),". You can identify its UUID using the ",(0,r.kt)("inlineCode",{parentName:"p"},"blkid")," tool. Make sure your device is properly partitioned first. Your line in ",(0,r.kt)("inlineCode",{parentName:"p"},"/etc/fstab")," should look like this:\n",(0,r.kt)("inlineCode",{parentName:"p"},"UUID=b311b983-bda6-4e9f-835c-266d40d64f07 /data/ ext4 defaults 0 0"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Mount your SSD drive\n",(0,r.kt)("inlineCode",{parentName:"p"},"mount /data"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Move docker data to the mountpoint\n",(0,r.kt)("inlineCode",{parentName:"p"},"mv /var/lib/docker/* /data/"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Edit Docker settings to use the alternative location. Edit ",(0,r.kt)("inlineCode",{parentName:"p"},"/etc/docker/daemon.json")," as follows:"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-json"},'{\n "data-root": "/data"\n}\n')),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Restart docker")),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"systemctl start docker")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d6c02fb6.a772a398.js b/assets/js/d6c02fb6.a772a398.js deleted file mode 100644 index b5c2b46ba..000000000 --- a/assets/js/d6c02fb6.a772a398.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3633],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},d=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},h="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),h=p(n),c=o,m=h["".concat(l,".").concat(c)]||h[c]||u[c]||i;return n?a.createElement(m,r(r({ref:t},d),{},{components:n})):a.createElement(m,r({ref:t},d))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=c;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[h]="string"==typeof e?e:o,r[1]=s;for(var p=2;p<i;p++)r[p]=n[p];return a.createElement.apply(null,r)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},5758:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var a=n(7462),o=(n(7294),n(4137));const i={},r="Ethereum mainnet",s={unversionedId:"user/staking/ethereum/solo/mainnet",id:"user/staking/ethereum/solo/mainnet",title:"Ethereum mainnet",description:"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum's block production by staking ETH.",source:"@site/docs/user/staking/ethereum/solo/mainnet.md",sourceDirName:"user/staking/ethereum/solo",slug:"/user/staking/ethereum/solo/mainnet",permalink:"/docs/user/staking/ethereum/solo/mainnet",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/solo/mainnet.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Earn with Staking in Dappnode",permalink:"/docs/user/staking/overview"},next:{title:"Holesky Testnet",permalink:"/docs/user/staking/ethereum/solo/holesky"}},l={},p=[{value:"1. Install the necessary packages on Dappnode",id:"1-install-the-necessary-packages-on-dappnode",level:2},{value:"2. Creating the keys for your validator",id:"2-creating-the-keys-for-your-validator",level:2},{value:"3: Deposit ETH into the Ethereum deposit contract",id:"3-deposit-eth-into-the-ethereum-deposit-contract",level:2},{value:"Additional Opportunities: MEV Boost",id:"additional-opportunities-mev-boost",level:2},{value:"Withdrawing my ETH",id:"withdrawing-my-eth",level:2},{value:"Opening your Web3Signer UI.",id:"opening-your-web3signer-ui",level:3}],d={toc:p},h="wrapper";function u(e){let{components:t,...i}=e;return(0,o.kt)(h,(0,a.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"ethereum-mainnet"},"Ethereum mainnet"),(0,o.kt)("p",null,"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum's block production by staking ETH."),(0,o.kt)("p",null,"Dappnode simplifies your journey to becoming a ",(0,o.kt)("strong",{parentName:"p"},"Solo Staker")," and start earning. You will need to do 3 main tasks, broken down below:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Install the necessary packages on Dappnode"),(0,o.kt)("li",{parentName:"ol"},"Create validator keys"),(0,o.kt)("li",{parentName:"ol"},"Deposit ETH into the Ethereum deposit contract")),(0,o.kt)("h2",{id:"1-install-the-necessary-packages-on-dappnode"},"1. Install the necessary packages on Dappnode"),(0,o.kt)("p",null,"Dappnode makes it super simple to install everything you need to run a validator. Via the Stakers UI you will be able to install the following packages:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Stakers",src:n(3001).Z,width:"2072",height:"1618"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Execution Client")," (Choose one): Geth, Nethermind, Erigon, or Besu."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Consensus Client")," (Choose one): Prysm, Lighthouse, Teku, Nimbus, or Lodestar.")),(0,o.kt)("admonition",{title:"Choosing the right Execution Client",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Erigon is an execution client that focuses on retrieving and storing more data than the default options of other clients. This is useful to run historical queries or to use apps that require tracing/archive nodes like Otterscan or Trueblocks. Make sure you have at least 3 TB free in your hard drive to run Erigon.")),(0,o.kt)("admonition",{title:"Checkpoint Sync is your friend for syncing Consensus Clients",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},'Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.')),(0,o.kt)("p",null,"After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs."),(0,o.kt)("admonition",{title:"MEV BOOST",type:"info"},(0,o.kt)("p",{parentName:"admonition"},'MEV Boost is an extra piece of software not belonging to the core Ethereum stack. It allows your validator to receive blocks that have been created by special "block builders" that try to extract MEV from the network, and receive extra rewards for including them in the chain when it\'s your turn to propose a block. However, it is very new technology and can be risky to use.')),(0,o.kt)("h2",{id:"2-creating-the-keys-for-your-validator"},"2. Creating the keys for your validator"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This guide will use the Wagyu keygen tool to generate your validator keys. There are other options like a command-line tool by the Ethereum Foundation, but they are harder to use.")),(0,o.kt)("admonition",{title:"What are all these keys?",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udd12 ",(0,o.kt)("strong",{parentName:"p"},"Validator keys")," will be online (stored in your Dappnode) and signing the blocks of the chain. You will create them from a ",(0,o.kt)("strong",{parentName:"p"},"mnemonic phrase"),", which is important to keep safe as it's the only way to regenerate these validator keys if you lose them."),(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udee1\ufe0f The damage of getting your ",(0,o.kt)("strong",{parentName:"p"},"mnemonic phrase")," compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your ",(0,o.kt)("strong",{parentName:"p"},"mnemonic phrase"),". Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever."),(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udd11 ",(0,o.kt)("strong",{parentName:"p"},"Withdrawal address")," this brings us to the withdrawal address, which is the address that will receive all the balance above 32 ETH while your validator is active, and all your balance above 0 ETH when you exit the validator set. You need to keep this address safe as it's where your ETH will go, and cannot be changed.")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Download the latest release of the Wagyu Key Gen from ",(0,o.kt)("a",{parentName:"p",href:"https://wagyu.gg"},"here"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the program. You will be given 2 options, either create a new mnemonic or import an existing mnemonic, and you will be able to choose the network for which you are generating the keys. The GUI is very user friendly and explains all steps along the way."))),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Wagyu - 1st screen",src:n(8030).Z,width:"1882",height:"1422"}),"\n",(0,o.kt)("img",{alt:"Wagyu - 2nd screen",src:n(6948).Z,width:"1886",height:"1426"})),(0,o.kt)("p",null,"You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place."),(0,o.kt)("p",null,"To ensure that you have copied it somewhere, it will ask you to type it again."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Wagyu - 3rd screen",src:n(1749).Z,width:"1882",height:"1434"})),(0,o.kt)("p",null,"Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Wagyu - 4th screen",src:n(1131).Z,width:"1888",height:"1430"})),(0,o.kt)("p",null,"Select a folder where to save the keys"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Wagyu - 5th screen",src:n(5421).Z,width:"1886",height:"1424"})),(0,o.kt)("p",null,"Wait for the keys to be generated"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Wagyu - 6th screen",src:n(8058).Z,width:"1888",height:"1426"})),(0,o.kt)("p",null,"And you are done! You will find your keys in the folder you selected."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Wagyu - 7th screen",src:n(8613).Z,width:"1886",height:"1430"})),(0,o.kt)("p",null,"You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udca1 ",(0,o.kt)("em",{parentName:"p"},(0,o.kt)("inlineCode",{parentName:"em"},"Want to learn more about Ethereum keys and key generation?")),"\ud83d\udca1",(0,o.kt)("a",{parentName:"p",href:"https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/keys/#two-types-of-keys"},"Learn more"))),(0,o.kt)("p",null,"Now that you\u2019ve generated your deposit data and keystores, go ahead and upload your keystores to the Web3signer that you installed during step 1."),(0,o.kt)("p",null,"Return to the Dappnode UI and navigate to the Stakers > Ethereum menu. Your Web3Signer will have a link saying ",(0,o.kt)("inlineCode",{parentName:"p"},"Upload Keystores")," . If it doesn\u2019t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page."),(0,o.kt)("p",null,"Then click on the ",(0,o.kt)("inlineCode",{parentName:"p"},"Import Keystores")," button on the lower part of the Web3Signer UI."),(0,o.kt)("p",null,"Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores."),(0,o.kt)("p",null,"You are now ready to fund these validator accounts and start validating!"),(0,o.kt)("h2",{id:"3-deposit-eth-into-the-ethereum-deposit-contract"},"3: Deposit ETH into the Ethereum deposit contract"),(0,o.kt)("p",null,"The final step is to fund your validator with the 32 ETH necessary to register as a validator and start receiving validation work!"),(0,o.kt)("p",null,"To do this, you will need to send 32 ETH to the Ethereum deposit contract. We will be using the official Ethereum launchpad for this."),(0,o.kt)("p",null,"Navigate to ",(0,o.kt)("a",{parentName:"p",href:"https://launchpad.ethereum.org/"},"the launchpad")),(0,o.kt)("p",null,"Read all the advisories... they contain important information that will help you understand the whole process!"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Launchpad 1",src:n(7494).Z,width:"2154",height:"1704"})),(0,o.kt)("p",null,"Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Launchpad 2",src:n(4719).Z,width:"2226",height:"1504"})),(0,o.kt)("p",null,'We continue until the "Upload Deposit Data" section.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Launchpad 3",src:n(4407).Z,width:"2996",height:"1714"})),(0,o.kt)("p",null,"Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called ",(0,o.kt)("inlineCode",{parentName:"p"},"deposit_data-*.json")),(0,o.kt)("p",null,"The moment to do the deposit is here! Connect your wallet (yes, the one that has the 32 ETH!)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Launchpad 4",src:n(2208).Z,width:"2206",height:"1290"})),(0,o.kt)("p",null,"And follow the steps to send the 32 ETH to the deposit contract!"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Launchpad 5",src:n(9378).Z,width:"2168",height:"1310"})),(0,o.kt)("admonition",{type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"You will be prompted to review the deposit address in the next step. PLEASE DO SO! MAKE SURE YOU ARE SENDING THE 32 ETH TO THE RIGHT DEPOSIT ADDRESS!")),(0,o.kt)("p",null,"After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the ",(0,o.kt)("a",{parentName:"p",href:"https://beaconcha.in/"},"beaconcha.in")," explorer. You can get a direct link to this by clicking on the ",(0,o.kt)("inlineCode",{parentName:"p"},"View in Beaconcha.in")," button in the Dappnode Web3signer UI, where you uploaded the keystores."),(0,o.kt)("p",null,"[PENDING SCREENSHOT]"),(0,o.kt)("h2",{id:"additional-opportunities-mev-boost"},"Additional Opportunities: MEV Boost"),(0,o.kt)("p",null,"Considering MEV Boost? It allows your validator node to propose different relays when it's its turn. However, before diving in, a thorough understanding of the relays and any local regulations is paramount."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Remember"),": Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions."),(0,o.kt)("h2",{id:"withdrawing-my-eth"},"Withdrawing my ETH"),(0,o.kt)("p",null,"Once you want to finish your staking journey, you will need to withdraw your ETH from the Beacon Chain. This process consists of exiting the validator from the Dappnode UI."),(0,o.kt)("admonition",{title:"Ethereum withdrawals are state changes in the execution layer",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This means that once you reach the end of the Beacon Chain's exit queue, your 32 ETH will show up in your withdrawal address as a state change in the blockchain, and not as a deposit. You can find more info ",(0,o.kt)("a",{parentName:"p",href:"https://ethereum.org/en/staking/withdrawals/#exiting-staking-entirely"},"here"),".")),(0,o.kt)("h3",{id:"opening-your-web3signer-ui"},"Opening your Web3Signer UI."),(0,o.kt)("p",null,"Navigate to the Stakers > Ethereum menu and click on the ",(0,o.kt)("inlineCode",{parentName:"p"},"Upload Keystores")," button on the Web3Signer card.\nOnce you are in the Web3Signer UI, select the validators you want to exit and click on the ",(0,o.kt)("inlineCode",{parentName:"p"},"Exit Validator")," button on the top right part of the UI."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Ethereum Withdrawals",src:n(9192).Z,width:"1879",height:"562"})),(0,o.kt)("p",null,'Follow the instructions and type "I want to exit", followed by ',(0,o.kt)("inlineCode",{parentName:"p"},"Exit"),"."),(0,o.kt)("p",null,"Now the message to exit will be broadcasted to the network."),(0,o.kt)("admonition",{title:"Withdrawal queue",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the ",(0,o.kt)("a",{parentName:"p",href:"https://beaconcha.in/"},"Beacon Chain Explorer"),". Please be patient as the Beacon Chain exit queue can get long and wait times might take up to several weeks.")),(0,o.kt)("p",null,"Voil\xe0! Your ETH will appear on your withdrawal address!"))}u.isMDXComponent=!0},9192:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/ethereum-exit-validator-cbe5bd9d4de4ba3ec4c69d377062fe52.png"},3001:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/ethereum-staking-screenshot-d41fdd2a5a44f0e9e7f4094c41ea9e2d.png"},7494:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/launchpad1-a753b28ed2a802d489461a7c94e0c961.png"},4719:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/launchpad2-3e282073fa021d7180e64c524e0921b9.png"},4407:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/launchpad3-9bd7c8a0bc7f1c0f0d4e3112ae2eb9ce.png"},2208:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/launchpad4-94bbe5bce7aade2be65583c0ddae47a6.png"},9378:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/launchpad5-961c3c6447f15d0a12e87a8eb7c7d732.png"},8030:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/wagyu1-e570b05560adf66a1fe0d5c75961cf84.png"},6948:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/wagyu2-56f62ea0d459fc876917956e12a5310c.png"},1749:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/wagyu3-c924247c89934873bbccd3d4867afdce.png"},1131:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/wagyu4-0673a83463eb844993339ecfdcc59b41.png"},5421:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/wagyu5-644261c1588e13ba1177d70aef9ecf19.png"},8058:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/wagyu6-d5538d2bbd5a01f47d94c6c5b29b3abf.png"},8613:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/wagyu7-8c346a2c9519b98a530d1005a69247f2.png"}}]); \ No newline at end of file diff --git a/assets/js/d6c02fb6.fc75dd6d.js b/assets/js/d6c02fb6.fc75dd6d.js new file mode 100644 index 000000000..ef83cc26a --- /dev/null +++ b/assets/js/d6c02fb6.fc75dd6d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3633],{9745:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>h,contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var s=n(5893),i=n(1151);const o={},a="Ethereum mainnet",r={id:"user/staking/ethereum/solo/mainnet",title:"Ethereum mainnet",description:"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum's block production by staking ETH.",source:"@site/docs/user/staking/ethereum/solo/mainnet.md",sourceDirName:"user/staking/ethereum/solo",slug:"/user/staking/ethereum/solo/mainnet",permalink:"/docs/user/staking/ethereum/solo/mainnet",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/solo/mainnet.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Earn with Staking in Dappnode",permalink:"/docs/user/staking/overview"},next:{title:"Holesky Testnet",permalink:"/docs/user/staking/ethereum/solo/holesky"}},h={},d=[{value:"1. Install the necessary packages on Dappnode",id:"1-install-the-necessary-packages-on-dappnode",level:2},{value:"2. Creating the keys for your validator",id:"2-creating-the-keys-for-your-validator",level:2},{value:"3: Deposit ETH into the Ethereum deposit contract",id:"3-deposit-eth-into-the-ethereum-deposit-contract",level:2},{value:"Additional Opportunities: MEV Boost",id:"additional-opportunities-mev-boost",level:2},{value:"Withdrawing my ETH",id:"withdrawing-my-eth",level:2},{value:"Opening your Web3Signer UI.",id:"opening-your-web3signer-ui",level:3}];function l(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"ethereum-mainnet",children:"Ethereum mainnet"}),"\n",(0,s.jsx)(t.p,{children:"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum's block production by staking ETH."}),"\n",(0,s.jsxs)(t.p,{children:["Dappnode simplifies your journey to becoming a ",(0,s.jsx)(t.strong,{children:"Solo Staker"})," and start earning. You will need to do 3 main tasks, broken down below:"]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsx)(t.li,{children:"Install the necessary packages on Dappnode"}),"\n",(0,s.jsx)(t.li,{children:"Create validator keys"}),"\n",(0,s.jsx)(t.li,{children:"Deposit ETH into the Ethereum deposit contract"}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"1-install-the-necessary-packages-on-dappnode",children:"1. Install the necessary packages on Dappnode"}),"\n",(0,s.jsx)(t.p,{children:"Dappnode makes it super simple to install everything you need to run a validator. Via the Stakers UI you will be able to install the following packages:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Stakers",src:n(3001).Z+"",width:"2072",height:"1618"})}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Execution Client"})," (Choose one): Geth, Nethermind, Erigon, or Besu."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Consensus Client"})," (Choose one): Prysm, Lighthouse, Teku, Nimbus, or Lodestar."]}),"\n"]}),"\n",(0,s.jsx)(t.admonition,{title:"Choosing the right Execution Client",type:"caution",children:(0,s.jsx)(t.p,{children:"Erigon is an execution client that focuses on retrieving and storing more data than the default options of other clients. This is useful to run historical queries or to use apps that require tracing/archive nodes like Otterscan or Trueblocks. Make sure you have at least 3 TB free in your hard drive to run Erigon."})}),"\n",(0,s.jsx)(t.admonition,{title:"Checkpoint Sync is your friend for syncing Consensus Clients",type:"tip",children:(0,s.jsx)(t.p,{children:'Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.'})}),"\n",(0,s.jsx)(t.p,{children:"After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs."}),"\n",(0,s.jsx)(t.admonition,{title:"MEV BOOST",type:"info",children:(0,s.jsx)(t.p,{children:'MEV Boost is an extra piece of software not belonging to the core Ethereum stack. It allows your validator to receive blocks that have been created by special "block builders" that try to extract MEV from the network, and receive extra rewards for including them in the chain when it\'s your turn to propose a block. However, it is very new technology and can be risky to use.'})}),"\n",(0,s.jsx)(t.h2,{id:"2-creating-the-keys-for-your-validator",children:"2. Creating the keys for your validator"}),"\n",(0,s.jsx)(t.admonition,{type:"info",children:(0,s.jsx)(t.p,{children:"This guide will use the Wagyu keygen tool to generate your validator keys. There are other options like a command-line tool by the Ethereum Foundation, but they are harder to use."})}),"\n",(0,s.jsxs)(t.admonition,{title:"What are all these keys?",type:"caution",children:[(0,s.jsxs)(t.p,{children:["\ud83d\udd12 ",(0,s.jsx)(t.strong,{children:"Validator keys"})," will be online (stored in your Dappnode) and signing the blocks of the chain. You will create them from a ",(0,s.jsx)(t.strong,{children:"mnemonic phrase"}),", which is important to keep safe as it's the only way to regenerate these validator keys if you lose them."]}),(0,s.jsxs)(t.p,{children:["\ud83d\udee1\ufe0f The damage of getting your ",(0,s.jsx)(t.strong,{children:"mnemonic phrase"})," compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your ",(0,s.jsx)(t.strong,{children:"mnemonic phrase"}),". Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever."]}),(0,s.jsxs)(t.p,{children:["\ud83d\udd11 ",(0,s.jsx)(t.strong,{children:"Withdrawal address"})," this brings us to the withdrawal address, which is the address that will receive all the balance above 32 ETH while your validator is active, and all your balance above 0 ETH when you exit the validator set. You need to keep this address safe as it's where your ETH will go, and cannot be changed."]})]}),"\n",(0,s.jsxs)(t.ol,{children:["\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsxs)(t.p,{children:["Download the latest release of the Wagyu Key Gen from ",(0,s.jsx)(t.a,{href:"https://wagyu.gg",children:"here"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(t.li,{children:["\n",(0,s.jsx)(t.p,{children:"Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the program. You will be given 2 options, either create a new mnemonic or import an existing mnemonic, and you will be able to choose the network for which you are generating the keys. The GUI is very user friendly and explains all steps along the way."}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.img,{alt:"Wagyu - 1st screen",src:n(8030).Z+"",width:"1882",height:"1422"}),"\n",(0,s.jsx)(t.img,{alt:"Wagyu - 2nd screen",src:n(6948).Z+"",width:"1886",height:"1426"})]}),"\n",(0,s.jsx)(t.p,{children:"You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place."}),"\n",(0,s.jsx)(t.p,{children:"To ensure that you have copied it somewhere, it will ask you to type it again."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Wagyu - 3rd screen",src:n(1749).Z+"",width:"1882",height:"1434"})}),"\n",(0,s.jsx)(t.p,{children:"Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Wagyu - 4th screen",src:n(1131).Z+"",width:"1888",height:"1430"})}),"\n",(0,s.jsx)(t.p,{children:"Select a folder where to save the keys"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Wagyu - 5th screen",src:n(5421).Z+"",width:"1886",height:"1424"})}),"\n",(0,s.jsx)(t.p,{children:"Wait for the keys to be generated"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Wagyu - 6th screen",src:n(8058).Z+"",width:"1888",height:"1426"})}),"\n",(0,s.jsx)(t.p,{children:"And you are done! You will find your keys in the folder you selected."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Wagyu - 7th screen",src:n(8613).Z+"",width:"1886",height:"1430"})}),"\n",(0,s.jsx)(t.p,{children:"You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page."}),"\n",(0,s.jsx)(t.admonition,{type:"tip",children:(0,s.jsxs)(t.p,{children:["\ud83d\udca1 *",(0,s.jsx)(t.code,{children:"Want to learn more about Ethereum keys and key generation?"}),"*\ud83d\udca1",(0,s.jsx)(t.a,{href:"https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/keys/#two-types-of-keys",children:"Learn more"})]})}),"\n",(0,s.jsx)(t.p,{children:"Now that you\u2019ve generated your deposit data and keystores, go ahead and upload your keystores to the Web3signer that you installed during step 1."}),"\n",(0,s.jsxs)(t.p,{children:["Return to the Dappnode UI and navigate to the Stakers > Ethereum menu. Your Web3Signer will have a link saying ",(0,s.jsx)(t.code,{children:"Upload Keystores"})," . If it doesn\u2019t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page."]}),"\n",(0,s.jsxs)(t.p,{children:["Then click on the ",(0,s.jsx)(t.code,{children:"Import Keystores"})," button on the lower part of the Web3Signer UI."]}),"\n",(0,s.jsx)(t.p,{children:"Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores."}),"\n",(0,s.jsx)(t.p,{children:"You are now ready to fund these validator accounts and start validating!"}),"\n",(0,s.jsx)(t.h2,{id:"3-deposit-eth-into-the-ethereum-deposit-contract",children:"3: Deposit ETH into the Ethereum deposit contract"}),"\n",(0,s.jsx)(t.p,{children:"The final step is to fund your validator with the 32 ETH necessary to register as a validator and start receiving validation work!"}),"\n",(0,s.jsx)(t.p,{children:"To do this, you will need to send 32 ETH to the Ethereum deposit contract. We will be using the official Ethereum launchpad for this."}),"\n",(0,s.jsxs)(t.p,{children:["Navigate to ",(0,s.jsx)(t.a,{href:"https://launchpad.ethereum.org/",children:"the launchpad"})]}),"\n",(0,s.jsx)(t.p,{children:"Read all the advisories... they contain important information that will help you understand the whole process!"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Launchpad 1",src:n(7494).Z+"",width:"2154",height:"1704"})}),"\n",(0,s.jsx)(t.p,{children:"Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections:"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Launchpad 2",src:n(4719).Z+"",width:"2226",height:"1504"})}),"\n",(0,s.jsx)(t.p,{children:'We continue until the "Upload Deposit Data" section.'}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Launchpad 3",src:n(4407).Z+"",width:"2996",height:"1714"})}),"\n",(0,s.jsxs)(t.p,{children:["Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called ",(0,s.jsx)(t.code,{children:"deposit_data-*.json"})]}),"\n",(0,s.jsx)(t.p,{children:"The moment to do the deposit is here! Connect your wallet (yes, the one that has the 32 ETH!)."}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Launchpad 4",src:n(2208).Z+"",width:"2206",height:"1290"})}),"\n",(0,s.jsx)(t.p,{children:"And follow the steps to send the 32 ETH to the deposit contract!"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Launchpad 5",src:n(9378).Z+"",width:"2168",height:"1310"})}),"\n",(0,s.jsx)(t.admonition,{type:"warning",children:(0,s.jsx)(t.p,{children:"You will be prompted to review the deposit address in the next step. PLEASE DO SO! MAKE SURE YOU ARE SENDING THE 32 ETH TO THE RIGHT DEPOSIT ADDRESS!"})}),"\n",(0,s.jsxs)(t.p,{children:["After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the ",(0,s.jsx)(t.a,{href:"https://beaconcha.in/",children:"beaconcha.in"})," explorer. You can get a direct link to this by clicking on the ",(0,s.jsx)(t.code,{children:"View in Beaconcha.in"})," button in the Dappnode Web3signer UI, where you uploaded the keystores."]}),"\n",(0,s.jsx)(t.p,{children:"[PENDING SCREENSHOT]"}),"\n",(0,s.jsx)(t.h2,{id:"additional-opportunities-mev-boost",children:"Additional Opportunities: MEV Boost"}),"\n",(0,s.jsx)(t.p,{children:"Considering MEV Boost? It allows your validator node to propose different relays when it's its turn. However, before diving in, a thorough understanding of the relays and any local regulations is paramount."}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Remember"}),": Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions."]}),"\n",(0,s.jsx)(t.h2,{id:"withdrawing-my-eth",children:"Withdrawing my ETH"}),"\n",(0,s.jsx)(t.p,{children:"Once you want to finish your staking journey, you will need to withdraw your ETH from the Beacon Chain. This process consists of exiting the validator from the Dappnode UI."}),"\n",(0,s.jsx)(t.admonition,{title:"Ethereum withdrawals are state changes in the execution layer",type:"info",children:(0,s.jsxs)(t.p,{children:["This means that once you reach the end of the Beacon Chain's exit queue, your 32 ETH will show up in your withdrawal address as a state change in the blockchain, and not as a deposit. You can find more info ",(0,s.jsx)(t.a,{href:"https://ethereum.org/en/staking/withdrawals/#exiting-staking-entirely",children:"here"}),"."]})}),"\n",(0,s.jsx)(t.h3,{id:"opening-your-web3signer-ui",children:"Opening your Web3Signer UI."}),"\n",(0,s.jsxs)(t.p,{children:["Navigate to the Stakers > Ethereum menu and click on the ",(0,s.jsx)(t.code,{children:"Upload Keystores"})," button on the Web3Signer card.\nOnce you are in the Web3Signer UI, select the validators you want to exit and click on the ",(0,s.jsx)(t.code,{children:"Exit Validator"})," button on the top right part of the UI."]}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"Ethereum Withdrawals",src:n(9192).Z+"",width:"1879",height:"562"})}),"\n",(0,s.jsxs)(t.p,{children:['Follow the instructions and type "I want to exit", followed by ',(0,s.jsx)(t.code,{children:"Exit"}),"."]}),"\n",(0,s.jsx)(t.p,{children:"Now the message to exit will be broadcasted to the network."}),"\n",(0,s.jsx)(t.admonition,{title:"Withdrawal queue",type:"caution",children:(0,s.jsxs)(t.p,{children:["Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the ",(0,s.jsx)(t.a,{href:"https://beaconcha.in/",children:"Beacon Chain Explorer"}),". Please be patient as the Beacon Chain exit queue can get long and wait times might take up to several weeks."]})}),"\n",(0,s.jsx)(t.p,{children:"Voil\xe0! Your ETH will appear on your withdrawal address!"})]})}function c(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(l,{...e})}):l(e)}},9192:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/ethereum-exit-validator-cbe5bd9d4de4ba3ec4c69d377062fe52.png"},3001:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/ethereum-staking-screenshot-d41fdd2a5a44f0e9e7f4094c41ea9e2d.png"},7494:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/launchpad1-a753b28ed2a802d489461a7c94e0c961.png"},4719:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/launchpad2-3e282073fa021d7180e64c524e0921b9.png"},4407:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/launchpad3-9bd7c8a0bc7f1c0f0d4e3112ae2eb9ce.png"},2208:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/launchpad4-94bbe5bce7aade2be65583c0ddae47a6.png"},9378:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/launchpad5-961c3c6447f15d0a12e87a8eb7c7d732.png"},8030:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/wagyu1-e570b05560adf66a1fe0d5c75961cf84.png"},6948:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/wagyu2-56f62ea0d459fc876917956e12a5310c.png"},1749:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/wagyu3-c924247c89934873bbccd3d4867afdce.png"},1131:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/wagyu4-0673a83463eb844993339ecfdcc59b41.png"},5421:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/wagyu5-644261c1588e13ba1177d70aef9ecf19.png"},8058:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/wagyu6-d5538d2bbd5a01f47d94c6c5b29b3abf.png"},8613:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n.p+"assets/images/wagyu7-8c346a2c9519b98a530d1005a69247f2.png"},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>a});var s=n(7294);const i={},o=s.createContext(i);function a(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d912498a.0ce69b56.js b/assets/js/d912498a.0ce69b56.js new file mode 100644 index 000000000..1b4ca390c --- /dev/null +++ b/assets/js/d912498a.0ce69b56.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6209],{4775:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>l,frontMatter:()=>s,metadata:()=>a,toc:()=>h});var o=t(5893),r=t(1151);const s={},i="Ethereum repository",a={id:"user/repository/ethereum",title:"Ethereum repository",description:"Dappnode uses smart contracts to distribute the dappnode packages available in the Dappstore. The smart contracts are deployed in the Ethereum blockchain and the Dappnode client interacts with them to get the list of available packages and to download them. Your dappnode will need a connection to an Ethereum node in order to read the smart contracts and download the packages. There are two ways to establish this connection:",source:"@site/docs/user/repository/ethereum.md",sourceDirName:"user/repository",slug:"/user/repository/ethereum",permalink:"/docs/user/repository/ethereum",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/repository/ethereum.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Guide to Installing Bee Node on Dappnode",permalink:"/docs/user/packages/swarm"},next:{title:"IPFS repository",permalink:"/docs/user/repository/ipfs"}},d={},h=[{value:"Run your own Ethereum node",id:"run-your-own-ethereum-node",level:2},{value:"Use a remote Ethereum node",id:"use-a-remote-ethereum-node",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}];function c(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components},{Details:s}=n;return s||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"ethereum-repository",children:"Ethereum repository"}),"\n",(0,o.jsx)(n.p,{children:"Dappnode uses smart contracts to distribute the dappnode packages available in the Dappstore. The smart contracts are deployed in the Ethereum blockchain and the Dappnode client interacts with them to get the list of available packages and to download them. Your dappnode will need a connection to an Ethereum node in order to read the smart contracts and download the packages. There are two ways to establish this connection:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Full Node"}),": By running a Full Node, you host the Ethereum blockchain. This ensures maximum control and independence, but requires syncing and maintaining the blockchain's latest state."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Remote Node"}),": Using a Remote Node means relying on an external Ethereum node. It's less resource-intensive but demands trust in the node operator."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["To configure your dappnode Ethereum repository go to ",(0,o.jsx)(n.a,{href:"http://my.dappnode/repository/eth",children:"http://my.dappnode/repository/eth"})]})}),"\n",(0,o.jsx)(n.h2,{id:"run-your-own-ethereum-node",children:"Run your own Ethereum node"}),"\n",(0,o.jsx)(n.p,{children:"When choosing to run your own Ethereum node, you will need to select:"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.strong,{children:"Execution client"})}),"\n",(0,o.jsx)(n.li,{children:(0,o.jsx)(n.strong,{children:"Consensus client"})}),"\n"]}),"\n",(0,o.jsxs)(n.p,{children:["Moreover, it is ",(0,o.jsx)(n.strong,{children:"highly recommended to enable"})," these additional options:"]}),"\n",(0,o.jsxs)(n.ol,{start:"3",children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Use remote during syncing or errors"}),": If enabled, this will auto-switch from your Local node to the Dappnode Remote node under certain conditions. For instance, if your Ethereum node is syncing or if it's unavailable for some reason. Activating this option ensures uninterrupted access to the Dappnode smart contracts even if there's an issue with your Local node."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Use checkpointsync"}),": By enabling this, your consensus client will utilize a checkpoint to fast-track the syncing of the Ethereum blockchain, making the process much quicker quicker."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.admonition,{type:"caution",children:(0,o.jsxs)(n.p,{children:["Making changes here will also modify selections in the ",(0,o.jsx)(n.a,{href:"http://my.dappnode/stakers",children:"Stakers"})," tab."]})}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"ethereum-remote-full",src:t(9930).Z+"",width:"2592",height:"1280"})}),"\n",(0,o.jsx)(n.admonition,{type:"caution",children:(0,o.jsx)(n.p,{children:"Running your own Ethereum node requires a lot of resources. You will need a powerful machine with a lot of storage and a good internet connection. If you don't have a powerful machine, you can use a remote Ethereum node."})}),"\n",(0,o.jsx)(n.h2,{id:"use-a-remote-ethereum-node",children:"Use a remote Ethereum node"}),"\n",(0,o.jsx)(n.p,{children:"You can use a remote Ethereum node to connect to the Ethereum network. You will need to trust the node operator."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"ethereum-remote-node",src:t(2006).Z+"",width:"2592",height:"882"})}),"\n",(0,o.jsx)(n.admonition,{type:"note",children:(0,o.jsxs)(n.p,{children:["At the moment, we only support Dappnode official Ethereum node. We are working on a way to allow users to add their own remote Ethereum nodes RPC endpoints. See ",(0,o.jsx)(n.a,{href:"https://github.com/dappnode/DNP_DAPPMANAGER/issues/1245",children:"https://github.com/dappnode/DNP_DAPPMANAGER/issues/1245"})]})}),"\n",(0,o.jsx)("hr",{}),"\n",(0,o.jsx)(n.h3,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:"Why did my clients change in the Full Node Repository selection?"})}),(0,o.jsxs)(n.p,{children:["At the moment, Dappnode only supports running one Ethereum mainnet node. If you change your selection in the ",(0,o.jsx)(n.a,{href:"http://my.dappnode/stakers/ethereum",children:"Stakers"})," menu, it will also change in the ",(0,o.jsx)(n.a,{href:"http://my.dappnode/repository/eth",children:"Repository"})," menu."]})]})]})}function l(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(c,{...e})}):c(e)}},9930:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/repository-eth-full-f32d4f5e722bde24c2f4b871b8438c17.png"},2006:(e,n,t)=>{t.d(n,{Z:()=>o});const o=t.p+"assets/images/repository-eth-remote-d18929207921dfd4bb52055413a7998a.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>i});var o=t(7294);const r={},s=o.createContext(r);function i(e){const n=o.useContext(s);return o.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),o.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d912498a.f5fa04d0.js b/assets/js/d912498a.f5fa04d0.js deleted file mode 100644 index e4abd1092..000000000 --- a/assets/js/d912498a.f5fa04d0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[6209],{4137:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=o.createContext({}),l=function(e){var t=o.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=l(e.components);return o.createElement(p.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=l(n),m=r,h=d["".concat(p,".").concat(m)]||d[m]||c[m]||a;return n?o.createElement(h,i(i({ref:t},u),{},{components:n})):o.createElement(h,i({ref:t},u))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[d]="string"==typeof e?e:r,i[1]=s;for(var l=2;l<a;l++)i[l]=n[l];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},5938:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var o=n(7462),r=(n(7294),n(4137));const a={},i="Ethereum repository",s={unversionedId:"user/repository/ethereum",id:"user/repository/ethereum",title:"Ethereum repository",description:"Dappnode uses smart contracts to distribute the dappnode packages available in the Dappstore. The smart contracts are deployed in the Ethereum blockchain and the Dappnode client interacts with them to get the list of available packages and to download them. Your dappnode will need a connection to an Ethereum node in order to read the smart contracts and download the packages. There are two ways to establish this connection:",source:"@site/docs/user/repository/ethereum.md",sourceDirName:"user/repository",slug:"/user/repository/ethereum",permalink:"/docs/user/repository/ethereum",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/repository/ethereum.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Guide to Installing Bee Node on Dappnode",permalink:"/docs/user/packages/swarm"},next:{title:"IPFS repository",permalink:"/docs/user/repository/ipfs"}},p={},l=[{value:"Run your own Ethereum node",id:"run-your-own-ethereum-node",level:2},{value:"Use a remote Ethereum node",id:"use-a-remote-ethereum-node",level:2},{value:"Troubleshooting",id:"troubleshooting",level:3}],u={toc:l},d="wrapper";function c(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,o.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ethereum-repository"},"Ethereum repository"),(0,r.kt)("p",null,"Dappnode uses smart contracts to distribute the dappnode packages available in the Dappstore. The smart contracts are deployed in the Ethereum blockchain and the Dappnode client interacts with them to get the list of available packages and to download them. Your dappnode will need a connection to an Ethereum node in order to read the smart contracts and download the packages. There are two ways to establish this connection:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Full Node"),": By running a Full Node, you host the Ethereum blockchain. This ensures maximum control and independence, but requires syncing and maintaining the blockchain's latest state."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Remote Node"),": Using a Remote Node means relying on an external Ethereum node. It's less resource-intensive but demands trust in the node operator.")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"To configure your dappnode Ethereum repository go to ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode/repository/eth"},"http://my.dappnode/repository/eth"))),(0,r.kt)("h2",{id:"run-your-own-ethereum-node"},"Run your own Ethereum node"),(0,r.kt)("p",null,"When choosing to run your own Ethereum node, you will need to select:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Execution client")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Consensus client"))),(0,r.kt)("p",null,"Moreover, it is ",(0,r.kt)("strong",{parentName:"p"},"highly recommended to enable")," these additional options:"),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Use remote during syncing or errors"),": If enabled, this will auto-switch from your Local node to the Dappnode Remote node under certain conditions. For instance, if your Ethereum node is syncing or if it's unavailable for some reason. Activating this option ensures uninterrupted access to the Dappnode smart contracts even if there's an issue with your Local node.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"Use checkpointsync"),": By enabling this, your consensus client will utilize a checkpoint to fast-track the syncing of the Ethereum blockchain, making the process much quicker quicker."))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Making changes here will also modify selections in the ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode/stakers"},"Stakers")," tab.")),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"ethereum-remote-full",src:n(9930).Z,width:"2592",height:"1280"})),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Running your own Ethereum node requires a lot of resources. You will need a powerful machine with a lot of storage and a good internet connection. If you don't have a powerful machine, you can use a remote Ethereum node.")),(0,r.kt)("h2",{id:"use-a-remote-ethereum-node"},"Use a remote Ethereum node"),(0,r.kt)("p",null,"You can use a remote Ethereum node to connect to the Ethereum network. You will need to trust the node operator."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"ethereum-remote-node",src:n(2006).Z,width:"2592",height:"882"})),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"At the moment, we only support Dappnode official Ethereum node. We are working on a way to allow users to add their own remote Ethereum nodes RPC endpoints. See ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/dappnode/DNP_DAPPMANAGER/issues/1245"},"https://github.com/dappnode/DNP_DAPPMANAGER/issues/1245"))),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("b",null,"Why did my clients change in the Full Node Repository selection?")),(0,r.kt)("p",null," At the moment, Dappnode only supports running one Ethereum mainnet node. If you change your selection in the ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode/stakers/ethereum"},"Stakers")," menu, it will also change in the ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode/repository/eth"},"Repository")," menu.")))}c.isMDXComponent=!0},9930:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/repository-eth-full-f32d4f5e722bde24c2f4b871b8438c17.png"},2006:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/repository-eth-remote-d18929207921dfd4bb52055413a7998a.png"}}]); \ No newline at end of file diff --git a/assets/js/d9f32620.85cb3876.js b/assets/js/d9f32620.85cb3876.js deleted file mode 100644 index d42545e29..000000000 --- a/assets/js/d9f32620.85cb3876.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1914],{4137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},a=Object.keys(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)r=a[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),i=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=i(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=u(e,["components","mdxType","originalType","parentName"]),p=i(r),m=o,d=p["".concat(s,".").concat(m)]||p[m]||g[m]||a;return r?n.createElement(d,l(l({ref:t},c),{},{components:r})):n.createElement(d,l({ref:t},c))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=m;var u={};for(var s in t)hasOwnProperty.call(t,s)&&(u[s]=t[s]);u.originalType=e,u[p]="string"==typeof e?e:o,l[1]=u;for(var i=2;i<a;i++)l[i]=r[i];return n.createElement.apply(null,l)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},2152:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>g,frontMatter:()=>a,metadata:()=>u,toc:()=>i});var n=r(7462),o=(r(7294),r(4137));const a={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},l=void 0,u={permalink:"/blog/welcome",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",formattedDate:"August 26, 2021",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},s={authorsImageUrls:[void 0,void 0]},i=[],c={toc:i},p="wrapper";function g(e){let{components:t,...a}=e;return(0,o.kt)(p,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/blog"},"Docusaurus blogging features")," are powered by the ",(0,o.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog"},"blog plugin"),"."),(0,o.kt)("p",null,"Simply add Markdown files (or folders) to the ",(0,o.kt)("inlineCode",{parentName:"p"},"blog")," directory."),(0,o.kt)("p",null,"Regular blog authors can be added to ",(0,o.kt)("inlineCode",{parentName:"p"},"authors.yml"),"."),(0,o.kt)("p",null,"The blog post date can be extracted from filenames, such as:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome.md")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"2019-05-30-welcome/index.md"))),(0,o.kt)("p",null,"A blog post folder can be convenient to co-locate blog post images:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Docusaurus Plushie",src:r(250).Z,width:"1500",height:"500"})),(0,o.kt)("p",null,"The blog supports tags as well!"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"And if you don't want a blog"),": just delete this directory, and use ",(0,o.kt)("inlineCode",{parentName:"p"},"blog: false")," in your Docusaurus config."))}g.isMDXComponent=!0},250:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"}}]); \ No newline at end of file diff --git a/assets/js/d9f32620.9541b86f.js b/assets/js/d9f32620.9541b86f.js new file mode 100644 index 000000000..4578ca582 --- /dev/null +++ b/assets/js/d9f32620.9541b86f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1914],{8123:(e,o,s)=>{s.r(o),s.d(o,{assets:()=>c,contentTitle:()=>r,default:()=>d,frontMatter:()=>l,metadata:()=>a,toc:()=>u});var n=s(5893),t=s(1151);const l={slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},r=void 0,a={permalink:"/blog/welcome",source:"@site/blog/2021-08-26-welcome/index.md",title:"Welcome",description:"Docusaurus blogging features are powered by the blog plugin.",date:"2021-08-26T00:00:00.000Z",formattedDate:"August 26, 2021",tags:[{label:"facebook",permalink:"/blog/tags/facebook"},{label:"hello",permalink:"/blog/tags/hello"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.405,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"},{name:"Yangshun Tay",title:"Front End Engineer @ Facebook",url:"https://github.com/yangshun",imageURL:"https://github.com/yangshun.png",key:"yangshun"}],frontMatter:{slug:"welcome",title:"Welcome",authors:["slorber","yangshun"],tags:["facebook","hello","docusaurus"]},unlisted:!1,nextItem:{title:"MDX Blog Post",permalink:"/blog/mdx-blog-post"}},c={authorsImageUrls:[void 0,void 0]},u=[];function i(e){const o={a:"a",code:"code",img:"img",li:"li",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.a,{href:"https://docusaurus.io/docs/blog",children:"Docusaurus blogging features"})," are powered by the ",(0,n.jsx)(o.a,{href:"https://docusaurus.io/docs/api/plugins/@docusaurus/plugin-content-blog",children:"blog plugin"}),"."]}),"\n",(0,n.jsxs)(o.p,{children:["Simply add Markdown files (or folders) to the ",(0,n.jsx)(o.code,{children:"blog"})," directory."]}),"\n",(0,n.jsxs)(o.p,{children:["Regular blog authors can be added to ",(0,n.jsx)(o.code,{children:"authors.yml"}),"."]}),"\n",(0,n.jsx)(o.p,{children:"The blog post date can be extracted from filenames, such as:"}),"\n",(0,n.jsxs)(o.ul,{children:["\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.code,{children:"2019-05-30-welcome.md"})}),"\n",(0,n.jsx)(o.li,{children:(0,n.jsx)(o.code,{children:"2019-05-30-welcome/index.md"})}),"\n"]}),"\n",(0,n.jsx)(o.p,{children:"A blog post folder can be convenient to co-locate blog post images:"}),"\n",(0,n.jsx)(o.p,{children:(0,n.jsx)(o.img,{alt:"Docusaurus Plushie",src:s(250).Z+"",width:"1500",height:"500"})}),"\n",(0,n.jsx)(o.p,{children:"The blog supports tags as well!"}),"\n",(0,n.jsxs)(o.p,{children:[(0,n.jsx)(o.strong,{children:"And if you don't want a blog"}),": just delete this directory, and use ",(0,n.jsx)(o.code,{children:"blog: false"})," in your Docusaurus config."]})]})}function d(e={}){const{wrapper:o}={...(0,t.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(i,{...e})}):i(e)}},250:(e,o,s)=>{s.d(o,{Z:()=>n});const n=s.p+"assets/images/docusaurus-plushie-banner-a60f7593abca1e3eef26a9afa244e4fb.jpeg"},1151:(e,o,s)=>{s.d(o,{Z:()=>a,a:()=>r});var n=s(7294);const t={},l=n.createContext(t);function r(e){const o=n.useContext(l);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function a(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(l.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dfbda110.91aaee4a.js b/assets/js/dfbda110.91aaee4a.js deleted file mode 100644 index e2aa11a69..000000000 --- a/assets/js/dfbda110.91aaee4a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8162],{4137:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>v});var a=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function o(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?o(Object(t),!0).forEach((function(n){r(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):o(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function c(e,n){if(null==e)return{};var t,a,r=function(e,n){if(null==e)return{};var t,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)t=o[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var s=a.createContext({}),l=function(e){var n=a.useContext(s),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=l(e.components);return a.createElement(s.Provider,{value:n},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},h=a.forwardRef((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,s=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),u=l(t),h=r,v=u["".concat(s,".").concat(h)]||u[h]||d[h]||o;return t?a.createElement(v,i(i({ref:n},p),{},{components:t})):a.createElement(v,i({ref:n},p))}));function v(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=h;var c={};for(var s in n)hasOwnProperty.call(n,s)&&(c[s]=n[s]);c.originalType=e,c[u]="string"==typeof e?e:r,i[1]=c;for(var l=2;l<o;l++)i[l]=t[l];return a.createElement.apply(null,i)}return a.createElement.apply(null,t)}h.displayName="MDXCreateElement"},7345:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>c,toc:()=>l});var a=t(7462),r=(t(7294),t(4137));const o={},i="Avalanche",c={unversionedId:"user/packages/avalanche",id:"user/packages/avalanche",title:"Avalanche",description:"Avalanche: A Revolutionary Consensus Protocol",source:"@site/docs/user/packages/avalanche.md",sourceDirName:"user/packages",slug:"/user/packages/avalanche",permalink:"/docs/user/packages/avalanche",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/avalanche.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethereum Classic",permalink:"/docs/user/packages/ethclassic"},next:{title:"Monero",permalink:"/docs/user/packages/monero"}},s={},l=[{value:"Avalanche: A Revolutionary Consensus Protocol",id:"avalanche-a-revolutionary-consensus-protocol",level:2},{value:"AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network",id:"avax-staking-on-dappnode-earn-rewards-while-supporting-avalanche-network",level:2}],p={toc:l},u="wrapper";function d(e){let{components:n,...t}=e;return(0,r.kt)(u,(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"avalanche"},"Avalanche"),(0,r.kt)("h2",{id:"avalanche-a-revolutionary-consensus-protocol"},"Avalanche: A Revolutionary Consensus Protocol"),(0,r.kt)("p",null,"Avalanche is an innovative open-source platform designed for launching decentralized finance applications and enterprise blockchain deployments within a single, highly scalable ecosystem. Developers leveraging Avalanche\u2019s capabilities can effortlessly craft robust, secure applications and tailor-made blockchain networks. This platform empowers them to construct intricate rulesets or build atop existing private or public subnets, ultimately driving the creation of reliable and impactful solutions."),(0,r.kt)("h2",{id:"avax-staking-on-dappnode-earn-rewards-while-supporting-avalanche-network"},"AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network"),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"A guide to running an Avalanche validator node on Dappnode is coming soon. In the meantime, you can find more information on the ",(0,r.kt)("a",{parentName:"p",href:"https://www.avalabs.org/"},"Avalanche website"),".")),(0,r.kt)("p",null,"By running an Avalanche node on Dappnode, you actively participate in the decentralization of the network. Through this engagement, you contribute to the security and reliability of Avalanche\u2019s consensus model."),(0,r.kt)("p",null,"Engage in AVAX staking to contribute to the security and decentralization of the Avalanche network. Stake your AVAX tokens to become a delegator or validator, and in return, earn rewards for your participation in the Proof of Stake consensus mechanism. With a minimum of 2000 AVAX tokens required to start a validator, AVAX staking presents an opportunity to support the network while earning rewards."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dfbda110.a6dfc351.js b/assets/js/dfbda110.a6dfc351.js new file mode 100644 index 000000000..82f116cdd --- /dev/null +++ b/assets/js/dfbda110.a6dfc351.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8162],{9097:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var o=a(5893),t=a(1151);const r={},s="Avalanche",i={id:"user/packages/avalanche",title:"Avalanche",description:"Avalanche: A Revolutionary Consensus Protocol",source:"@site/docs/user/packages/avalanche.md",sourceDirName:"user/packages",slug:"/user/packages/avalanche",permalink:"/docs/user/packages/avalanche",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/avalanche.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Ethereum Classic",permalink:"/docs/user/packages/ethclassic"},next:{title:"Monero",permalink:"/docs/user/packages/monero"}},c={},l=[{value:"Avalanche: A Revolutionary Consensus Protocol",id:"avalanche-a-revolutionary-consensus-protocol",level:2},{value:"AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network",id:"avax-staking-on-dappnode-earn-rewards-while-supporting-avalanche-network",level:2}];function p(e){const n={a:"a",admonition:"admonition",h1:"h1",h2:"h2",p:"p",...(0,t.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"avalanche",children:"Avalanche"}),"\n",(0,o.jsx)(n.h2,{id:"avalanche-a-revolutionary-consensus-protocol",children:"Avalanche: A Revolutionary Consensus Protocol"}),"\n",(0,o.jsx)(n.p,{children:"Avalanche is an innovative open-source platform designed for launching decentralized finance applications and enterprise blockchain deployments within a single, highly scalable ecosystem. Developers leveraging Avalanche\u2019s capabilities can effortlessly craft robust, secure applications and tailor-made blockchain networks. This platform empowers them to construct intricate rulesets or build atop existing private or public subnets, ultimately driving the creation of reliable and impactful solutions."}),"\n",(0,o.jsx)(n.h2,{id:"avax-staking-on-dappnode-earn-rewards-while-supporting-avalanche-network",children:"AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network"}),"\n",(0,o.jsx)(n.admonition,{type:"info",children:(0,o.jsxs)(n.p,{children:["A guide to running an Avalanche validator node on Dappnode is coming soon. In the meantime, you can find more information on the ",(0,o.jsx)(n.a,{href:"https://www.avalabs.org/",children:"Avalanche website"}),"."]})}),"\n",(0,o.jsx)(n.p,{children:"By running an Avalanche node on Dappnode, you actively participate in the decentralization of the network. Through this engagement, you contribute to the security and reliability of Avalanche\u2019s consensus model."}),"\n",(0,o.jsx)(n.p,{children:"Engage in AVAX staking to contribute to the security and decentralization of the Avalanche network. Stake your AVAX tokens to become a delegator or validator, and in return, earn rewards for your participation in the Proof of Stake consensus mechanism. With a minimum of 2000 AVAX tokens required to start a validator, AVAX staking presents an opportunity to support the network while earning rewards."})]})}function d(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},1151:(e,n,a)=>{a.d(n,{Z:()=>i,a:()=>s});var o=a(7294);const t={},r=o.createContext(t);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dfcea9c7.5aa66f33.js b/assets/js/dfcea9c7.5aa66f33.js new file mode 100644 index 000000000..4750e9a9e --- /dev/null +++ b/assets/js/dfcea9c7.5aa66f33.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2441],{6238:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>r,toc:()=>c});var t=o(5893),i=o(1151);const s={},a="Wi-Fi Access to Dappnode",r={id:"user/access-your-dappnode/wifi",title:"Wi-Fi Access to Dappnode",description:"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode's Wi-Fi hotspot.",source:"@site/docs/user/access-your-dappnode/wifi.md",sourceDirName:"user/access-your-dappnode",slug:"/user/access-your-dappnode/wifi",permalink:"/docs/user/access-your-dappnode/wifi",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/wifi.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"\ud83c\udf10 Access your Dappnode",permalink:"/docs/user/access-your-dappnode/overview"},next:{title:"VPN Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/overview"}},d={},c=[{value:"Connecting to Dappnode Wi-Fi",id:"connecting-to-dappnode-wi-fi",level:2},{value:"Wi-Fi Settings in Dappmanager",id:"wi-fi-settings-in-dappmanager",level:2}];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"wi-fi-access-to-dappnode",children:"Wi-Fi Access to Dappnode"}),"\n",(0,t.jsxs)(n.p,{children:["If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the ",(0,t.jsx)(n.strong,{children:"Dappmanager"})," (Dappnode web UI) using the Dappnode's Wi-Fi hotspot."]}),"\n",(0,t.jsx)(n.p,{children:"For those who got their hardware elsewhere, there's a chance the Wi-Fi card might not be recognized by the operating system. If this happens, you might need to install the required firmware. Since the steps vary based on the hardware, please contact our support on Discord if you face any issues."}),"\n",(0,t.jsx)(n.h2,{id:"connecting-to-dappnode-wi-fi",children:"Connecting to Dappnode Wi-Fi"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\ud83d\udcf1 On a device of your choice, navigate to the ",(0,t.jsx)(n.strong,{children:"Wi-Fi settings"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["\ud83d\udd0d Search and select the network labeled as ",(0,t.jsx)(n.code,{children:"DappnodeWIFI"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["\ud83d\udd11 Enter the password: ",(0,t.jsx)(n.code,{children:"dappnode"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["\ud83c\udf10 Open a browser and go to ",(0,t.jsx)(n.a,{href:"http://my.dappnode/",children:"http://my.dappnode/"}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{type:"caution",children:(0,t.jsxs)(n.p,{children:["After connecting for the first time, go to the Wi-Fi section in the left menu of ",(0,t.jsx)(n.strong,{children:"Dappmanager"})," and change the hotspot password to something only you know."]})}),"\n",(0,t.jsx)(n.h2,{id:"wi-fi-settings-in-dappmanager",children:"Wi-Fi Settings in Dappmanager"}),"\n",(0,t.jsx)(n.p,{children:"Once in the Wi-Fi section, you'll find two main options:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Toggle Wi-Fi"}),": Here, you can turn the Wi-Fi feature on or off."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Wi-Fi Credentials"}),": Set a new network name (SSID) and password for your Dappnode's Wi-Fi. We strongly advise you to change the default settings for better security."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>r,a:()=>a});var t=o(7294);const i={},s=t.createContext(i);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/dfcea9c7.ecfb7705.js b/assets/js/dfcea9c7.ecfb7705.js deleted file mode 100644 index bcf9ae72a..000000000 --- a/assets/js/dfcea9c7.ecfb7705.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2441],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),c=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},l="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,d=p(e,["components","mdxType","originalType","parentName"]),l=c(n),f=r,m=l["".concat(s,".").concat(f)]||l[f]||u[f]||a;return n?o.createElement(m,i(i({ref:t},d),{},{components:n})):o.createElement(m,i({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=f;var p={};for(var s in t)hasOwnProperty.call(t,s)&&(p[s]=t[s]);p.originalType=e,p[l]="string"==typeof e?e:r,i[1]=p;for(var c=2;c<a;c++)i[c]=n[c];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}f.displayName="MDXCreateElement"},7351:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var o=n(7462),r=(n(7294),n(4137));const a={},i="Wi-Fi Access to Dappnode",p={unversionedId:"user/access-your-dappnode/wifi",id:"user/access-your-dappnode/wifi",title:"Wi-Fi Access to Dappnode",description:"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode's Wi-Fi hotspot.",source:"@site/docs/user/access-your-dappnode/wifi.md",sourceDirName:"user/access-your-dappnode",slug:"/user/access-your-dappnode/wifi",permalink:"/docs/user/access-your-dappnode/wifi",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/wifi.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"\ud83c\udf10 Access your Dappnode",permalink:"/docs/user/access-your-dappnode/overview"},next:{title:"VPN Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/overview"}},s={},c=[{value:"Connecting to Dappnode Wi-Fi",id:"connecting-to-dappnode-wi-fi",level:2},{value:"Wi-Fi Settings in Dappmanager",id:"wi-fi-settings-in-dappmanager",level:2}],d={toc:c},l="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(l,(0,o.Z)({},d,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"wi-fi-access-to-dappnode"},"Wi-Fi Access to Dappnode"),(0,r.kt)("p",null,"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the ",(0,r.kt)("strong",{parentName:"p"},"Dappmanager")," (Dappnode web UI) using the Dappnode's Wi-Fi hotspot."),(0,r.kt)("p",null,"For those who got their hardware elsewhere, there's a chance the Wi-Fi card might not be recognized by the operating system. If this happens, you might need to install the required firmware. Since the steps vary based on the hardware, please contact our support on Discord if you face any issues."),(0,r.kt)("h2",{id:"connecting-to-dappnode-wi-fi"},"Connecting to Dappnode Wi-Fi"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"\ud83d\udcf1 On a device of your choice, navigate to the ",(0,r.kt)("strong",{parentName:"li"},"Wi-Fi settings"),"."),(0,r.kt)("li",{parentName:"ol"},"\ud83d\udd0d Search and select the network labeled as ",(0,r.kt)("inlineCode",{parentName:"li"},"DappnodeWIFI"),"."),(0,r.kt)("li",{parentName:"ol"},"\ud83d\udd11 Enter the password: ",(0,r.kt)("inlineCode",{parentName:"li"},"dappnode"),"."),(0,r.kt)("li",{parentName:"ol"},"\ud83c\udf10 Open a browser and go to ",(0,r.kt)("a",{parentName:"li",href:"http://my.dappnode/"},"http://my.dappnode/"),".")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"After connecting for the first time, go to the Wi-Fi section in the left menu of ",(0,r.kt)("strong",{parentName:"p"},"Dappmanager")," and change the hotspot password to something only you know.")),(0,r.kt)("h2",{id:"wi-fi-settings-in-dappmanager"},"Wi-Fi Settings in Dappmanager"),(0,r.kt)("p",null,"Once in the Wi-Fi section, you'll find two main options:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Toggle Wi-Fi"),": Here, you can turn the Wi-Fi feature on or off."),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("strong",{parentName:"li"},"Wi-Fi Credentials"),": Set a new network name (SSID) and password for your Dappnode's Wi-Fi. We strongly advise you to change the default settings for better security.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e16015ca.4c049e6b.js b/assets/js/e16015ca.259ca12c.js similarity index 81% rename from assets/js/e16015ca.4c049e6b.js rename to assets/js/e16015ca.259ca12c.js index 4f6421918..a7033fd37 100644 --- a/assets/js/e16015ca.4c049e6b.js +++ b/assets/js/e16015ca.259ca12c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9700],{5688:a=>{a.exports=JSON.parse('{"label":"hola","permalink":"/blog/tags/hola","allTagsPath":"/blog/tags","count":1}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9700],{5688:a=>{a.exports=JSON.parse('{"label":"hola","permalink":"/blog/tags/hola","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/e26c9afe.36302435.js b/assets/js/e26c9afe.36302435.js deleted file mode 100644 index 2d4bb5160..000000000 --- a/assets/js/e26c9afe.36302435.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1206],{4137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>k});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function i(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),u=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=u(e.components);return o.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=u(r),h=n,k=c["".concat(l,".").concat(h)]||c[h]||d[h]||a;return r?o.createElement(k,s(s({ref:t},p),{},{components:r})):o.createElement(k,s({ref:t},p))}));function k(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,s=new Array(a);s[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:n,s[1]=i;for(var u=2;u<a;u++)s[u]=r[u];return o.createElement.apply(null,s)}return o.createElement.apply(null,r)}h.displayName="MDXCreateElement"},92:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var o=r(7462),n=(r(7294),r(4137));const a={},s="Stakehouse",i={unversionedId:"user/staking/ethereum/lsd-pools/stakehouse",id:"user/staking/ethereum/lsd-pools/stakehouse",title:"Stakehouse",description:"---",source:"@site/docs/user/staking/ethereum/lsd-pools/stakehouse.md",sourceDirName:"user/staking/ethereum/lsd-pools",slug:"/user/staking/ethereum/lsd-pools/stakehouse",permalink:"/docs/user/staking/ethereum/lsd-pools/stakehouse",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/lsd-pools/stakehouse.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"StakeWise",permalink:"/docs/user/staking/ethereum/lsd-pools/stakewise"},next:{title:"Obol Distributed Validator package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/obol-network"}},l={},u=[{value:"<strong>Stakehouse Overview</strong>",id:"stakehouse-overview",level:3},{value:"<strong>Package Key Features</strong>",id:"package-key-features",level:3},{value:"<strong>First Steps to become a Node Runner with Stakehouse and Dappnode</strong>",id:"first-steps-to-become-a-node-runner-with-stakehouse-and-dappnode",level:3}],p={toc:u},c="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(c,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"stakehouse"},"Stakehouse"),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"stakehouse-overview"},(0,n.kt)("strong",{parentName:"h3"},"Stakehouse Overview")),(0,n.kt)("p",null,"Stakehouse\u2019s mission is to bring the benefits of ETH staking to the mainstream user. To do this Blockswap developed a public benefit infrastructure favoring solo stakers. Those who are most important to the Ethereum blockchain now have access to the Stakehouse middle layer which is like ETH staking with superpowers. Not only are solo stakers empowered, but anybody who touches staked ETH or its peripheries can benefit from a protocol that creates multichain ETH without a bridge, doesn\u2019t pool users\u2019 assets, doesn\u2019t collect a commission, doesn\u2019t require a particular node, and doesn\u2019t use an oracle."),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"package-key-features"},(0,n.kt)("strong",{parentName:"h3"},"Package Key Features")),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Integration with Web3Signer:"),' When being a node operator, you can import your keystores into Web3Signer and select Stakehouse under the "Staking Protocol" field. Web3Signer takes care of the rest!'),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Staking Inclusion:")," Users can run a validator for 4 ETH or provide liquidity with as little as 0.001 ETH, to earn Ethereum consensus rewards. The users of LSD Networks can range from DAOs to node operators to general users who have ETH to stake.")),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"first-steps-to-become-a-node-runner-with-stakehouse-and-dappnode"},(0,n.kt)("strong",{parentName:"h3"},"First Steps to become a Node Runner with Stakehouse and Dappnode")),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Setup your LSD:")),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Go to ",(0,n.kt)("a",{parentName:"li",href:"https://lsd.joinstakehouse.com/"},"Stakehouse's LSD wizard"),' and click "Deposit" under "Node Operator".'),(0,n.kt)("li",{parentName:"ul"},"Follow the steps to ",(0,n.kt)("a",{parentName:"li",href:"https://help.joinstakehouse.com/en/articles/6597493-how-do-i-generate-my-validator-keys-using-wagyu-keygen-mainnet-testnet"},"generate your key"),"."),(0,n.kt)("li",{parentName:"ul"},"Make the initial 4 ETH deposit."))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Import your keystore file into Web3Signer:")),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},'When you import your keystore, make sure you select Stakehouse under "Staking protocol". This will automatically set your Fee Recipient address and point it to your LSD.'),(0,n.kt)("li",{parentName:"ul"},"Pay special attention to this, since failing to properly configure the Fee Recipient may incurr in penalties for the Node Runner.")))),(0,n.kt)("hr",null),(0,n.kt)("p",null,"Staking, though lucrative, also comes with inherent risks. Stakehouse simplifies the process but doesn't eliminate the risks. It's essential to conduct thorough research and always prioritize safety."),(0,n.kt)("p",null,"For further guidance and details, refer to ",(0,n.kt)("a",{parentName:"p",href:"https://docs.joinstakehouse.com/protocol/learn/Stakehouse"},"Stakehouse's official documentation"),", or drop by ",(0,n.kt)("a",{parentName:"p",href:"https://discord.gg/dappnode"},"Dappnode's Discord server")," for support."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e26c9afe.83c310d4.js b/assets/js/e26c9afe.83c310d4.js new file mode 100644 index 000000000..5915e4b2c --- /dev/null +++ b/assets/js/e26c9afe.83c310d4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1206],{1291:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>a,toc:()=>h});var o=t(5893),n=t(1151);const r={},i="Stakehouse",a={id:"user/staking/ethereum/lsd-pools/stakehouse",title:"Stakehouse",description:"---",source:"@site/docs/user/staking/ethereum/lsd-pools/stakehouse.md",sourceDirName:"user/staking/ethereum/lsd-pools",slug:"/user/staking/ethereum/lsd-pools/stakehouse",permalink:"/docs/user/staking/ethereum/lsd-pools/stakehouse",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/lsd-pools/stakehouse.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"StakeWise",permalink:"/docs/user/staking/ethereum/lsd-pools/stakewise"},next:{title:"Obol Distributed Validator package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/obol-network"}},l={},h=[{value:"<strong>Stakehouse Overview</strong>",id:"stakehouse-overview",level:3},{value:"<strong>Package Key Features</strong>",id:"package-key-features",level:3},{value:"<strong>First Steps to become a Node Runner with Stakehouse and Dappnode</strong>",id:"first-steps-to-become-a-node-runner-with-stakehouse-and-dappnode",level:3}];function d(e){const s={a:"a",h1:"h1",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h1,{id:"stakehouse",children:"Stakehouse"}),"\n",(0,o.jsx)(s.hr,{}),"\n",(0,o.jsx)(s.h3,{id:"stakehouse-overview",children:(0,o.jsx)(s.strong,{children:"Stakehouse Overview"})}),"\n",(0,o.jsx)(s.p,{children:"Stakehouse\u2019s mission is to bring the benefits of ETH staking to the mainstream user. To do this Blockswap developed a public benefit infrastructure favoring solo stakers. Those who are most important to the Ethereum blockchain now have access to the Stakehouse middle layer which is like ETH staking with superpowers. Not only are solo stakers empowered, but anybody who touches staked ETH or its peripheries can benefit from a protocol that creates multichain ETH without a bridge, doesn\u2019t pool users\u2019 assets, doesn\u2019t collect a commission, doesn\u2019t require a particular node, and doesn\u2019t use an oracle."}),"\n",(0,o.jsx)(s.hr,{}),"\n",(0,o.jsx)(s.h3,{id:"package-key-features",children:(0,o.jsx)(s.strong,{children:"Package Key Features"})}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Integration with Web3Signer:"}),' When being a node operator, you can import your keystores into Web3Signer and select Stakehouse under the "Staking Protocol" field. Web3Signer takes care of the rest!']}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsxs)(s.p,{children:[(0,o.jsx)(s.strong,{children:"Staking Inclusion:"})," Users can run a validator for 4 ETH or provide liquidity with as little as 0.001 ETH, to earn Ethereum consensus rewards. The users of LSD Networks can range from DAOs to node operators to general users who have ETH to stake."]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.hr,{}),"\n",(0,o.jsx)(s.h3,{id:"first-steps-to-become-a-node-runner-with-stakehouse-and-dappnode",children:(0,o.jsx)(s.strong,{children:"First Steps to become a Node Runner with Stakehouse and Dappnode"})}),"\n",(0,o.jsxs)(s.ol,{children:["\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.strong,{children:"Setup your LSD:"})}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:["Go to ",(0,o.jsx)(s.a,{href:"https://lsd.joinstakehouse.com/",children:"Stakehouse's LSD wizard"}),' and click "Deposit" under "Node Operator".']}),"\n",(0,o.jsxs)(s.li,{children:["Follow the steps to ",(0,o.jsx)(s.a,{href:"https://help.joinstakehouse.com/en/articles/6597493-how-do-i-generate-my-validator-keys-using-wagyu-keygen-mainnet-testnet",children:"generate your key"}),"."]}),"\n",(0,o.jsx)(s.li,{children:"Make the initial 4 ETH deposit."}),"\n"]}),"\n"]}),"\n",(0,o.jsxs)(s.li,{children:["\n",(0,o.jsx)(s.p,{children:(0,o.jsx)(s.strong,{children:"Import your keystore file into Web3Signer:"})}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsx)(s.li,{children:'When you import your keystore, make sure you select Stakehouse under "Staking protocol". This will automatically set your Fee Recipient address and point it to your LSD.'}),"\n",(0,o.jsx)(s.li,{children:"Pay special attention to this, since failing to properly configure the Fee Recipient may incurr in penalties for the Node Runner."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(s.hr,{}),"\n",(0,o.jsx)(s.p,{children:"Staking, though lucrative, also comes with inherent risks. Stakehouse simplifies the process but doesn't eliminate the risks. It's essential to conduct thorough research and always prioritize safety."}),"\n",(0,o.jsxs)(s.p,{children:["For further guidance and details, refer to ",(0,o.jsx)(s.a,{href:"https://docs.joinstakehouse.com/protocol/learn/Stakehouse",children:"Stakehouse's official documentation"}),", or drop by ",(0,o.jsx)(s.a,{href:"https://discord.gg/dappnode",children:"Dappnode's Discord server"})," for support."]})]})}function c(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},1151:(e,s,t)=>{t.d(s,{Z:()=>a,a:()=>i});var o=t(7294);const n={},r=o.createContext(n);function i(e){const s=o.useContext(r);return o.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),o.createElement(r.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e273c56f.20cc1e53.js b/assets/js/e273c56f.20cc1e53.js deleted file mode 100644 index 5a2ba8fd1..000000000 --- a/assets/js/e273c56f.20cc1e53.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2362],{4137:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function i(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function s(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var u=o.createContext({}),l=function(e){var t=o.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=l(e.components);return o.createElement(u.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},g=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,u=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=l(r),g=n,f=p["".concat(u,".").concat(g)]||p[g]||m[g]||a;return r?o.createElement(f,i(i({ref:t},c),{},{components:r})):o.createElement(f,i({ref:t},c))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,i=new Array(a);i[0]=g;var s={};for(var u in t)hasOwnProperty.call(t,u)&&(s[u]=t[u]);s.originalType=e,s[p]="string"==typeof e?e:n,i[1]=s;for(var l=2;l<a;l++)i[l]=r[l];return o.createElement.apply(null,i)}return o.createElement.apply(null,r)}g.displayName="MDXCreateElement"},8502:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var o=r(7462),n=(r(7294),r(4137));const a={slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},i=void 0,s={permalink:"/blog/first-blog-post",source:"@site/blog/2019-05-28-first-blog-post.md",title:"First Blog Post",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",formattedDate:"May 28, 2019",tags:[{label:"hola",permalink:"/blog/tags/hola"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"}],frontMatter:{slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},prevItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},u={authorsImageUrls:[void 0]},l=[],c={toc:l},p="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,o.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e273c56f.c02cde2e.js b/assets/js/e273c56f.c02cde2e.js new file mode 100644 index 000000000..b7d140b24 --- /dev/null +++ b/assets/js/e273c56f.c02cde2e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[2362],{9954:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>n,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>u,toc:()=>l});var s=o(5893),a=o(1151);const i={slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},r=void 0,u={permalink:"/blog/first-blog-post",source:"@site/blog/2019-05-28-first-blog-post.md",title:"First Blog Post",description:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet",date:"2019-05-28T00:00:00.000Z",formattedDate:"May 28, 2019",tags:[{label:"hola",permalink:"/blog/tags/hola"},{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.12,hasTruncateMarker:!1,authors:[{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"}],frontMatter:{slug:"first-blog-post",title:"First Blog Post",authors:{name:"Gao Wei",title:"Docusaurus Core Team",url:"https://github.com/wgao19",image_url:"https://github.com/wgao19.png",imageURL:"https://github.com/wgao19.png"},tags:["hola","docusaurus"]},unlisted:!1,prevItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},n={authorsImageUrls:[void 0]},l=[];function c(t){const e={p:"p",...(0,a.a)(),...t.components};return(0,s.jsx)(e.p,{children:"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet"})}function m(t={}){const{wrapper:e}={...(0,a.a)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(c,{...t})}):c(t)}},1151:(t,e,o)=>{o.d(e,{Z:()=>u,a:()=>r});var s=o(7294);const a={},i=s.createContext(a);function r(t){const e=s.useContext(i);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function u(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(a):t.components||a:r(t.components),s.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/e28e223d.67920957.js b/assets/js/e28e223d.67920957.js new file mode 100644 index 000000000..2b6ce8723 --- /dev/null +++ b/assets/js/e28e223d.67920957.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9091],{2755:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>s,toc:()=>a});var r=i(5893),t=i(1151);const l={},o="WireGuard Access to Dappnode",s={id:"user/access-your-dappnode/vpn/wireguard",title:"WireGuard Access to Dappnode",description:"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.",source:"@site/docs/user/access-your-dappnode/vpn/wireguard.md",sourceDirName:"user/access-your-dappnode/vpn",slug:"/user/access-your-dappnode/vpn/wireguard",permalink:"/docs/user/access-your-dappnode/vpn/wireguard",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/vpn/wireguard.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"VPN Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/overview"},next:{title:"OpenVPN Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/openvpn"}},d={},a=[{value:"Setting Up WireGuard",id:"setting-up-wireguard",level:2},{value:"1. Get VPN Credentials",id:"1-get-vpn-credentials",level:3},{value:"Option 1: Via Dappmanager UI",id:"option-1-via-dappmanager-ui",level:4},{value:"Option 2: Via Dappnode Terminal",id:"option-2-via-dappnode-terminal",level:4},{value:"2. Installing WireGuard Client",id:"2-installing-wireguard-client",level:3},{value:"3. Setting Up WireGuard Client",id:"3-setting-up-wireguard-client",level:3},{value:"4. Connecting to Dappnode via WireGuard",id:"4-connecting-to-dappnode-via-wireguard",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,t.a)(),...e.components},{Details:l}=n;return l||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"wireguard-access-to-dappnode",children:"WireGuard Access to Dappnode"}),"\n",(0,r.jsx)(n.p,{children:"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode."}),"\n",(0,r.jsx)(n.p,{children:"You will need:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Your dappnode"}),"\n",(0,r.jsx)(n.li,{children:"A Wireguard client installed on your usual device (laptop, mobile, etc.)"}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"setting-up-wireguard",children:"Setting Up WireGuard"}),"\n",(0,r.jsx)(n.h3,{id:"1-get-vpn-credentials",children:"1. Get VPN Credentials"}),"\n",(0,r.jsx)(n.p,{children:"There are two primary methods to obtain your VPN credentials:"}),"\n",(0,r.jsx)(n.h4,{id:"option-1-via-dappmanager-ui",children:"Option 1: Via Dappmanager UI"}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.img,{alt:"VPN_credentials",src:i(3079).Z+"",width:"3016",height:"812"})}),"\n",(0,r.jsx)(n.p,{children:"If you have access to the Dappmanager:"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Navigate to ",(0,r.jsx)(n.strong,{children:"VPN > WireGuard"}),"."]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"If you don't see any device added to the list:"})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Provide a name for your device."}),"\n",(0,r.jsx)(n.li,{children:"Click on 'Add New Device'."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"To retrieve the credentials:"})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Click on the 'Get link' button on the credentials column."}),"\n",(0,r.jsxs)(n.li,{children:["You will be shown 3 different ways of retrieving the credentials:","\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.em,{children:"Download config:"})," it will download a .txt file with the credentials in plaintext"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.em,{children:"Copy config:"})," it will copy the credentials in your clipboard so you can paste them in your wireguard client"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.em,{children:"Show config QR code:"})," it will generate a QR that you can scan with a wireguard mobile client to add the config directly"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.li,{children:"Please, see step 3. Setting up Wireguard client to see how to use this config once you have a client in your device (desktop/laptop/phone)"}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"For Local Access Credentials:"})}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Click on 'Show Local Credentials'."}),"\n",(0,r.jsx)(n.li,{children:"Copy the local credentials displayed."}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsx)(n.h4,{id:"option-2-via-dappnode-terminal",children:"Option 2: Via Dappnode Terminal"}),"\n",(0,r.jsx)(n.p,{children:"If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Access the Dappnode terminal, as explained ",(0,r.jsx)(n.a,{href:"/docs/user/access-your-dappnode/terminal",children:"here"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsxs)(n.p,{children:["Execute the command: ",(0,r.jsx)(n.code,{children:"dappnode_wireguard"}),"."]}),"\n"]}),"\n",(0,r.jsxs)(n.li,{children:["\n",(0,r.jsx)(n.p,{children:"The credentials will be displayed directly on the terminal. Copy these credentials."}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.strong,{children:"For Local Access Credentials:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Execute the command: ",(0,r.jsx)(n.code,{children:"dappnode_wireguard --local"}),"."]}),"\n",(0,r.jsx)(n.li,{children:"Copy the local credentials displayed."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,r.jsxs)(n.admonition,{title:"Local Credentials Explained",type:"info",children:[(0,r.jsx)(n.p,{children:"Local credentials allow you to establish a connection to your Dappnode when you are on the same local network. They are especially useful when remote credentials might not work due to certain network restrictions or configurations."}),(0,r.jsx)(n.p,{children:"While remote credentials enable access from outside your local network, local credentials ensure a reliable connection within your home or office network. It's recommended to use local credentials when you are in proximity to your Dappnode to guarantee a stable and swift connection."}),(0,r.jsxs)(n.p,{children:["Always remember: Local credentials ",(0,r.jsx)(n.strong,{children:"only work inside your own network"}),". If you're trying to access your Dappnode from a different location or network, you'll need to use the remote credentials."]})]}),"\n",(0,r.jsx)(n.admonition,{type:"tip",children:(0,r.jsx)(n.p,{children:"Ensure you store these credentials securely. They provide direct access to your Dappnode. Treat them with the same level of caution as you would a password."})}),"\n",(0,r.jsx)(n.h3,{id:"2-installing-wireguard-client",children:"2. Installing WireGuard Client"}),"\n",(0,r.jsxs)(n.p,{children:["After obtaining your VPN credentials, the next step is to install the WireGuard client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the ",(0,r.jsx)(n.a,{href:"https://www.wireguard.com/install/",children:"WireGuard website"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"3-setting-up-wireguard-client",children:"3. Setting Up WireGuard Client"}),"\n",(0,r.jsx)(n.p,{children:"After installing the client:"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Launch the WireGuard application."}),"\n",(0,r.jsx)(n.li,{children:"Click on 'Add Tunnel' or 'Import Tunnel from File' based on your platform."}),"\n",(0,r.jsx)(n.li,{children:"Import the credentials you obtained in the earlier steps."}),"\n",(0,r.jsx)(n.li,{children:"Once imported, connect to your Dappnode by activating the tunnel."}),"\n"]}),"\n",(0,r.jsx)(n.admonition,{title:"Connection Status",type:"tip",children:(0,r.jsx)(n.p,{children:"You can verify your connection status within the WireGuard application. It will display if the tunnel is active, as well as data transfer rates."})}),"\n",(0,r.jsx)(n.h3,{id:"4-connecting-to-dappnode-via-wireguard",children:"4. Connecting to Dappnode via WireGuard"}),"\n",(0,r.jsxs)(l,{children:[(0,r.jsx)("summary",{children:(0,r.jsx)("b",{children:"Android"})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Launch the OpenVPN for Android app."}),"\n",(0,r.jsx)(n.li,{children:'Tap on "+" icon.'}),"\n",(0,r.jsx)(n.li,{children:"Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile."}),"\n"]}),(0,r.jsx)("p",{align:"center",children:(0,r.jsx)("img",{src:"/img/wireguard_android.jpg",alt:"Import file in Android",style:{width:"20em"}})})]}),"\n",(0,r.jsxs)(l,{children:[(0,r.jsx)("summary",{children:(0,r.jsx)("b",{children:"iPhone/iPad"})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Launch the OpenVPN for Android app."}),"\n",(0,r.jsx)(n.li,{children:'Tap on "Add a tunnel".'}),"\n",(0,r.jsx)(n.li,{children:"Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile."}),"\n"]}),(0,r.jsx)("p",{align:"center",children:(0,r.jsx)("img",{src:"/img/wireguard_ios_tunnel.jpeg",alt:"Import file in iPhone",style:{width:"20em"}})})]}),"\n",(0,r.jsxs)(l,{children:[(0,r.jsxs)("summary",{children:[" ",(0,r.jsx)("b",{children:"Linux"})]}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsxs)(n.li,{children:["Create a file for your credentials: ",(0,r.jsx)(n.code,{children:"sudo nano /etc/wireguard/wg0.conf"})]}),"\n",(0,r.jsx)(n.li,{children:"Paste your credentials there and save the file (Ctrl+Shift+V, Ctrl+O, Ctrl+X)."}),"\n",(0,r.jsxs)(n.li,{children:["Activate the tunnel: ",(0,r.jsx)(n.code,{children:"sudo wg-quick up wg0"})]}),"\n"]}),(0,r.jsx)(n.admonition,{title:"Tunnel Deactivation",type:"note",children:(0,r.jsxs)(n.p,{children:["To deactivate the tunnel, execute the command: ",(0,r.jsx)(n.code,{children:"sudo wg-quick down wg0"}),"."]})})]}),"\n",(0,r.jsxs)(l,{children:[(0,r.jsx)("summary",{children:(0,r.jsx)("b",{children:"macOS"})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"In the list of Applications, search for WireGuard and launch it."}),"\n",(0,r.jsx)(n.li,{children:'Click on "Manage Tunnels".'}),"\n",(0,r.jsx)(n.li,{children:'Click on the "+" button.'}),"\n",(0,r.jsx)(n.li,{children:'Select "Add empty tunnel".'}),"\n",(0,r.jsx)(n.li,{children:"Paste the credentials you obtained earlier."}),"\n",(0,r.jsx)(n.li,{children:'Give a name to this profile and click on "Save".'}),"\n",(0,r.jsx)(n.li,{children:'Click on "Activate" to connect to your Dappnode.'}),"\n"]}),(0,r.jsx)("p",{align:"center",children:(0,r.jsx)("img",{src:"/img/wireguard_macos_tunnel.png",alt:"Manage tunnels in macOS",style:{width:"40em"}})}),(0,r.jsx)("p",{align:"center",children:(0,r.jsx)("img",{src:"/img/wireguard_macos_credentials.png",alt:"Credentials in macOS",style:{width:"40em"}})})]}),"\n",(0,r.jsxs)(l,{children:[(0,r.jsx)("summary",{children:(0,r.jsx)("b",{children:"Windows"})}),(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Launch the OpenVPN for Windows app."}),"\n",(0,r.jsx)(n.li,{children:'Click on "Add Tunnel".'}),"\n",(0,r.jsx)(n.li,{children:"Paste the credentials you obtained earlier and save."}),"\n",(0,r.jsx)(n.li,{children:"Activate the tunnel."}),"\n"]}),(0,r.jsx)("p",{align:"center",children:(0,r.jsx)("img",{src:"/img/wireguard_windows.png",alt:"Import file in Windows",style:{width:"40em"}})}),(0,r.jsx)("p",{align:"center",children:(0,r.jsx)("img",{src:"/img/wireguard_windows_tunnel.png",alt:"Import file in Windows",style:{width:"40em"}})}),(0,r.jsx)("p",{align:"center",children:(0,r.jsx)("img",{src:"/img/wireguard_windows_activate.png",alt:"Import file in Windows",style:{width:"40em"}})})]}),"\n",(0,r.jsx)("br",{}),"\n",(0,r.jsx)(n.admonition,{title:"Testing Your Connection",type:"tip",children:(0,r.jsxs)(n.p,{children:["Once connected, you can directly type ",(0,r.jsx)(n.a,{href:"http://my.dappnode",children:"http://my.dappnode"})," in your browser to access the Dappmanager."]})})]})}function p(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(c,{...e})}):c(e)}},3079:(e,n,i)=>{i.d(n,{Z:()=>r});const r=i.p+"assets/images/vpn-1-6287a68b939ea706930361adde9259e2.png"},1151:(e,n,i)=>{i.d(n,{Z:()=>s,a:()=>o});var r=i(7294);const t={},l=r.createContext(t);function o(e){const n=r.useContext(l);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),r.createElement(l.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e28e223d.ac6588ab.js b/assets/js/e28e223d.ac6588ab.js deleted file mode 100644 index 8bf8320dd..000000000 --- a/assets/js/e28e223d.ac6588ab.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[9091],{4137:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>k});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),d=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=d(e.components);return a.createElement(p.Provider,{value:t},e.children)},s="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),s=d(n),m=r,k=s["".concat(p,".").concat(m)]||s[m]||u[m]||i;return n?a.createElement(k,o(o({ref:t},c),{},{components:n})):a.createElement(k,o({ref:t},c))}));function k(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[s]="string"==typeof e?e:r,o[1]=l;for(var d=2;d<i;d++)o[d]=n[d];return a.createElement.apply(null,o)}return a.createElement.apply(null,n)}m.displayName="MDXCreateElement"},9350:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var a=n(7462),r=(n(7294),n(4137));const i={},o="WireGuard Access to Dappnode",l={unversionedId:"user/access-your-dappnode/vpn/wireguard",id:"user/access-your-dappnode/vpn/wireguard",title:"WireGuard Access to Dappnode",description:"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.",source:"@site/docs/user/access-your-dappnode/vpn/wireguard.md",sourceDirName:"user/access-your-dappnode/vpn",slug:"/user/access-your-dappnode/vpn/wireguard",permalink:"/docs/user/access-your-dappnode/vpn/wireguard",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/access-your-dappnode/vpn/wireguard.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"VPN Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/overview"},next:{title:"OpenVPN Access to Dappnode",permalink:"/docs/user/access-your-dappnode/vpn/openvpn"}},p={},d=[{value:"Setting Up WireGuard",id:"setting-up-wireguard",level:2},{value:"1. Get VPN Credentials",id:"1-get-vpn-credentials",level:3},{value:"Option 1: Via Dappmanager UI",id:"option-1-via-dappmanager-ui",level:4},{value:"Option 2: Via Dappnode Terminal",id:"option-2-via-dappnode-terminal",level:4},{value:"2. Installing WireGuard Client",id:"2-installing-wireguard-client",level:3},{value:"3. Setting Up WireGuard Client",id:"3-setting-up-wireguard-client",level:3},{value:"4. Connecting to Dappnode via WireGuard",id:"4-connecting-to-dappnode-via-wireguard",level:3}],c={toc:d},s="wrapper";function u(e){let{components:t,...i}=e;return(0,r.kt)(s,(0,a.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"wireguard-access-to-dappnode"},"WireGuard Access to Dappnode"),(0,r.kt)("p",null,"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode."),(0,r.kt)("p",null,"You will need:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Your dappnode"),(0,r.kt)("li",{parentName:"ol"},"A Wireguard client installed on your usual device (laptop, mobile, etc.)")),(0,r.kt)("h2",{id:"setting-up-wireguard"},"Setting Up WireGuard"),(0,r.kt)("h3",{id:"1-get-vpn-credentials"},"1. Get VPN Credentials"),(0,r.kt)("p",null,"There are two primary methods to obtain your VPN credentials:"),(0,r.kt)("h4",{id:"option-1-via-dappmanager-ui"},"Option 1: Via Dappmanager UI"),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"VPN_credentials",src:n(3079).Z,width:"3016",height:"812"})),(0,r.kt)("p",null,"If you have access to the Dappmanager:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Navigate to ",(0,r.kt)("strong",{parentName:"p"},"VPN > WireGuard"),"."),(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"If you don't see any device added to the list:")),(0,r.kt)("ol",{parentName:"li"},(0,r.kt)("li",{parentName:"ol"},"Provide a name for your device."),(0,r.kt)("li",{parentName:"ol"},"Click on 'Add New Device'."))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"To retrieve the credentials:")),(0,r.kt)("ol",{parentName:"li"},(0,r.kt)("li",{parentName:"ol"},"Click on the 'Get link' button on the credentials column."),(0,r.kt)("li",{parentName:"ol"},"You will be shown 3 different ways of retrieving the credentials:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Download config:")," it will download a .txt file with the credentials in plaintext"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Copy config:")," it will copy the credentials in your clipboard so you can paste them in your wireguard client"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("em",{parentName:"li"},"Show config QR code:")," it will generate a QR that you can scan with a wireguard mobile client to add the config directly"))),(0,r.kt)("li",{parentName:"ol"},"Please, see step 3. Setting up Wireguard client to see how to use this config once you have a client in your device (desktop/laptop/phone)"))),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("strong",{parentName:"p"},"For Local Access Credentials:")),(0,r.kt)("ol",{parentName:"li"},(0,r.kt)("li",{parentName:"ol"},"Click on 'Show Local Credentials'."),(0,r.kt)("li",{parentName:"ol"},"Copy the local credentials displayed.")))))),(0,r.kt)("h4",{id:"option-2-via-dappnode-terminal"},"Option 2: Via Dappnode Terminal"),(0,r.kt)("p",null,"If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Access the Dappnode terminal, as explained ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/terminal"},"here"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Execute the command: ",(0,r.kt)("inlineCode",{parentName:"p"},"dappnode_wireguard"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"The credentials will be displayed directly on the terminal. Copy these credentials."))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"For Local Access Credentials:"),(0,r.kt)("ol",{parentName:"li"},(0,r.kt)("li",{parentName:"ol"},"Execute the command: ",(0,r.kt)("inlineCode",{parentName:"li"},"dappnode_wireguard --local"),"."),(0,r.kt)("li",{parentName:"ol"},"Copy the local credentials displayed.")))),(0,r.kt)("admonition",{title:"Local Credentials Explained",type:"info"},(0,r.kt)("p",{parentName:"admonition"},"Local credentials allow you to establish a connection to your Dappnode when you are on the same local network. They are especially useful when remote credentials might not work due to certain network restrictions or configurations."),(0,r.kt)("p",{parentName:"admonition"},"While remote credentials enable access from outside your local network, local credentials ensure a reliable connection within your home or office network. It's recommended to use local credentials when you are in proximity to your Dappnode to guarantee a stable and swift connection."),(0,r.kt)("p",{parentName:"admonition"},"Always remember: Local credentials ",(0,r.kt)("strong",{parentName:"p"},"only work inside your own network"),". If you're trying to access your Dappnode from a different location or network, you'll need to use the remote credentials.")),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Ensure you store these credentials securely. They provide direct access to your Dappnode. Treat them with the same level of caution as you would a password.")),(0,r.kt)("h3",{id:"2-installing-wireguard-client"},"2. Installing WireGuard Client"),(0,r.kt)("p",null,"After obtaining your VPN credentials, the next step is to install the WireGuard client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the ",(0,r.kt)("a",{parentName:"p",href:"https://www.wireguard.com/install/"},"WireGuard website"),"."),(0,r.kt)("h3",{id:"3-setting-up-wireguard-client"},"3. Setting Up WireGuard Client"),(0,r.kt)("p",null,"After installing the client:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Launch the WireGuard application."),(0,r.kt)("li",{parentName:"ol"},"Click on 'Add Tunnel' or 'Import Tunnel from File' based on your platform."),(0,r.kt)("li",{parentName:"ol"},"Import the credentials you obtained in the earlier steps."),(0,r.kt)("li",{parentName:"ol"},"Once imported, connect to your Dappnode by activating the tunnel.")),(0,r.kt)("admonition",{title:"Connection Status",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"You can verify your connection status within the WireGuard application. It will display if the tunnel is active, as well as data transfer rates.")),(0,r.kt)("h3",{id:"4-connecting-to-dappnode-via-wireguard"},"4. Connecting to Dappnode via WireGuard"),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("b",null,"Android")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Launch the OpenVPN for Android app."),(0,r.kt)("li",{parentName:"ol"},'Tap on "+" icon.'),(0,r.kt)("li",{parentName:"ol"},"Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile.")),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{src:"/img/wireguard_android.jpg",alt:"Import file in Android",style:{width:"20em"}}))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("b",null,"iPhone/iPad")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Launch the OpenVPN for Android app."),(0,r.kt)("li",{parentName:"ol"},'Tap on "Add a tunnel".'),(0,r.kt)("li",{parentName:"ol"},"Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile.")),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{src:"/img/wireguard_ios_tunnel.jpeg",alt:"Import file in iPhone",style:{width:"20em"}}))),(0,r.kt)("details",null,(0,r.kt)("summary",null," ",(0,r.kt)("b",null,"Linux")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Create a file for your credentials: ",(0,r.kt)("inlineCode",{parentName:"li"},"sudo nano /etc/wireguard/wg0.conf")),(0,r.kt)("li",{parentName:"ol"},"Paste your credentials there and save the file (Ctrl+Shift+V, Ctrl+O, Ctrl+X)."),(0,r.kt)("li",{parentName:"ol"},"Activate the tunnel: ",(0,r.kt)("inlineCode",{parentName:"li"},"sudo wg-quick up wg0"))),(0,r.kt)("admonition",{title:"Tunnel Deactivation",type:"note"},(0,r.kt)("p",{parentName:"admonition"},"To deactivate the tunnel, execute the command: ",(0,r.kt)("inlineCode",{parentName:"p"},"sudo wg-quick down wg0"),"."))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("b",null,"macOS")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"In the list of Applications, search for WireGuard and launch it."),(0,r.kt)("li",{parentName:"ol"},'Click on "Manage Tunnels".'),(0,r.kt)("li",{parentName:"ol"},'Click on the "+" button.'),(0,r.kt)("li",{parentName:"ol"},'Select "Add empty tunnel".'),(0,r.kt)("li",{parentName:"ol"},"Paste the credentials you obtained earlier."),(0,r.kt)("li",{parentName:"ol"},'Give a name to this profile and click on "Save".'),(0,r.kt)("li",{parentName:"ol"},'Click on "Activate" to connect to your Dappnode.')),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{src:"/img/wireguard_macos_tunnel.png",alt:"Manage tunnels in macOS",style:{width:"40em"}})),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{src:"/img/wireguard_macos_credentials.png",alt:"Credentials in macOS",style:{width:"40em"}}))),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("b",null,"Windows")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Launch the OpenVPN for Windows app."),(0,r.kt)("li",{parentName:"ol"},'Click on "Add Tunnel".'),(0,r.kt)("li",{parentName:"ol"},"Paste the credentials you obtained earlier and save."),(0,r.kt)("li",{parentName:"ol"},"Activate the tunnel.")),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{src:"/img/wireguard_windows.png",alt:"Import file in Windows",style:{width:"40em"}})),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{src:"/img/wireguard_windows_tunnel.png",alt:"Import file in Windows",style:{width:"40em"}})),(0,r.kt)("p",{align:"center"},(0,r.kt)("img",{src:"/img/wireguard_windows_activate.png",alt:"Import file in Windows",style:{width:"40em"}}))),(0,r.kt)("br",null),(0,r.kt)("admonition",{title:"Testing Your Connection",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Once connected, you can directly type ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode"},"http://my.dappnode")," in your browser to access the Dappmanager.")))}u.isMDXComponent=!0},3079:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/vpn-1-6287a68b939ea706930361adde9259e2.png"}}]); \ No newline at end of file diff --git a/assets/js/e7ae4afa.25e59390.js b/assets/js/e7ae4afa.25e59390.js new file mode 100644 index 000000000..388ccfc97 --- /dev/null +++ b/assets/js/e7ae4afa.25e59390.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[190],{4352:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>o,contentTitle:()=>r,default:()=>u,frontMatter:()=>c,metadata:()=>a,toc:()=>l});var t=s(5893),i=s(1151);const c={},r="Ethereum Classic",a={id:"user/packages/ethclassic",title:"Ethereum Classic",description:"Introducing Ethereum Classic: Preserving Blockchain Principles",source:"@site/docs/user/packages/ethclassic.md",sourceDirName:"user/packages",slug:"/user/packages/ethclassic",permalink:"/docs/user/packages/ethclassic",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/ethclassic.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Bitcoin",permalink:"/docs/user/packages/bitcoin"},next:{title:"Avalanche",permalink:"/docs/user/packages/avalanche"}},o={},l=[{value:"Introducing Ethereum Classic: Preserving Blockchain Principles",id:"introducing-ethereum-classic-preserving-blockchain-principles",level:2},{value:"Ethereum Classic on Dappnode: Supporting Decentralization",id:"ethereum-classic-on-dappnode-supporting-decentralization",level:2}];function p(e){const n={h1:"h1",h2:"h2",p:"p",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"ethereum-classic",children:"Ethereum Classic"}),"\n",(0,t.jsx)(n.h2,{id:"introducing-ethereum-classic-preserving-blockchain-principles",children:"Introducing Ethereum Classic: Preserving Blockchain Principles"}),"\n",(0,t.jsx)(n.p,{children:"Ethereum Classic, a steadfast blockchain, emerged from the Ethereum chain split, committed to upholding the unwavering principles of blockchain immutability. Ethereum Classic champions the preservation of transaction history and decentralized governance."}),"\n",(0,t.jsx)(n.h2,{id:"ethereum-classic-on-dappnode-supporting-decentralization",children:"Ethereum Classic on Dappnode: Supporting Decentralization"}),"\n",(0,t.jsx)(n.p,{children:"Step into the Ethereum Classic universe and become a steward of its principles. Ethereum Classic\u2019s commitment to blockchain origins offers a space for decentralized ideals to thrive. Through an Ethereum Classic node on Dappnode, you contribute to the preservation of an ecosystem where code remains law and history remains unaltered."})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(p,{...e})}):p(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>r});var t=s(7294);const i={},c=t.createContext(i);function r(e){const n=t.useContext(c);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(i):e.components||i:r(e.components),t.createElement(c.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e7ae4afa.f4b21baa.js b/assets/js/e7ae4afa.f4b21baa.js deleted file mode 100644 index b15a7155b..000000000 --- a/assets/js/e7ae4afa.f4b21baa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[190],{4137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>h});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function o(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),u=l(r),m=a,h=u["".concat(s,".").concat(m)]||u[m]||d[m]||i;return r?n.createElement(h,c(c({ref:t},p),{},{components:r})):n.createElement(h,c({ref:t},p))}));function h(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,c=new Array(i);c[0]=m;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[u]="string"==typeof e?e:a,c[1]=o;for(var l=2;l<i;l++)c[l]=r[l];return n.createElement.apply(null,c)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},5887:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var n=r(7462),a=(r(7294),r(4137));const i={},c="Ethereum Classic",o={unversionedId:"user/packages/ethclassic",id:"user/packages/ethclassic",title:"Ethereum Classic",description:"Introducing Ethereum Classic: Preserving Blockchain Principles",source:"@site/docs/user/packages/ethclassic.md",sourceDirName:"user/packages",slug:"/user/packages/ethclassic",permalink:"/docs/user/packages/ethclassic",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/packages/ethclassic.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Bitcoin",permalink:"/docs/user/packages/bitcoin"},next:{title:"Avalanche",permalink:"/docs/user/packages/avalanche"}},s={},l=[{value:"Introducing Ethereum Classic: Preserving Blockchain Principles",id:"introducing-ethereum-classic-preserving-blockchain-principles",level:2},{value:"Ethereum Classic on Dappnode: Supporting Decentralization",id:"ethereum-classic-on-dappnode-supporting-decentralization",level:2}],p={toc:l},u="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"ethereum-classic"},"Ethereum Classic"),(0,a.kt)("h2",{id:"introducing-ethereum-classic-preserving-blockchain-principles"},"Introducing Ethereum Classic: Preserving Blockchain Principles"),(0,a.kt)("p",null,"Ethereum Classic, a steadfast blockchain, emerged from the Ethereum chain split, committed to upholding the unwavering principles of blockchain immutability. Ethereum Classic champions the preservation of transaction history and decentralized governance."),(0,a.kt)("h2",{id:"ethereum-classic-on-dappnode-supporting-decentralization"},"Ethereum Classic on Dappnode: Supporting Decentralization"),(0,a.kt)("p",null,"Step into the Ethereum Classic universe and become a steward of its principles. Ethereum Classic\u2019s commitment to blockchain origins offers a space for decentralized ideals to thrive. Through an Ethereum Classic node on Dappnode, you contribute to the preservation of an ecosystem where code remains law and history remains unaltered."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e7fcc526.2f0cf05c.js b/assets/js/e7fcc526.2f0cf05c.js deleted file mode 100644 index b10450128..000000000 --- a/assets/js/e7fcc526.2f0cf05c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5447],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>m});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var p=a.createContext({}),l=function(e){var t=a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},d=function(e){var t=l(e.components);return a.createElement(p.Provider,{value:t},e.children)},c="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),c=l(n),h=r,m=c["".concat(p,".").concat(h)]||c[h]||u[h]||o;return n?a.createElement(m,i(i({ref:t},d),{},{components:n})):a.createElement(m,i({ref:t},d))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=h;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:r,i[1]=s;for(var l=2;l<o;l++)i[l]=n[l];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}h.displayName="MDXCreateElement"},4612:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var a=n(7462),r=(n(7294),n(4137));const o={},i="SSV Distributed Validator package for Dappnode",s={unversionedId:"user/staking/ethereum/dvt-technologies/ssv-network",id:"user/staking/ethereum/dvt-technologies/ssv-network",title:"SSV Distributed Validator package for Dappnode",description:"---",source:"@site/docs/user/staking/ethereum/dvt-technologies/ssv-network.md",sourceDirName:"user/staking/ethereum/dvt-technologies",slug:"/user/staking/ethereum/dvt-technologies/ssv-network",permalink:"/docs/user/staking/ethereum/dvt-technologies/ssv-network",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/dvt-technologies/ssv-network.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Obol Distributed Validator package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/obol-network"},next:{title:"Diva package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/diva"}},p={},l=[{value:"<strong>Introduction</strong>",id:"introduction",level:3},{value:"<strong>Requirements</strong>",id:"requirements",level:3},{value:"<strong>Registering a Dappnode SSV Node as an Operator</strong>",id:"registering-a-dappnode-ssv-node-as-an-operator",level:3},{value:"Exposing your DKG service",id:"exposing-your-dkg-service",level:3}],d={toc:l},c="wrapper";function u(e){let{components:t,...o}=e;return(0,r.kt)(c,(0,a.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ssv-distributed-validator-package-for-dappnode"},"SSV Distributed Validator package for Dappnode"),(0,r.kt)("hr",null),(0,r.kt)("h3",{id:"introduction"},(0,r.kt)("strong",{parentName:"h3"},"Introduction")),(0,r.kt)("p",null,"SSV is a network of validators that use a decentralized network of operators to run their validators. This package allows you to run an SSV Operator Node. The package is available for ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode/installer/dnp/ssv.dnp.dappnode.eth"},"Ethereum Mainnet")," and the ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode/installer/dnp/ssv-holesky.dnp.dappnode.eth"},"Holesky Testnet"),"."),(0,r.kt)("p",null,"A Distributed Validator is one or more logical 32 ETH validators being operated across a number of nodes that are all online simultaneously and that all control a subset of each validator\u2019s private keys. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage.\nThe SSV network allows both users and operators to diversify staking risks, optimize performance, and promote decentralization across the Ethereum consensus layer with a wide range of configuration options."),(0,r.kt)("h3",{id:"requirements"},(0,r.kt)("strong",{parentName:"h3"},"Requirements")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"The first thing you'll need to do is set up a fully-synced node. This can be don through the Stakers Menu in Dappnode by selecting:")),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"1 Execution Client (Geth, Besu, Erigon or Nethermind)"),(0,r.kt)("li",{parentName:"ul"},"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"),(0,r.kt)("li",{parentName:"ul"},"MEV Boost (optional)")),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Installing the SSV package for Dappnode. This can be done by visiting the ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode/installer/dnp"},"DAppStore")," in the Dappnode UI and installing the SSV (Ethereum Mainnet) or SSV Holesky package.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Plus, you'll need to get the following information:"))),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Operator public key"),": Shown in your SSV package's Info tab after installing it."),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Operator fee"),": The fee charged by the operator per each managed validator. You can find ",(0,r.kt)("a",{parentName:"li",href:"https://docs.ssv.network/learn/protocol-overview/tokenomics/fees"},"more info about this")," in the SSV documentation. Keep in mind this fee can be changed later on if needed.")),(0,r.kt)("h3",{id:"registering-a-dappnode-ssv-node-as-an-operator"},(0,r.kt)("strong",{parentName:"h3"},"Registering a Dappnode SSV Node as an Operator")),(0,r.kt)("p",null,"After successfully installing the SSV package, an operator must register it to the SSV Network in order to be discoverable by validators. You'll be able to do so in the SSV network ",(0,r.kt)("a",{parentName:"p",href:"https://app.ssv.network"},"web app"),"."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Make sure to connect your Web3 wallet with the WebApp, and that the address corresponds with the one you want to manage your Operators with.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"If you are connecting for the first time, you should see a screen like the image below. Select ",(0,r.kt)("em",{parentName:"p"},"Join as Operator"),".\n",(0,r.kt)("img",{alt:"SSV-Launchpad1",src:n(1374).Z,width:"2304",height:"847"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"In the following screen, select ",(0,r.kt)("em",{parentName:"p"},"Register Operator"),".\n",(0,r.kt)("img",{alt:"SSV-Launchpad2",src:n(298).Z,width:"2304",height:"795"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"The next screen will ask you to input the Operator's public key and provide a confirmation of the Operator owner address. As mentioned earlier, this Operator's public key is shown in your SSV package's Info tab after installing it.\n",(0,r.kt)("img",{alt:"Dappnode-SSV1",src:n(3443).Z,width:"2846",height:"1500"})))),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Please verify once more that the owner address correspond to the wallet address you want to manage your operators with.")),(0,r.kt)("p",null,"Click ",(0,r.kt)("em",{parentName:"p"},"Next")," when ready."),(0,r.kt)("ol",{start:5},(0,r.kt)("li",{parentName:"ol"},"In the following screen you'll be asked to set the Operator Fee, which is the fee charged by the operator per each managed validator. You can find ",(0,r.kt)("a",{parentName:"li",href:"https://docs.ssv.network/learn/protocol-overview/tokenomics/fees"},"more info about this")," in the SSV documentation. Keep in mind this fee can be changed later on if needed.")),(0,r.kt)("p",null,"Enter a number and click ",(0,r.kt)("em",{parentName:"p"},"Next")," when ready.\n",(0,r.kt)("img",{alt:"SSV-Launchpad4",src:n(2432).Z,width:"2304",height:"1059"})),(0,r.kt)("ol",{start:6},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"This confirmation screen presents a recap of the information input so far. Double check everything and click ",(0,r.kt)("em",{parentName:"p"},"Register Operator")," when ready. This will generate a blockchain transaction you'll need to confirm to complete the Operator registration.\n",(0,r.kt)("img",{alt:"SSV-Launchpad5",src:n(6007).Z,width:"2304",height:"946"}))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Once the transacion goes through your Operator is successfully registered, and stakers could now choose it to operate their validators.\n",(0,r.kt)("img",{alt:"SSV-Launchpad7",src:n(1901).Z,width:"2304",height:"1031"})))),(0,r.kt)("admonition",{type:"warning"},(0,r.kt)("p",{parentName:"admonition"},"In SSV you may or you may not be an operator in the cluster where you'll be validating. Keep this in mind for good security practices when splitting validator keys.")),(0,r.kt)("h3",{id:"exposing-your-dkg-service"},"Exposing your DKG service"),(0,r.kt)("p",null,"If you want to run the ",(0,r.kt)("inlineCode",{parentName:"p"},"dkg")," service, make sure the operator is registered in the SSV network and check the service is not stopped in the ",(0,r.kt)("a",{parentName:"p",href:"http://my.dappnode/packages/my/ssv-holesky.dnp.dappnode.eth/info"},"SSV Info Tab"),"."),(0,r.kt)("p",null,"Add your node as a DKG endpoint in the ",(0,r.kt)("a",{parentName:"p",href:"https://app.ssv.network/"},"SSV App Operator Config"),". You must set: ",(0,r.kt)("inlineCode",{parentName:"p"},"http://<your-public-ip>:14515"),". Make sure your ",(0,r.kt)("inlineCode",{parentName:"p"},"14515")," port is open in your router setup."),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("p",{parentName:"admonition"},"You can get your public IP bu clicking on the avatar in the upper-right corner of the Dappnode UI.")),(0,r.kt)("admonition",{title:"It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator with.",type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility.")),(0,r.kt)("p",null,"If you have any questions, don't hesitate to drop by the ",(0,r.kt)("a",{parentName:"p",href:"https://discord.gg/dappnode"},"Dappnode Discord server"),"."))}u.isMDXComponent=!0},3443:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/dappnode-ssv1-950c580e50f6f6f677341512ce02bd75.png"},1374:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/registering_operator_0-e647e1e4829436efc11a050874d93a09.png"},298:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/registering_operator_2-38c04daca0578311df35d8deb7cb0611.png"},2432:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/registering_operator_4-29fc3b3d2323081a17696a69e65e0b72.png"},6007:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/registering_operator_5-a32b9a74cd2e40125d144a64ba459e3e.png"},1901:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/registering_operator_7-78eba980f52e82ad4d8e2bd4cf0af1c5.png"}}]); \ No newline at end of file diff --git a/assets/js/e7fcc526.f9db6e61.js b/assets/js/e7fcc526.f9db6e61.js new file mode 100644 index 000000000..a2e8b0fc0 --- /dev/null +++ b/assets/js/e7fcc526.f9db6e61.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[5447],{5861:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var s=t(5893),r=t(1151);const o={},i="SSV Distributed Validator package for Dappnode",a={id:"user/staking/ethereum/dvt-technologies/ssv-network",title:"SSV Distributed Validator package for Dappnode",description:"---",source:"@site/docs/user/staking/ethereum/dvt-technologies/ssv-network.md",sourceDirName:"user/staking/ethereum/dvt-technologies",slug:"/user/staking/ethereum/dvt-technologies/ssv-network",permalink:"/docs/user/staking/ethereum/dvt-technologies/ssv-network",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/dvt-technologies/ssv-network.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Obol Distributed Validator package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/obol-network"},next:{title:"Diva package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/diva"}},d={},l=[{value:"<strong>Introduction</strong>",id:"introduction",level:3},{value:"<strong>Requirements</strong>",id:"requirements",level:3},{value:"<strong>Registering a Dappnode SSV Node as an Operator</strong>",id:"registering-a-dappnode-ssv-node-as-an-operator",level:3},{value:"Exposing your DKG service",id:"exposing-your-dkg-service",level:3}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h3:"h3",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ssv-distributed-validator-package-for-dappnode",children:"SSV Distributed Validator package for Dappnode"}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h3,{id:"introduction",children:(0,s.jsx)(n.strong,{children:"Introduction"})}),"\n",(0,s.jsxs)(n.p,{children:["SSV is a network of validators that use a decentralized network of operators to run their validators. This package allows you to run an SSV Operator Node. The package is available for ",(0,s.jsx)(n.a,{href:"http://my.dappnode/installer/dnp/ssv.dnp.dappnode.eth",children:"Ethereum Mainnet"})," and the ",(0,s.jsx)(n.a,{href:"http://my.dappnode/installer/dnp/ssv-holesky.dnp.dappnode.eth",children:"Holesky Testnet"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"A Distributed Validator is one or more logical 32 ETH validators being operated across a number of nodes that are all online simultaneously and that all control a subset of each validator\u2019s private keys. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage.\nThe SSV network allows both users and operators to diversify staking risks, optimize performance, and promote decentralization across the Ethereum consensus layer with a wide range of configuration options."}),"\n",(0,s.jsx)(n.h3,{id:"requirements",children:(0,s.jsx)(n.strong,{children:"Requirements"})}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"The first thing you'll need to do is set up a fully-synced node. This can be don through the Stakers Menu in Dappnode by selecting:"}),"\n"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"1 Execution Client (Geth, Besu, Erigon or Nethermind)"}),"\n",(0,s.jsx)(n.li,{children:"1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)"}),"\n",(0,s.jsx)(n.li,{children:"MEV Boost (optional)"}),"\n"]}),"\n",(0,s.jsxs)(n.ol,{start:"2",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Installing the SSV package for Dappnode. This can be done by visiting the ",(0,s.jsx)(n.a,{href:"http://my.dappnode/installer/dnp",children:"DAppStore"})," in the Dappnode UI and installing the SSV (Ethereum Mainnet) or SSV Holesky package."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Plus, you'll need to get the following information:"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Operator public key"}),": Shown in your SSV package's Info tab after installing it."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Operator fee"}),": The fee charged by the operator per each managed validator. You can find ",(0,s.jsx)(n.a,{href:"https://docs.ssv.network/learn/protocol-overview/tokenomics/fees",children:"more info about this"})," in the SSV documentation. Keep in mind this fee can be changed later on if needed."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"registering-a-dappnode-ssv-node-as-an-operator",children:(0,s.jsx)(n.strong,{children:"Registering a Dappnode SSV Node as an Operator"})}),"\n",(0,s.jsxs)(n.p,{children:["After successfully installing the SSV package, an operator must register it to the SSV Network in order to be discoverable by validators. You'll be able to do so in the SSV network ",(0,s.jsx)(n.a,{href:"https://app.ssv.network",children:"web app"}),"."]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!"})}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Make sure to connect your Web3 wallet with the WebApp, and that the address corresponds with the one you want to manage your Operators with."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["If you are connecting for the first time, you should see a screen like the image below. Select ",(0,s.jsx)(n.em,{children:"Join as Operator"}),".\n",(0,s.jsx)(n.img,{alt:"SSV-Launchpad1",src:t(1374).Z+"",width:"2304",height:"847"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["In the following screen, select ",(0,s.jsx)(n.em,{children:"Register Operator"}),".\n",(0,s.jsx)(n.img,{alt:"SSV-Launchpad2",src:t(298).Z+"",width:"2304",height:"795"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["The next screen will ask you to input the Operator's public key and provide a confirmation of the Operator owner address. As mentioned earlier, this Operator's public key is shown in your SSV package's Info tab after installing it.\n",(0,s.jsx)(n.img,{alt:"Dappnode-SSV1",src:t(3443).Z+"",width:"2846",height:"1500"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"Please verify once more that the owner address correspond to the wallet address you want to manage your operators with."})}),"\n",(0,s.jsxs)(n.p,{children:["Click ",(0,s.jsx)(n.em,{children:"Next"})," when ready."]}),"\n",(0,s.jsxs)(n.ol,{start:"5",children:["\n",(0,s.jsxs)(n.li,{children:["In the following screen you'll be asked to set the Operator Fee, which is the fee charged by the operator per each managed validator. You can find ",(0,s.jsx)(n.a,{href:"https://docs.ssv.network/learn/protocol-overview/tokenomics/fees",children:"more info about this"})," in the SSV documentation. Keep in mind this fee can be changed later on if needed."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Enter a number and click ",(0,s.jsx)(n.em,{children:"Next"})," when ready.\n",(0,s.jsx)(n.img,{alt:"SSV-Launchpad4",src:t(2432).Z+"",width:"2304",height:"1059"})]}),"\n",(0,s.jsxs)(n.ol,{start:"6",children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["This confirmation screen presents a recap of the information input so far. Double check everything and click ",(0,s.jsx)(n.em,{children:"Register Operator"})," when ready. This will generate a blockchain transaction you'll need to confirm to complete the Operator registration.\n",(0,s.jsx)(n.img,{alt:"SSV-Launchpad5",src:t(6007).Z+"",width:"2304",height:"946"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Once the transacion goes through your Operator is successfully registered, and stakers could now choose it to operate their validators.\n",(0,s.jsx)(n.img,{alt:"SSV-Launchpad7",src:t(1901).Z+"",width:"2304",height:"1031"})]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsx)(n.p,{children:"In SSV you may or you may not be an operator in the cluster where you'll be validating. Keep this in mind for good security practices when splitting validator keys."})}),"\n",(0,s.jsx)(n.h3,{id:"exposing-your-dkg-service",children:"Exposing your DKG service"}),"\n",(0,s.jsxs)(n.p,{children:["If you want to run the ",(0,s.jsx)(n.code,{children:"dkg"})," service, make sure the operator is registered in the SSV network and check the service is not stopped in the ",(0,s.jsx)(n.a,{href:"http://my.dappnode/packages/my/ssv-holesky.dnp.dappnode.eth/info",children:"SSV Info Tab"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Add your node as a DKG endpoint in the ",(0,s.jsx)(n.a,{href:"https://app.ssv.network/",children:"SSV App Operator Config"}),". You must set: ",(0,s.jsx)(n.code,{children:"http://<your-public-ip>:14515"}),". Make sure your ",(0,s.jsx)(n.code,{children:"14515"})," port is open in your router setup."]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"You can get your public IP bu clicking on the avatar in the upper-right corner of the Dappnode UI."})}),"\n",(0,s.jsx)(n.admonition,{title:"It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator with.",type:"tip",children:(0,s.jsx)(n.p,{children:"You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility."})}),"\n",(0,s.jsxs)(n.p,{children:["If you have any questions, don't hesitate to drop by the ",(0,s.jsx)(n.a,{href:"https://discord.gg/dappnode",children:"Dappnode Discord server"}),"."]})]})}function c(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},3443:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/dappnode-ssv1-950c580e50f6f6f677341512ce02bd75.png"},1374:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/registering_operator_0-e647e1e4829436efc11a050874d93a09.png"},298:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/registering_operator_2-38c04daca0578311df35d8deb7cb0611.png"},2432:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/registering_operator_4-29fc3b3d2323081a17696a69e65e0b72.png"},6007:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/registering_operator_5-a32b9a74cd2e40125d144a64ba459e3e.png"},1901:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/registering_operator_7-78eba980f52e82ad4d8e2bd4cf0af1c5.png"},1151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>i});var s=t(7294);const r={},o=s.createContext(r);function i(e){const n=s.useContext(o);return s.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),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ed77d0ad.9dacab61.js b/assets/js/ed77d0ad.9dacab61.js new file mode 100644 index 000000000..54307dba5 --- /dev/null +++ b/assets/js/ed77d0ad.9dacab61.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3218],{2250:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>a,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var t=o(5893),s=o(1151);const r={},i="Rocketpool",l={id:"user/staking/ethereum/lsd-pools/rocketpool",title:"Rocketpool",description:"---",source:"@site/docs/user/staking/ethereum/lsd-pools/rocketpool.md",sourceDirName:"user/staking/ethereum/lsd-pools",slug:"/user/staking/ethereum/lsd-pools/rocketpool",permalink:"/docs/user/staking/ethereum/lsd-pools/rocketpool",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/lsd-pools/rocketpool.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Holesky Testnet",permalink:"/docs/user/staking/ethereum/solo/holesky"},next:{title:"StakeWise",permalink:"/docs/user/staking/ethereum/lsd-pools/stakewise"}},a={},c=[{value:"<strong>Rocketpool Overview</strong>",id:"rocketpool-overview",level:3},{value:"<strong>Package Key Features</strong>",id:"package-key-features",level:3},{value:"<strong>First Steps to Start a Minipool with Rocketpool and Dappnode</strong>",id:"first-steps-to-start-a-minipool-with-rocketpool-and-dappnode",level:3}];function d(e){const n={a:"a",h1:"h1",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"rocketpool",children:"Rocketpool"}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h3,{id:"rocketpool-overview",children:(0,t.jsx)(n.strong,{children:"Rocketpool Overview"})}),"\n",(0,t.jsx)(n.p,{children:'Rocketpool is a decentralized Ethereum staking solution that allows users to earn rewards by staking their Ether (ETH). It\'s designed to be inclusive, allowing those without the full 32 ETH required for an Ethereum validator to be able to participate. Rocketpool achieves this through its innovative "minipool" concept, which facilitates pooled staking among multiple participants.'}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h3,{id:"package-key-features",children:(0,t.jsx)(n.strong,{children:"Package Key Features"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Decentralized Staking:"})," The Rocketpool package ensures that staking remains decentralized by using your Dappnode's local Ethereum node, safeguarding the core principles of the Ethereum network. Rocketpool also operates on smart contracts, ensuring that operations are transparent, auditable, and free from centralized control."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Minipools:"})," Users can start a minipool with as little as 16 or 8 ETH, allowing for broader participation in Ethereum's block creation."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Integrated with DappNode:"})," Easy setup, monitoring, and management of Rocketpool directly from your Dappnode interface."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.h3,{id:"first-steps-to-start-a-minipool-with-rocketpool-and-dappnode",children:(0,t.jsx)(n.strong,{children:"First Steps to Start a Minipool with Rocketpool and Dappnode"})}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Package Installation:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"In your Dappnode's UI, navigate to the DAppStore."}),"\n",(0,t.jsxs)(n.li,{children:["Find the ",(0,t.jsx)(n.a,{href:"http://my.dappnode/installer/dnp/rocketpool.dnp.dappnode.eth",children:"Rocketpool package"}),"."]}),"\n",(0,t.jsx)(n.li,{children:"Click 'Install'. Once installed, the Rocketpool package should appear in your installed packages list."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Setting up the Environment:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Ensure you're running a full, synced Ethereum node (Execution client + Consensus client)."}),"\n",(0,t.jsxs)(n.li,{children:["If you are not running a full Ethereum node yet, go to the ",(0,t.jsx)(n.a,{href:"http://my.dappnode/stakers/ethereum",children:"Stakers Menu"}),", select your clients and apply the configuration to start syncronization."]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Starting a Minipool:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Navigate to the Rocketpool package dashboard."}),"\n",(0,t.jsx)(n.li,{children:"Choose the amount of ETH you wish to stake. Remember, you can start a minipool with as little as 16 or 8 ETH."}),"\n",(0,t.jsx)(n.li,{children:"Follow the on-screen instructions to initialize your minipool."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Funding your Minipool:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Send the amount of ETH you\u2019ve chosen to the provided address. Make sure you keep track of this address, as it will be the address of your minipool."}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.strong,{children:"Monitoring and Management:"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Once your minipool is active, you can monitor its performance, rewards, and other details with Dappnode's ",(0,t.jsx)(n.a,{href:"/docs/user/packages/dms",children:"DMS"}),"."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.hr,{}),"\n",(0,t.jsx)(n.p,{children:"It's essential to remember that while Rocketpool simplifies the staking process, it's crucial to understand the risks involved. Always make sure to do thorough research and ensure the security of your investments."})]})}function p(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>l,a:()=>i});var t=o(7294);const s={},r=t.createContext(s);function i(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ed77d0ad.ac61a04b.js b/assets/js/ed77d0ad.ac61a04b.js deleted file mode 100644 index 532907af1..000000000 --- a/assets/js/ed77d0ad.ac61a04b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[3218],{4137:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>m});var r=o(7294);function n(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?a(Object(o),!0).forEach((function(t){n(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):a(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}function l(e,t){if(null==e)return{};var o,r,n=function(e,t){if(null==e)return{};var o,r,n={},a=Object.keys(e);for(r=0;r<a.length;r++)o=a[r],t.indexOf(o)>=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)o=a[r],t.indexOf(o)>=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var s=r.createContext({}),p=function(e){var t=r.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u="mdxType",k={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(o),d=n,m=u["".concat(s,".").concat(d)]||u[d]||k[d]||a;return o?r.createElement(m,i(i({ref:t},c),{},{components:o})):r.createElement(m,i({ref:t},c))}));function m(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=o.length,i=new Array(a);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:n,i[1]=l;for(var p=2;p<a;p++)i[p]=o[p];return r.createElement.apply(null,i)}return r.createElement.apply(null,o)}d.displayName="MDXCreateElement"},8016:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>k,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var r=o(7462),n=(o(7294),o(4137));const a={},i="Rocketpool",l={unversionedId:"user/staking/ethereum/lsd-pools/rocketpool",id:"user/staking/ethereum/lsd-pools/rocketpool",title:"Rocketpool",description:"---",source:"@site/docs/user/staking/ethereum/lsd-pools/rocketpool.md",sourceDirName:"user/staking/ethereum/lsd-pools",slug:"/user/staking/ethereum/lsd-pools/rocketpool",permalink:"/docs/user/staking/ethereum/lsd-pools/rocketpool",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/ethereum/lsd-pools/rocketpool.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Holesky Testnet",permalink:"/docs/user/staking/ethereum/solo/holesky"},next:{title:"StakeWise",permalink:"/docs/user/staking/ethereum/lsd-pools/stakewise"}},s={},p=[{value:"<strong>Rocketpool Overview</strong>",id:"rocketpool-overview",level:3},{value:"<strong>Package Key Features</strong>",id:"package-key-features",level:3},{value:"<strong>First Steps to Start a Minipool with Rocketpool and Dappnode</strong>",id:"first-steps-to-start-a-minipool-with-rocketpool-and-dappnode",level:3}],c={toc:p},u="wrapper";function k(e){let{components:t,...o}=e;return(0,n.kt)(u,(0,r.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"rocketpool"},"Rocketpool"),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"rocketpool-overview"},(0,n.kt)("strong",{parentName:"h3"},"Rocketpool Overview")),(0,n.kt)("p",null,'Rocketpool is a decentralized Ethereum staking solution that allows users to earn rewards by staking their Ether (ETH). It\'s designed to be inclusive, allowing those without the full 32 ETH required for an Ethereum validator to be able to participate. Rocketpool achieves this through its innovative "minipool" concept, which facilitates pooled staking among multiple participants.'),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"package-key-features"},(0,n.kt)("strong",{parentName:"h3"},"Package Key Features")),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Decentralized Staking:")," The Rocketpool package ensures that staking remains decentralized by using your Dappnode's local Ethereum node, safeguarding the core principles of the Ethereum network. Rocketpool also operates on smart contracts, ensuring that operations are transparent, auditable, and free from centralized control."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Minipools:")," Users can start a minipool with as little as 16 or 8 ETH, allowing for broader participation in Ethereum's block creation."),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("strong",{parentName:"li"},"Integrated with DappNode:")," Easy setup, monitoring, and management of Rocketpool directly from your Dappnode interface.")),(0,n.kt)("hr",null),(0,n.kt)("h3",{id:"first-steps-to-start-a-minipool-with-rocketpool-and-dappnode"},(0,n.kt)("strong",{parentName:"h3"},"First Steps to Start a Minipool with Rocketpool and Dappnode")),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Package Installation:")),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"In your Dappnode's UI, navigate to the DAppStore."),(0,n.kt)("li",{parentName:"ul"},"Find the ",(0,n.kt)("a",{parentName:"li",href:"http://my.dappnode/installer/dnp/rocketpool.dnp.dappnode.eth"},"Rocketpool package"),"."),(0,n.kt)("li",{parentName:"ul"},"Click 'Install'. Once installed, the Rocketpool package should appear in your installed packages list."))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Setting up the Environment:")),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Ensure you're running a full, synced Ethereum node (Execution client + Consensus client)."),(0,n.kt)("li",{parentName:"ul"},"If you are not running a full Ethereum node yet, go to the ",(0,n.kt)("a",{parentName:"li",href:"http://my.dappnode/stakers/ethereum"},"Stakers Menu"),", select your clients and apply the configuration to start syncronization."))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Starting a Minipool:")),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Navigate to the Rocketpool package dashboard."),(0,n.kt)("li",{parentName:"ul"},"Choose the amount of ETH you wish to stake. Remember, you can start a minipool with as little as 16 or 8 ETH."),(0,n.kt)("li",{parentName:"ul"},"Follow the on-screen instructions to initialize your minipool."))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Funding your Minipool:")),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Send the amount of ETH you\u2019ve chosen to the provided address. Make sure you keep track of this address, as it will be the address of your minipool."))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},(0,n.kt)("strong",{parentName:"p"},"Monitoring and Management:")),(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Once your minipool is active, you can monitor its performance, rewards, and other details with Dappnode's ",(0,n.kt)("a",{parentName:"li",href:"/docs/user/packages/dms"},"DMS"),".")))),(0,n.kt)("hr",null),(0,n.kt)("p",null,"It's essential to remember that while Rocketpool simplifies the staking process, it's crucial to understand the risks involved. Always make sure to do thorough research and ensure the security of your investments."))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/eef43c71.c70ef395.js b/assets/js/eef43c71.c70ef395.js deleted file mode 100644 index f58a9178c..000000000 --- a/assets/js/eef43c71.c70ef395.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7365],{4137:(e,t,n)=>{n.d(t,{Zo:()=>h,kt:()=>m});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function r(e,t){if(null==e)return{};var n,a,o=function(e,t){if(null==e)return{};var n,a,o={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},h=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,h=r(e,["components","mdxType","originalType","parentName"]),d=p(n),u=o,m=d["".concat(l,".").concat(u)]||d[u]||c[u]||i;return n?a.createElement(m,s(s({ref:t},h),{},{components:n})):a.createElement(m,s({ref:t},h))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,s=new Array(i);s[0]=u;var r={};for(var l in t)hasOwnProperty.call(t,l)&&(r[l]=t[l]);r.originalType=e,r[d]="string"==typeof e?e:o,s[1]=r;for(var p=2;p<i;p++)s[p]=n[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},8754:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>i,metadata:()=>r,toc:()=>p});var a=n(7462),o=(n(7294),n(4137));const i={},s="Gnosis Chain",r={unversionedId:"user/staking/gnosis-chain/solo",id:"user/staking/gnosis-chain/solo",title:"Gnosis Chain",description:"Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It's operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it's a testament to its popularity and accessibility.",source:"@site/docs/user/staking/gnosis-chain/solo.md",sourceDirName:"user/staking/gnosis-chain",slug:"/user/staking/gnosis-chain/solo",permalink:"/docs/user/staking/gnosis-chain/solo",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/gnosis-chain/solo.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Diva package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/diva"},next:{title:"LUKSO",permalink:"/docs/user/staking/lukso/solo"}},l={},p=[{value:"Joining the Gnosis Chain as a Validator",id:"joining-the-gnosis-chain-as-a-validator",level:2},{value:"1. Install the necessary packages on Dappnode",id:"1-install-the-necessary-packages-on-dappnode",level:2},{value:"2. Creating validator keys for Gnosis Chain",id:"2-creating-validator-keys-for-gnosis-chain",level:2},{value:"3: Deposit GNO into the Gnosis Chain deposit contract",id:"3-deposit-gno-into-the-gnosis-chain-deposit-contract",level:2},{value:"Withdrawing my GNO",id:"withdrawing-my-gno",level:2},{value:"1. Exit the validator from the Dappnode UI",id:"1-exit-the-validator-from-the-dappnode-ui",level:3},{value:"2. Claim your GNO from the deposit contract",id:"2-claim-your-gno-from-the-deposit-contract",level:3}],h={toc:p},d="wrapper";function c(e){let{components:t,...i}=e;return(0,o.kt)(d,(0,a.Z)({},h,i,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"gnosis-chain"},"Gnosis Chain"),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Gnosis Chain")," stands as a sentinel, functioning as a canary chain for Ethereum. It's operated and nurtured by the ",(0,o.kt)("strong",{parentName:"p"},"GnosisDAO community"),". With over 10% of its validators being home stakers via Dappnode, it's a testament to its popularity and accessibility."),(0,o.kt)("h2",{id:"joining-the-gnosis-chain-as-a-validator"},"Joining the Gnosis Chain as a Validator"),(0,o.kt)("p",null,"Staking on the Gnosis Chain is both easy and economical. All it takes is ",(0,o.kt)("strong",{parentName:"p"},"1 GNO")," to kickstart your journey as a Gnosis Chain validator. This low barrier to entry ensures that anyone, regardless of their financial position, can participate actively in the network as a block proposer. You will need to do 3 main tasks, broken down below:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Install the necessary packages on Dappnode"),(0,o.kt)("li",{parentName:"ol"},"Create validator keys for Gnosis Chain"),(0,o.kt)("li",{parentName:"ol"},"Deposit GNO into the Gnosis Beacon Chain deposit contract")),(0,o.kt)("h2",{id:"1-install-the-necessary-packages-on-dappnode"},"1. Install the necessary packages on Dappnode"),(0,o.kt)("p",null,"Similar to Ethereum mainnet, Dappnode makes it very easy to set up you Gnosis Chain validator. Here's what the Stakers UI looks like for Gnosis Chain:"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Stakers",src:n(1342).Z,width:"2852",height:"1516"})),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Execution Client")," (Choose one):",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Nethermind Xdai (Available now)"),(0,o.kt)("li",{parentName:"ul"},"Gnosis Erigon (Coming soon!)"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Consensus Client")," (Choose one):",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"Lighthouse Gnosis"),(0,o.kt)("li",{parentName:"ul"},"Teku Gnosis"),(0,o.kt)("li",{parentName:"ul"},"Lodestar Gnosis"))),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Web3Signer Gnosis"))),(0,o.kt)("admonition",{title:"Checkpoint Sync is your friend for syncing Consensus Clients",type:"tip"},(0,o.kt)("p",{parentName:"admonition"},'Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.')),(0,o.kt)("p",null,"After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs."),(0,o.kt)("h2",{id:"2-creating-validator-keys-for-gnosis-chain"},"2. Creating validator keys for Gnosis Chain"),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},"This guide will use the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/alexpeterson91/Gnosis-Wagyu-Key-Gen/releases"},"Gnosis Wagyu keygen tool")," to generate your validator keys. This is a fork of the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/stake-house/wagyu-key-gen/releases"},"Wagyu Keygen tool")," for Ethereum mainnet.")),(0,o.kt)("admonition",{title:"What are all these keys?",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udd12 ",(0,o.kt)("strong",{parentName:"p"},"Validator keys")," will be online (stored in your Dappnode) and signing the blocks of the Gnosis Chain. You will create them from a ",(0,o.kt)("strong",{parentName:"p"},"mnemonic phrase"),", which is important to keep safe as it's the ",(0,o.kt)("strong",{parentName:"p"},"only way")," to regenerate these validator keys if you lose them."),(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udee1\ufe0f The damage of getting your ",(0,o.kt)("strong",{parentName:"p"},"mnemonic phrase")," compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your ",(0,o.kt)("strong",{parentName:"p"},"mnemonic phrase"),". Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever. "),(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udd11 ",(0,o.kt)("strong",{parentName:"p"},"Withdrawal address")," this brings us to the withdrawal address, which is the address that will receive all the balance above 1 GNO while your validator is active, and all your balance above 0 GNO when you exit the validator set. You need to keep this address safe as it's where your GNO will go, and cannot be changed. ")),(0,o.kt)("p",null,"1) Download the latest release of the Gnosis Wagyu Key Gen from ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/alexpeterson91/Gnosis-Wagyu-Key-Gen/releases"},"here"),"."),(0,o.kt)("p",null,"2) Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the Gnosis Wagyu keygen tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gnosis Wagyu - 1st screen",src:n(3591).Z,width:"1865",height:"1441"})),(0,o.kt)("p",null,"You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place. "),(0,o.kt)("p",null,"To ensure that you have copied it somewhere, it will ask you to type it again."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gnosis Wagyu - 2nd screen",src:n(7642).Z,width:"1898",height:"1438"})),(0,o.kt)("p",null,"Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gnosis Wagyu - 3rd screen",src:n(1131).Z,width:"1888",height:"1430"})),(0,o.kt)("p",null,"Select a folder where to save the keys."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gnosis Wagyu - 4th screen",src:n(5421).Z,width:"1886",height:"1424"})),(0,o.kt)("p",null,"Wait for the keys to be generated."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gnosis Wagyu - 5th screen",src:n(8058).Z,width:"1888",height:"1426"})),(0,o.kt)("p",null,"And you are done! You will find your keys in the folder you selected."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gnosis Wagyu - 6th screen",src:n(8613).Z,width:"1886",height:"1430"})),(0,o.kt)("p",null,"You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"\ud83d\udca1 ",(0,o.kt)("em",{parentName:"p"},(0,o.kt)("inlineCode",{parentName:"em"},"Want to learn more about Ethereum keys and key generation?")),"\ud83d\udca1",(0,o.kt)("a",{parentName:"p",href:"https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/keys/#two-types-of-keys"},"Learn more"))),(0,o.kt)("p",null,"Now that you\u2019ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer Gnosis, the package that you installed during step 1. "),(0,o.kt)("p",null,"Return to the Dappnode UI and navigate to the Stakers > Gnosis Chain menu. Your Web3Signer will have a link saying ",(0,o.kt)("inlineCode",{parentName:"p"},"Upload Keystores")," . If it doesn\u2019t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page."),(0,o.kt)("p",null,"Then click on the ",(0,o.kt)("inlineCode",{parentName:"p"},"Import Keystores")," button on the lower part of the Web3Signer Gnosis UI."),(0,o.kt)("p",null,"Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores. "),(0,o.kt)("p",null,"You are now ready to fund these validator accounts and start validating!"),(0,o.kt)("h2",{id:"3-deposit-gno-into-the-gnosis-chain-deposit-contract"},"3: Deposit GNO into the Gnosis Chain deposit contract"),(0,o.kt)("p",null,"The final step is to fund your validator with 1 GNO necessary to register as a validator and start receiving validation work!"),(0,o.kt)("p",null,"To do this, you will need to send 1 GNO to the Gnosis Chain deposit contract."),(0,o.kt)("p",null,"Navigate to ",(0,o.kt)("a",{parentName:"p",href:"https://deposit.gnosischain.com/"},"the Gnosis Chain deposit launchpad")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gnosis Launchpad 1",src:n(7906).Z,width:"1898",height:"1438"})),(0,o.kt)("p",null,"Under the Deposit tab, you'll find a box where you can import the ",(0,o.kt)("inlineCode",{parentName:"p"},"deposit_data.json")," file you generated in Step 2. You can find it in the same folder you chose when generating the keys."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gnosis Launchpad 2",src:n(7955).Z,width:"1898",height:"1438"})),(0,o.kt)("p",null,"The app will validate the json file and list the number of validator deposits you are making and the required GNO to deposit. Click Deposit to continue."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gnosis Launchpad 3",src:n(2880).Z,width:"1180",height:"1234"})),(0,o.kt)("p",null,"Check that you understand the risks and ",(0,o.kt)("a",{parentName:"p",href:"https://docs.gnosischain.com/node/manual/validator/deposit#step-5-verify-transaction-parameters"},"ensure you are interacting with the correct contract")," before proceeding."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gnosis Launchpad 4",src:n(2960).Z,width:"1144",height:"1244"}),"\n",(0,o.kt)("img",{alt:"Gnosis Launchpad 5",src:n(8366).Z,width:"1140",height:"1226"})),(0,o.kt)("p",null,"The moment to do the deposit is here! Connect your wallet with the GNO's you'll be depositing, and follow the steps to send the GNOs to the deposit contract!"),(0,o.kt)("admonition",{type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"Please review the deposit address in the next step! MAKE SURE YOU ARE SENDING YOUR GNO FUNDS TO THE RIGHT DEPOSIT ADDRESS!")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gnosis Launchpad 6",src:n(4105).Z,width:"1938",height:"1328"}),"\n",(0,o.kt)("img",{alt:"Gnosis Launchpad 7",src:n(1195).Z,width:"1108",height:"594"})),(0,o.kt)("p",null,"After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the ",(0,o.kt)("a",{parentName:"p",href:"https://gnosischa.in/"},"Gnosis Beacon Chain Explorer"),", which is a fork of the ",(0,o.kt)("a",{parentName:"p",href:"https://beaconcha.in/"},"Ethereum Beaconcha.in")," explorer. You can get a direct link to this by clicking on the ",(0,o.kt)("inlineCode",{parentName:"p"},"View in Beaconcha.in")," button in the upper, right corner of the Dappnode Web3signer Gnosis UI, where you uploaded the keystores."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Remember"),": Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions."),(0,o.kt)("h2",{id:"withdrawing-my-gno"},"Withdrawing my GNO"),(0,o.kt)("p",null,"Once you want to finish your staking journey, you will need to withdraw your GNO from the Gnosis Chain. This is a 2 step process of exiting the validator from the Dappnode UI and claiming the GNO from the deposit contract. "),(0,o.kt)("admonition",{title:"Gnosis Chain withdrawals \u2260 Ethereum withdrawals",type:"info"},(0,o.kt)("p",{parentName:"admonition"},"Because the native token of Gnosis Chain is xDAI (you pay fees in it), but the staking token is GNO, withdrawals work differntly than in the Ethereum chain and do not happen automatically. You must claim your withdrawn tokens from the Deposit Contract. More info ",(0,o.kt)("a",{parentName:"p",href:"https://docs.gnosischain.com/node/management/withdrawals"},"here"),".")),(0,o.kt)("h3",{id:"1-exit-the-validator-from-the-dappnode-ui"},"1. Exit the validator from the Dappnode UI"),(0,o.kt)("admonition",{type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"Make sure that your validator have a ",(0,o.kt)("inlineCode",{parentName:"p"},"0x01")," type withdrawal address before exiting your validator or you will lose your funds. In the ",(0,o.kt)("a",{parentName:"p",href:"https://gnosischa.in/"},"consensus explorer"),", if your withdrawal address shows as an address that starts with a ",(0,o.kt)("inlineCode",{parentName:"p"},"0x00")," it means that your withdrawal address needs to be upgraded to a ",(0,o.kt)("inlineCode",{parentName:"p"},"0x01"),", please refer to the guide in the ",(0,o.kt)("a",{parentName:"p",href:"https://docs.gnosischain.com/node/management/withdrawals#how-to-change-the-withdrawal-credential"},"Gnosis Chain documentation"),". If your validator already shows a ",(0,o.kt)("inlineCode",{parentName:"p"},"0x01")," address, you DON'T need to follow these steps.")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Gnosis Withdrawals",src:n(8298).Z,width:"1884",height:"729"})),(0,o.kt)("p",null,"Navigate to the Stakers > Gnosis Chain menu and click on the ",(0,o.kt)("inlineCode",{parentName:"p"},"Upload Keystores")," button on the Web3Signer card.\nOnce you are in the Web3Signer UI, select the validators you want to exit and click on the ",(0,o.kt)("inlineCode",{parentName:"p"},"Exit Validator"),' button on the top right part of the UI.\nFollow the instructions and type "I want to exit", followed by ',(0,o.kt)("inlineCode",{parentName:"p"},"Exit"),"."),(0,o.kt)("p",null,"Now the message to exit will be broadcasted to the network. "),(0,o.kt)("admonition",{title:"Withdrawal queue",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the ",(0,o.kt)("a",{parentName:"p",href:"https://gnosischa.in/"},"Gnosis Beacon Chain Explorer"),".\nEven then, you will need to claim your GNO from the deposit contract as per the next step.")),(0,o.kt)("h3",{id:"2-claim-your-gno-from-the-deposit-contract"},"2. Claim your GNO from the deposit contract"),(0,o.kt)("p",null,"As soon as your withdrawal has been processed by the Beacon Chain, you will be able to claim your GNO from the deposit contract. You can claim from any of your wallets that hold xDAI to pay gas fees."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Go to the ",(0,o.kt)("a",{parentName:"p",href:"https://gnosisscan.io/address/0x0b98057ea310f4d31f2a452b414647007d1645d9#writeProxyContract#F3"},"Gnosis Chain Deposit Contract page in Gnosisscan.io")," and navigate to the ",(0,o.kt)("inlineCode",{parentName:"p"},"Write as Proxy")," tab,")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Connect your wallet with the ",(0,o.kt)("inlineCode",{parentName:"p"},"Connect to Web3")," button and then locate the ",(0,o.kt)("inlineCode",{parentName:"p"},"3. claimWithdrawal")," function.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Type your withdrawal address in the field and click ",(0,o.kt)("inlineCode",{parentName:"p"},"Write"),". A transaction should trigger on your wallet. Approve it and wait for it to be included in a block. "))),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Claiming from the Smart Contract",src:n(3285).Z,width:"1392",height:"575"})),(0,o.kt)("p",null,"Voil\xe0! Your GNO will appear on your withdrawal address!"))}c.isMDXComponent=!0},7906:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/gnosis-launchpad1-84957131bec904ee0b9a40fbc571c68b.png"},7955:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/gnosis-launchpad2-a30bf538d93595104b2ecfa4e2647ad4.png"},2880:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/gnosis-launchpad3-f67ce186153f1d218374ba582b665fc0.png"},2960:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/gnosis-launchpad4-1e99edc693b9a1a935f6ed88b56b625e.png"},8366:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/gnosis-launchpad5-9a295f0e4f5e22c43cbf0a9f32093779.png"},4105:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/gnosis-launchpad6-47457c2cb8b83139e8496c3db51fcf5e.png"},1195:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/gnosis-launchpad7-4750f4ef6a7d56f48233fb42d136a87b.png"},3591:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/gnosis-wagyu1-c67da68262d9f9650ee5eb477a7b2589.png"},7642:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/gnosis-wagyu2-e9f88c7e6ee959624f14fcb8516753c6.png"},1342:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/gnosischain-staking-screenshot-7752841d13ebbf72b1256659ed68fc40.png"},8298:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/gnosiswithdrawals1-3319c9298d63c9bdc640b84a94bc4db3.png"},3285:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/gnosiswithdrawals2-a2f7f743a00c32f88e9b341c9f7b0e58.png"},1131:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/wagyu4-0673a83463eb844993339ecfdcc59b41.png"},5421:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/wagyu5-644261c1588e13ba1177d70aef9ecf19.png"},8058:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/wagyu6-d5538d2bbd5a01f47d94c6c5b29b3abf.png"},8613:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/wagyu7-8c346a2c9519b98a530d1005a69247f2.png"}}]); \ No newline at end of file diff --git a/assets/js/eef43c71.f4b36e93.js b/assets/js/eef43c71.f4b36e93.js new file mode 100644 index 000000000..4b7698eb6 --- /dev/null +++ b/assets/js/eef43c71.f4b36e93.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7365],{2477:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>h,contentTitle:()=>a,default:()=>l,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var t=s(5893),i=s(1151);const o={},a="Gnosis Chain",r={id:"user/staking/gnosis-chain/solo",title:"Gnosis Chain",description:"Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It's operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it's a testament to its popularity and accessibility.",source:"@site/docs/user/staking/gnosis-chain/solo.md",sourceDirName:"user/staking/gnosis-chain",slug:"/user/staking/gnosis-chain/solo",permalink:"/docs/user/staking/gnosis-chain/solo",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/staking/gnosis-chain/solo.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Diva package for Dappnode",permalink:"/docs/user/staking/ethereum/dvt-technologies/diva"},next:{title:"LUKSO",permalink:"/docs/user/staking/lukso/solo"}},h={},d=[{value:"Joining the Gnosis Chain as a Validator",id:"joining-the-gnosis-chain-as-a-validator",level:2},{value:"1. Install the necessary packages on Dappnode",id:"1-install-the-necessary-packages-on-dappnode",level:2},{value:"2. Creating validator keys for Gnosis Chain",id:"2-creating-validator-keys-for-gnosis-chain",level:2},{value:"3: Deposit GNO into the Gnosis Chain deposit contract",id:"3-deposit-gno-into-the-gnosis-chain-deposit-contract",level:2},{value:"Withdrawing my GNO",id:"withdrawing-my-gno",level:2},{value:"1. Exit the validator from the Dappnode UI",id:"1-exit-the-validator-from-the-dappnode-ui",level:3},{value:"2. Claim your GNO from the deposit contract",id:"2-claim-your-gno-from-the-deposit-contract",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"gnosis-chain",children:"Gnosis Chain"}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Gnosis Chain"})," stands as a sentinel, functioning as a canary chain for Ethereum. It's operated and nurtured by the ",(0,t.jsx)(n.strong,{children:"GnosisDAO community"}),". With over 10% of its validators being home stakers via Dappnode, it's a testament to its popularity and accessibility."]}),"\n",(0,t.jsx)(n.h2,{id:"joining-the-gnosis-chain-as-a-validator",children:"Joining the Gnosis Chain as a Validator"}),"\n",(0,t.jsxs)(n.p,{children:["Staking on the Gnosis Chain is both easy and economical. All it takes is ",(0,t.jsx)(n.strong,{children:"1 GNO"})," to kickstart your journey as a Gnosis Chain validator. This low barrier to entry ensures that anyone, regardless of their financial position, can participate actively in the network as a block proposer. You will need to do 3 main tasks, broken down below:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Install the necessary packages on Dappnode"}),"\n",(0,t.jsx)(n.li,{children:"Create validator keys for Gnosis Chain"}),"\n",(0,t.jsx)(n.li,{children:"Deposit GNO into the Gnosis Beacon Chain deposit contract"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"1-install-the-necessary-packages-on-dappnode",children:"1. Install the necessary packages on Dappnode"}),"\n",(0,t.jsx)(n.p,{children:"Similar to Ethereum mainnet, Dappnode makes it very easy to set up you Gnosis Chain validator. Here's what the Stakers UI looks like for Gnosis Chain:"}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Stakers",src:s(1342).Z+"",width:"2852",height:"1516"})}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Execution Client"})," (Choose one):","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Nethermind Xdai (Available now)"}),"\n",(0,t.jsx)(n.li,{children:"Gnosis Erigon (Coming soon!)"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Consensus Client"})," (Choose one):","\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Lighthouse Gnosis"}),"\n",(0,t.jsx)(n.li,{children:"Teku Gnosis"}),"\n",(0,t.jsx)(n.li,{children:"Lodestar Gnosis"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.strong,{children:"Web3Signer Gnosis"})}),"\n"]}),"\n",(0,t.jsx)(n.admonition,{title:"Checkpoint Sync is your friend for syncing Consensus Clients",type:"tip",children:(0,t.jsx)(n.p,{children:'Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.'})}),"\n",(0,t.jsx)(n.p,{children:"After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs."}),"\n",(0,t.jsx)(n.h2,{id:"2-creating-validator-keys-for-gnosis-chain",children:"2. Creating validator keys for Gnosis Chain"}),"\n",(0,t.jsx)(n.admonition,{type:"info",children:(0,t.jsxs)(n.p,{children:["This guide will use the ",(0,t.jsx)(n.a,{href:"https://github.com/alexpeterson91/Gnosis-Wagyu-Key-Gen/releases",children:"Gnosis Wagyu keygen tool"})," to generate your validator keys. This is a fork of the ",(0,t.jsx)(n.a,{href:"https://github.com/stake-house/wagyu-key-gen/releases",children:"Wagyu Keygen tool"})," for Ethereum mainnet."]})}),"\n",(0,t.jsxs)(n.admonition,{title:"What are all these keys?",type:"caution",children:[(0,t.jsxs)(n.p,{children:["\ud83d\udd12 ",(0,t.jsx)(n.strong,{children:"Validator keys"})," will be online (stored in your Dappnode) and signing the blocks of the Gnosis Chain. You will create them from a ",(0,t.jsx)(n.strong,{children:"mnemonic phrase"}),", which is important to keep safe as it's the ",(0,t.jsx)(n.strong,{children:"only way"})," to regenerate these validator keys if you lose them."]}),(0,t.jsxs)(n.p,{children:["\ud83d\udee1\ufe0f The damage of getting your ",(0,t.jsx)(n.strong,{children:"mnemonic phrase"})," compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your ",(0,t.jsx)(n.strong,{children:"mnemonic phrase"}),". Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever."]}),(0,t.jsxs)(n.p,{children:["\ud83d\udd11 ",(0,t.jsx)(n.strong,{children:"Withdrawal address"})," this brings us to the withdrawal address, which is the address that will receive all the balance above 1 GNO while your validator is active, and all your balance above 0 GNO when you exit the validator set. You need to keep this address safe as it's where your GNO will go, and cannot be changed."]})]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Download the latest release of the Gnosis Wagyu Key Gen from ",(0,t.jsx)(n.a,{href:"https://github.com/alexpeterson91/Gnosis-Wagyu-Key-Gen/releases",children:"here"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the Gnosis Wagyu keygen tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Gnosis Wagyu - 1st screen",src:s(3591).Z+"",width:"1865",height:"1441"})}),"\n",(0,t.jsx)(n.p,{children:"You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place."}),"\n",(0,t.jsx)(n.p,{children:"To ensure that you have copied it somewhere, it will ask you to type it again."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Gnosis Wagyu - 2nd screen",src:s(7642).Z+"",width:"1898",height:"1438"})}),"\n",(0,t.jsx)(n.p,{children:"Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Gnosis Wagyu - 3rd screen",src:s(1131).Z+"",width:"1888",height:"1430"})}),"\n",(0,t.jsx)(n.p,{children:"Select a folder where to save the keys."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Gnosis Wagyu - 4th screen",src:s(5421).Z+"",width:"1886",height:"1424"})}),"\n",(0,t.jsx)(n.p,{children:"Wait for the keys to be generated."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Gnosis Wagyu - 5th screen",src:s(8058).Z+"",width:"1888",height:"1426"})}),"\n",(0,t.jsx)(n.p,{children:"And you are done! You will find your keys in the folder you selected."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Gnosis Wagyu - 6th screen",src:s(8613).Z+"",width:"1886",height:"1430"})}),"\n",(0,t.jsx)(n.p,{children:"You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page."}),"\n",(0,t.jsx)(n.admonition,{type:"tip",children:(0,t.jsxs)(n.p,{children:["\ud83d\udca1 *",(0,t.jsx)(n.code,{children:"Want to learn more about Ethereum keys and key generation?"}),"*\ud83d\udca1",(0,t.jsx)(n.a,{href:"https://ethereum.org/en/developers/docs/consensus-mechanisms/pos/keys/#two-types-of-keys",children:"Learn more"})]})}),"\n",(0,t.jsx)(n.p,{children:"Now that you\u2019ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer Gnosis, the package that you installed during step 1."}),"\n",(0,t.jsxs)(n.p,{children:["Return to the Dappnode UI and navigate to the Stakers > Gnosis Chain menu. Your Web3Signer will have a link saying ",(0,t.jsx)(n.code,{children:"Upload Keystores"})," . If it doesn\u2019t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page."]}),"\n",(0,t.jsxs)(n.p,{children:["Then click on the ",(0,t.jsx)(n.code,{children:"Import Keystores"})," button on the lower part of the Web3Signer Gnosis UI."]}),"\n",(0,t.jsx)(n.p,{children:"Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores."}),"\n",(0,t.jsx)(n.p,{children:"You are now ready to fund these validator accounts and start validating!"}),"\n",(0,t.jsx)(n.h2,{id:"3-deposit-gno-into-the-gnosis-chain-deposit-contract",children:"3: Deposit GNO into the Gnosis Chain deposit contract"}),"\n",(0,t.jsx)(n.p,{children:"The final step is to fund your validator with 1 GNO necessary to register as a validator and start receiving validation work!"}),"\n",(0,t.jsx)(n.p,{children:"To do this, you will need to send 1 GNO to the Gnosis Chain deposit contract."}),"\n",(0,t.jsxs)(n.p,{children:["Navigate to ",(0,t.jsx)(n.a,{href:"https://deposit.gnosischain.com/",children:"the Gnosis Chain deposit launchpad"})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Gnosis Launchpad 1",src:s(7906).Z+"",width:"1898",height:"1438"})}),"\n",(0,t.jsxs)(n.p,{children:["Under the Deposit tab, you'll find a box where you can import the ",(0,t.jsx)(n.code,{children:"deposit_data.json"})," file you generated in Step 2. You can find it in the same folder you chose when generating the keys."]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Gnosis Launchpad 2",src:s(7955).Z+"",width:"1898",height:"1438"})}),"\n",(0,t.jsx)(n.p,{children:"The app will validate the json file and list the number of validator deposits you are making and the required GNO to deposit. Click Deposit to continue."}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Gnosis Launchpad 3",src:s(2880).Z+"",width:"1180",height:"1234"})}),"\n",(0,t.jsxs)(n.p,{children:["Check that you understand the risks and ",(0,t.jsx)(n.a,{href:"https://docs.gnosischain.com/node/manual/validator/deposit#step-5-verify-transaction-parameters",children:"ensure you are interacting with the correct contract"})," before proceeding."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.img,{alt:"Gnosis Launchpad 4",src:s(2960).Z+"",width:"1144",height:"1244"}),"\n",(0,t.jsx)(n.img,{alt:"Gnosis Launchpad 5",src:s(8366).Z+"",width:"1140",height:"1226"})]}),"\n",(0,t.jsx)(n.p,{children:"The moment to do the deposit is here! Connect your wallet with the GNO's you'll be depositing, and follow the steps to send the GNOs to the deposit contract!"}),"\n",(0,t.jsx)(n.admonition,{type:"warning",children:(0,t.jsx)(n.p,{children:"Please review the deposit address in the next step! MAKE SURE YOU ARE SENDING YOUR GNO FUNDS TO THE RIGHT DEPOSIT ADDRESS!"})}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.img,{alt:"Gnosis Launchpad 6",src:s(4105).Z+"",width:"1938",height:"1328"}),"\n",(0,t.jsx)(n.img,{alt:"Gnosis Launchpad 7",src:s(1195).Z+"",width:"1108",height:"594"})]}),"\n",(0,t.jsxs)(n.p,{children:["After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the ",(0,t.jsx)(n.a,{href:"https://gnosischa.in/",children:"Gnosis Beacon Chain Explorer"}),", which is a fork of the ",(0,t.jsx)(n.a,{href:"https://beaconcha.in/",children:"Ethereum Beaconcha.in"})," explorer. You can get a direct link to this by clicking on the ",(0,t.jsx)(n.code,{children:"View in Beaconcha.in"})," button in the upper, right corner of the Dappnode Web3signer Gnosis UI, where you uploaded the keystores."]}),"\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Remember"}),": Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions."]}),"\n",(0,t.jsx)(n.h2,{id:"withdrawing-my-gno",children:"Withdrawing my GNO"}),"\n",(0,t.jsx)(n.p,{children:"Once you want to finish your staking journey, you will need to withdraw your GNO from the Gnosis Chain. This is a 2 step process of exiting the validator from the Dappnode UI and claiming the GNO from the deposit contract."}),"\n",(0,t.jsx)(n.admonition,{title:"Gnosis Chain withdrawals \u2260 Ethereum withdrawals",type:"info",children:(0,t.jsxs)(n.p,{children:["Because the native token of Gnosis Chain is xDAI (you pay fees in it), but the staking token is GNO, withdrawals work differntly than in the Ethereum chain and do not happen automatically. You must claim your withdrawn tokens from the Deposit Contract. More info ",(0,t.jsx)(n.a,{href:"https://docs.gnosischain.com/node/management/withdrawals",children:"here"}),"."]})}),"\n",(0,t.jsx)(n.h3,{id:"1-exit-the-validator-from-the-dappnode-ui",children:"1. Exit the validator from the Dappnode UI"}),"\n",(0,t.jsxs)(n.admonition,{type:"warning",children:[(0,t.jsx)(n.mdxAdmonitionTitle,{}),(0,t.jsxs)(n.p,{children:["Make sure that your validator have a ",(0,t.jsx)(n.code,{children:"0x01"})," type withdrawal address before exiting your validator or you will lose your funds. In the ",(0,t.jsx)(n.a,{href:"https://gnosischa.in/",children:"consensus explorer"}),", if your withdrawal address shows as an address that starts with a ",(0,t.jsx)(n.code,{children:"0x00"})," it means that your withdrawal address needs to be upgraded to a ",(0,t.jsx)(n.code,{children:"0x01"}),", please refer to the guide in the ",(0,t.jsx)(n.a,{href:"https://docs.gnosischain.com/node/management/withdrawals#how-to-change-the-withdrawal-credential",children:"Gnosis Chain documentation"}),". If your validator already shows a ",(0,t.jsx)(n.code,{children:"0x01"})," address, you DON'T need to follow these steps."]})]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Gnosis Withdrawals",src:s(8298).Z+"",width:"1884",height:"729"})}),"\n",(0,t.jsxs)(n.p,{children:["Navigate to the Stakers > Gnosis Chain menu and click on the ",(0,t.jsx)(n.code,{children:"Upload Keystores"})," button on the Web3Signer card.\nOnce you are in the Web3Signer UI, select the validators you want to exit and click on the ",(0,t.jsx)(n.code,{children:"Exit Validator"}),' button on the top right part of the UI.\nFollow the instructions and type "I want to exit", followed by ',(0,t.jsx)(n.code,{children:"Exit"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"Now the message to exit will be broadcasted to the network."}),"\n",(0,t.jsx)(n.admonition,{title:"Withdrawal queue",type:"caution",children:(0,t.jsxs)(n.p,{children:["Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the ",(0,t.jsx)(n.a,{href:"https://gnosischa.in/",children:"Gnosis Beacon Chain Explorer"}),".\nEven then, you will need to claim your GNO from the deposit contract as per the next step."]})}),"\n",(0,t.jsx)(n.h3,{id:"2-claim-your-gno-from-the-deposit-contract",children:"2. Claim your GNO from the deposit contract"}),"\n",(0,t.jsx)(n.p,{children:"As soon as your withdrawal has been processed by the Beacon Chain, you will be able to claim your GNO from the deposit contract. You can claim from any of your wallets that hold xDAI to pay gas fees."}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Go to the ",(0,t.jsx)(n.a,{href:"https://gnosisscan.io/address/0x0b98057ea310f4d31f2a452b414647007d1645d9#writeProxyContract#F3",children:"Gnosis Chain Deposit Contract page in Gnosisscan.io"})," and navigate to the ",(0,t.jsx)(n.code,{children:"Write as Proxy"})," tab,"]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Connect your wallet with the ",(0,t.jsx)(n.code,{children:"Connect to Web3"})," button and then locate the ",(0,t.jsx)(n.code,{children:"3. claimWithdrawal"})," function."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Type your withdrawal address in the field and click ",(0,t.jsx)(n.code,{children:"Write"}),". A transaction should trigger on your wallet. Approve it and wait for it to be included in a block."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:(0,t.jsx)(n.img,{alt:"Claiming from the Smart Contract",src:s(3285).Z+"",width:"1392",height:"575"})}),"\n",(0,t.jsx)(n.p,{children:"Voil\xe0! Your GNO will appear on your withdrawal address!"})]})}function l(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},7906:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/gnosis-launchpad1-84957131bec904ee0b9a40fbc571c68b.png"},7955:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/gnosis-launchpad2-a30bf538d93595104b2ecfa4e2647ad4.png"},2880:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/gnosis-launchpad3-f67ce186153f1d218374ba582b665fc0.png"},2960:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/gnosis-launchpad4-1e99edc693b9a1a935f6ed88b56b625e.png"},8366:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/gnosis-launchpad5-9a295f0e4f5e22c43cbf0a9f32093779.png"},4105:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/gnosis-launchpad6-47457c2cb8b83139e8496c3db51fcf5e.png"},1195:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/gnosis-launchpad7-4750f4ef6a7d56f48233fb42d136a87b.png"},3591:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/gnosis-wagyu1-c67da68262d9f9650ee5eb477a7b2589.png"},7642:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/gnosis-wagyu2-e9f88c7e6ee959624f14fcb8516753c6.png"},1342:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/gnosischain-staking-screenshot-7752841d13ebbf72b1256659ed68fc40.png"},8298:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/gnosiswithdrawals1-3319c9298d63c9bdc640b84a94bc4db3.png"},3285:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/gnosiswithdrawals2-a2f7f743a00c32f88e9b341c9f7b0e58.png"},1131:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/wagyu4-0673a83463eb844993339ecfdcc59b41.png"},5421:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/wagyu5-644261c1588e13ba1177d70aef9ecf19.png"},8058:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/wagyu6-d5538d2bbd5a01f47d94c6c5b29b3abf.png"},8613:(e,n,s)=>{s.d(n,{Z:()=>t});const t=s.p+"assets/images/wagyu7-8c346a2c9519b98a530d1005a69247f2.png"},1151:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>a});var t=s(7294);const i={},o=t.createContext(i);function a(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ef41a71b.0e257dbc.js b/assets/js/ef41a71b.0e257dbc.js deleted file mode 100644 index ce89d5714..000000000 --- a/assets/js/ef41a71b.0e257dbc.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4588],{4137:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>f});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function i(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),s=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):p(p({},t),e)),n},d=function(e){var t=s(e.components);return a.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,d=i(e,["components","mdxType","originalType","parentName"]),c=s(n),u=r,f=c["".concat(l,".").concat(u)]||c[u]||m[u]||o;return n?a.createElement(f,p(p({ref:t},d),{},{components:n})):a.createElement(f,p({ref:t},d))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,p=new Array(o);p[0]=u;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:r,p[1]=i;for(var s=2;s<o;s++)p[s]=n[s];return a.createElement.apply(null,p)}return a.createElement.apply(null,n)}u.displayName="MDXCreateElement"},7886:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>p,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var a=n(7462),r=(n(7294),n(4137));const o={},p="Dappnode commands",i={unversionedId:"user/install/dappnode-commands",id:"user/install/dappnode-commands",title:"Dappnode commands",description:"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.",source:"@site/docs/user/install/dappnode-commands.md",sourceDirName:"user/install",slug:"/user/install/dappnode-commands",permalink:"/docs/user/install/dappnode-commands",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/dappnode-commands.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Install - ARM",permalink:"/docs/user/install/arm"},next:{title:"Ethical Metrics",permalink:"/docs/user/ethical-metrics/overview"}},l={},s=[],d={toc:s},c="wrapper";function m(e){let{components:t,...o}=e;return(0,r.kt)(c,(0,a.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"dappnode-commands"},"Dappnode commands"),(0,r.kt)("p",null,"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"commands-welcome-message",src:n(2019).Z,width:"1690",height:"672"})),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"Go to the ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/access-your-dappnode/terminal"},"Access your Dappnode's terminal")," section to learn more about how to access the terminal.")),(0,r.kt)("p",null,"Below is a list of available commands in Dappnode:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"dappnode_help"),": prints out this message")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"dappnode_wifi"),": get wifi credentials (SSID and password)")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"dappnode_openvpn"),": get Open VPN credentials")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"dappnode_wireguard"),": get Wireguard VPN credentials. Use ",(0,r.kt)("inlineCode",{parentName:"p"},"dappnode_wireguard --help")," for more info")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"dappnode_connect"),": check connectivity methods available in Dappnode")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"dappnode_status"),": get status of dappnode containers")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"dappnode_start"),": start dappnode containers")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("inlineCode",{parentName:"p"},"dappnode_stop"),": stop dappnode containers"))),(0,r.kt)("p",null,"To run a command, enter it in your Dappnode terminal. For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"dappnode_help\n")),(0,r.kt)("details",null,(0,r.kt)("summary",null,(0,r.kt)("b",null,'I get the error "command not found"')),"If you get the error `command not found` when trying to execute a dappnode command, it means that the command is not available in your system. You need to load the dappndoe profile as follows:",(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"source /usr/src/dappnode/DNCORE/.dappnode_profile\n"))))}m.isMDXComponent=!0},2019:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/commands_welcome_message-222154c662349b505e3cc94f59951d79.png"}}]); \ No newline at end of file diff --git a/assets/js/ef41a71b.f45fa360.js b/assets/js/ef41a71b.f45fa360.js new file mode 100644 index 000000000..553efbc22 --- /dev/null +++ b/assets/js/ef41a71b.f45fa360.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4588],{1545:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>i,contentTitle:()=>a,default:()=>l,frontMatter:()=>t,metadata:()=>c,toc:()=>r});var o=s(5893),d=s(1151);const t={},a="Dappnode commands",c={id:"user/install/dappnode-commands",title:"Dappnode commands",description:"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.",source:"@site/docs/user/install/dappnode-commands.md",sourceDirName:"user/install",slug:"/user/install/dappnode-commands",permalink:"/docs/user/install/dappnode-commands",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/install/dappnode-commands.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Install - ARM",permalink:"/docs/user/install/arm"},next:{title:"Ethical Metrics",permalink:"/docs/user/ethical-metrics/overview"}},i={},r=[];function p(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,d.a)(),...e.components},{Details:t}=n;return t||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"dappnode-commands",children:"Dappnode commands"}),"\n",(0,o.jsx)(n.p,{children:"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line."}),"\n",(0,o.jsx)(n.p,{children:(0,o.jsx)(n.img,{alt:"commands-welcome-message",src:s(2019).Z+"",width:"1690",height:"672"})}),"\n",(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsxs)(n.p,{children:["Go to the ",(0,o.jsx)(n.a,{href:"/docs/user/access-your-dappnode/terminal",children:"Access your Dappnode's terminal"})," section to learn more about how to access the terminal."]})}),"\n",(0,o.jsx)(n.p,{children:"Below is a list of available commands in Dappnode:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"dappnode_help"}),": prints out this message"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"dappnode_wifi"}),": get wifi credentials (SSID and password)"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"dappnode_openvpn"}),": get Open VPN credentials"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"dappnode_wireguard"}),": get Wireguard VPN credentials. Use ",(0,o.jsx)(n.code,{children:"dappnode_wireguard --help"})," for more info"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"dappnode_connect"}),": check connectivity methods available in Dappnode"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"dappnode_status"}),": get status of dappnode containers"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"dappnode_start"}),": start dappnode containers"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.code,{children:"dappnode_stop"}),": stop dappnode containers"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(n.p,{children:"To run a command, enter it in your Dappnode terminal. For example:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"dappnode_help\n"})}),"\n",(0,o.jsxs)(t,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("b",{children:'I get the error "command not found"'})}),(0,o.jsxs)(n.p,{children:["If you get the error ",(0,o.jsx)(n.code,{children:"command not found"})," when trying to execute a dappnode command, it means that the command is not available in your system. You need to load the dappndoe profile as follows:"]}),(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"source /usr/src/dappnode/DNCORE/.dappnode_profile\n"})})]})]})}function l(e={}){const{wrapper:n}={...(0,d.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(p,{...e})}):p(e)}},2019:(e,n,s)=>{s.d(n,{Z:()=>o});const o=s.p+"assets/images/commands_welcome_message-222154c662349b505e3cc94f59951d79.png"},1151:(e,n,s)=>{s.d(n,{Z:()=>c,a:()=>a});var o=s(7294);const d={},t=o.createContext(d);function a(e){const n=o.useContext(t);return o.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(d):e.components||d:a(e.components),o.createElement(t.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f4f34a3a.2f65a1ee.js b/assets/js/f4f34a3a.2f65a1ee.js deleted file mode 100644 index 4fce9f1a8..000000000 --- a/assets/js/f4f34a3a.2f65a1ee.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8636],{4137:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>b});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function s(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?a(Object(r),!0).forEach((function(t){n(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):a(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function l(e,t){if(null==e)return{};var r,o,n=function(e,t){if(null==e)return{};var r,o,n={},a=Object.keys(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)r=a[o],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var c=o.createContext({}),u=function(e){var t=o.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=u(e.components);return o.createElement(c.Provider,{value:t},e.children)},i="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),i=u(r),d=n,b=i["".concat(c,".").concat(d)]||i[d]||m[d]||a;return r?o.createElement(b,s(s({ref:t},p),{},{components:r})):o.createElement(b,s({ref:t},p))}));function b(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,s=new Array(a);s[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[i]="string"==typeof e?e:n,s[1]=l;for(var u=2;u<a;u++)s[u]=r[u];return o.createElement.apply(null,s)}return o.createElement.apply(null,r)}d.displayName="MDXCreateElement"},6712:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>u});var o=r(7462),n=(r(7294),r(4137));const a={slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},s=void 0,l={permalink:"/blog/mdx-blog-post",source:"@site/blog/2021-08-01-mdx-blog-post.mdx",title:"MDX Blog Post",description:"Blog posts support Docusaurus Markdown features, such as MDX.",date:"2021-08-01T00:00:00.000Z",formattedDate:"August 1, 2021",tags:[{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},prevItem:{title:"Welcome",permalink:"/blog/welcome"},nextItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},c={authorsImageUrls:[void 0]},u=[],p={toc:u},i="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(i,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("p",null,"Blog posts support ",(0,n.kt)("a",{parentName:"p",href:"https://docusaurus.io/docs/markdown-features"},"Docusaurus Markdown features"),", such as ",(0,n.kt)("a",{parentName:"p",href:"https://mdxjs.com/"},"MDX"),"."),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Use the power of React to create interactive blog posts."),(0,n.kt)("pre",{parentName:"admonition"},(0,n.kt)("code",{parentName:"pre",className:"language-js"},"<button onClick={() => alert('button clicked!')}>Click me!</button>\n")),(0,n.kt)("button",{onClick:()=>alert("button clicked!")},"Click me!")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f4f34a3a.4131e8b1.js b/assets/js/f4f34a3a.4131e8b1.js new file mode 100644 index 000000000..5b9d076d2 --- /dev/null +++ b/assets/js/f4f34a3a.4131e8b1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[8636],{743:(t,e,o)=>{o.r(e),o.d(e,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>r,metadata:()=>c,toc:()=>u});var s=o(5893),n=o(1151);const r={slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},a=void 0,c={permalink:"/blog/mdx-blog-post",source:"@site/blog/2021-08-01-mdx-blog-post.mdx",title:"MDX Blog Post",description:"Blog posts support Docusaurus Markdown features, such as MDX.",date:"2021-08-01T00:00:00.000Z",formattedDate:"August 1, 2021",tags:[{label:"docusaurus",permalink:"/blog/tags/docusaurus"}],readingTime:.175,hasTruncateMarker:!1,authors:[{name:"S\xe9bastien Lorber",title:"Docusaurus maintainer",url:"https://sebastienlorber.com",imageURL:"https://github.com/slorber.png",key:"slorber"}],frontMatter:{slug:"mdx-blog-post",title:"MDX Blog Post",authors:["slorber"],tags:["docusaurus"]},unlisted:!1,prevItem:{title:"Welcome",permalink:"/blog/welcome"},nextItem:{title:"Long Blog Post",permalink:"/blog/long-blog-post"}},l={authorsImageUrls:[void 0]},u=[];function i(t){const e={a:"a",admonition:"admonition",code:"code",p:"p",pre:"pre",...(0,n.a)(),...t.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(e.p,{children:["Blog posts support ",(0,s.jsx)(e.a,{href:"https://docusaurus.io/docs/markdown-features",children:"Docusaurus Markdown features"}),", such as ",(0,s.jsx)(e.a,{href:"https://mdxjs.com/",children:"MDX"}),"."]}),"\n",(0,s.jsxs)(e.admonition,{type:"tip",children:[(0,s.jsx)(e.p,{children:"Use the power of React to create interactive blog posts."}),(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-js",children:"<button onClick={() => alert('button clicked!')}>Click me!</button>\n"})}),(0,s.jsx)("button",{onClick:()=>alert("button clicked!"),children:"Click me!"})]})]})}function d(t={}){const{wrapper:e}={...(0,n.a)(),...t.components};return e?(0,s.jsx)(e,{...t,children:(0,s.jsx)(i,{...t})}):i(t)}},1151:(t,e,o)=>{o.d(e,{Z:()=>c,a:()=>a});var s=o(7294);const n={},r=s.createContext(n);function a(t){const e=s.useContext(r);return s.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:a(t.components),s.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/f557db91.baa824db.js b/assets/js/f557db91.baa824db.js new file mode 100644 index 000000000..a03b70e1e --- /dev/null +++ b/assets/js/f557db91.baa824db.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4543],{2089:(e,o,t)=>{t.r(o),t.d(o,{assets:()=>u,contentTitle:()=>a,default:()=>l,frontMatter:()=>r,metadata:()=>d,toc:()=>s});var n=t(5893),i=t(1151);const r={},a="NODEdrop",d={id:"dao/node-drop",title:"NODEdrop",description:'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."',source:"@site/docs/dao/node-drop.md",sourceDirName:"dao",slug:"/dao/node-drop",permalink:"/docs/dao/node-drop",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/node-drop.md",tags:[],version:"current",frontMatter:{}},u={},s=[];function c(e){const o={h1:"h1",p:"p",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.h1,{id:"nodedrop",children:"NODEdrop"}),"\n",(0,n.jsx)(o.p,{children:'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."'})]})}function l(e={}){const{wrapper:o}={...(0,i.a)(),...e.components};return o?(0,n.jsx)(o,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},1151:(e,o,t)=>{t.d(o,{Z:()=>d,a:()=>a});var n=t(7294);const i={},r=n.createContext(i);function a(e){const o=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function d(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(r.Provider,{value:o},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f557db91.e36c8d24.js b/assets/js/f557db91.e36c8d24.js deleted file mode 100644 index 146a3ded6..000000000 --- a/assets/js/f557db91.e36c8d24.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[4543],{4137:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?i(Object(r),!0).forEach((function(t){o(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):i(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function u(e,t){if(null==e)return{};var r,n,o=function(e,t){if(null==e)return{};var r,n,o={},i=Object.keys(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n<i.length;n++)r=i[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),d=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},l=function(e){var t=d(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,l=u(e,["components","mdxType","originalType","parentName"]),p=d(r),m=o,f=p["".concat(c,".").concat(m)]||p[m]||s[m]||i;return r?n.createElement(f,a(a({ref:t},l),{},{components:r})):n.createElement(f,a({ref:t},l))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var u={};for(var c in t)hasOwnProperty.call(t,c)&&(u[c]=t[c]);u.originalType=e,u[p]="string"==typeof e?e:o,a[1]=u;for(var d=2;d<i;d++)a[d]=r[d];return n.createElement.apply(null,a)}return n.createElement.apply(null,r)}m.displayName="MDXCreateElement"},9109:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>s,frontMatter:()=>i,metadata:()=>u,toc:()=>d});var n=r(7462),o=(r(7294),r(4137));const i={},a="NODEdrop",u={unversionedId:"dao/node-drop",id:"dao/node-drop",title:"NODEdrop",description:'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."',source:"@site/docs/dao/node-drop.md",sourceDirName:"dao",slug:"/dao/node-drop",permalink:"/docs/dao/node-drop",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/dao/node-drop.md",tags:[],version:"current",frontMatter:{}},c={},d=[],l={toc:d},p="wrapper";function s(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"nodedrop"},"NODEdrop"),(0,o.kt)("p",null,'"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."'))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f744a4d0.53dbd09f.js b/assets/js/f744a4d0.53dbd09f.js deleted file mode 100644 index a809c7941..000000000 --- a/assets/js/f744a4d0.53dbd09f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1605],{4137:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?a(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,o,r=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o<a.length;o++)n=a[o],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),c=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return o.createElement(s.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=c(n),m=r,h=d["".concat(s,".").concat(m)]||d[m]||u[m]||a;return n?o.createElement(h,i(i({ref:t},p),{},{components:n})):o.createElement(h,i({ref:t},p))}));function h(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:r,i[1]=l;for(var c=2;c<a;c++)i[c]=n[c];return o.createElement.apply(null,i)}return o.createElement.apply(null,n)}m.displayName="MDXCreateElement"},979:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var o=n(7462),r=(n(7294),n(4137));const a={},i="How to Connect to My Blockchain Node",l={unversionedId:"user/videos-and-tutorials/guides/connect-node",id:"user/videos-and-tutorials/guides/connect-node",title:"How to Connect to My Blockchain Node",description:"When you've set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you've selected. Below is a guide on how to do this:",source:"@site/docs/user/videos-and-tutorials/guides/connect-node.md",sourceDirName:"user/videos-and-tutorials/guides",slug:"/user/videos-and-tutorials/guides/connect-node",permalink:"/docs/user/videos-and-tutorials/guides/connect-node",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/guides/connect-node.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Crash Course",permalink:"/docs/user/videos-and-tutorials/crash-course"},next:{title:"FAQs",permalink:"/docs/user/faqs"}},s={},c=[{value:"Ethereum Mainnet Node",id:"ethereum-mainnet-node",level:2},{value:"Other Nodes in Stakers tab",id:"other-nodes-in-stakers-tab",level:2},{value:"Connecting to Metamask",id:"connecting-to-metamask",level:2},{value:"Important Reminders",id:"important-reminders",level:2}],p={toc:c},d="wrapper";function u(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,o.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"how-to-connect-to-my-blockchain-node"},"How to Connect to My Blockchain Node"),(0,r.kt)("p",null,"When you've set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you've selected. Below is a guide on how to do this:"),(0,r.kt)("h2",{id:"ethereum-mainnet-node"},"Ethereum Mainnet Node"),(0,r.kt)("p",null,"If you've selected an Ethereum mainnet node in ",(0,r.kt)("strong",{parentName:"p"},"Repository > Ethereum")," or ",(0,r.kt)("strong",{parentName:"p"},"Stakers > Ethereum"),", here's how to connect:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"The Execution client you have selected will expose its RPC at:")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"http://fullnode.dappnode:8545\n")),(0,r.kt)("ol",{start:2},(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Do note that this domain is only accessible when you're connected to Dappnode either via WiFi or VPN.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"If you intend to use the RPC externally (i.e., without needing to connect to Dappnode), you'll need to refer to our tutorial on How to expose an RPC externally."))),(0,r.kt)("h2",{id:"other-nodes-in-stakers-tab"},"Other Nodes in Stakers tab"),(0,r.kt)("p",null,"For blockchain nodes other than Ethereum mainnet:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Identify the specific network for your node, e.g., ",(0,r.kt)("inlineCode",{parentName:"p"},"lukso"),", ",(0,r.kt)("inlineCode",{parentName:"p"},"gnosis"),", or ",(0,r.kt)("inlineCode",{parentName:"p"},"prater"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"The endpoint for these nodes will be:"))),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"http://<network>.fullnode.dappnode:8545\n")),(0,r.kt)("p",null,"Replace ",(0,r.kt)("inlineCode",{parentName:"p"},"<network>")," with your specific blockchain network name."),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},"Ensure that the node is correctly set in ",(0,r.kt)("strong",{parentName:"li"},"Stakers > ",(0,r.kt)("inlineCode",{parentName:"strong"},"<network>")),".")),(0,r.kt)("h2",{id:"connecting-to-metamask"},"Connecting to Metamask"),(0,r.kt)("p",null,"To connect your node to Metamask:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"You will need to provide the Chain ID of the blockchain you're connecting to.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Chain IDs for various blockchains can be found at ",(0,r.kt)("a",{parentName:"p",href:"https://chainlist.org/"},"Chainlist"),".")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"In Metamask, navigate to ",(0,r.kt)("strong",{parentName:"p"},"Settings > Networks > Add Network"),". Input the RPC URL (",(0,r.kt)("inlineCode",{parentName:"p"},"http://<network>.fullnode.dappnode:8545"),") and the Chain ID from Chainlist."))),(0,r.kt)("h2",{id:"important-reminders"},"Important Reminders"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Your node needs to be fully synced to function correctly. This ensures that the latest state of the blockchain and its transactions are available for your applications.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},"Always ensure the safety and privacy of your Dappnode by not unnecessarily exposing ports or services that might be targets for malicious actors."))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f744a4d0.e5711a70.js b/assets/js/f744a4d0.e5711a70.js new file mode 100644 index 000000000..51198dbc5 --- /dev/null +++ b/assets/js/f744a4d0.e5711a70.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[1605],{2747:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var t=o(5893),s=o(1151);const i={},r="How to Connect to My Blockchain Node",c={id:"user/videos-and-tutorials/guides/connect-node",title:"How to Connect to My Blockchain Node",description:"When you've set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you've selected. Below is a guide on how to do this:",source:"@site/docs/user/videos-and-tutorials/guides/connect-node.md",sourceDirName:"user/videos-and-tutorials/guides",slug:"/user/videos-and-tutorials/guides/connect-node",permalink:"/docs/user/videos-and-tutorials/guides/connect-node",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/videos-and-tutorials/guides/connect-node.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"Crash Course",permalink:"/docs/user/videos-and-tutorials/crash-course"},next:{title:"FAQs",permalink:"/docs/user/faqs"}},d={},a=[{value:"Ethereum Mainnet Node",id:"ethereum-mainnet-node",level:2},{value:"Other Nodes in Stakers tab",id:"other-nodes-in-stakers-tab",level:2},{value:"Connecting to Metamask",id:"connecting-to-metamask",level:2},{value:"Important Reminders",id:"important-reminders",level:2}];function l(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"how-to-connect-to-my-blockchain-node",children:"How to Connect to My Blockchain Node"}),"\n",(0,t.jsx)(n.p,{children:"When you've set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you've selected. Below is a guide on how to do this:"}),"\n",(0,t.jsx)(n.h2,{id:"ethereum-mainnet-node",children:"Ethereum Mainnet Node"}),"\n",(0,t.jsxs)(n.p,{children:["If you've selected an Ethereum mainnet node in ",(0,t.jsx)(n.strong,{children:"Repository > Ethereum"})," or ",(0,t.jsx)(n.strong,{children:"Stakers > Ethereum"}),", here's how to connect:"]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"The Execution client you have selected will expose its RPC at:"}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"http://fullnode.dappnode:8545\n"})}),"\n",(0,t.jsxs)(n.ol,{start:"2",children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Do note that this domain is only accessible when you're connected to Dappnode either via WiFi or VPN."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"If you intend to use the RPC externally (i.e., without needing to connect to Dappnode), you'll need to refer to our tutorial on How to expose an RPC externally."}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"other-nodes-in-stakers-tab",children:"Other Nodes in Stakers tab"}),"\n",(0,t.jsx)(n.p,{children:"For blockchain nodes other than Ethereum mainnet:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Identify the specific network for your node, e.g., ",(0,t.jsx)(n.code,{children:"lukso"}),", ",(0,t.jsx)(n.code,{children:"gnosis"}),", or ",(0,t.jsx)(n.code,{children:"prater"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"The endpoint for these nodes will be:"}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"http://<network>.fullnode.dappnode:8545\n"})}),"\n",(0,t.jsxs)(n.p,{children:["Replace ",(0,t.jsx)(n.code,{children:"<network>"})," with your specific blockchain network name."]}),"\n",(0,t.jsxs)(n.ol,{start:"3",children:["\n",(0,t.jsxs)(n.li,{children:["Ensure that the node is correctly set in ",(0,t.jsxs)(n.strong,{children:["Stakers > ",(0,t.jsx)(n.code,{children:"<network>"})]}),"."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"connecting-to-metamask",children:"Connecting to Metamask"}),"\n",(0,t.jsx)(n.p,{children:"To connect your node to Metamask:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"You will need to provide the Chain ID of the blockchain you're connecting to."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["Chain IDs for various blockchains can be found at ",(0,t.jsx)(n.a,{href:"https://chainlist.org/",children:"Chainlist"}),"."]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsxs)(n.p,{children:["In Metamask, navigate to ",(0,t.jsx)(n.strong,{children:"Settings > Networks > Add Network"}),". Input the RPC URL (",(0,t.jsx)(n.code,{children:"http://<network>.fullnode.dappnode:8545"}),") and the Chain ID from Chainlist."]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"important-reminders",children:"Important Reminders"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Your node needs to be fully synced to function correctly. This ensures that the latest state of the blockchain and its transactions are available for your applications."}),"\n"]}),"\n",(0,t.jsxs)(n.li,{children:["\n",(0,t.jsx)(n.p,{children:"Always ensure the safety and privacy of your Dappnode by not unnecessarily exposing ports or services that might be targets for malicious actors."}),"\n"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>c,a:()=>r});var t=o(7294);const s={},i=t.createContext(s);function r(e){const n=t.useContext(i);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:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/fcb270fb.251db153.js b/assets/js/fcb270fb.251db153.js deleted file mode 100644 index 4aadf35f3..000000000 --- a/assets/js/fcb270fb.251db153.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7410],{4137:(e,n,t)=>{t.d(n,{Zo:()=>p,kt:()=>y});var a=t(7294);function o(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function r(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function i(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?r(Object(t),!0).forEach((function(n){o(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):r(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function s(e,n){if(null==e)return{};var t,a,o=function(e,n){if(null==e)return{};var t,a,o={},r=Object.keys(e);for(a=0;a<r.length;a++)t=r[a],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a<r.length;a++)t=r[a],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=a.createContext({}),u=function(e){var n=a.useContext(l),t=n;return e&&(t="function"==typeof e?e(n):i(i({},n),e)),t},p=function(e){var n=u(e.components);return a.createElement(l.Provider,{value:n},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=u(t),m=o,y=c["".concat(l,".").concat(m)]||c[m]||d[m]||r;return t?a.createElement(y,i(i({ref:n},p),{},{components:t})):a.createElement(y,i({ref:n},p))}));function y(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=t.length,i=new Array(r);i[0]=m;var s={};for(var l in n)hasOwnProperty.call(n,l)&&(s[l]=n[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var u=2;u<r;u++)i[u]=t[u];return a.createElement.apply(null,i)}return a.createElement.apply(null,t)}m.displayName="MDXCreateElement"},7707:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>u});var a=t(7462),o=(t(7294),t(4137));const r={},i="FAQs & Troubleshooting",s={unversionedId:"user/dappnode-cloud/providers/aws/faqs",id:"user/dappnode-cloud/providers/aws/faqs",title:"FAQs & Troubleshooting",description:"Which machine should I choose?",source:"@site/docs/user/dappnode-cloud/providers/aws/faqs.md",sourceDirName:"user/dappnode-cloud/providers/aws",slug:"/user/dappnode-cloud/providers/aws/faqs",permalink:"/docs/user/dappnode-cloud/providers/aws/faqs",draft:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/providers/aws/faqs.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"How to Set Up an Instance",permalink:"/docs/user/dappnode-cloud/providers/aws/set-up-instance"},next:{title:"More coming soon",permalink:"/docs/user/dappnode-cloud/providers/coming-soon"}},l={},u=[],p={toc:u},c="wrapper";function d(e){let{components:n,...t}=e;return(0,o.kt)(c,(0,a.Z)({},p,t,{components:n,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"faqs--troubleshooting"},"FAQs & Troubleshooting"),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("strong",null,"Which machine should I choose?")),"All available machines on AWS when launching an instance are suitable for running Dappnode. However, the best choice depends on your specific needs and intentions. Here's a general guide to help you decide:",(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Basic Testing and Development:")," For basic testing or development purposes, where you don't need high performance or large storage, a smaller instance with 2 vCPUs and 4 GB RAM should be sufficient. This setup allows you to explore Dappnode functionalities without significant resource investment.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Running a Node"),": For running a full node in any network, a more powerful instance is required. We recommend an instance with at least 2 vCPUs and 8 GB RAM, but to handle the heavy computational, an instance with 4 vCPUs, 16 GB RAM would be the perfect option."))),(0,o.kt)("p",null,"Evaluate your use case and choose an instance that aligns with your performance and scalability requirements.")),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("strong",null,"How much storage do I need?")),"The storage requirements for your Dappnode instance depend largely on your intended use. Here are some guidelines for different scenarios:",(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Dappnode Testing:")," For basic testing purposes, a minimum of 30 GB of disk space is recommended. This is sufficient for exploring the Dappnode environment and testing small applications without significant data storage needs.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Running a Node in Mainnet:")," If you plan to run a full node in the Ethereum mainnet, you will need approximately 1.4 TB (1304 GiB)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Running a Node in Holesky:")," For running a node in the Holesky testnet, you should allocate around 180 GB (168 GiB)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Running a Node in Lukso:")," If your goal is to run a node in the Lukso network, you will need about 40 GB (38 GiB)")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Running a Node in Gnosis:")," To run a node in the Gnosis network, you should provision around 503 GB (469 GiB)"))),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Regardless of your initial choice, AWS EC2 allows you to scale your storage as needed after the instance is launched. You can easily adjust the storage size through the AWS EC2 UI to meet your growing needs."))),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("strong",null,"Is it safe to have those security groups? Why are they needed?")),"Setting the security groups as explained in the ",(0,o.kt)("a",{href:"/docs/user/dappnode-cloud/providers/aws/set-up-instance#instance-configuration"},"Launch an instance")," section does not automatically open the specified ports. This configuration allows services from your Dappnode to open the specified ports when needed. It's crucial to understand that having these inbound rules does not mean those ports are constantly exposed.",(0,o.kt)("br",null),(0,o.kt)("br",null),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"SSH (Port 22):")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Purpose: Allows you to securely connect to your instance via SSH."),(0,o.kt)("li",{parentName:"ul"},"Why Needed: Essential for remote management and troubleshooting of your instance.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"HTTP (Port 80):")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Purpose: Enables HTTP traffic to your instance."),(0,o.kt)("li",{parentName:"ul"},"Why Needed: Required for accessing web services and interfaces hosted on your Dappnode.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"HTTPS (Port 443):")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Purpose: Enables HTTPS traffic, providing secure access to web services."),(0,o.kt)("li",{parentName:"ul"},"Why Needed: Ensures secure connections to web interfaces and services, protecting data in transit.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Wireguard (Port 51820):")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Purpose: Facilitates Wireguard VPN connections."),(0,o.kt)("li",{parentName:"ul"},"Why Needed: Necessary for establishing secure VPN connections to your Dappnode instance.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"General TCP (Ports 1024-65535):")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Purpose: Allows various TCP services to communicate over a wide range of ports."),(0,o.kt)("li",{parentName:"ul"},"Why Needed: Ensures that your Dappnode instance can communicate effectively with other nodes and services, enhancing overall performance.")),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"General UDP (Ports 1024-65535):")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Purpose: Allows various UDP services to communicate over a wide range of ports."),(0,o.kt)("li",{parentName:"ul"},"Why Needed: Similar to TCP, but for UDP traffic, this rule ensures that your Dappnode instance can efficiently handle peer-to-peer connections and other UDP-based communications.\\")),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"We recommend including all the ports mentioned in your security group inbound rules. This ensures that your Dappnode instance can perform optimally and access all necessary services. However, if you are an experienced user, you can customize these rules to suit your specific needs. You can control which ports to expose based on your security preferences and operational requirements."))),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("strong",null,"Why is it necessary to provide my Telegram user ID if I also provide my bot token?")),(0,o.kt)("p",null,"If you want to run commands to your Dappnode via Telegram is it essential to provide your Telegram user ID. Even if you already provide the bot token, anyone with the bot's username could send messages (and running commands so) to your dappnode. This could lead on someone getting the wireguard credentials of your Dappnode and connecting to it."),(0,o.kt)("p",null,"That is why its mandatory to provide it, so your bot only listens to commands given by the account linked to your Telegram user ID.")),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("strong",null,"Why do I want to connect via SSH to my Dappnode?")),(0,o.kt)("p",null,"Connecting via SSH to your Dappnode allows you to access your instance's terminal directly. Even if you have obtained your Wireguard credentials via Telegram, having SSH access is important for several reasons:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Full Control:")," SSH access gives you complete control over your Dappnode instance, allowing you to perform advanced configurations and manage the system directly.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Troubleshooting:")," In case of potential issues or errors, accessing the terminal via SSH enables you to diagnose and fix problems efficiently.")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("p",{parentName:"li"},(0,o.kt)("strong",{parentName:"p"},"Advanced Management:")," You can run commands, update software, monitor system performance, and manage services that may not be accessible through the standard Dappnode UI."))),(0,o.kt)("p",null,"Having SSH access is crucial for maintaining and managing your Dappnode instance effectively, ensuring you can handle any technical challenges that arise.")),(0,o.kt)("details",null,(0,o.kt)("summary",null,(0,o.kt)("strong",null,"I've already launched my instance and I'm not getting my Wireguard credentials")),(0,o.kt)("p",null,"If you are not receiving your Wireguard credentials immediately after launching your instance, the Dappnode Image might still be installing. If this happens, wait a few minutes and try again."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Via SSH"),": If you encounter this issue, exit your SSH session with the ",(0,o.kt)("inlineCode",{parentName:"li"},"exit")," command in your instance terminal and reconnect as explained in the guide."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Via Telegram Bot"),": Simply retry the ",(0,o.kt)("inlineCode",{parentName:"li"},"/get_wireguard_credentials")," command after a short wait.")),(0,o.kt)("p",null,"Additionally, ensure that your instance storage has not filled up during the installation. For a testing Dappnode (a Dappnode not intended to run a node in any network), we recommend at least 30 GB of storage.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fcb270fb.807d0857.js b/assets/js/fcb270fb.807d0857.js new file mode 100644 index 000000000..fec4ea661 --- /dev/null +++ b/assets/js/fcb270fb.807d0857.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[7410],{9831:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>c});var o=s(5893),i=s(1151);const r={},t="FAQs & Troubleshooting",a={id:"user/dappnode-cloud/providers/aws/faqs",title:"FAQs & Troubleshooting",description:"Which machine should I choose?",source:"@site/docs/user/dappnode-cloud/providers/aws/faqs.md",sourceDirName:"user/dappnode-cloud/providers/aws",slug:"/user/dappnode-cloud/providers/aws/faqs",permalink:"/docs/user/dappnode-cloud/providers/aws/faqs",draft:!1,unlisted:!1,editUrl:"https://github.com/dappnode/DappnodeDocs/docs/user/dappnode-cloud/providers/aws/faqs.md",tags:[],version:"current",frontMatter:{},sidebar:"userSidebar",previous:{title:"How to Set Up an Instance",permalink:"/docs/user/dappnode-cloud/providers/aws/set-up-instance"},next:{title:"More coming soon",permalink:"/docs/user/dappnode-cloud/providers/coming-soon"}},d={},c=[];function l(e){const n={admonition:"admonition",code:"code",h1:"h1",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components},{Details:s}=n;return s||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"faqs--troubleshooting",children:"FAQs & Troubleshooting"}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("strong",{children:"Which machine should I choose?"})}),(0,o.jsx)(n.p,{children:"All available machines on AWS when launching an instance are suitable for running Dappnode. However, the best choice depends on your specific needs and intentions. Here's a general guide to help you decide:"}),(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Basic Testing and Development:"})," For basic testing or development purposes, where you don't need high performance or large storage, a smaller instance with 2 vCPUs and 4 GB RAM should be sufficient. This setup allows you to explore Dappnode functionalities without significant resource investment."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Running a Node"}),": For running a full node in any network, a more powerful instance is required. We recommend an instance with at least 2 vCPUs and 8 GB RAM, but to handle the heavy computational, an instance with 4 vCPUs, 16 GB RAM would be the perfect option."]}),"\n"]}),"\n"]}),(0,o.jsx)(n.p,{children:"Evaluate your use case and choose an instance that aligns with your performance and scalability requirements."})]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("strong",{children:"How much storage do I need?"})}),(0,o.jsx)(n.p,{children:"The storage requirements for your Dappnode instance depend largely on your intended use. Here are some guidelines for different scenarios:"}),(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Dappnode Testing:"})," For basic testing purposes, a minimum of 30 GB of disk space is recommended. This is sufficient for exploring the Dappnode environment and testing small applications without significant data storage needs."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Running a Node in Mainnet:"})," If you plan to run a full node in the Ethereum mainnet, you will need approximately 1.4 TB (1304 GiB)"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Running a Node in Holesky:"})," For running a node in the Holesky testnet, you should allocate around 180 GB (168 GiB)"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Running a Node in Lukso:"})," If your goal is to run a node in the Lukso network, you will need about 40 GB (38 GiB)"]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Running a Node in Gnosis:"})," To run a node in the Gnosis network, you should provision around 503 GB (469 GiB)"]}),"\n"]}),"\n"]}),(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsx)(n.p,{children:"Regardless of your initial choice, AWS EC2 allows you to scale your storage as needed after the instance is launched. You can easily adjust the storage size through the AWS EC2 UI to meet your growing needs."})})]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("strong",{children:"Is it safe to have those security groups? Why are they needed?"})}),(0,o.jsxs)(n.p,{children:["Setting the security groups as explained in the ",(0,o.jsx)("a",{href:"/docs/user/dappnode-cloud/providers/aws/set-up-instance#instance-configuration",children:"Launch an instance"})," section does not automatically open the specified ports. This configuration allows services from your Dappnode to open the specified ports when needed. It's crucial to understand that having these inbound rules does not mean those ports are constantly exposed."]}),(0,o.jsx)("br",{}),(0,o.jsx)("br",{}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"SSH (Port 22):"})}),(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Purpose: Allows you to securely connect to your instance via SSH."}),"\n",(0,o.jsx)(n.li,{children:"Why Needed: Essential for remote management and troubleshooting of your instance."}),"\n"]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"HTTP (Port 80):"})}),(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Purpose: Enables HTTP traffic to your instance."}),"\n",(0,o.jsx)(n.li,{children:"Why Needed: Required for accessing web services and interfaces hosted on your Dappnode."}),"\n"]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"HTTPS (Port 443):"})}),(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Purpose: Enables HTTPS traffic, providing secure access to web services."}),"\n",(0,o.jsx)(n.li,{children:"Why Needed: Ensures secure connections to web interfaces and services, protecting data in transit."}),"\n"]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"Wireguard (Port 51820):"})}),(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Purpose: Facilitates Wireguard VPN connections."}),"\n",(0,o.jsx)(n.li,{children:"Why Needed: Necessary for establishing secure VPN connections to your Dappnode instance."}),"\n"]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"General TCP (Ports 1024-65535):"})}),(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Purpose: Allows various TCP services to communicate over a wide range of ports."}),"\n",(0,o.jsx)(n.li,{children:"Why Needed: Ensures that your Dappnode instance can communicate effectively with other nodes and services, enhancing overall performance."}),"\n"]}),(0,o.jsx)(n.p,{children:(0,o.jsx)(n.strong,{children:"General UDP (Ports 1024-65535):"})}),(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsx)(n.li,{children:"Purpose: Allows various UDP services to communicate over a wide range of ports."}),"\n",(0,o.jsx)(n.li,{children:"Why Needed: Similar to TCP, but for UDP traffic, this rule ensures that your Dappnode instance can efficiently handle peer-to-peer connections and other UDP-based communications.\\"}),"\n"]}),(0,o.jsx)(n.admonition,{type:"tip",children:(0,o.jsx)(n.p,{children:"We recommend including all the ports mentioned in your security group inbound rules. This ensures that your Dappnode instance can perform optimally and access all necessary services. However, if you are an experienced user, you can customize these rules to suit your specific needs. You can control which ports to expose based on your security preferences and operational requirements."})})]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("strong",{children:"Why is it necessary to provide my Telegram user ID if I also provide my bot token?"})}),(0,o.jsx)("p",{children:"If you want to run commands to your Dappnode via Telegram is it essential to provide your Telegram user ID. Even if you already provide the bot token, anyone with the bot's username could send messages (and running commands so) to your dappnode. This could lead on someone getting the wireguard credentials of your Dappnode and connecting to it."}),(0,o.jsx)("p",{children:"That is why its mandatory to provide it, so your bot only listens to commands given by the account linked to your Telegram user ID."})]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("strong",{children:"Why do I want to connect via SSH to my Dappnode?"})}),(0,o.jsx)(n.p,{children:"Connecting via SSH to your Dappnode allows you to access your instance's terminal directly. Even if you have obtained your Wireguard credentials via Telegram, having SSH access is important for several reasons:"}),(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Full Control:"})," SSH access gives you complete control over your Dappnode instance, allowing you to perform advanced configurations and manage the system directly."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Troubleshooting:"})," In case of potential issues or errors, accessing the terminal via SSH enables you to diagnose and fix problems efficiently."]}),"\n"]}),"\n",(0,o.jsxs)(n.li,{children:["\n",(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Advanced Management:"})," You can run commands, update software, monitor system performance, and manage services that may not be accessible through the standard Dappnode UI."]}),"\n"]}),"\n"]}),(0,o.jsx)(n.p,{children:"Having SSH access is crucial for maintaining and managing your Dappnode instance effectively, ensuring you can handle any technical challenges that arise."})]}),"\n",(0,o.jsxs)(s,{children:[(0,o.jsx)("summary",{children:(0,o.jsx)("strong",{children:"I've already launched my instance and I'm not getting my Wireguard credentials"})}),(0,o.jsx)(n.p,{children:"If you are not receiving your Wireguard credentials immediately after launching your instance, the Dappnode Image might still be installing. If this happens, wait a few minutes and try again."}),(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Via SSH"}),": If you encounter this issue, exit your SSH session with the ",(0,o.jsx)(n.code,{children:"exit"})," command in your instance terminal and reconnect as explained in the guide."]}),"\n",(0,o.jsxs)(n.li,{children:[(0,o.jsx)(n.strong,{children:"Via Telegram Bot"}),": Simply retry the ",(0,o.jsx)(n.code,{children:"/get_wireguard_credentials"})," command after a short wait."]}),"\n"]}),(0,o.jsx)(n.p,{children:"Additionally, ensure that your instance storage has not filled up during the installation. For a testing Dappnode (a Dappnode not intended to run a node in any network), we recommend at least 30 GB of storage."})]})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(l,{...e})}):l(e)}},1151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>t});var o=s(7294);const i={},r=o.createContext(i);function t(e){const n=o.useContext(r);return o.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(i):e.components||i:t(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.50f3b005.js b/assets/js/main.50f3b005.js new file mode 100644 index 000000000..09cb926d4 --- /dev/null +++ b/assets/js/main.50f3b005.js @@ -0,0 +1,2 @@ +/*! For license information please see main.50f3b005.js.LICENSE.txt */ +(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(7294);var r=n(8356),o=n.n(r),a=n(6887);const i={"0085f636":[()=>n.e(8925).then(n.bind(n,9353)),"@site/docs/user/rollups/optimism.md",9353],"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],"027d004c":[()=>n.e(8352).then(n.bind(n,8470)),"@site/docs/dao/node-basics.md",8470],"031793e1":[()=>n.e(1633).then(n.t.bind(n,2511,19)),"~blog/default/blog-tags-facebook-038.json",2511],"0429b4a1":[()=>n.e(6197).then(n.bind(n,497)),"@site/docs/user/dappnode-cloud/providers/aws/overview.md",497],"058440e4":[()=>n.e(3964).then(n.bind(n,6529)),"@site/docs/user/staking/overview.md",6529],"065c701c":[()=>n.e(7197).then(n.t.bind(n,4469,19)),"/home/runner/work/DAppNodeDocs/DAppNodeDocs/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"090ba480":[()=>n.e(5788).then(n.bind(n,2963)),"@site/docs/smooth/deep-dive-into-smooth/overview.md",2963],"096bfee4":[()=>n.e(7178).then(n.t.bind(n,5010,19)),"~blog/default/blog-tags-facebook-038-list.json",5010],"0aa77f7e":[()=>n.e(4585).then(n.t.bind(n,5745,19)),"/home/runner/work/DAppNodeDocs/DAppNodeDocs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"0af727f1":[()=>n.e(8999).then(n.bind(n,8071)),"@site/docs/smooth/faq-glossary.md",8071],"0f7f07eb":[()=>n.e(7675).then(n.bind(n,4027)),"@site/docs/user/access-your-dappnode/terminal.md",4027],"14c20d3a":[()=>n.e(903).then(n.bind(n,8377)),"@site/docs/user/staking/ethereum/solo/holesky.md",8377],17896441:[()=>Promise.all([n.e(532),n.e(7874),n.e(7918)]).then(n.bind(n,8945)),"@theme/DocItem",8945],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,1473)),"@theme/SearchPage",1473],"1df93b7f":[()=>Promise.all([n.e(532),n.e(3237)]).then(n.bind(n,8391)),"@site/src/pages/index.tsx",8391],"1e4f1bb9":[()=>n.e(1323).then(n.bind(n,5381)),"@site/docs/user/packages/dms.md",5381],"1ee5c5d2":[()=>n.e(3389).then(n.bind(n,6030)),"@site/docs/smooth/deep-dive-into-smooth/oracle-sm.md",6030],20034248:[()=>n.e(3743).then(n.bind(n,2627)),"@site/docs/user/ethical-metrics/overview.md",2627],"2057bc77":[()=>n.e(5091).then(n.bind(n,4386)),"@site/docs/user/hardware/maintenance.md",4386],"22a3df87":[()=>n.e(2559).then(n.bind(n,3585)),"@site/docs/user/install/script.md",3585],25229465:[()=>n.e(4952).then(n.bind(n,6639)),"@site/docs/user/ethical-metrics/metrics.md",6639],"2a82f816":[()=>n.e(437).then(n.bind(n,1469)),"@site/docs/dev/references/manifest.md",1469],"2c509ddc":[()=>n.e(4840).then(n.bind(n,4550)),"@site/docs/smooth/subscribe-to-smooth/manual.md",4550],"3093fe32":[()=>n.e(641).then(n.bind(n,9024)),"@site/docs/user/dappnode-cloud/overview.md",9024],"30a24c52":[()=>n.e(453).then(n.t.bind(n,8605,19)),"~blog/default/blog-tags-hello-039.json",8605],"34d45c9f":[()=>n.e(7089).then(n.bind(n,1598)),"@site/docs/smooth.md",1598],"3f7aee3c":[()=>n.e(9779).then(n.bind(n,8801)),"@site/docs/user/access-your-dappnode/overview.md",8801],"3fac1d53":[()=>n.e(7533).then(n.bind(n,7771)),"@site/docs/smooth/deep-dive-into-smooth/states.md",7771],"4c4b1a63":[()=>n.e(3504).then(n.bind(n,3043)),"@site/docs/user/videos-and-tutorials/driving-school/configuration.md",3043],"4c9e35b1":[()=>n.e(9035).then(n.t.bind(n,499,19)),"~blog/default/blog-tags-hola-ea2-list.json",499],"4d8f6977":[()=>n.e(5815).then(n.bind(n,718)),"@site/docs/user/staking/ethereum/dvt-technologies/obol-network.md",718],"536a4320":[()=>n.e(9374).then(n.bind(n,392)),"@site/docs/user/faqs.md",392],"5373dce7":[()=>n.e(1606).then(n.t.bind(n,2776,19)),"/home/runner/work/DAppNodeDocs/DAppNodeDocs/.docusaurus/@easyops-cn/docusaurus-search-local/default/plugin-route-context-module-100.json",2776],"53ed655b":[()=>n.e(5708).then(n.bind(n,3252)),"@site/docs/user/packages/monero.md",3252],"5456a9ed":[()=>n.e(1600).then(n.bind(n,242)),"@site/docs/user/access-your-dappnode/local.md",242],59362658:[()=>n.e(2267).then(n.bind(n,7797)),"@site/blog/2021-08-01-mdx-blog-post.mdx",7797],"59a51c52":[()=>n.e(4980).then(n.bind(n,9837)),"@site/docs/user/ethical-metrics/setup.md",9837],"5b35db5e":[()=>n.e(7775).then(n.bind(n,2292)),"@site/docs/user/access-your-dappnode/vpn/openvpn.md",2292],"5d0a1dad":[()=>n.e(306).then(n.bind(n,919)),"@site/docs/user/getting-started/choose-your-path.md",919],"5d665ce0":[()=>n.e(8646).then(n.bind(n,9513)),"@site/docs/user/hardware/overview.md",9513],"5e95c892":[()=>n.e(9661).then(n.bind(n,1892)),"@theme/DocsRoot",1892],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"5f877448":[()=>n.e(839).then(n.bind(n,6506)),"@site/docs/user/access-your-dappnode/vpn/overview.md",6506],"608ae6a4":[()=>n.e(6938).then(n.t.bind(n,4545,19)),"~blog/default/blog-tags-docusaurus-0e0-list.json",4545],66406991:[()=>n.e(110).then(n.t.bind(n,711,19)),"~blog/default/blog-tags-hello-039-list.json",711],"67625ece":[()=>n.e(120).then(n.bind(n,8386)),"@site/docs/dev/sdk/overview.md",8386],"6875c492":[()=>Promise.all([n.e(532),n.e(7874),n.e(130),n.e(8610)]).then(n.bind(n,1714)),"@theme/BlogTagsPostsPage",1714],"6c88006d":[()=>n.e(1285).then(n.t.bind(n,3769,19)),"/home/runner/work/DAppNodeDocs/DAppNodeDocs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"6e504cb9":[()=>n.e(9402).then(n.bind(n,865)),"@site/docs/user/dappnode-cloud/providers/coming-soon.md",865],"6e93d9f5":[()=>n.e(935).then(n.bind(n,1830)),"@site/docs/smooth/unsubscribe-from-smooth.md",1830],"73664a40":[()=>n.e(3514).then(n.bind(n,1985)),"@site/blog/2019-05-29-long-blog-post.md",1985],"747b92bf":[()=>n.e(4743).then(n.bind(n,2164)),"@site/docs/user/getting-started/connect-dappnode-to-the-router.md",2164],"7661071f":[()=>n.e(9642).then(n.bind(n,3174)),"@site/blog/2021-08-26-welcome/index.md?truncated=true",3174],"769f9326":[()=>n.e(8233).then(n.bind(n,2125)),"@site/docs/user/hardware/temperature.md",2125],"773dc9fa":[()=>n.e(6471).then(n.bind(n,740)),"@site/docs/smooth/subscribe-to-smooth/overview.md",740],"7b2e8791":[()=>n.e(8804).then(n.bind(n,2935)),"@site/docs/dev/sdk/commands.md",2935],"7ef68c32":[()=>n.e(3036).then(n.bind(n,611)),"@site/docs/dao/node-stream.md",611],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],82063238:[()=>n.e(9984).then(n.bind(n,6789)),"@site/docs/dev/references/docker-compose.md",6789],"8717b14a":[()=>n.e(948).then(n.bind(n,7106)),"@site/blog/2019-05-29-long-blog-post.md?truncated=true",7106],"89600f1f":[()=>n.e(5599).then(n.bind(n,1471)),"@site/docs/dao/liquidity-mining.md",1471],"89b6dee8":[()=>n.e(3423).then(n.bind(n,8069)),"@site/docs/user/videos-and-tutorials/driving-school/initial-setup.md",8069],"89e2558e":[()=>n.e(5510).then(n.bind(n,2499)),"@site/docs/user/dappnode-cloud/providers/aws/set-up-instance.md",2499],"8c6013e9":[()=>n.e(6110).then(n.bind(n,1542)),"@site/docs/dev/github-actions.md",1542],"8ec292b8":[()=>n.e(9058).then(n.bind(n,277)),"@site/docs/user/getting-started/setup.md",277],"8f981d3f":[()=>n.e(6967).then(n.bind(n,742)),"@site/docs/user/staking/ethereum/dvt-technologies/diva.md",742],90558919:[()=>n.e(5458).then(n.bind(n,7597)),"@site/docs/user/getting-started/access-dappnode-via-wifi.md",7597],"91e54d81":[()=>n.e(2642).then(n.bind(n,7589)),"@site/docs/user/packages/signature.md",7589],"925b3f96":[()=>n.e(9003).then(n.bind(n,3902)),"@site/blog/2019-05-28-first-blog-post.md?truncated=true",3902],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"94131f31":[()=>n.e(4307).then(n.bind(n,6088)),"@site/docs/dev/references/setup-wizard.md",6088],"950718c7":[()=>n.e(1796).then(n.bind(n,78)),"@site/docs/dev.md",78],"9e4087bc":[()=>n.e(3608).then(n.bind(n,3169)),"@theme/BlogArchivePage",3169],"9e93dc42":[()=>n.e(938).then(n.bind(n,6559)),"@site/docs/user/install/iso.md",6559],a33eb6a8:[()=>n.e(3680).then(n.bind(n,7749)),"@site/docs/user/staking/ethereum/lsd-pools/stakewise.md",7749],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(7874),n.e(130),n.e(3089)]).then(n.bind(n,46)),"@theme/BlogListPage",46],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,8564)),"@theme/DocVersionRoot",8564],a80da1cf:[()=>n.e(3205).then(n.t.bind(n,4863,19)),"~blog/default/blog-tags-docusaurus-0e0.json",4863],a83bdfda:[()=>n.e(8769).then(n.bind(n,9618)),"@site/docs/dao/faq.md",9618],a9241739:[()=>n.e(3295).then(n.bind(n,5137)),"@site/docs/user/ethical-metrics/troubleshooting.md",5137],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,2674)),"@theme/DocRoot",2674],a960b763:[()=>n.e(7484).then(n.bind(n,377)),"@site/docs/user/packages/swarm.md",377],af26485d:[()=>n.e(2217).then(n.bind(n,9316)),"@site/docs/user/repository/ipfs.md",9316],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,4556,19)),"~blog/default/blog-archive-80c.json",4556],b4800274:[()=>n.e(5561).then(n.bind(n,9620)),"@site/docs/user/rollups/overview.md",9620],b9c10046:[()=>n.e(4765).then(n.bind(n,7821)),"@site/docs/smooth/subscribe-to-smooth/automatic.md",7821],c38c9aa9:[()=>n.e(8330).then(n.bind(n,6993)),"@site/docs/user/install/overview.md",6993],c7a466cb:[()=>n.e(78).then(n.bind(n,5367)),"@site/docs/user/getting-started/register.md",5367],c9627cbc:[()=>n.e(468).then(n.bind(n,1726)),"@site/docs/user/videos-and-tutorials/crash-course.md",1726],caaf4754:[()=>n.e(5914).then(n.bind(n,6450)),"@site/docs/user/packages/understanding-dappnode-packages.md",6450],cbc5934e:[()=>n.e(651).then(n.bind(n,4759)),"@site/docs/dao.md",4759],ccc49370:[()=>Promise.all([n.e(532),n.e(7874),n.e(130),n.e(6103)]).then(n.bind(n,5203)),"@theme/BlogPostPage",5203],cdc6bc37:[()=>n.e(4407).then(n.bind(n,4855)),"@site/docs/smooth/deep-dive-into-smooth/rewards.md",4855],d267b4aa:[()=>n.e(7563).then(n.bind(n,9409)),"@site/docs/user/getting-started/next-steps.md",9409],d36fd63a:[()=>n.e(6593).then(n.bind(n,2825)),"@site/docs/user/staking/lukso/solo.md",2825],d47e1b16:[()=>n.e(9739).then(n.bind(n,3453)),"@site/docs/user/packages/bitcoin.md",3453],d508510a:[()=>n.e(2245).then(n.bind(n,9065)),"@site/docs/user/videos-and-tutorials/overview.md",9065],d61c7726:[()=>n.e(5940).then(n.bind(n,2546)),"@site/docs/user/install/arm.md",2546],d6c02fb6:[()=>n.e(3633).then(n.bind(n,9745)),"@site/docs/user/staking/ethereum/solo/mainnet.md",9745],d912498a:[()=>n.e(6209).then(n.bind(n,4775)),"@site/docs/user/repository/ethereum.md",4775],d9f32620:[()=>n.e(1914).then(n.bind(n,8123)),"@site/blog/2021-08-26-welcome/index.md",8123],dfbda110:[()=>n.e(8162).then(n.bind(n,9097)),"@site/docs/user/packages/avalanche.md",9097],dfcea9c7:[()=>n.e(2441).then(n.bind(n,6238)),"@site/docs/user/access-your-dappnode/wifi.md",6238],e16015ca:[()=>n.e(9700).then(n.t.bind(n,5688,19)),"~blog/default/blog-tags-hola-ea2.json",5688],e26c9afe:[()=>n.e(1206).then(n.bind(n,1291)),"@site/docs/user/staking/ethereum/lsd-pools/stakehouse.md",1291],e273c56f:[()=>n.e(2362).then(n.bind(n,9954)),"@site/blog/2019-05-28-first-blog-post.md",9954],e28e223d:[()=>n.e(9091).then(n.bind(n,2755)),"@site/docs/user/access-your-dappnode/vpn/wireguard.md",2755],e7ae4afa:[()=>n.e(190).then(n.bind(n,4352)),"@site/docs/user/packages/ethclassic.md",4352],e7fcc526:[()=>n.e(5447).then(n.bind(n,5861)),"@site/docs/user/staking/ethereum/dvt-technologies/ssv-network.md",5861],ed77d0ad:[()=>n.e(3218).then(n.bind(n,2250)),"@site/docs/user/staking/ethereum/lsd-pools/rocketpool.md",2250],eef43c71:[()=>n.e(7365).then(n.bind(n,2477)),"@site/docs/user/staking/gnosis-chain/solo.md",2477],ef41a71b:[()=>n.e(4588).then(n.bind(n,1545)),"@site/docs/user/install/dappnode-commands.md",1545],f4f34a3a:[()=>n.e(8636).then(n.bind(n,743)),"@site/blog/2021-08-01-mdx-blog-post.mdx?truncated=true",743],f557db91:[()=>n.e(4543).then(n.bind(n,2089)),"@site/docs/dao/node-drop.md",2089],f744a4d0:[()=>n.e(1605).then(n.bind(n,2747)),"@site/docs/user/videos-and-tutorials/guides/connect-node.md",2747],fcb270fb:[()=>n.e(7410).then(n.bind(n,9831)),"@site/docs/user/dappnode-cloud/providers/aws/faqs.md",9831]};var s=n(5893);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(9670),u=n(226);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(1772).then(n.bind(n,1772)),modules:["@theme/NotFound"],webpack:()=>[1772],render(e,t){const n=e.default;return(0,s.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],h=(0,c.Z)(r);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,s.jsx)(u.z,{value:i,children:(0,s.jsx)(a,{...o,...n})})}})}const p=[{path:"/blog",component:d("/blog","62a"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","818"),exact:!0},{path:"/blog/first-blog-post",component:d("/blog/first-blog-post","0b3"),exact:!0},{path:"/blog/long-blog-post",component:d("/blog/long-blog-post","a48"),exact:!0},{path:"/blog/mdx-blog-post",component:d("/blog/mdx-blog-post","f6d"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","3c3"),exact:!0},{path:"/blog/tags/docusaurus",component:d("/blog/tags/docusaurus","e09"),exact:!0},{path:"/blog/tags/facebook",component:d("/blog/tags/facebook","66f"),exact:!0},{path:"/blog/tags/hello",component:d("/blog/tags/hello","f71"),exact:!0},{path:"/blog/tags/hola",component:d("/blog/tags/hola","fee"),exact:!0},{path:"/blog/welcome",component:d("/blog/welcome","4bd"),exact:!0},{path:"/search",component:d("/search","af0"),exact:!0},{path:"/docs",component:d("/docs","88f"),routes:[{path:"/docs",component:d("/docs","ff6"),routes:[{path:"/docs",component:d("/docs","886"),routes:[{path:"/docs/dao",component:d("/docs/dao","f08"),exact:!0,sidebar:"daoSidebar"},{path:"/docs/dao/faq",component:d("/docs/dao/faq","93b"),exact:!0,sidebar:"daoSidebar"},{path:"/docs/dao/liquidity-mining",component:d("/docs/dao/liquidity-mining","f84"),exact:!0,sidebar:"daoSidebar"},{path:"/docs/dao/node-basics",component:d("/docs/dao/node-basics","5aa"),exact:!0,sidebar:"daoSidebar"},{path:"/docs/dao/node-drop",component:d("/docs/dao/node-drop","188"),exact:!0},{path:"/docs/dao/node-stream",component:d("/docs/dao/node-stream","e47"),exact:!0},{path:"/docs/dev",component:d("/docs/dev","921"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/github-actions",component:d("/docs/dev/github-actions","769"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/references/docker-compose",component:d("/docs/dev/references/docker-compose","7b3"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/references/manifest",component:d("/docs/dev/references/manifest","6e9"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/references/setup-wizard",component:d("/docs/dev/references/setup-wizard","900"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/sdk/commands",component:d("/docs/dev/sdk/commands","665"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/sdk/overview",component:d("/docs/dev/sdk/overview","4c1"),exact:!0,sidebar:"devSidebar"},{path:"/docs/smooth",component:d("/docs/smooth","9c0"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/oracle-sm",component:d("/docs/smooth/deep-dive-into-smooth/oracle-sm","986"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/overview",component:d("/docs/smooth/deep-dive-into-smooth/overview","79c"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/rewards",component:d("/docs/smooth/deep-dive-into-smooth/rewards","20c"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/states",component:d("/docs/smooth/deep-dive-into-smooth/states","3a4"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/faq-glossary",component:d("/docs/smooth/faq-glossary","d7a"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/subscribe-to-smooth/automatic",component:d("/docs/smooth/subscribe-to-smooth/automatic","53c"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/subscribe-to-smooth/manual",component:d("/docs/smooth/subscribe-to-smooth/manual","dd2"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/subscribe-to-smooth/overview",component:d("/docs/smooth/subscribe-to-smooth/overview","713"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/unsubscribe-from-smooth",component:d("/docs/smooth/unsubscribe-from-smooth","032"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/user/access-your-dappnode/local",component:d("/docs/user/access-your-dappnode/local","24f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/overview",component:d("/docs/user/access-your-dappnode/overview","e1d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/terminal",component:d("/docs/user/access-your-dappnode/terminal","4de"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/vpn/openvpn",component:d("/docs/user/access-your-dappnode/vpn/openvpn","39c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/vpn/overview",component:d("/docs/user/access-your-dappnode/vpn/overview","ff5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/vpn/wireguard",component:d("/docs/user/access-your-dappnode/vpn/wireguard","40b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/wifi",component:d("/docs/user/access-your-dappnode/wifi","60d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/overview",component:d("/docs/user/dappnode-cloud/overview","8a1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/providers/aws/faqs",component:d("/docs/user/dappnode-cloud/providers/aws/faqs","ff8"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/providers/aws/overview",component:d("/docs/user/dappnode-cloud/providers/aws/overview","a22"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/providers/aws/set-up-instance",component:d("/docs/user/dappnode-cloud/providers/aws/set-up-instance","a3c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/providers/coming-soon",component:d("/docs/user/dappnode-cloud/providers/coming-soon","971"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/ethical-metrics/metrics",component:d("/docs/user/ethical-metrics/metrics","b30"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/ethical-metrics/overview",component:d("/docs/user/ethical-metrics/overview","059"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/ethical-metrics/setup",component:d("/docs/user/ethical-metrics/setup","0d8"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/ethical-metrics/troubleshooting",component:d("/docs/user/ethical-metrics/troubleshooting","373"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/faqs",component:d("/docs/user/faqs","884"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/access-dappnode-via-wifi",component:d("/docs/user/getting-started/access-dappnode-via-wifi","920"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/choose-your-path",component:d("/docs/user/getting-started/choose-your-path","daf"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/connect-dappnode-to-the-router",component:d("/docs/user/getting-started/connect-dappnode-to-the-router","90c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/next-steps",component:d("/docs/user/getting-started/next-steps","4fe"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/register",component:d("/docs/user/getting-started/register","fff"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/setup",component:d("/docs/user/getting-started/setup","901"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/maintenance",component:d("/docs/user/hardware/maintenance","546"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/overview",component:d("/docs/user/hardware/overview","c38"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/temperature",component:d("/docs/user/hardware/temperature","676"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/arm",component:d("/docs/user/install/arm","89f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/dappnode-commands",component:d("/docs/user/install/dappnode-commands","109"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/iso",component:d("/docs/user/install/iso","3bd"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/overview",component:d("/docs/user/install/overview","0da"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/script",component:d("/docs/user/install/script","2a7"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/avalanche",component:d("/docs/user/packages/avalanche","201"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/bitcoin",component:d("/docs/user/packages/bitcoin","216"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/dms",component:d("/docs/user/packages/dms","412"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/ethclassic",component:d("/docs/user/packages/ethclassic","6d5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/monero",component:d("/docs/user/packages/monero","b8c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/signature",component:d("/docs/user/packages/signature","7f0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/swarm",component:d("/docs/user/packages/swarm","444"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/understanding-dappnode-packages",component:d("/docs/user/packages/understanding-dappnode-packages","5b2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/repository/ethereum",component:d("/docs/user/repository/ethereum","657"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/repository/ipfs",component:d("/docs/user/repository/ipfs","8c2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/rollups/optimism",component:d("/docs/user/rollups/optimism","cfe"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/rollups/overview",component:d("/docs/user/rollups/overview","a8a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/dvt-technologies/diva",component:d("/docs/user/staking/ethereum/dvt-technologies/diva","cf2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/dvt-technologies/obol-network",component:d("/docs/user/staking/ethereum/dvt-technologies/obol-network","770"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/dvt-technologies/ssv-network",component:d("/docs/user/staking/ethereum/dvt-technologies/ssv-network","085"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/rocketpool",component:d("/docs/user/staking/ethereum/lsd-pools/rocketpool","fa6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/stakehouse",component:d("/docs/user/staking/ethereum/lsd-pools/stakehouse","42f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/stakewise",component:d("/docs/user/staking/ethereum/lsd-pools/stakewise","ee5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/solo/holesky",component:d("/docs/user/staking/ethereum/solo/holesky","301"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/solo/mainnet",component:d("/docs/user/staking/ethereum/solo/mainnet","951"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/gnosis-chain/solo",component:d("/docs/user/staking/gnosis-chain/solo","1f9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/lukso/solo",component:d("/docs/user/staking/lukso/solo","a2e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/overview",component:d("/docs/user/staking/overview","93e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/crash-course",component:d("/docs/user/videos-and-tutorials/crash-course","a95"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/driving-school/configuration",component:d("/docs/user/videos-and-tutorials/driving-school/configuration","8d6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/driving-school/initial-setup",component:d("/docs/user/videos-and-tutorials/driving-school/initial-setup","59c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/guides/connect-node",component:d("/docs/user/videos-and-tutorials/guides/connect-node","1da"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/overview",component:d("/docs/user/videos-and-tutorials/overview","a86"),exact:!0}]}]}]},{path:"/",component:d("/","4a5"),exact:!0},{path:"*",component:d("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>i});var r=n(7294),o=n(5893);const a=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,o.jsx)(a.Provider,{value:n,children:t})}},7221:(e,t,n)=>{"use strict";var r=n(7294),o=n(745),a=n(3727),i=n(405),s=n(412);const l=[n(2497),n(3310),n(8320),n(2295)];var c=n(723),u=n(6550),d=n(8790),p=n(5893);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var h=n(5742),m=n(2263),g=n(4996),b=n(6668),y=n(1944),v=n(4711),w=n(9727),k=n(3320),x=n(8780),S=n(197);function E(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,m.Z)(),r=(0,v.l)(),o=n[e].htmlLang,a=e=>e.replace("-","_");return(0,p.jsxs)(h.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:a(o)}),Object.values(n).filter((e=>o!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:a(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,m.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,m.Z)(),{pathname:r}=(0,u.TH)();return e+(0,x.applyTrailingSlash)((0,g.Z)(r),{trailingSlash:n,baseUrl:t})}(),o=t?`${n}${t}`:r;return(0,p.jsxs)(h.Z,{children:[(0,p.jsx)("meta",{property:"og:url",content:o}),(0,p.jsx)("link",{rel:"canonical",href:o})]})}function C(){const{i18n:{currentLocale:e}}=(0,m.Z)(),{metadata:t,image:n}=(0,b.L)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(h.Z,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.h})]}),n&&(0,p.jsx)(y.d,{image:n}),(0,p.jsx)(_,{}),(0,p.jsx)(E,{}),(0,p.jsx)(S.Z,{tag:k.HX,locale:e}),(0,p.jsx)(h.Z,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;function L(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var j=n(8934),P=n(8940),R=n(469);function A(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=l.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,R.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),A("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function O(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class D extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?A("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=A("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),O(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(N,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(u.AW,{location:t,render:()=>e})})}}const I=D,F="__docusaurus-base-url-issue-banner-container",M="__docusaurus-base-url-issue-banner",z="__docusaurus-base-url-issue-banner-suggestion-container";function B(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${F}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${M}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${z}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${z}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function $(){const{siteConfig:{baseUrl:e}}=(0,m.Z)();return(0,p.jsx)(p.Fragment,{children:!s.Z.canUseDOM&&(0,p.jsx)(h.Z,{children:(0,p.jsx)("script",{children:B(e)})})})}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,m.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?(0,p.jsx)($,{}):null}function q(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:o}}=(0,m.Z)(),a=(0,g.Z)(e),{htmlLang:i,direction:s}=o[r];return(0,p.jsxs)(h.Z,{children:[(0,p.jsx)("html",{lang:i,dir:s}),(0,p.jsx)("title",{children:t}),(0,p.jsx)("meta",{property:"og:title",content:t}),(0,p.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,p.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,p.jsx)("link",{rel:"icon",href:a})]})}var H=n(4763),Q=n(2389);function Z(){const e=(0,Q.Z)();return(0,p.jsx)(h.Z,{children:(0,p.jsx)("html",{"data-has-hydrated":e})})}function V(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return(0,p.jsx)(H.Z,{children:(0,p.jsx)(P.M,{children:(0,p.jsxs)(j.t,{children:[(0,p.jsxs)(f,{children:[(0,p.jsx)(q,{}),(0,p.jsx)(C,{}),(0,p.jsx)(U,{}),(0,p.jsx)(I,{location:L(t),children:e})]}),(0,p.jsx)(Z,{})]})})})}var W=n(6887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var K=n(9670);const Y=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Y.has(e))(e))return!1;Y.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(W).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,K.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),O(e))},te=Object.freeze(ee),ne=Boolean(!0);if(s.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(i.B6,{children:(0,p.jsx)(a.VK,{children:(0,p.jsx)(V,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},s=()=>{if(ne)r.startTransition((()=>{o.hydrateRoot(e,t,{onRecoverableError:n})}));else{const a=o.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{a.render(t)}))}};O(window.location.pathname).then(s)}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>p});var r=n(7294),o=n(6809);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"user/getting-started/choose-your-path","docs":[{"id":"dao","path":"/docs/dao","sidebar":"daoSidebar"},{"id":"dao/faq","path":"/docs/dao/faq","sidebar":"daoSidebar"},{"id":"dao/liquidity-mining","path":"/docs/dao/liquidity-mining","sidebar":"daoSidebar"},{"id":"dao/node-basics","path":"/docs/dao/node-basics","sidebar":"daoSidebar"},{"id":"dao/node-drop","path":"/docs/dao/node-drop"},{"id":"dao/node-stream","path":"/docs/dao/node-stream"},{"id":"dev","path":"/docs/dev","sidebar":"devSidebar"},{"id":"dev/github-actions","path":"/docs/dev/github-actions","sidebar":"devSidebar"},{"id":"dev/references/docker-compose","path":"/docs/dev/references/docker-compose","sidebar":"devSidebar"},{"id":"dev/references/manifest","path":"/docs/dev/references/manifest","sidebar":"devSidebar"},{"id":"dev/references/setup-wizard","path":"/docs/dev/references/setup-wizard","sidebar":"devSidebar"},{"id":"dev/sdk/commands","path":"/docs/dev/sdk/commands","sidebar":"devSidebar"},{"id":"dev/sdk/overview","path":"/docs/dev/sdk/overview","sidebar":"devSidebar"},{"id":"smooth","path":"/docs/smooth","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/oracle-sm","path":"/docs/smooth/deep-dive-into-smooth/oracle-sm","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/overview","path":"/docs/smooth/deep-dive-into-smooth/overview","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/rewards","path":"/docs/smooth/deep-dive-into-smooth/rewards","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/states","path":"/docs/smooth/deep-dive-into-smooth/states","sidebar":"smoothSidebar"},{"id":"smooth/faq-glossary","path":"/docs/smooth/faq-glossary","sidebar":"smoothSidebar"},{"id":"smooth/subscribe-to-smooth/automatic","path":"/docs/smooth/subscribe-to-smooth/automatic","sidebar":"smoothSidebar"},{"id":"smooth/subscribe-to-smooth/manual","path":"/docs/smooth/subscribe-to-smooth/manual","sidebar":"smoothSidebar"},{"id":"smooth/subscribe-to-smooth/overview","path":"/docs/smooth/subscribe-to-smooth/overview","sidebar":"smoothSidebar"},{"id":"smooth/unsubscribe-from-smooth","path":"/docs/smooth/unsubscribe-from-smooth","sidebar":"smoothSidebar"},{"id":"user/access-your-dappnode/local","path":"/docs/user/access-your-dappnode/local","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/overview","path":"/docs/user/access-your-dappnode/overview","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/terminal","path":"/docs/user/access-your-dappnode/terminal","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/vpn/openvpn","path":"/docs/user/access-your-dappnode/vpn/openvpn","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/vpn/overview","path":"/docs/user/access-your-dappnode/vpn/overview","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/vpn/wireguard","path":"/docs/user/access-your-dappnode/vpn/wireguard","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/wifi","path":"/docs/user/access-your-dappnode/wifi","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/overview","path":"/docs/user/dappnode-cloud/overview","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/providers/aws/faqs","path":"/docs/user/dappnode-cloud/providers/aws/faqs","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/providers/aws/overview","path":"/docs/user/dappnode-cloud/providers/aws/overview","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/providers/aws/set-up-instance","path":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/providers/coming-soon","path":"/docs/user/dappnode-cloud/providers/coming-soon","sidebar":"userSidebar"},{"id":"user/ethical-metrics/metrics","path":"/docs/user/ethical-metrics/metrics","sidebar":"userSidebar"},{"id":"user/ethical-metrics/overview","path":"/docs/user/ethical-metrics/overview","sidebar":"userSidebar"},{"id":"user/ethical-metrics/setup","path":"/docs/user/ethical-metrics/setup","sidebar":"userSidebar"},{"id":"user/ethical-metrics/troubleshooting","path":"/docs/user/ethical-metrics/troubleshooting","sidebar":"userSidebar"},{"id":"user/faqs","path":"/docs/user/faqs","sidebar":"userSidebar"},{"id":"user/getting-started/access-dappnode-via-wifi","path":"/docs/user/getting-started/access-dappnode-via-wifi","sidebar":"userSidebar"},{"id":"user/getting-started/choose-your-path","path":"/docs/user/getting-started/choose-your-path","sidebar":"userSidebar"},{"id":"user/getting-started/connect-dappnode-to-the-router","path":"/docs/user/getting-started/connect-dappnode-to-the-router","sidebar":"userSidebar"},{"id":"user/getting-started/next-steps","path":"/docs/user/getting-started/next-steps","sidebar":"userSidebar"},{"id":"user/getting-started/register","path":"/docs/user/getting-started/register","sidebar":"userSidebar"},{"id":"user/getting-started/setup","path":"/docs/user/getting-started/setup","sidebar":"userSidebar"},{"id":"user/hardware/maintenance","path":"/docs/user/hardware/maintenance","sidebar":"userSidebar"},{"id":"user/hardware/overview","path":"/docs/user/hardware/overview","sidebar":"userSidebar"},{"id":"user/hardware/temperature","path":"/docs/user/hardware/temperature","sidebar":"userSidebar"},{"id":"user/install/arm","path":"/docs/user/install/arm","sidebar":"userSidebar"},{"id":"user/install/dappnode-commands","path":"/docs/user/install/dappnode-commands","sidebar":"userSidebar"},{"id":"user/install/iso","path":"/docs/user/install/iso","sidebar":"userSidebar"},{"id":"user/install/overview","path":"/docs/user/install/overview","sidebar":"userSidebar"},{"id":"user/install/script","path":"/docs/user/install/script","sidebar":"userSidebar"},{"id":"user/packages/avalanche","path":"/docs/user/packages/avalanche","sidebar":"userSidebar"},{"id":"user/packages/bitcoin","path":"/docs/user/packages/bitcoin","sidebar":"userSidebar"},{"id":"user/packages/dms","path":"/docs/user/packages/dms","sidebar":"userSidebar"},{"id":"user/packages/ethclassic","path":"/docs/user/packages/ethclassic","sidebar":"userSidebar"},{"id":"user/packages/monero","path":"/docs/user/packages/monero","sidebar":"userSidebar"},{"id":"user/packages/signature","path":"/docs/user/packages/signature","sidebar":"userSidebar"},{"id":"user/packages/swarm","path":"/docs/user/packages/swarm","sidebar":"userSidebar"},{"id":"user/packages/understanding-dappnode-packages","path":"/docs/user/packages/understanding-dappnode-packages","sidebar":"userSidebar"},{"id":"user/repository/ethereum","path":"/docs/user/repository/ethereum","sidebar":"userSidebar"},{"id":"user/repository/ipfs","path":"/docs/user/repository/ipfs","sidebar":"userSidebar"},{"id":"user/rollups/optimism","path":"/docs/user/rollups/optimism","sidebar":"userSidebar"},{"id":"user/rollups/overview","path":"/docs/user/rollups/overview","sidebar":"userSidebar"},{"id":"user/staking/ethereum/dvt-technologies/diva","path":"/docs/user/staking/ethereum/dvt-technologies/diva","sidebar":"userSidebar"},{"id":"user/staking/ethereum/dvt-technologies/obol-network","path":"/docs/user/staking/ethereum/dvt-technologies/obol-network","sidebar":"userSidebar"},{"id":"user/staking/ethereum/dvt-technologies/ssv-network","path":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/rocketpool","path":"/docs/user/staking/ethereum/lsd-pools/rocketpool","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/stakehouse","path":"/docs/user/staking/ethereum/lsd-pools/stakehouse","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/stakewise","path":"/docs/user/staking/ethereum/lsd-pools/stakewise","sidebar":"userSidebar"},{"id":"user/staking/ethereum/solo/holesky","path":"/docs/user/staking/ethereum/solo/holesky","sidebar":"userSidebar"},{"id":"user/staking/ethereum/solo/mainnet","path":"/docs/user/staking/ethereum/solo/mainnet","sidebar":"userSidebar"},{"id":"user/staking/gnosis-chain/solo","path":"/docs/user/staking/gnosis-chain/solo","sidebar":"userSidebar"},{"id":"user/staking/lukso/solo","path":"/docs/user/staking/lukso/solo","sidebar":"userSidebar"},{"id":"user/staking/overview","path":"/docs/user/staking/overview","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/crash-course","path":"/docs/user/videos-and-tutorials/crash-course","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/driving-school/configuration","path":"/docs/user/videos-and-tutorials/driving-school/configuration","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/driving-school/initial-setup","path":"/docs/user/videos-and-tutorials/driving-school/initial-setup","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/guides/connect-node","path":"/docs/user/videos-and-tutorials/guides/connect-node","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/overview","path":"/docs/user/videos-and-tutorials/overview"}],"draftIds":[],"sidebars":{"userSidebar":{"link":{"path":"/docs/user/getting-started/choose-your-path","label":"Choose your path"}},"devSidebar":{"link":{"path":"/docs/dev","label":"dev"}},"smoothSidebar":{"link":{"path":"/docs/smooth","label":"smooth"}},"daoSidebar":{"link":{"path":"/docs/dao","label":"dao"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(7529);const l=JSON.parse('{"docusaurusVersion":"3.0.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.0.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.0.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.0.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.0.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.0.0"},"@easyops-cn/docusaurus-search-local":{"type":"package","name":"@easyops-cn/docusaurus-search-local","version":"0.44.2"}}}');var c=n(5893);const u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(412),a=n(5742),i=n(8780),s=n(179),l=n(5893);function c(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(u,{error:t})]})}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)(f,{fallback:()=>(0,l.jsx)(c,{error:t,tryAgain:n}),children:[(0,l.jsx)(a.Z,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(s.Z,{children:(0,l.jsx)(c,{error:t,tryAgain:n})})]})}const p=e=>(0,l.jsx)(d,{...e});class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??p)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(7294);var r=n(405),o=n(5893);function a(e){return(0,o.jsx)(r.ql,{...e})}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(3727),a=n(8780),i=n(2263),s=n(3919),l=n(412),c=n(5893);const u=r.createContext({collectLink:()=>{}});var d=n(4996);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:h,isActive:m,"data-noBrokenLinkCheck":g,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.Z)(),{withBaseUrl:k}=(0,d.C)(),x=(0,r.useContext)(u),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const E=p||f;const _=(0,s.Z)(E),C=E?.replace("pathname://","");let T=void 0!==C?(L=C,b&&(e=>e.startsWith("/"))(L)?k(L):L):void 0;var L;T&&_&&(T=(0,a.applyTrailingSlash)(T,{trailingSlash:v,baseUrl:w}));const j=(0,r.useRef)(!1),P=n?o.OL:o.rU,R=l.Z.canUseIntersectionObserver,A=(0,r.useRef)(),N=()=>{j.current||null==T||(window.docusaurus.preload(T),j.current=!0)};(0,r.useEffect)((()=>(!R&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{R&&A.current&&A.current.disconnect()})),[A,T,R,_]);const O=T?.startsWith("#")??!1,D=!T||!_||O;return D||g||x.collectLink(T),D?(0,c.jsx)("a",{ref:S,href:T,...E&&!_&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,c.jsx)(P,{...y,onMouseEnter:N,onTouchStart:N,innerRef:e=>{S.current=e,R&&e&&_&&(A.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(A.current.unobserve(e),A.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),A.current.observe(e))},to:T,...n&&{isActive:m,activeClassName:h}})}const f=r.forwardRef(p)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n(7294),o=n(5893);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(7529);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const i=s({message:t,id:n});return(0,o.jsx)(o.Fragment,{children:a(i,r)})}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(7294),o=n(2263),a=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8940);function a(){return(0,r.useContext)(o._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8934);function a(){return(0,r.useContext)(o._)}},469:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const o=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>i});var r=n(7294),o=n(5893);const a=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(a),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,o.jsx)(a.Provider,{value:s,children:t})}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>m,gA:()=>p,_r:()=>u,Jo:()=>g,zh:()=>d,yW:()=>h,gB:()=>f});var r=n(6550),o=n(2263),a=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=function(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=i(e),o=r?.[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function f(e){return d(e).versions}function h(e){const t=d(e);return s(t)}function m(e){const t=d(e),{pathname:n}=(0,r.TH)();return l(t,n)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=s(e);return{latestDocSuggestion:l(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(4965),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(6854),n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},2503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var r=n(6010),o=n(5999),a=n(6668),i=n(9960);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var l=n(5893);function c(e){let{as:t,id:n,...c}=e;const{navbar:{hideOnScroll:u}}=(0,a.L)();if("h1"===t||!n)return(0,l.jsx)(t,{...c,id:void 0});const d=(0,o.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,l.jsxs)(t,{...c,className:(0,r.Z)("anchor",u?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,l.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":d,title:d,children:"\u200b"})]})}},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(7294);const r={iconExternalLink:"iconExternalLink_nPIU"};var o=n(5893);function a(e){let{width:t=13.5,height:n=13.5}=e;return(0,o.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,o.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},179:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Ot});var r=n(7294),o=n(6010),a=n(4763),i=n(1944),s=n(6550),l=n(5999),c=n(5936),u=n(5893);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const h=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function m(e){const t=e.children??h,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":h,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var g=n(5281),b=n(9727);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(m,{className:y.skipToContent})}var w=n(6668),k=n(9689);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:o=1.2,className:a,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:o,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,o.Z)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const _={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,o.Z)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function L(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:r,textColor:o,isCloseable:a}=e;return(0,u.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:o},role:"banner",children:[a&&(0,u.jsx)("div",{className:T.announcementBarPlaceholder}),(0,u.jsx)(C,{className:T.announcementBarContent}),a&&(0,u.jsx)(E,{onClick:n,className:T.announcementBarClose})]})}var j=n(2961),P=n(2466);var R=n(902),A=n(3102);const N=r.createContext(null);function O(e){let{children:t}=e;const n=function(){const e=(0,j.e)(),t=(0,A.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,R.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return(0,u.jsx)(N.Provider,{value:n,children:t})}function D(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function I(){const e=(0,r.useContext)(N);if(!e)throw new R.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,A.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:D(a)})),[o,a,t])}function F(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:a}=I();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":a}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(2949),z=n(2389);function B(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:r,onChange:a}=e;const i=(0,z.Z)(),s=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,o.Z)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>a("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(B,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})]})})}const H=r.memo(q),Q={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Z(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:o,setColorMode:a}=(0,M.I)();return r?null:(0,u.jsx)(H,{className:t,buttonClassName:"dark"===n?Q.darkNavbarColorModeToggle:void 0,value:o,onChange:a})}var V=n(1327);function W(){return(0,u.jsx)(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,j.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function K(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(W,{}),(0,u.jsx)(Z,{className:"margin-right--md"}),(0,u.jsx)(G,{})]})}var Y=n(9960),X=n(4996),J=n(3919);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(9471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:o,label:a,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Z)(r),p=(0,X.Z)(t),f=(0,X.Z)(o,{forcePrependBaseUrl:!0}),h=a&&o&&!(0,J.Z)(o),m=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[a,h&&(0,u.jsx)(te.Z,{...s&&{width:12,height:12}})]})};return o?(0,u.jsx)(Y.Z,{href:l?f:o,...c,...m}):(0,u.jsx)(Y.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(p)},...c,...m})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const a=(0,u.jsx)(ne,{className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:a}):a}function oe(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,o.Z)("menu__link",t),...r})})}function ae(e){let{mobile:t=!1,position:n,...r}=e;const o=t?oe:re;return(0,u.jsx)(o,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(6043),se=n(8596),le=n(2263);function ce(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ue(e){let{items:t,position:n,className:a,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,o.Z)("navbar__link",a),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(Ze,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function de(e){let{items:t,className:n,position:a,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ce(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:h}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&h(!d)}),[c,d,h]),(0,u.jsxs)("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(Ze,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function pe(e){let{mobile:t=!1,...n}=e;const r=t?de:ue;return(0,u.jsx)(r,{...n})}var fe=n(4711);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const me="iconLanguage_nlXk";var ge=n(1029),be=n(373),ye=n(143),ve=n(22),we=n(8202),ke=n(3545),xe=n(3926),Se=n(1073),Ee=n(2539),_e=n(726);const Ce='<svg width="20" height="20" viewBox="0 0 20 20"><path d="M17 6v12c0 .52-.2 1-1 1H4c-.7 0-1-.33-1-1V2c0-.55.42-1 1-1h8l5 5zM14 8h-3.13c-.51 0-.87-.34-.87-.87V4" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linejoin="round"></path></svg>',Te='<svg width="20" height="20" viewBox="0 0 20 20"><path d="M13 13h4-4V8H7v5h6v4-4H7V8H3h4V3v5h6V3v5h4-4v5zm-6 0v4-4H3h4z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg>',Le='<svg width="20" height="20" viewBox="0 0 20 20"><path d="M17 5H3h14zm0 5H3h14zm0 5H3h14z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linejoin="round"></path></svg>',je='<svg width="20" height="20" viewBox="0 0 20 20"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M18 3v4c0 2-2 4-4 4H2"></path><path d="M8 17l-6-6 6-6"></path></g></svg>',Pe='<svg width="40" height="40" viewBox="0 0 20 20" fill="none" fill-rule="evenodd" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"><path d="M15.5 4.8c2 3 1.7 7-1 9.7h0l4.3 4.3-4.3-4.3a7.8 7.8 0 01-9.8 1m-2.2-2.2A7.8 7.8 0 0113.2 2.4M2 18L18 2"></path></svg>',Re='<svg viewBox="0 0 24 54"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6v42M20 27H8.3"></path></g></svg>',Ae='<svg viewBox="0 0 24 54"><g stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"><path d="M8 6v21M20 27H8.3"></path></g></svg>',Ne={searchBar:"searchBar_RVTs",dropdownMenu:"dropdownMenu_qbY6",searchBarLeft:"searchBarLeft_MXDe",suggestion:"suggestion_fB_2",cursor:"cursor_eG29",hitTree:"hitTree_kk6K",hitIcon:"hitIcon_a7Zy",hitPath:"hitPath_ieM4",noResultsIcon:"noResultsIcon_EBY5",hitFooter:"hitFooter_E9YW",hitWrapper:"hitWrapper_sAK8",hitTitle:"hitTitle_vyVt",hitAction:"hitAction_NqkB",hideAction:"hideAction_vcyE",noResults:"noResults_l6Q3",searchBarContainer:"searchBarContainer_NW3z",searchBarLoadingRing:"searchBarLoadingRing_YnHq",searchClearButton:"searchClearButton_qk4g",searchIndexLoading:"searchIndexLoading_EJ1f",searchHintContainer:"searchHintContainer_Pkmr",searchHint:"searchHint_iIMx",focused:"focused_OWtg",input:"input_FOTf",hint:"hint_URu1",suggestions:"suggestions_X8XU",dataset:"dataset_QiCy",empty:"empty_eITn"};function Oe(e){let{document:t,type:n,page:r,metadata:o,tokens:a,isInterOfTree:i,isLastOfTree:s}=e;const l=n===ke.P.Title,c=n===ke.P.Keywords,u=l||c,d=n===ke.P.Heading,p=[];i?p.push(Re):s&&p.push(Ae);const f=p.map((e=>`<span class="${Ne.hitTree}">${e}</span>`)),h=`<span class="${Ne.hitIcon}">${u?Ce:d?Te:Le}</span>`,m=[`<span class="${Ne.hitTitle}">${c?(0,Ee.C)(t.s,a):(0,_e.o)(t.t,(0,Se.m)(o,"t"),a)}</span>`];if(!i&&!s&&ge.H6){const e=r?r.b?.concat(r.t).concat(t.s&&t.s!==r.t?t.s:[]):t.b;m.push(`<span class="${Ne.hitPath}">${(0,xe.e)(e??[])}</span>`)}else u||m.push(`<span class="${Ne.hitPath}">${(0,Ee.C)(r.t||(t.u.startsWith("/docs/api-reference/")?"API Reference":""),a)}</span>`);const g=`<span class="${Ne.hitAction}">${je}</span>`;return[...f,h,`<span class="${Ne.hitWrapper}">`,...m,"</span>",g].join("")}function De(){return`<span class="${Ne.noResults}"><span class="${Ne.noResultsIcon}">${Pe}</span><span>${(0,l.I)({id:"theme.SearchBar.noResultsText",message:"No results"})}</span></span>`}var Ie=n(311),Fe=n(51);async function Me(){const e=await Promise.all([n.e(8443),n.e(5525)]).then(n.t.bind(n,8443,23)),t=e.default;return t.noConflict?t.noConflict():e.noConflict&&e.noConflict(),t}const ze="_highlight";const Be=function(e){let{handleSearchBarToggle:t}=e;const n=(0,z.Z)(),{siteConfig:{baseUrl:a},i18n:{currentLocale:i}}=(0,le.Z)(),c=(0,ye.gA)();let d=a;try{const{preferredVersion:e}=(0,be.J)(c?.pluginId??ge.gQ);e&&!e.isLast&&(d=e.path+"/")}catch(M){if(ge.l9&&!(M instanceof R.i6))throw M}const p=(0,s.k6)(),f=(0,s.TH)(),h=(0,r.useRef)(null),m=(0,r.useRef)(new Map),g=(0,r.useRef)(!1),[b,y]=(0,r.useState)(!1),[v,w]=(0,r.useState)(!1),[k,x]=(0,r.useState)(""),S=(0,r.useRef)(null),E=(0,r.useRef)(""),[_,C]=(0,r.useState)("");(0,r.useEffect)((()=>{if(!Array.isArray(ge.Kc))return;let e="";if(f.pathname.startsWith(d)){const t=f.pathname.substring(d.length);let n;for(const e of ge.Kc){const r="string"==typeof e?e:e.path;if(t===r||t.startsWith(`${r}/`)){n=r;break}}n&&(e=n)}E.current!==e&&(m.current.delete(e),E.current=e),C(e)}),[f.pathname,d]);const T=!!ge.hG&&Array.isArray(ge.Kc)&&""===_,L=(0,r.useCallback)((async()=>{if(T||m.current.get(_))return;m.current.set(_,"loading"),S.current?.autocomplete.destroy(),y(!0);const[{wrappedIndexes:e,zhDictionary:t},n]=await Promise.all([(0,ve.w)(d,_),Me()]);if(S.current=n(h.current,{hint:!1,autoselect:!0,openOnFocus:!0,cssClasses:{root:(0,o.Z)(Ne.searchBar,{[Ne.searchBarLeft]:"left"===ge.pu}),noPrefix:!0,dropdownMenu:Ne.dropdownMenu,input:Ne.input,hint:Ne.hint,suggestions:Ne.suggestions,suggestion:Ne.suggestion,cursor:Ne.cursor,dataset:Ne.dataset,empty:Ne.empty}},[{source:(0,we.v)(e,t,ge.qo),templates:{suggestion:Oe,empty:De,footer:e=>{let{query:t,isEmpty:n}=e;if(n&&(!_||!ge.pQ))return;const r=(e=>{let{query:t,isEmpty:n}=e;const r=document.createElement("a"),o=new URLSearchParams;let s;if(o.set("q",t),_){const e=_&&Array.isArray(ge.Kc)?ge.Kc.find((e=>"string"==typeof e?e===_:e.path===_)):_,t=e?(0,Fe._)(e,i).label:_;s=ge.pQ&&n?(0,l.I)({id:"theme.SearchBar.seeAllOutsideContext",message:'See all results outside "{context}"'},{context:t}):(0,l.I)({id:"theme.SearchBar.searchInContext",message:'See all results within "{context}"'},{context:t})}else s=(0,l.I)({id:"theme.SearchBar.seeAll",message:"See all results"});if(!_||!Array.isArray(ge.Kc)||ge.pQ&&n||o.set("ctx",_),d!==a){if(!d.startsWith(a))throw new Error(`Version url '${d}' does not start with base url '${a}', this is a bug of \`@easyops-cn/docusaurus-search-local\`, please report it.`);o.set("version",d.substring(a.length))}const c=`${a}search?${o.toString()}`;return r.href=c,r.textContent=s,r.addEventListener("click",(e=>{e.ctrlKey||e.metaKey||(e.preventDefault(),S.current?.autocomplete.close(),p.push(c))})),r})({query:t,isEmpty:n}),o=document.createElement("div");return o.className=Ne.hitFooter,o.appendChild(r),o}}}]).on("autocomplete:selected",(function(e,t){let{document:{u:n,h:r},tokens:o}=t;h.current?.blur();let a=n;if(ge.vc&&o.length>0){const e=new URLSearchParams;for(const t of o)e.append(ze,t);a+=`?${e.toString()}`}r&&(a+=r),p.push(a)})).on("autocomplete:closed",(()=>{h.current?.blur()})),m.current.set(_,"done"),y(!1),g.current){const e=h.current;e.value&&S.current?.autocomplete.open(),e.focus()}}),[T,_,d,a,p]);(0,r.useEffect)((()=>{if(!ge.vc)return;const e=n?new URLSearchParams(f.search).getAll(ze):[];setTimeout((()=>{const t=document.querySelector("article");if(!t)return;const n=new ge.vc(t);n.unmark(),0!==e.length&&n.mark(e),x(e.join(" ")),S.current?.autocomplete.setVal(e.join(" "))}))}),[n,f.search,f.pathname]);const[j,P]=(0,r.useState)(!1),A=(0,r.useCallback)((()=>{g.current=!0,L(),P(!0),t?.(!0)}),[t,L]),N=(0,r.useCallback)((()=>{P(!1),t?.(!1)}),[t]),O=(0,r.useCallback)((()=>{L()}),[L]),D=(0,r.useCallback)((e=>{x(e.target.value),e.target.value&&w(!0)}),[]),I=!!n&&/mac/i.test(navigator.userAgentData?.platform??navigator.platform);(0,r.useEffect)((()=>{if(!ge.AY)return;const e=e=>{!(I?e.metaKey:e.ctrlKey)||"k"!==e.key&&"K"!==e.key||(e.preventDefault(),h.current?.focus(),A())};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[I,A]);const F=(0,r.useCallback)((()=>{const e=new URLSearchParams(f.search);e.delete(ze);const t=e.toString(),n=f.pathname+(""!=t?`?${t}`:"")+f.hash;n!=f.pathname+f.search+f.hash&&p.push(n),x(""),S.current?.autocomplete.setVal("")}),[f.pathname,f.search,f.hash,p]);return(0,u.jsxs)("div",{className:(0,o.Z)("navbar__search",Ne.searchBarContainer,{[Ne.searchIndexLoading]:b&&v,[Ne.focused]:j}),hidden:T,dir:"ltr",children:[(0,u.jsx)("input",{placeholder:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),"aria-label":"Search",className:"navbar__search-input",onMouseEnter:O,onFocus:A,onBlur:N,onChange:D,ref:h,value:k}),(0,u.jsx)(Ie.Z,{className:Ne.searchBarLoadingRing}),ge.AY&&ge.t_&&(""!==k?(0,u.jsx)("button",{className:Ne.searchClearButton,onClick:F,children:"\u2715"}):n&&(0,u.jsxs)("div",{className:Ne.searchHintContainer,children:[(0,u.jsx)("kbd",{className:Ne.searchHint,children:I?"\u2318":"ctrl"}),(0,u.jsx)("kbd",{className:Ne.searchHint,children:"K"})]}))]})},$e={navbarSearchContainer:"navbarSearchContainer_Bca1"};function Ue(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,o.Z)(n,$e.navbarSearchContainer),children:t})}var qe=n(2802);const He=e=>e.docs.find((t=>t.id===e.mainDocId));const Qe={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:o="",...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.Z)(),p=(0,fe.l)(),{search:f,hash:h}=(0,s.TH)(),m=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${h}${o}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],g=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(pe,{...a,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(he,{className:me}),g]}),items:m})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(Ue,{className:n,children:(0,u.jsx)(Be,{})})},dropdown:pe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:a=!1}=e;const i=a?"li":"div";return(0,u.jsx)(i,{className:(0,o.Z)({navbar__item:!r&&!a,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,ye.Iw)(r),i=(0,qe.vY)(t,r),s=a?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>s||!!a?.sidebar&&a.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...o}=e;const{activeDoc:a}=(0,ye.Iw)(r),i=(0,qe.oz)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(ae,{exact:!0,...o,isActive:()=>a?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...o}=e;const a=(0,qe.lO)(r)[0],i=t??a.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(a).path;return(0,u.jsx)(ae,{...o,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:o,dropdownItemsAfter:a,...i}=e;const{search:c,hash:d}=(0,s.TH)(),p=(0,ye.Iw)(n),f=(0,ye.gB)(n),{savePreferredVersionName:h}=(0,be.J)(n),m=[...o,...f.map((e=>{const t=p.alternateDocVersions[e.name]??He(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>h(e.name)}})),...a],g=(0,qe.lO)(n)[0],b=t&&m.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):g.label,y=t&&m.length>1?void 0:He(g).path;return m.length<=1?(0,u.jsx)(ae,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(pe,{...i,mobile:t,label:b,to:y,items:m,isActive:r?()=>!1:void 0})}};function Ze(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=Qe[r];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(o,{...n})}function Ve(){const e=(0,j.e)(),t=(0,w.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(Ze,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function We(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ge(){const e=0===(0,w.L)().navbar.items.length,t=I();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(We,{onClick:()=>t.hide()}),t.content]})}function Ke(){const e=(0,j.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(F,{header:(0,u.jsx)(K,{}),primaryMenu:(0,u.jsx)(Ve,{}),secondaryMenu:(0,u.jsx)(Ge,{})}):null}const Ye={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Xe(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,o.Z)("navbar-sidebar__backdrop",e.className)})}function Je(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,j.e)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,P.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const s=r?.scrollY,l=document.documentElement.scrollHeight-a.current,c=window.innerHeight;s&&i>=s?n(!1):i+c<l&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Ye.navbarHideable,!d&&Ye.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Xe,{onClick:i.toggle}),(0,u.jsx)(Ke,{})]})}var et=n(8780);const tt={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function nt(e){return(0,u.jsx)("button",{type:"button",...e,children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function rt(e){let{error:t}=e;const n=(0,et.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{className:tt.errorBoundaryError,children:n})}class ot extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const at="right";function it(e){let{width:t=30,height:n=30,className:r,...o}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...o,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function st(){const{toggle:e,shown:t}=(0,j.e)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(it,{})})}const lt={colorModeToggle:"colorModeToggle_DEke"};function ct(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(ot,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(Ze,{...e})},t)))})}function ut(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function dt(){const e=(0,j.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??at)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return(0,u.jsx)(ut,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(st,{}),(0,u.jsx)(W,{}),(0,u.jsx)(ct,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(ct,{items:r}),(0,u.jsx)(Z,{className:lt.colorModeToggle}),!o&&(0,u.jsx)(Ue,{children:(0,u.jsx)(Be,{})})]})})}function pt(){return(0,u.jsx)(Je,{children:(0,u.jsx)(dt,{})})}function ft(e){let{item:t}=e;const{to:n,href:r,label:o,prependBaseUrlToHref:a,...i}=t,s=(0,X.Z)(n),l=(0,X.Z)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Y.Z,{className:"footer__link-item",...r?{href:a?l:r}:{to:s},...i,children:[o,r&&!(0,J.Z)(r)&&(0,u.jsx)(te.Z,{})]})}function ht(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(ft,{item:t})},t.href??t.to)}function mt(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(ht,{item:e},t)))})]})}function gt(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(mt,{column:e},t)))})}function bt(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function yt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(ft,{item:t})}function vt(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(yt,{item:e}),t.length!==n+1&&(0,u.jsx)(bt,{})]},n)))})})}function wt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(gt,{columns:t}):(0,u.jsx)(vt,{links:t})}var kt=n(9965);const xt={footerLogoLink:"footerLogoLink_BH7S"};function St(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(kt.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function Et(e){let{logo:t}=e;return t.href?(0,u.jsx)(Y.Z,{href:t.href,className:xt.footerLogoLink,target:t.target,children:(0,u.jsx)(St,{logo:t})}):(0,u.jsx)(St,{logo:t})}function _t(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Ct(e){let{style:t,links:n,logo:r,copyright:a}=e;return(0,u.jsx)("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||a)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),a]})]})})}function Tt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:o}=e;return(0,u.jsx)(Ct,{style:o,links:n&&n.length>0&&(0,u.jsx)(wt,{links:n}),logo:r&&(0,u.jsx)(Et,{logo:r}),copyright:t&&(0,u.jsx)(_t,{copyright:t})})}const Lt=r.memo(Tt),jt=(0,R.Qc)([M.S,k.pl,P.OC,be.L5,i.VC,function(e){let{children:t}=e;return(0,u.jsx)(A.n2,{children:(0,u.jsx)(j.M,{children:(0,u.jsx)(O,{children:t})})})}]);function Pt(e){let{children:t}=e;return(0,u.jsx)(jt,{children:t})}var Rt=n(2503);function At(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Rt.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(nt,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(rt,{error:t})})]})})})}const Nt={mainWrapper:"mainWrapper_z2l0"};function Ot(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.t)(),(0,u.jsxs)(Pt,{children:[(0,u.jsx)(i.d,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(L,{}),(0,u.jsx)(pt,{}),(0,u.jsx)("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,Nt.mainWrapper,r),children:(0,u.jsx)(a.Z,{fallback:e=>(0,u.jsx)(At,{...e}),children:t})}),!n&&(0,u.jsx)(Lt,{})]})}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(7294);var r=n(9960),o=n(4996),a=n(2263),i=n(6668),s=n(9965),l=n(5893);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,o.Z)(t.src),dark:(0,o.Z)(t.srcDark||t.src)},i=(0,l.jsx)(s.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,a.Z)(),{navbar:{title:n,logo:s}}=(0,i.L)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,o.Z)(s?.href||"/"),h=n?"":t,m=s?.alt??h;return(0,l.jsxs)(r.Z,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:m,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});n(7294);var r=n(5742),o=n(5893);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return(0,o.jsxs)(r.Z,{children:[t&&(0,o.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,o.jsx)("meta",{name:"docusaurus_version",content:n}),a&&(0,o.jsx)("meta",{name:"docusaurus_tag",content:a}),i&&(0,o.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,o.jsx)("meta",{name:"docsearch:version",content:n}),a&&(0,o.jsx)("meta",{name:"docsearch:docusaurus_tag",content:a})]})}},9965:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7294),o=n(6010),a=n(2389),i=n(2949);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(5893);function c(e){let{className:t,children:n}=e;const c=(0,a.Z)(),{colorMode:u}=(0,i.I)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const a=n({theme:e,className:(0,o.Z)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:a},e)}))})}function u(e){const{sources:t,className:n,alt:r,...o}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:a}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:a,...o})}})}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>b});var r=n(7294),o=n(412),a=n(469),i=n(1442),s=n(5893);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,o]=(0,r.useState)(t??!1),a=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return{collapsed:n,setCollapsed:o,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:o}=e;const a=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=o?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${o?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return p(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,o])}function h(e){if(!o.Z.canUseDOM)return e?u:d}function m(e){let{as:t="div",collapsed:n,children:o,animation:a,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:a}),(0,s.jsx)(t,{ref:u,style:c?void 0:h(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:o})}function g(e){let{collapsed:t,...n}=e;const[o,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,a.Z)((()=>{t||i(!0)}),[t]),(0,a.Z)((()=>{o&&c(t)}),[o,t]),o?(0,s.jsx)(m,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?g:m;return(0,s.jsx)(r,{...n})}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>h});var r=n(7294),o=n(2389),a=n(12),i=n(902),s=n(6668),l=n(5893);const c=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function h(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{a(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function m(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>g});var r=n(7294),o=n(412),a=n(902),i=n(12),s=n(6668),l=n(5893);const c=r.createContext(void 0),u="theme",d=(0,i.WA)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,h=e=>o.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{d.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[o,a]=(0,r.useState)(h(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[o,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>b});var r=n(7294),o=n(143),a=n(9935),i=n(6668),s=n(2802),l=n(902),c=n(12),u=n(5893);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const h=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return(0,u.jsx)(h.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return s.cE?(0,u.jsx)(g,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function y(){const e=(0,r.useContext)(h);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=y(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>l});var r=n(7294),o=n(902),a=n(5893);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:o}=e;const i=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return(0,a.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new o.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>s});var r=n(7294),o=n(902),a=n(5893);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new o.i6("DocsVersionProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>f,e:()=>h});var r=n(7294),o=n(3102),a=n(7524),i=n(6550),s=n(902);function l(e){!function(e){const t=(0,i.k6)(),n=(0,s.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(6668),u=n(5893);const d=r.createContext(void 0);function p(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const u=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function f(e){let{children:t}=e;const n=p();return(0,u.jsx)(d.Provider,{value:n,children:t})}function h(){const e=r.useContext(d);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>c,n2:()=>s});var r=n(7294),o=n(902),a=n(5893);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,a.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const a=(0,r.useContext)(i);if(!a)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,s]=a,l=(0,o.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>s});var r=n(7294),o=n(412);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){const[e,t]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){t(function(){if(!o.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>i?a.desktop:a.mobile}())}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},1442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},2802:(e,t,n)=>{"use strict";n.d(t,{LM:()=>f,_F:()=>g,cE:()=>p,SN:()=>E,lO:()=>k,vY:()=>S,oz:()=>x,s1:()=>w,f:()=>y});var r=n(7294),o=n(6550),a=n(8790),i=n(143),s=n(373),l=n(4477),c=n(1116);function u(e){return Array.from(new Set(e))}var d=n(8596);const p=!!i._r;function f(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=f(t);if(e)return e}}(e):void 0:e.href}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),m=(e,t)=>e.some((e=>g(e,t)));function g(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||m(e.items,t))}function b(e,t){switch(e.type){case"category":return g(e,t)||e.items.some((e=>b(e,t)));case"link":return!e.unlisted||g(e,t);default:return!1}}function y(e,t){return(0,r.useMemo)((()=>e.filter((e=>b(e,t)))),[e,t])}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function w(){const e=(0,c.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>u([t,n,o].filter(Boolean))),[t,n,o])}function x(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function S(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,o.TH)(),r=(0,l.E)(),i=t.routes,s=i.find((e=>(0,o.LX)(n.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,a.H)(i),sidebarName:c,sidebarItems:u}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>d,VC:()=>h});var r=n(7294),o=n(6010),a=n(5742),i=n(226);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(4996),c=n(2263);var u=n(5893);function d(e){let{title:t,description:n,keywords:r,image:o,children:i}=e;const s=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.C)(),p=o?d(o,{absolute:!0}):void 0;return(0,u.jsxs)(a.Z,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),s=(0,o.Z)(i,t);return(0,u.jsxs)(p.Provider,{value:s,children:[(0,u.jsx)(a.Z,{children:(0,u.jsx)("html",{className:s})}),n]})}function h(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const a=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,o.Z)(r,a),children:t})}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>s,Qc:()=>u,Ql:()=>c,i6:()=>l,zX:()=>i});var r=n(7294),o=n(469),a=n(5893);function i(e){const t=(0,r.useRef)(e);return(0,o.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,o.Z)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,a.jsx)(a.Fragment,{children:e.reduceRight(((e,t)=>(0,a.jsx)(t,{children:e})),n)})}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(7294),o=n(723),a=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>f,OC:()=>c,RF:()=>p});var r=n(7294),o=n(412),a=n(2389),i=(n(469),n(902)),s=n(5893);const l=r.createContext(void 0);function c(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,s.jsx)(l.Provider,{value:n,children:t})}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const d=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function p(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(d()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>o});n(2263);const r="default";function o(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>l});n(7294);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=a(t?.persistence);return null===n?s:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(2263),o=n(6550),a=n(8780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,o.TH)(),c=(0,a.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(902);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(2263);function o(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},4143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},311:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});n(7294);var r=n(6010);const o={loadingRing:"loadingRing_RJI3","loading-ring":"loading-ring_FB5o"};var a=n(5893);function i(e){let{className:t}=e;return(0,a.jsxs)("div",{className:(0,r.Z)(o.loadingRing,t),children:[(0,a.jsx)("div",{}),(0,a.jsx)("div",{}),(0,a.jsx)("div",{}),(0,a.jsx)("div",{})]})}},22:(e,t,n)=>{"use strict";n.d(t,{w:()=>s});var r=n(1336),o=n.n(r),a=n(1029);const i=new Map;function s(e,t){const n=`${e}${t}`;let r=i.get(n);return r||(r=async function(e,t){{const n=`${e}${a.J.replace("{dir}",t?`-${t.replace(/\//g,"-")}`:"")}`;if(new URL(n,location.origin).origin!==location.origin)throw new Error("Unexpected version url");const r=await(await fetch(n)).json(),i=r.map(((e,t)=>{let{documents:n,index:r}=e;return{type:t,documents:n,index:o().Index.load(r)}})),s=r.reduce(((e,t)=>{for(const n of t.index.invertedIndex)/\p{Unified_Ideograph}/u.test(n[0][0])&&e.add(n[0]);return e}),new Set);return{wrappedIndexes:i,zhDictionary:Array.from(s)}}return{wrappedIndexes:[],zhDictionary:[]}}(e,t),i.set(n,r)),r}},8202:(e,t,n)=>{"use strict";n.d(t,{v:()=>c});var r=n(1336),o=n.n(r);var a=n(1029);function i(e){return s(e).concat(s(e.filter((e=>{const t=e[e.length-1];return!t.trailing&&t.maybeTyping})),!0))}function s(e,t){return e.map((e=>({tokens:e.map((e=>e.value)),term:e.map((e=>({value:e.value,presence:o().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?o().Query.wildcard.TRAILING:o().Query.wildcard.NONE})))})))}var l=n(3545);function c(e,t,n){return function(r,s){const c=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return o()[t[0]].tokenizer(e).map((e=>e.toString()));let n=/[^-\s]+/g;return t.includes("zh")&&(n=/\w+|\p{Unified_Ideograph}+/gu),e.toLowerCase().match(n)||[]}(r,a.dK);if(0===c.length)return void s([]);const u=function(e,t){const n=function(e,t){const n=[];return function e(r,o){if(0===r.length)return void n.push(o);const a=r[0];if(/\p{Unified_Ideograph}/u.test(a)){const n=function(e,t){const n=[];return function e(r,o){let a=0,i=!1;for(const s of t)if(r.substr(0,s.length)===s){const t={missed:o.missed,term:o.term.concat({value:s})};r.length>s.length?e(r.substr(s.length),t):n.push(t),i=!0}else for(let t=s.length-1;t>a;t-=1){const l=s.substr(0,t);if(r.substr(0,t)===l){a=t;const s={missed:o.missed,term:o.term.concat({value:l,trailing:!0})};r.length>t?e(r.substr(t),s):n.push(s),i=!0;break}}i||(r.length>0?e(r.substr(1),{missed:o.missed+1,term:o.term}):o.term.length>0&&n.push(o))}(e,{missed:0,term:[]}),n.sort(((e,t)=>{const n=e.missed>0?1:0,r=t.missed>0?1:0;return n!==r?n-r:e.term.length-t.term.length})).map((e=>e.term))}(a,t);for(const t of n){const n=o.concat(...t);e(r.slice(1),n)}}else{const t=o.concat({value:a});e(r.slice(1),t)}}(e,[]),n}(e,t);if(0===n.length)return[{tokens:e,term:e.map((e=>({value:e,presence:o().Query.presence.REQUIRED,wildcard:o().Query.wildcard.LEADING|o().Query.wildcard.TRAILING})))}];for(const o of n)o[o.length-1].maybeTyping=!0;const r=[];for(const i of a.dK)if("en"===i)a._k||r.unshift(o().stopWordFilter);else{const e=o()[i];e.stopWordFilter&&r.unshift(e.stopWordFilter)}let s;if(r.length>0){const e=e=>r.reduce(((e,t)=>e.filter((e=>t(e.value)))),e);s=[];const t=[];for(const r of n){const n=e(r);s.push(n),n.length<r.length&&n.length>0&&t.push(n)}n.push(...t)}else s=n.slice();const l=[];for(const o of s)if(o.length>2)for(let e=o.length-1;e>=0;e-=1)l.push(o.slice(0,e).concat(o.slice(e+1)));return i(n).concat(i(l))}(c,t),d=[];e:for(const{term:t,tokens:o}of u)for(const{documents:r,index:a,type:i}of e)if(d.push(...a.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!d.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-d.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:i,page:i!==l.P.Title&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:o,score:t.score}}))),d.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type!==l.P.Heading&&t.type!==l.P.Content&&t.type!==l.P.Description||!t.page?t.index:e.findIndex((e=>e.document===t.page)),o=n.type!==l.P.Heading&&n.type!==l.P.Content&&n.type!==l.P.Description||!n.page?n.index:e.findIndex((e=>e.document===n.page));if(-1===r&&(r=t.index),-1===o&&(o=n.index),r===o){const e=(0===n.type?1:0)-(0===t.type?1:0);return 0===e?t.index-n.index:e}return r-o}))}(d),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.slice(0,n).some((e=>(e.type===l.P.Keywords?e.page:e.document)===t.page))&&(n<e.length-1&&e[n+1].page===t.page?t.isInterOfTree=!0:t.isLastOfTree=!0)}))}(d),s(d)}}},3926:(e,t,n)=>{"use strict";function r(e){return e.join(" \u203a ")}n.d(t,{e:()=>r})},1690:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}n.d(t,{X:()=>r})},1073:(e,t,n)=>{"use strict";function r(e,t){const n=[];for(const r of Object.values(e))r[t]&&n.push(...r[t].position);return n.sort(((e,t)=>e[0]-t[0]||t[1]-e[1]))}n.d(t,{m:()=>r})},2539:(e,t,n)=>{"use strict";n.d(t,{C:()=>o});var r=n(1690);function o(e,t,n){const a=[];for(const i of t){const n=e.toLowerCase().indexOf(i);if(n>=0){n>0&&a.push(o(e.substr(0,n),t)),a.push(`<mark>${(0,r.X)(e.substr(n,i.length))}</mark>`);const s=n+i.length;s<e.length&&a.push(o(e.substr(s),t));break}}return 0===a.length?n?`<mark>${(0,r.X)(e)}</mark>`:(0,r.X)(e):a.join("")}},726:(e,t,n)=>{"use strict";n.d(t,{o:()=>l});var r=n(1690),o=n(2539);const a=/\w+|\p{Unified_Ideograph}/u;function i(e){const t=[];let n=0,r=e;for(;r.length>0;){const o=r.match(a);if(!o){t.push(r);break}o.index>0&&t.push(r.substring(0,o.index)),t.push(o[0]),n+=o.index+o[0].length,r=e.substring(n)}return t}var s=n(1029);function l(e,t,n,a){void 0===a&&(a=s.Hk);const{chunkIndex:l,chunks:c}=function(e,t,n){const a=[];let s=0,l=0,c=-1;for(;s<t.length;){const[u,d]=t[s];if(s+=1,!(u<l)){if(u>l){const t=i(e.substring(l,u)).map((e=>({html:(0,r.X)(e),textLength:e.length})));for(const e of t)a.push(e)}-1===c&&(c=a.length),l=u+d,a.push({html:(0,o.C)(e.substring(u,l),n,!0),textLength:d})}}if(l<e.length){const t=i(e.substring(l)).map((e=>({html:(0,r.X)(e),textLength:e.length})));for(const e of t)a.push(e)}return{chunkIndex:c,chunks:a}}(e,t,n),u=c.slice(0,l),d=c[l],p=[d.html],f=c.slice(l+1);let h=d.textLength,m=0,g=0,b=!1,y=!1;for(;h<a;)if((m<=g||0===f.length)&&u.length>0){const e=u.pop();h+e.textLength<=a?(p.unshift(e.html),m+=e.textLength,h+=e.textLength):(b=!0,u.length=0)}else{if(!(f.length>0))break;{const e=f.shift();h+e.textLength<=a?(p.push(e.html),g+=e.textLength,h+=e.textLength):(y=!0,f.length=0)}}return(b||u.length>0)&&p.unshift("\u2026"),(y||f.length>0)&&p.push("\u2026"),p.join("")}},51:(e,t,n)=>{"use strict";function r(e,t){if("string"==typeof e)return{label:e,path:e};{const{label:n,path:r}=e;return"string"==typeof n?{label:n,path:r}:Object.prototype.hasOwnProperty.call(n,t)?{label:n[t],path:r}:{label:r,path:r}}}n.d(t,{_:()=>r})},1029:(e,t,n)=>{"use strict";n.d(t,{vc:()=>a,gQ:()=>f,H6:()=>c,hG:()=>g,l9:()=>h,dK:()=>r,_k:()=>o,pu:()=>p,AY:()=>u,t_:()=>d,Kc:()=>m,J:()=>i,Hk:()=>l,qo:()=>s,pQ:()=>b});n(1336);const r=["en"],o=!1,a=null,i="search-index{dir}.json",s=8,l=50,c=!1,u=!0,d=!0,p="right",f=void 0,h=!0,m=null,g=!1,b=!1},3545:(e,t,n)=>{"use strict";var r;n.d(t,{P:()=>r}),function(e){e[e.Title=0]="Title",e[e.Heading=1]="Heading",e[e.Description=2]="Description",e[e.Keywords=3]="Keywords",e[e.Content=4]="Content"}(r||(r={}))},6010:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>f,PP:()=>L,Ep:()=>p});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&o(e),l=t&&o(t),c=s||l;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&o(i[0])||i.unshift("");var h=i.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};var s=n(8776);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function h(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var m=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var b="popstate",y="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),m||(0,s.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,c=i.forceRefresh,w=void 0!==c&&c,k=i.getUserConfirmation,x=void 0===k?g:k,S=i.keyLength,E=void 0===S?6:S,_=e.basename?d(l(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return _&&(a=u(a,_)),f(a,r,n)}function T(){return Math.random().toString(36).substr(2,E)}var L=h();function j(e){(0,r.Z)($,e),$.length=n.length,L.notifyListeners($.location,$.action)}function P(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||N(C(e.state))}function R(){N(C(v()))}var A=!1;function N(e){if(A)A=!1,j();else{L.confirmTransitionTo(e,"POP",x,(function(t){t?j({action:"POP",location:e}):function(e){var t=$.location,n=D.indexOf(t.key);-1===n&&(n=0);var r=D.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(A=!0,F(o))}(e)}))}}var O=C(v()),D=[O.key];function I(e){return _+p(e)}function F(e){n.go(e)}var M=0;function z(e){1===(M+=e)&&1===e?(window.addEventListener(b,P),a&&window.addEventListener(y,R)):0===M&&(window.removeEventListener(b,P),a&&window.removeEventListener(y,R))}var B=!1;var $={length:n.length,action:"POP",location:O,createHref:I,push:function(e,t){var r="PUSH",a=f(e,t,T(),$.location);L.confirmTransitionTo(a,r,x,(function(e){if(e){var t=I(a),i=a.key,s=a.state;if(o)if(n.pushState({key:i,state:s},null,t),w)window.location.href=t;else{var l=D.indexOf($.location.key),c=D.slice(0,l+1);c.push(a.key),D=c,j({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,T(),$.location);L.confirmTransitionTo(a,r,x,(function(e){if(e){var t=I(a),i=a.key,s=a.state;if(o)if(n.replaceState({key:i,state:s},null,t),w)window.location.replace(t);else{var l=D.indexOf($.location.key);-1!==l&&(D[l]=a.key),j({action:r,location:a})}else window.location.replace(t)}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=L.setPrompt(e);return B||(z(1),B=!0),function(){return B&&(B=!1,z(-1)),t()}},listen:function(e){var t=L.appendListener(e);return z(1),function(){z(-1),t()}}};return $}var k="hashchange",x={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:l},slash:{encodePath:l,decodePath:l}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function E(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function _(e){window.location.replace(S(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),m||(0,s.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,c=void 0===i?"slash":i,b=e.basename?d(l(e.basename)):"",y=x[c],v=y.encodePath,w=y.decodePath;function C(){var e=w(E());return b&&(e=u(e,b)),f(e)}var T=h();function L(e){(0,r.Z)(B,e),B.length=t.length,T.notifyListeners(B.location,B.action)}var j=!1,P=null;function R(){var e,t,n=E(),r=v(n);if(n!==r)_(r);else{var o=C(),i=B.location;if(!j&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(P===p(o))return;P=null,function(e){if(j)j=!1,L();else{var t="POP";T.confirmTransitionTo(e,t,a,(function(n){n?L({action:t,location:e}):function(e){var t=B.location,n=D.lastIndexOf(p(t));-1===n&&(n=0);var r=D.lastIndexOf(p(e));-1===r&&(r=0);var o=n-r;o&&(j=!0,I(o))}(e)}))}}(o)}}var A=E(),N=v(A);A!==N&&_(N);var O=C(),D=[p(O)];function I(e){t.go(e)}var F=0;function M(e){1===(F+=e)&&1===e?window.addEventListener(k,R):0===F&&window.removeEventListener(k,R)}var z=!1;var B={length:t.length,action:"POP",location:O,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+v(b+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,B.location);T.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=v(b+t);if(E()!==o){P=t,function(e){window.location.hash=e}(o);var a=D.lastIndexOf(p(B.location)),i=D.slice(0,a+1);i.push(t),D=i,L({action:n,location:r})}else L()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,B.location);T.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=v(b+t);E()!==o&&(P=t,_(o));var a=D.indexOf(p(B.location));-1!==a&&(D[a]=t),L({action:n,location:r})}}))},go:I,goBack:function(){I(-1)},goForward:function(){I(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return z||(M(1),z=!0),function(){return z&&(z=!1,M(-1)),t()}},listen:function(e){var t=T.appendListener(e);return M(1),function(){M(-1),t()}}};return B}function T(e,t,n){return Math.min(Math.max(e,t),n)}function L(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,s=void 0===i?0:i,l=t.keyLength,c=void 0===l?6:l,u=h();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function m(){return Math.random().toString(36).substr(2,c)}var g=T(s,0,a.length-1),b=a.map((function(e){return f(e,void 0,"string"==typeof e?m():e.key||m())})),y=p;function v(e){var t=T(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[g],index:g,entries:b,createHref:y,push:function(e,t){var r="PUSH",o=f(e,t,m(),w.location);u.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,m(),w.location);u.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var o=f(n);o&&o!==h&&e(t,o,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),m=l(n),g=0;g<i.length;++g){var b=i[g];if(!(a[b]||r&&r[b]||m&&m[b]||s&&s[b])){var y=p(n,b);try{c(t,b,y)}catch(v){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,o,a,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},1336:(e,t,n)=>{var r,o;!function(){var a,i,s,l,c,u,d,p,f,h,m,g,b,y,v,w,k,x,S,E,_,C,T,L,j,P,R,A,N,O,D=function(e){var t=new D.Builder;return t.pipeline.add(D.trimmer,D.stopWordFilter,D.stemmer),t.searchPipeline.add(D.stemmer),e.call(t,t),t.build()};D.version="2.3.9",D.utils={},D.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),D.utils.asString=function(e){return null==e?"":e.toString()},D.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},D.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},D.FieldRef.joiner="/",D.FieldRef.fromString=function(e){var t=e.indexOf(D.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new D.FieldRef(r,n,e)},D.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+D.FieldRef.joiner+this.docRef),this._stringValue},D.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},D.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},D.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},D.Set.prototype.contains=function(e){return!!this.elements[e]},D.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===D.Set.complete)return this;if(e===D.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new D.Set(o)},D.Set.prototype.union=function(e){return e===D.Set.complete?D.Set.complete:e===D.Set.empty?this:new D.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},D.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},D.Token=function(e,t){this.str=e||"",this.metadata=t||{}},D.Token.prototype.toString=function(){return this.str},D.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},D.Token.prototype.clone=function(e){return e=e||function(e){return e},new D.Token(e(this.str,this.metadata),this.metadata)},D.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new D.Token(D.utils.asString(e).toLowerCase(),D.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var s=a-i;if(n.charAt(a).match(D.tokenizer.separator)||a==r){if(s>0){var l=D.utils.clone(t)||{};l.position=[i,s],l.index=o.length,o.push(new D.Token(n.slice(i,a),l))}i=a+1}}return o},D.tokenizer.separator=/[\s\-]+/,D.Pipeline=function(){this._stack=[]},D.Pipeline.registeredFunctions=Object.create(null),D.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&D.utils.warn("Overwriting existing registered function: "+t),e.label=t,D.Pipeline.registeredFunctions[e.label]=e},D.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||D.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},D.Pipeline.load=function(e){var t=new D.Pipeline;return e.forEach((function(e){var n=D.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},D.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){D.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},D.Pipeline.prototype.after=function(e,t){D.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},D.Pipeline.prototype.before=function(e,t){D.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},D.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},D.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var s=0;s<i.length;s++)o.push(i[s]);else o.push(i)}e=o}return e},D.Pipeline.prototype.runString=function(e,t){var n=new D.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},D.Pipeline.prototype.reset=function(){this._stack=[]},D.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return D.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},D.Vector=function(e){this._magnitude=0,this.elements=e||[]},D.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},D.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},D.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},D.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},D.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,s=0,l=0,c=0;l<o&&c<a;)(i=n[l])<(s=r[c])?l+=2:i>s?c+=2:i==s&&(t+=n[l+1]*r[c+1],l+=2,c+=2);return t},D.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},D.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},D.Vector.prototype.toJSON=function(){return this.elements},D.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},s={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(c="[^aeiou][^aeiouy]*")+")?"+(u=(l="[aeiouy]")+"[aeiou]*")+c+"("+u+")?$",p="^("+c+")?"+u+c+u+c,f="^("+c+")?"+l,h=new RegExp("^("+c+")?"+u+c),m=new RegExp(p),g=new RegExp(d),b=new RegExp(f),y=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,k=/^(.+?)(ed|ing)$/,x=/.$/,S=/(at|bl|iz)$/,E=new RegExp("([^aeiouylsz])\\1$"),_=new RegExp("^"+c+l+"[^aeiouwxy]$"),C=/^(.+?[^aeiou])y$/,T=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,L=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,j=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,P=/^(.+?)(s|t)(ion)$/,R=/^(.+?)e$/,A=/ll$/,N=new RegExp("^"+c+l+"[^aeiouwxy]$"),O=function(e){var t,n,r,o,a,l,c;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=v,(o=y).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=k,(o=w).test(e)){var u=o.exec(e);(o=h).test(u[1])&&(o=x,e=e.replace(o,""))}else a.test(e)&&(t=(u=a.exec(e))[1],(a=b).test(t)&&(l=E,c=_,(a=S).test(e=t)?e+="e":l.test(e)?(o=x,e=e.replace(o,"")):c.test(e)&&(e+="e")));return(o=C).test(e)&&(e=(t=(u=o.exec(e))[1])+"i"),(o=T).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=h).test(t)&&(e=t+i[n])),(o=L).test(e)&&(t=(u=o.exec(e))[1],n=u[2],(o=h).test(t)&&(e=t+s[n])),a=P,(o=j).test(e)?(t=(u=o.exec(e))[1],(o=m).test(t)&&(e=t)):a.test(e)&&(t=(u=a.exec(e))[1]+u[2],(a=m).test(t)&&(e=t)),(o=R).test(e)&&(t=(u=o.exec(e))[1],a=g,l=N,((o=m).test(t)||a.test(t)&&!l.test(t))&&(e=t)),a=m,(o=A).test(e)&&a.test(e)&&(o=x,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(O)}),D.Pipeline.registerFunction(D.stemmer,"stemmer"),D.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},D.stopWordFilter=D.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),D.Pipeline.registerFunction(D.stopWordFilter,"stopWordFilter"),D.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},D.Pipeline.registerFunction(D.trimmer,"trimmer"),D.TokenSet=function(){this.final=!1,this.edges={},this.id=D.TokenSet._nextId,D.TokenSet._nextId+=1},D.TokenSet._nextId=1,D.TokenSet.fromArray=function(e){for(var t=new D.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},D.TokenSet.fromClause=function(e){return"editDistance"in e?D.TokenSet.fromFuzzyString(e.term,e.editDistance):D.TokenSet.fromString(e.term)},D.TokenSet.fromFuzzyString=function(e,t){for(var n=new D.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new D.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new D.TokenSet;o.node.edges["*"]=s}if(0==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new D.TokenSet;o.node.edges["*"]=l}1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var c,u=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?c=o.node.edges[d]:(c=new D.TokenSet,o.node.edges[d]=c),1==o.str.length&&(c.final=!0),r.push({node:c,editsRemaining:o.editsRemaining-1,str:u+o.str.slice(2)})}}}return n},D.TokenSet.fromString=function(e){for(var t=new D.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var s=new D.TokenSet;s.final=i,t.edges[a]=s,t=s}}return n},D.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},D.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},D.TokenSet.prototype.intersect=function(e){for(var t=new D.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),s=i.length,l=0;l<a;l++)for(var c=o[l],u=0;u<s;u++){var d=i[u];if(d==c||"*"==c){var p=n.node.edges[d],f=n.qNode.edges[c],h=p.final&&f.final,m=void 0;d in n.output.edges?(m=n.output.edges[d]).final=m.final||h:((m=new D.TokenSet).final=h,n.output.edges[d]=m),r.push({qNode:f,output:m,node:p})}}}return t},D.TokenSet.Builder=function(){this.previousWord="",this.root=new D.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},D.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new D.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},D.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},D.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},D.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},D.Index.prototype.search=function(e){return this.query((function(t){new D.QueryParser(e,t).parse()}))},D.Index.prototype.query=function(e){for(var t=new D.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),s=0;s<this.fields.length;s++)r[this.fields[s]]=new D.Vector;e.call(t,t);for(s=0;s<t.clauses.length;s++){var l=t.clauses[s],c=null,u=D.Set.empty;c=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var d=0;d<c.length;d++){var p=c[d];l.term=p;var f=D.TokenSet.fromClause(l),h=this.tokenSet.intersect(f).toArray();if(0===h.length&&l.presence===D.Query.presence.REQUIRED){for(var m=0;m<l.fields.length;m++){a[R=l.fields[m]]=D.Set.empty}break}for(var g=0;g<h.length;g++){var b=h[g],y=this.invertedIndex[b],v=y._index;for(m=0;m<l.fields.length;m++){var w=y[R=l.fields[m]],k=Object.keys(w),x=b+"/"+R,S=new D.Set(k);if(l.presence==D.Query.presence.REQUIRED&&(u=u.union(S),void 0===a[R]&&(a[R]=D.Set.complete)),l.presence!=D.Query.presence.PROHIBITED){if(r[R].upsert(v,l.boost,(function(e,t){return e+t})),!o[x]){for(var E=0;E<k.length;E++){var _,C=k[E],T=new D.FieldRef(C,R),L=w[C];void 0===(_=n[T])?n[T]=new D.MatchData(b,R,L):_.add(b,R,L)}o[x]=!0}}else void 0===i[R]&&(i[R]=D.Set.empty),i[R]=i[R].union(S)}}}if(l.presence===D.Query.presence.REQUIRED)for(m=0;m<l.fields.length;m++){a[R=l.fields[m]]=a[R].intersect(u)}}var j=D.Set.complete,P=D.Set.empty;for(s=0;s<this.fields.length;s++){var R;a[R=this.fields[s]]&&(j=j.intersect(a[R])),i[R]&&(P=P.union(i[R]))}var A=Object.keys(n),N=[],O=Object.create(null);if(t.isNegated()){A=Object.keys(this.fieldVectors);for(s=0;s<A.length;s++){T=A[s];var I=D.FieldRef.fromString(T);n[T]=new D.MatchData}}for(s=0;s<A.length;s++){var F=(I=D.FieldRef.fromString(A[s])).docRef;if(j.contains(F)&&!P.contains(F)){var M,z=this.fieldVectors[I],B=r[I.fieldName].similarity(z);if(void 0!==(M=O[F]))M.score+=B,M.matchData.combine(n[I]);else{var $={ref:F,score:B,matchData:n[I]};O[F]=$,N.push($)}}}return N.sort((function(e,t){return t.score-e.score}))},D.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:D.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},D.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new D.TokenSet.Builder,s=D.Pipeline.load(e.pipeline);e.version!=D.version&&D.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+D.version+"' does not match serialized index '"+e.version+"'");for(var l=0;l<r.length;l++){var c=(d=r[l])[0],u=d[1];n[c]=new D.Vector(u)}for(l=0;l<a.length;l++){var d,p=(d=a[l])[0],f=d[1];i.insert(p),o[p]=f}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=s,new D.Index(t)},D.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=D.tokenizer,this.pipeline=new D.Pipeline,this.searchPipeline=new D.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},D.Builder.prototype.ref=function(e){this._ref=e},D.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},D.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},D.Builder.prototype.k1=function(e){this._k1=e},D.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,s=i?i(e):e[a],l=this.tokenizer(s,{fields:[a]}),c=this.pipeline.run(l),u=new D.FieldRef(n,a),d=Object.create(null);this.fieldTermFrequencies[u]=d,this.fieldLengths[u]=0,this.fieldLengths[u]+=c.length;for(var p=0;p<c.length;p++){var f=c[p];if(null==d[f]&&(d[f]=0),d[f]+=1,null==this.invertedIndex[f]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var m=0;m<r.length;m++)h[r[m]]=Object.create(null);this.invertedIndex[f]=h}null==this.invertedIndex[f][a][n]&&(this.invertedIndex[f][a][n]=Object.create(null));for(var g=0;g<this.metadataWhitelist.length;g++){var b=this.metadataWhitelist[g],y=f.metadata[b];null==this.invertedIndex[f][a][n][b]&&(this.invertedIndex[f][a][n][b]=[]),this.invertedIndex[f][a][n][b].push(y)}}}},D.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=D.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var s=Object.keys(this._fields);for(o=0;o<s.length;o++){var l=s[o];n[l]=n[l]/r[l]}this.averageFieldLength=n},D.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=D.FieldRef.fromString(t[o]),i=a.fieldName,s=this.fieldLengths[a],l=new D.Vector,c=this.fieldTermFrequencies[a],u=Object.keys(c),d=u.length,p=this._fields[i].boost||1,f=this._documents[a.docRef].boost||1,h=0;h<d;h++){var m,g,b,y=u[h],v=c[y],w=this.invertedIndex[y]._index;void 0===r[y]?(m=D.idf(this.invertedIndex[y],this.documentCount),r[y]=m):m=r[y],g=m*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(s/this.averageFieldLength[i]))+v),g*=p,g*=f,b=Math.round(1e3*g)/1e3,l.insert(w,b)}e[a]=l}this.fieldVectors=e},D.Builder.prototype.createTokenSet=function(){this.tokenSet=D.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},D.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new D.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},D.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},D.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},D.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],s=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var l=0;l<s.length;l++){var c=s[l];null==this.metadata[r][i][c]?this.metadata[r][i][c]=e.metadata[r][i][c]:this.metadata[r][i][c]=this.metadata[r][i][c].concat(e.metadata[r][i][c])}}}},D.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},D.Query=function(e){this.clauses=[],this.allFields=e},D.Query.wildcard=new String("*"),D.Query.wildcard.NONE=0,D.Query.wildcard.LEADING=1,D.Query.wildcard.TRAILING=2,D.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},D.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=D.Query.wildcard.NONE),e.wildcard&D.Query.wildcard.LEADING&&e.term.charAt(0)!=D.Query.wildcard&&(e.term="*"+e.term),e.wildcard&D.Query.wildcard.TRAILING&&e.term.slice(-1)!=D.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=D.Query.presence.OPTIONAL),this.clauses.push(e),this},D.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=D.Query.presence.PROHIBITED)return!1;return!0},D.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,D.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},D.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},D.QueryParseError.prototype=new Error,D.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},D.QueryLexer.prototype.run=function(){for(var e=D.QueryLexer.lexText;e;)e=e(this)},D.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},D.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},D.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},D.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return D.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},D.QueryLexer.prototype.width=function(){return this.pos-this.start},D.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},D.QueryLexer.prototype.backup=function(){this.pos-=1},D.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=D.QueryLexer.EOS&&this.backup()},D.QueryLexer.prototype.more=function(){return this.pos<this.length},D.QueryLexer.EOS="EOS",D.QueryLexer.FIELD="FIELD",D.QueryLexer.TERM="TERM",D.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",D.QueryLexer.BOOST="BOOST",D.QueryLexer.PRESENCE="PRESENCE",D.QueryLexer.lexField=function(e){return e.backup(),e.emit(D.QueryLexer.FIELD),e.ignore(),D.QueryLexer.lexText},D.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(D.QueryLexer.TERM)),e.ignore(),e.more())return D.QueryLexer.lexText},D.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(D.QueryLexer.EDIT_DISTANCE),D.QueryLexer.lexText},D.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(D.QueryLexer.BOOST),D.QueryLexer.lexText},D.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(D.QueryLexer.TERM)},D.QueryLexer.termSeparator=D.tokenizer.separator,D.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==D.QueryLexer.EOS)return D.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return D.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(D.QueryLexer.TERM),D.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(D.QueryLexer.TERM),D.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(D.QueryLexer.PRESENCE),D.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(D.QueryLexer.PRESENCE),D.QueryLexer.lexText;if(t.match(D.QueryLexer.termSeparator))return D.QueryLexer.lexTerm}else e.escapeCharacter()}},D.QueryParser=function(e,t){this.lexer=new D.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},D.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=D.QueryParser.parseClause;e;)e=e(this);return this.query},D.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},D.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},D.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},D.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case D.QueryLexer.PRESENCE:return D.QueryParser.parsePresence;case D.QueryLexer.FIELD:return D.QueryParser.parseField;case D.QueryLexer.TERM:return D.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new D.QueryParseError(n,t.start,t.end)}},D.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=D.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=D.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new D.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new D.QueryParseError(n,t.start,t.end)}switch(r.type){case D.QueryLexer.FIELD:return D.QueryParser.parseField;case D.QueryLexer.TERM:return D.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new D.QueryParseError(n,r.start,r.end)}}},D.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new D.QueryParseError(r,t.start,t.end)}if(o.type===D.QueryLexer.TERM)return D.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new D.QueryParseError(r,o.start,o.end)}},D.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new D.QueryParseError(r,n.start,n.end)}else e.nextClause()}},D.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new D.QueryParseError(r,o.start,o.end)}else e.nextClause()}},D.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new D.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case D.QueryLexer.TERM:return e.nextClause(),D.QueryParser.parseTerm;case D.QueryLexer.FIELD:return e.nextClause(),D.QueryParser.parseField;case D.QueryLexer.EDIT_DISTANCE:return D.QueryParser.parseEditDistance;case D.QueryLexer.BOOST:return D.QueryParser.parseBoost;case D.QueryLexer.PRESENCE:return e.nextClause(),D.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new D.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return D})?r.call(t,n,t,e):r)||(e.exports=o)}()},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),c=a.querySelector(r.barSelector),u=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},4779:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var h=e[i],m=n[2],g=n[3],b=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=m&&null!=h&&h!==m,x="+"===v||"*"===v,S="?"===v||"*"===v,E=n[2]||u,_=b||y;r.push({name:g||a++,prefix:m||"",delimiter:E,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:_?c(_):w?".*":"[^"+l(E)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&r.push(s),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",s=t||{},l=(o||{}).pretty?i:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=s[u.name];if(null==p){if(u.optional){u.partial&&(a+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');a+=u.prefix+d}}else a+=u}return a}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",s=0;s<e.length;s++){var c=e[s];if("string"==typeof c)i+=l(c);else{var p=l(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),i+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var h=l(n.delimiter||"/"),m=i.slice(-h.length)===h;return o||(i=(m?i.slice(0,-h.length):i)+"(?:"+h+"(?=$))?"),i+=a?"$":o&&m?"":"(?="+h+"|$)",u(new RegExp("^"+i,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(f(e[o],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(a(e,n),t,n)}(e,t,n)}},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),o=n(9642),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),a.add(e)}))}i.silent=!1,e.exports=i},6854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l<s.length&&!(o>=a.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=a[o],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),h=p.indexOf(f);if(h>-1){++o;var m=p.substring(0,h),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(h+f.length),y=[];m&&y.push.apply(y,i([m])),y.push(g),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},6500:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,a){if(!(r in n)){a.push(r);var i=a.indexOf(r);if(i<a.length-1)throw new Error("Circular dependency: "+a.slice(i).join(" -> "));var s={},l=e[r];if(l){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in o(t,a),s[t]=!0,n[t])s[i]=!0}t(l.require,c),t(l.optional,c),t(l.modify,c)}n[r]=s,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(l);i=i.map(c),s=(s||[]).map(c);var u=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(l),h=u;o(h);){for(var m in p={},h){var g=l[m];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var y in f(b))if(y in u){p[b]=!0;break}for(var v in h=p)u[v]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,s={},l={};function c(e){if(e in s)return s[e];l[e]=!0;var o,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)o=r(e);else{var p=i(u.map((function(e){var t=c(e);return delete l[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return s[e]=o}for(var u in n)c(u);var d=[];for(var p in l)d.push(s[p]);return i(d)}(f,u,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(3840);function a(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,s={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)i.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},h={};function m(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var g={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){g[e]=new m(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];g[t]=new m(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){g[e]=new m(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){g[e]=new m(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){g[e]=new m(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){g[e]=new m(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){g[e]=new m(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){g[e]=new m(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){g[e]=new m(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function v(e,t,n,r){var o=g.hasOwnProperty(t)?g[t]:null;(null!==o?0!==o.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!d.call(h,e)||!d.call(f,e)&&(p.test(e)?h[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);g[t]=new m(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);g[t]=new m(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);g[t]=new m(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){g[e]=new m(e,1,!1,e.toLowerCase(),null,!1,!1)})),g.xlinkHref=new m("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){g[e]=new m(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=Symbol.for("react.element"),x=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),E=Symbol.for("react.strict_mode"),_=Symbol.for("react.profiler"),C=Symbol.for("react.provider"),T=Symbol.for("react.context"),L=Symbol.for("react.forward_ref"),j=Symbol.for("react.suspense"),P=Symbol.for("react.suspense_list"),R=Symbol.for("react.memo"),A=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var N=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var O=Symbol.iterator;function D(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=O&&e[O]||e["@@iterator"])?e:null}var I,F=Object.assign;function M(e){if(void 0===I)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);I=t&&t[1]||""}return"\n"+I+e}var z=!1;function B(e,t){if(!e||z)return"";z=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var o=c.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,s=a.length-1;1<=i&&0<=s&&o[i]!==a[s];)s--;for(;1<=i&&0<=s;i--,s--)if(o[i]!==a[s]){if(1!==i||1!==s)do{if(i--,0>--s||o[i]!==a[s]){var l="\n"+o[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=i&&0<=s);break}}}finally{z=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?M(e):""}function $(e){switch(e.tag){case 5:return M(e.type);case 16:return M("Lazy");case 13:return M("Suspense");case 19:return M("SuspenseList");case 0:case 2:case 15:return e=B(e.type,!1);case 11:return e=B(e.type.render,!1);case 1:return e=B(e.type,!0);default:return""}}function U(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case S:return"Fragment";case x:return"Portal";case _:return"Profiler";case E:return"StrictMode";case j:return"Suspense";case P:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case T:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case L:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case R:return null!==(t=e.displayName||null)?t:U(e.type)||"Memo";case A:t=e._payload,e=e._init;try{return U(e(t))}catch(n){}}return null}function q(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return U(t);case 8:return t===E?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function H(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function Q(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Z(e){e._valueTracker||(e._valueTracker=function(e){var t=Q(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function V(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Q(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function W(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function G(e,t){var n=t.checked;return F({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function K(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=H(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Y(e,t){null!=(t=t.checked)&&v(e,"checked",t,!1)}function X(e,t){Y(e,t);var n=H(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,H(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&W(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+H(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(a(91));return F({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function oe(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(a(92));if(te(n)){if(1<n.length)throw Error(a(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:H(n)}}function ae(e,t){var n=H(t.value),r=H(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function se(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?se(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},he=["Webkit","ms","Moz","O"];function me(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function ge(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=me(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(fe).forEach((function(e){he.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=F({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(a(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(a(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(a(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(a(62))}}function ve(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function ke(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var xe=null,Se=null,Ee=null;function _e(e){if(e=wo(e)){if("function"!=typeof xe)throw Error(a(280));var t=e.stateNode;t&&(t=xo(t),xe(e.stateNode,e.type,t))}}function Ce(e){Se?Ee?Ee.push(e):Ee=[e]:Se=e}function Te(){if(Se){var e=Se,t=Ee;if(Ee=Se=null,_e(e),t)for(e=0;e<t.length;e++)_e(t[e])}}function Le(e,t){return e(t)}function je(){}var Pe=!1;function Re(e,t,n){if(Pe)return e(t,n);Pe=!0;try{return Le(e,t,n)}finally{Pe=!1,(null!==Se||null!==Ee)&&(je(),Te())}}function Ae(e,t){var n=e.stateNode;if(null===n)return null;var r=xo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(a(231,t,typeof n));return n}var Ne=!1;if(u)try{var Oe={};Object.defineProperty(Oe,"passive",{get:function(){Ne=!0}}),window.addEventListener("test",Oe,Oe),window.removeEventListener("test",Oe,Oe)}catch(ue){Ne=!1}function De(e,t,n,r,o,a,i,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var Ie=!1,Fe=null,Me=!1,ze=null,Be={onError:function(e){Ie=!0,Fe=e}};function $e(e,t,n,r,o,a,i,s,l){Ie=!1,Fe=null,De.apply(Be,arguments)}function Ue(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function qe(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function He(e){if(Ue(e)!==e)throw Error(a(188))}function Qe(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ue(e)))throw Error(a(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var i=o.alternate;if(null===i){if(null!==(r=o.return)){n=r;continue}break}if(o.child===i.child){for(i=o.child;i;){if(i===n)return He(o),e;if(i===r)return He(o),t;i=i.sibling}throw Error(a(188))}if(n.return!==r.return)n=o,r=i;else{for(var s=!1,l=o.child;l;){if(l===n){s=!0,n=o,r=i;break}if(l===r){s=!0,r=o,n=i;break}l=l.sibling}if(!s){for(l=i.child;l;){if(l===n){s=!0,n=i,r=o;break}if(l===r){s=!0,r=i,n=o;break}l=l.sibling}if(!s)throw Error(a(189))}}if(n.alternate!==r)throw Error(a(190))}if(3!==n.tag)throw Error(a(188));return n.stateNode.current===n?e:t}(e))?Ze(e):null}function Ze(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=Ze(e);if(null!==t)return t;e=e.sibling}return null}var Ve=o.unstable_scheduleCallback,We=o.unstable_cancelCallback,Ge=o.unstable_shouldYield,Ke=o.unstable_requestPaint,Ye=o.unstable_now,Xe=o.unstable_getCurrentPriorityLevel,Je=o.unstable_ImmediatePriority,et=o.unstable_UserBlockingPriority,tt=o.unstable_NormalPriority,nt=o.unstable_LowPriority,rt=o.unstable_IdlePriority,ot=null,at=null;var it=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,o=e.suspendedLanes,a=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~o;0!==s?r=dt(s):0!==(a&=i)&&(r=dt(a))}else 0!==(i=n&~o)?r=dt(i):0!==a&&(r=dt(a));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&o)&&((o=r&-r)>=(a=t&-t)||16===o&&0!=(4194240&a)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-it(t)),r|=e[n],t&=~o;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function ht(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function mt(){var e=ct;return 0==(4194240&(ct<<=1))&&(ct=64),e}function gt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),o=1<<r;o&t|e[r]&t&&(e[r]|=t),n&=~o}}var vt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var kt,xt,St,Et,_t,Ct=!1,Tt=[],Lt=null,jt=null,Pt=null,Rt=new Map,At=new Map,Nt=[],Ot="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Dt(e,t){switch(e){case"focusin":case"focusout":Lt=null;break;case"dragenter":case"dragleave":jt=null;break;case"mouseover":case"mouseout":Pt=null;break;case"pointerover":case"pointerout":Rt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":At.delete(t.pointerId)}}function It(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:a,targetContainers:[o]},null!==t&&(null!==(t=wo(t))&&xt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function Ft(e){var t=vo(e.target);if(null!==t){var n=Ue(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=qe(n)))return e.blockedOn=t,void _t(e.priority,(function(){St(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Mt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Gt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=wo(n))&&xt(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function zt(e,t,n){Mt(e)&&n.delete(t)}function Bt(){Ct=!1,null!==Lt&&Mt(Lt)&&(Lt=null),null!==jt&&Mt(jt)&&(jt=null),null!==Pt&&Mt(Pt)&&(Pt=null),Rt.forEach(zt),At.forEach(zt)}function $t(e,t){e.blockedOn===t&&(e.blockedOn=null,Ct||(Ct=!0,o.unstable_scheduleCallback(o.unstable_NormalPriority,Bt)))}function Ut(e){function t(t){return $t(t,e)}if(0<Tt.length){$t(Tt[0],e);for(var n=1;n<Tt.length;n++){var r=Tt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==Lt&&$t(Lt,e),null!==jt&&$t(jt,e),null!==Pt&&$t(Pt,e),Rt.forEach(t),At.forEach(t),n=0;n<Nt.length;n++)(r=Nt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<Nt.length&&null===(n=Nt[0]).blockedOn;)Ft(n),null===n.blockedOn&&Nt.shift()}var qt=w.ReactCurrentBatchConfig,Ht=!0;function Qt(e,t,n,r){var o=vt,a=qt.transition;qt.transition=null;try{vt=1,Vt(e,t,n,r)}finally{vt=o,qt.transition=a}}function Zt(e,t,n,r){var o=vt,a=qt.transition;qt.transition=null;try{vt=4,Vt(e,t,n,r)}finally{vt=o,qt.transition=a}}function Vt(e,t,n,r){if(Ht){var o=Gt(e,t,n,r);if(null===o)Hr(e,t,r,Wt,n),Dt(e,r);else if(function(e,t,n,r,o){switch(t){case"focusin":return Lt=It(Lt,e,t,n,r,o),!0;case"dragenter":return jt=It(jt,e,t,n,r,o),!0;case"mouseover":return Pt=It(Pt,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return Rt.set(a,It(Rt.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,At.set(a,It(At.get(a)||null,e,t,n,r,o)),!0}return!1}(o,e,t,n,r))r.stopPropagation();else if(Dt(e,r),4&t&&-1<Ot.indexOf(e)){for(;null!==o;){var a=wo(o);if(null!==a&&kt(a),null===(a=Gt(e,t,n,r))&&Hr(e,t,r,Wt,n),a===o)break;o=a}null!==o&&r.stopPropagation()}else Hr(e,t,r,null,n)}}var Wt=null;function Gt(e,t,n,r){if(Wt=null,null!==(e=vo(e=ke(r))))if(null===(t=Ue(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=qe(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return Wt=e,null}function Kt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Xe()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Yt=null,Xt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Xt,r=n.length,o="value"in Yt?Yt.value:Yt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return Jt=o.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function on(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return F(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var an,sn,ln,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=on(cn),dn=F({},cn,{view:0,detail:0}),pn=on(dn),fn=F({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:_n,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ln&&(ln&&"mousemove"===e.type?(an=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=an=0,ln=e),an)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),hn=on(fn),mn=on(F({},fn,{dataTransfer:0})),gn=on(F({},dn,{relatedTarget:0})),bn=on(F({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),yn=F({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),vn=on(yn),wn=on(F({},cn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},xn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Sn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function En(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sn[e])&&!!t[e]}function _n(){return En}var Cn=F({},dn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?xn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:_n,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=on(Cn),Ln=on(F({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),jn=on(F({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:_n})),Pn=on(F({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Rn=F({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),An=on(Rn),Nn=[9,13,27,32],On=u&&"CompositionEvent"in window,Dn=null;u&&"documentMode"in document&&(Dn=document.documentMode);var In=u&&"TextEvent"in window&&!Dn,Fn=u&&(!On||Dn&&8<Dn&&11>=Dn),Mn=String.fromCharCode(32),zn=!1;function Bn(e,t){switch(e){case"keyup":return-1!==Nn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $n(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Un=!1;var qn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Hn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!qn[e.type]:"textarea"===t}function Qn(e,t,n,r){Ce(r),0<(t=Zr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Zn=null,Vn=null;function Wn(e){Mr(e,0)}function Gn(e){if(V(ko(e)))return e}function Kn(e,t){if("change"===e)return t}var Yn=!1;if(u){var Xn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Xn=Jn}else Xn=!1;Yn=Xn&&(!document.documentMode||9<document.documentMode)}function tr(){Zn&&(Zn.detachEvent("onpropertychange",nr),Vn=Zn=null)}function nr(e){if("value"===e.propertyName&&Gn(Vn)){var t=[];Qn(t,Vn,e,ke(e)),Re(Wn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Vn=n,(Zn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function or(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Gn(Vn)}function ar(e,t){if("click"===e)return Gn(t)}function ir(e,t){if("input"===e||"change"===e)return Gn(t)}var sr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function lr(e,t){if(sr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var o=n[r];if(!d.call(t,o)||!sr(e[o],t[o]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=W();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=W((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function hr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var o=n.textContent.length,a=Math.min(r.start,o);r=void 0===r.end?a:Math.min(r.end,o),!e.extend&&a>r&&(o=r,r=a,a=o),o=ur(n,a);var i=ur(n,r);o&&i&&(1!==e.rangeCount||e.anchorNode!==o.node||e.anchorOffset!==o.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(o.node,o.offset),e.removeAllRanges(),a>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var mr=u&&"documentMode"in document&&11>=document.documentMode,gr=null,br=null,yr=null,vr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;vr||null==gr||gr!==W(r)||("selectionStart"in(r=gr)&&fr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},yr&&lr(yr,r)||(yr=r,0<(r=Zr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=gr)))}function kr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var xr={animationend:kr("Animation","AnimationEnd"),animationiteration:kr("Animation","AnimationIteration"),animationstart:kr("Animation","AnimationStart"),transitionend:kr("Transition","TransitionEnd")},Sr={},Er={};function _r(e){if(Sr[e])return Sr[e];if(!xr[e])return e;var t,n=xr[e];for(t in n)if(n.hasOwnProperty(t)&&t in Er)return Sr[e]=n[t];return e}u&&(Er=document.createElement("div").style,"AnimationEvent"in window||(delete xr.animationend.animation,delete xr.animationiteration.animation,delete xr.animationstart.animation),"TransitionEvent"in window||delete xr.transitionend.transition);var Cr=_r("animationend"),Tr=_r("animationiteration"),Lr=_r("animationstart"),jr=_r("transitionend"),Pr=new Map,Rr="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Ar(e,t){Pr.set(e,t),l(t,[e])}for(var Nr=0;Nr<Rr.length;Nr++){var Or=Rr[Nr];Ar(Or.toLowerCase(),"on"+(Or[0].toUpperCase()+Or.slice(1)))}Ar(Cr,"onAnimationEnd"),Ar(Tr,"onAnimationIteration"),Ar(Lr,"onAnimationStart"),Ar("dblclick","onDoubleClick"),Ar("focusin","onFocus"),Ar("focusout","onBlur"),Ar(jr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Dr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Ir=new Set("cancel close invalid load scroll toggle".split(" ").concat(Dr));function Fr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,i,s,l,c){if($e.apply(this,arguments),Ie){if(!Ie)throw Error(a(198));var u=Fe;Ie=!1,Fe=null,Me||(Me=!0,ze=u)}}(r,t,void 0,e),e.currentTarget=null}function Mr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==a&&o.isPropagationStopped())break e;Fr(o,s,c),a=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==a&&o.isPropagationStopped())break e;Fr(o,s,c),a=l}}}if(Me)throw e=ze,Me=!1,ze=null,e}function zr(e,t){var n=t[go];void 0===n&&(n=t[go]=new Set);var r=e+"__bubble";n.has(r)||(qr(t,e,2,!1),n.add(r))}function Br(e,t,n){var r=0;t&&(r|=4),qr(n,e,r,t)}var $r="_reactListening"+Math.random().toString(36).slice(2);function Ur(e){if(!e[$r]){e[$r]=!0,i.forEach((function(t){"selectionchange"!==t&&(Ir.has(t)||Br(t,!1,e),Br(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[$r]||(t[$r]=!0,Br("selectionchange",!1,t))}}function qr(e,t,n,r){switch(Kt(t)){case 1:var o=Qt;break;case 4:o=Zt;break;default:o=Vt}n=o.bind(null,t,n,e),o=void 0,!Ne||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Hr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;i=i.return}for(;null!==s;){if(null===(i=vo(s)))return;if(5===(l=i.tag)||6===l){r=a=i;continue e}s=s.parentNode}}r=r.return}Re((function(){var r=a,o=ke(n),i=[];e:{var s=Pr.get(e);if(void 0!==s){var l=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=Tn;break;case"focusin":c="focus",l=gn;break;case"focusout":c="blur",l=gn;break;case"beforeblur":case"afterblur":l=gn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=hn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=mn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=jn;break;case Cr:case Tr:case Lr:l=bn;break;case jr:l=Pn;break;case"scroll":l=pn;break;case"wheel":l=An;break;case"copy":case"cut":case"paste":l=vn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=Ln}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,h=r;null!==h;){var m=(f=h).stateNode;if(5===f.tag&&null!==m&&(f=m,null!==p&&(null!=(m=Ae(h,p))&&u.push(Qr(h,m,f)))),d)break;h=h.return}0<u.length&&(s=new l(s,c,null,n,o),i.push({event:s,listeners:u}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!vo(c)&&!c[mo])&&(l||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?vo(c):null)&&(c!==(d=Ue(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=hn,m="onMouseLeave",p="onMouseEnter",h="mouse","pointerout"!==e&&"pointerover"!==e||(u=Ln,m="onPointerLeave",p="onPointerEnter",h="pointer"),d=null==l?s:ko(l),f=null==c?s:ko(c),(s=new u(m,h+"leave",l,n,o)).target=d,s.relatedTarget=f,m=null,vo(o)===r&&((u=new u(p,h+"enter",c,n,o)).target=f,u.relatedTarget=d,m=u),d=m,l&&c)e:{for(p=c,h=0,f=u=l;f;f=Vr(f))h++;for(f=0,m=p;m;m=Vr(m))f++;for(;0<h-f;)u=Vr(u),h--;for(;0<f-h;)p=Vr(p),f--;for(;h--;){if(u===p||null!==p&&u===p.alternate)break e;u=Vr(u),p=Vr(p)}u=null}else u=null;null!==l&&Wr(i,s,l,u,!1),null!==c&&null!==d&&Wr(i,d,c,u,!0)}if("select"===(l=(s=r?ko(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var g=Kn;else if(Hn(s))if(Yn)g=ir;else{g=or;var b=rr}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(g=ar);switch(g&&(g=g(e,r))?Qn(i,g,n,o):(b&&b(e,s,r),"focusout"===e&&(b=s._wrapperState)&&b.controlled&&"number"===s.type&&ee(s,"number",s.value)),b=r?ko(r):window,e){case"focusin":(Hn(b)||"true"===b.contentEditable)&&(gr=b,br=r,yr=null);break;case"focusout":yr=br=gr=null;break;case"mousedown":vr=!0;break;case"contextmenu":case"mouseup":case"dragend":vr=!1,wr(i,n,o);break;case"selectionchange":if(mr)break;case"keydown":case"keyup":wr(i,n,o)}var y;if(On)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else Un?Bn(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Fn&&"ko"!==n.locale&&(Un||"onCompositionStart"!==v?"onCompositionEnd"===v&&Un&&(y=en()):(Xt="value"in(Yt=o)?Yt.value:Yt.textContent,Un=!0)),0<(b=Zr(r,v)).length&&(v=new wn(v,e,null,n,o),i.push({event:v,listeners:b}),y?v.data=y:null!==(y=$n(n))&&(v.data=y))),(y=In?function(e,t){switch(e){case"compositionend":return $n(t);case"keypress":return 32!==t.which?null:(zn=!0,Mn);case"textInput":return(e=t.data)===Mn&&zn?null:e;default:return null}}(e,n):function(e,t){if(Un)return"compositionend"===e||!On&&Bn(e,t)?(e=en(),Jt=Xt=Yt=null,Un=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Fn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Zr(r,"onBeforeInput")).length&&(o=new wn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=y))}Mr(i,t)}))}function Qr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Zr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Ae(e,n))&&r.unshift(Qr(e,a,o)),null!=(a=Ae(e,t))&&r.push(Qr(e,a,o))),e=e.return}return r}function Vr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Wr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(null!==l&&l===r)break;5===s.tag&&null!==c&&(s=c,o?null!=(l=Ae(n,a))&&i.unshift(Qr(n,l,s)):o||null!=(l=Ae(n,a))&&i.push(Qr(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Gr=/\r\n?/g,Kr=/\u0000|\uFFFD/g;function Yr(e){return("string"==typeof e?e:""+e).replace(Gr,"\n").replace(Kr,"")}function Xr(e,t,n){if(t=Yr(t),Yr(e)!==t&&n)throw Error(a(425))}function Jr(){}var eo=null,to=null;function no(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ro="function"==typeof setTimeout?setTimeout:void 0,oo="function"==typeof clearTimeout?clearTimeout:void 0,ao="function"==typeof Promise?Promise:void 0,io="function"==typeof queueMicrotask?queueMicrotask:void 0!==ao?function(e){return ao.resolve(null).then(e).catch(so)}:ro;function so(e){setTimeout((function(){throw e}))}function lo(e,t){var n=t,r=0;do{var o=n.nextSibling;if(e.removeChild(n),o&&8===o.nodeType)if("/$"===(n=o.data)){if(0===r)return e.removeChild(o),void Ut(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=o}while(n);Ut(t)}function co(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function uo(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var po=Math.random().toString(36).slice(2),fo="__reactFiber$"+po,ho="__reactProps$"+po,mo="__reactContainer$"+po,go="__reactEvents$"+po,bo="__reactListeners$"+po,yo="__reactHandles$"+po;function vo(e){var t=e[fo];if(t)return t;for(var n=e.parentNode;n;){if(t=n[mo]||n[fo]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=uo(e);null!==e;){if(n=e[fo])return n;e=uo(e)}return t}n=(e=n).parentNode}return null}function wo(e){return!(e=e[fo]||e[mo])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ko(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(a(33))}function xo(e){return e[ho]||null}var So=[],Eo=-1;function _o(e){return{current:e}}function Co(e){0>Eo||(e.current=So[Eo],So[Eo]=null,Eo--)}function To(e,t){Eo++,So[Eo]=e.current,e.current=t}var Lo={},jo=_o(Lo),Po=_o(!1),Ro=Lo;function Ao(e,t){var n=e.type.contextTypes;if(!n)return Lo;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function No(e){return null!=(e=e.childContextTypes)}function Oo(){Co(Po),Co(jo)}function Do(e,t,n){if(jo.current!==Lo)throw Error(a(168));To(jo,t),To(Po,n)}function Io(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var o in r=r.getChildContext())if(!(o in t))throw Error(a(108,q(e)||"Unknown",o));return F({},n,r)}function Fo(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Lo,Ro=jo.current,To(jo,e),To(Po,Po.current),!0}function Mo(e,t,n){var r=e.stateNode;if(!r)throw Error(a(169));n?(e=Io(e,t,Ro),r.__reactInternalMemoizedMergedChildContext=e,Co(Po),Co(jo),To(jo,e)):Co(Po),To(Po,n)}var zo=null,Bo=!1,$o=!1;function Uo(e){null===zo?zo=[e]:zo.push(e)}function qo(){if(!$o&&null!==zo){$o=!0;var e=0,t=vt;try{var n=zo;for(vt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}zo=null,Bo=!1}catch(o){throw null!==zo&&(zo=zo.slice(e+1)),Ve(Je,qo),o}finally{vt=t,$o=!1}}return null}var Ho=[],Qo=0,Zo=null,Vo=0,Wo=[],Go=0,Ko=null,Yo=1,Xo="";function Jo(e,t){Ho[Qo++]=Vo,Ho[Qo++]=Zo,Zo=e,Vo=t}function ea(e,t,n){Wo[Go++]=Yo,Wo[Go++]=Xo,Wo[Go++]=Ko,Ko=e;var r=Yo;e=Xo;var o=32-it(r)-1;r&=~(1<<o),n+=1;var a=32-it(t)+o;if(30<a){var i=o-o%5;a=(r&(1<<i)-1).toString(32),r>>=i,o-=i,Yo=1<<32-it(t)+o|n<<o|r,Xo=a+e}else Yo=1<<a|n<<o|r,Xo=e}function ta(e){null!==e.return&&(Jo(e,1),ea(e,1,0))}function na(e){for(;e===Zo;)Zo=Ho[--Qo],Ho[Qo]=null,Vo=Ho[--Qo],Ho[Qo]=null;for(;e===Ko;)Ko=Wo[--Go],Wo[Go]=null,Xo=Wo[--Go],Wo[Go]=null,Yo=Wo[--Go],Wo[Go]=null}var ra=null,oa=null,aa=!1,ia=null;function sa(e,t){var n=Rc(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function la(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,ra=e,oa=co(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,ra=e,oa=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Ko?{id:Yo,overflow:Xo}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Rc(18,null,null,0)).stateNode=t,n.return=e,e.child=n,ra=e,oa=null,!0);default:return!1}}function ca(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function ua(e){if(aa){var t=oa;if(t){var n=t;if(!la(e,t)){if(ca(e))throw Error(a(418));t=co(n.nextSibling);var r=ra;t&&la(e,t)?sa(r,n):(e.flags=-4097&e.flags|2,aa=!1,ra=e)}}else{if(ca(e))throw Error(a(418));e.flags=-4097&e.flags|2,aa=!1,ra=e}}}function da(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;ra=e}function pa(e){if(e!==ra)return!1;if(!aa)return da(e),aa=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!no(e.type,e.memoizedProps)),t&&(t=oa)){if(ca(e))throw fa(),Error(a(418));for(;t;)sa(e,t),t=co(t.nextSibling)}if(da(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(a(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){oa=co(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}oa=null}}else oa=ra?co(e.stateNode.nextSibling):null;return!0}function fa(){for(var e=oa;e;)e=co(e.nextSibling)}function ha(){oa=ra=null,aa=!1}function ma(e){null===ia?ia=[e]:ia.push(e)}var ga=w.ReactCurrentBatchConfig;function ba(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(a(309));var r=n.stateNode}if(!r)throw Error(a(147,e));var o=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=o.refs;null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(a(284));if(!n._owner)throw Error(a(290,e))}return e}function ya(e,t){throw e=Object.prototype.toString.call(t),Error(a(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function va(e){return(0,e._init)(e._payload)}function wa(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Nc(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Fc(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function c(e,t,n,r){var a=n.type;return a===S?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===a||"object"==typeof a&&null!==a&&a.$$typeof===A&&va(a)===t.type)?((r=o(t,n.props)).ref=ba(e,t,n),r.return=e,r):((r=Oc(n.type,n.key,n.props,null,e.mode,r)).ref=ba(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Mc(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Dc(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Fc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(n=Oc(t.type,t.key,t.props,null,e.mode,n)).ref=ba(e,null,t),n.return=e,n;case x:return(t=Mc(t,e.mode,n)).return=e,t;case A:return p(e,(0,t._init)(t._payload),n)}if(te(t)||D(t))return(t=Dc(t,e.mode,n,null)).return=e,t;ya(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==o?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return n.key===o?c(e,t,n,r):null;case x:return n.key===o?u(e,t,n,r):null;case A:return f(e,t,(o=n._init)(n._payload),r)}if(te(n)||D(n))return null!==o?null:d(e,t,n,r,null);ya(e,n)}return null}function h(e,t,n,r,o){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o);case x:return u(t,e=e.get(null===r.key?n:r.key)||null,r,o);case A:return h(e,t,n,(0,r._init)(r._payload),o)}if(te(r)||D(r))return d(t,e=e.get(n)||null,r,o,null);ya(t,r)}return null}function m(o,a,s,l){for(var c=null,u=null,d=a,m=a=0,g=null;null!==d&&m<s.length;m++){d.index>m?(g=d,d=null):g=d.sibling;var b=f(o,d,s[m],l);if(null===b){null===d&&(d=g);break}e&&d&&null===b.alternate&&t(o,d),a=i(b,a,m),null===u?c=b:u.sibling=b,u=b,d=g}if(m===s.length)return n(o,d),aa&&Jo(o,m),c;if(null===d){for(;m<s.length;m++)null!==(d=p(o,s[m],l))&&(a=i(d,a,m),null===u?c=d:u.sibling=d,u=d);return aa&&Jo(o,m),c}for(d=r(o,d);m<s.length;m++)null!==(g=h(d,o,m,s[m],l))&&(e&&null!==g.alternate&&d.delete(null===g.key?m:g.key),a=i(g,a,m),null===u?c=g:u.sibling=g,u=g);return e&&d.forEach((function(e){return t(o,e)})),aa&&Jo(o,m),c}function g(o,s,l,c){var u=D(l);if("function"!=typeof u)throw Error(a(150));if(null==(l=u.call(l)))throw Error(a(151));for(var d=u=null,m=s,g=s=0,b=null,y=l.next();null!==m&&!y.done;g++,y=l.next()){m.index>g?(b=m,m=null):b=m.sibling;var v=f(o,m,y.value,c);if(null===v){null===m&&(m=b);break}e&&m&&null===v.alternate&&t(o,m),s=i(v,s,g),null===d?u=v:d.sibling=v,d=v,m=b}if(y.done)return n(o,m),aa&&Jo(o,g),u;if(null===m){for(;!y.done;g++,y=l.next())null!==(y=p(o,y.value,c))&&(s=i(y,s,g),null===d?u=y:d.sibling=y,d=y);return aa&&Jo(o,g),u}for(m=r(o,m);!y.done;g++,y=l.next())null!==(y=h(m,o,g,y.value,c))&&(e&&null!==y.alternate&&m.delete(null===y.key?g:y.key),s=i(y,s,g),null===d?u=y:d.sibling=y,d=y);return e&&m.forEach((function(e){return t(o,e)})),aa&&Jo(o,g),u}return function e(r,a,i,l){if("object"==typeof i&&null!==i&&i.type===S&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case k:e:{for(var c=i.key,u=a;null!==u;){if(u.key===c){if((c=i.type)===S){if(7===u.tag){n(r,u.sibling),(a=o(u,i.props.children)).return=r,r=a;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===A&&va(c)===u.type){n(r,u.sibling),(a=o(u,i.props)).ref=ba(r,u,i),a.return=r,r=a;break e}n(r,u);break}t(r,u),u=u.sibling}i.type===S?((a=Dc(i.props.children,r.mode,l,i.key)).return=r,r=a):((l=Oc(i.type,i.key,i.props,null,r.mode,l)).ref=ba(r,a,i),l.return=r,r=l)}return s(r);case x:e:{for(u=i.key;null!==a;){if(a.key===u){if(4===a.tag&&a.stateNode.containerInfo===i.containerInfo&&a.stateNode.implementation===i.implementation){n(r,a.sibling),(a=o(a,i.children||[])).return=r,r=a;break e}n(r,a);break}t(r,a),a=a.sibling}(a=Mc(i,r.mode,l)).return=r,r=a}return s(r);case A:return e(r,a,(u=i._init)(i._payload),l)}if(te(i))return m(r,a,i,l);if(D(i))return g(r,a,i,l);ya(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==a&&6===a.tag?(n(r,a.sibling),(a=o(a,i)).return=r,r=a):(n(r,a),(a=Fc(i,r.mode,l)).return=r,r=a),s(r)):n(r,a)}}var ka=wa(!0),xa=wa(!1),Sa=_o(null),Ea=null,_a=null,Ca=null;function Ta(){Ca=_a=Ea=null}function La(e){var t=Sa.current;Co(Sa),e._currentValue=t}function ja(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Pa(e,t){Ea=e,Ca=_a=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(vs=!0),e.firstContext=null)}function Ra(e){var t=e._currentValue;if(Ca!==e)if(e={context:e,memoizedValue:t,next:null},null===_a){if(null===Ea)throw Error(a(308));_a=e,Ea.dependencies={lanes:0,firstContext:e}}else _a=_a.next=e;return t}var Aa=null;function Na(e){null===Aa?Aa=[e]:Aa.push(e)}function Oa(e,t,n,r){var o=t.interleaved;return null===o?(n.next=n,Na(t)):(n.next=o.next,o.next=n),t.interleaved=n,Da(e,r)}function Da(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Ia=!1;function Fa(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Ma(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function za(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Ba(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&Ll)){var o=r.pending;return null===o?t.next=t:(t.next=o.next,o.next=t),r.pending=t,Da(e,n)}return null===(o=r.interleaved)?(t.next=t,Na(r)):(t.next=o.next,o.next=t),r.interleaved=t,Da(e,n)}function $a(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}function Ua(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function qa(e,t,n,r){var o=e.updateQueue;Ia=!1;var a=o.firstBaseUpdate,i=o.lastBaseUpdate,s=o.shared.pending;if(null!==s){o.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?a=c:i.next=c,i=l;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l))}if(null!==a){var d=o.baseState;for(i=0,u=c=l=null,s=a;;){var p=s.lane,f=s.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var h=e,m=s;switch(p=t,f=n,m.tag){case 1:if("function"==typeof(h=m.payload)){d=h.call(f,d,p);break e}d=h;break e;case 3:h.flags=-65537&h.flags|128;case 0:if(null==(p="function"==typeof(h=m.payload)?h.call(f,d,p):h))break e;d=F({},d,p);break e;case 2:Ia=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=o.effects)?o.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,i|=p;if(null===(s=s.next)){if(null===(s=o.shared.pending))break;s=(p=s).next,p.next=null,o.lastBaseUpdate=p,o.shared.pending=null}}if(null===u&&(l=d),o.baseState=l,o.firstBaseUpdate=c,o.lastBaseUpdate=u,null!==(t=o.shared.interleaved)){o=t;do{i|=o.lane,o=o.next}while(o!==t)}else null===a&&(o.shared.lanes=0);Il|=i,e.lanes=i,e.memoizedState=d}}function Ha(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(a(191,o));o.call(r)}}}var Qa={},Za=_o(Qa),Va=_o(Qa),Wa=_o(Qa);function Ga(e){if(e===Qa)throw Error(a(174));return e}function Ka(e,t){switch(To(Wa,t),To(Va,e),To(Za,Qa),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Co(Za),To(Za,t)}function Ya(){Co(Za),Co(Va),Co(Wa)}function Xa(e){Ga(Wa.current);var t=Ga(Za.current),n=le(t,e.type);t!==n&&(To(Va,e),To(Za,n))}function Ja(e){Va.current===e&&(Co(Za),Co(Va))}var ei=_o(0);function ti(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ni=[];function ri(){for(var e=0;e<ni.length;e++)ni[e]._workInProgressVersionPrimary=null;ni.length=0}var oi=w.ReactCurrentDispatcher,ai=w.ReactCurrentBatchConfig,ii=0,si=null,li=null,ci=null,ui=!1,di=!1,pi=0,fi=0;function hi(){throw Error(a(321))}function mi(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!sr(e[n],t[n]))return!1;return!0}function gi(e,t,n,r,o,i){if(ii=i,si=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,oi.current=null===e||null===e.memoizedState?Ji:es,e=n(r,o),di){i=0;do{if(di=!1,pi=0,25<=i)throw Error(a(301));i+=1,ci=li=null,t.updateQueue=null,oi.current=ts,e=n(r,o)}while(di)}if(oi.current=Xi,t=null!==li&&null!==li.next,ii=0,ci=li=si=null,ui=!1,t)throw Error(a(300));return e}function bi(){var e=0!==pi;return pi=0,e}function yi(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ci?si.memoizedState=ci=e:ci=ci.next=e,ci}function vi(){if(null===li){var e=si.alternate;e=null!==e?e.memoizedState:null}else e=li.next;var t=null===ci?si.memoizedState:ci.next;if(null!==t)ci=t,li=e;else{if(null===e)throw Error(a(310));e={memoizedState:(li=e).memoizedState,baseState:li.baseState,baseQueue:li.baseQueue,queue:li.queue,next:null},null===ci?si.memoizedState=ci=e:ci=ci.next=e}return ci}function wi(e,t){return"function"==typeof t?t(e):t}function ki(e){var t=vi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=li,o=r.baseQueue,i=n.pending;if(null!==i){if(null!==o){var s=o.next;o.next=i.next,i.next=s}r.baseQueue=o=i,n.pending=null}if(null!==o){i=o.next,r=r.baseState;var l=s=null,c=null,u=i;do{var d=u.lane;if((ii&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=p,s=r):c=c.next=p,si.lanes|=d,Il|=d}u=u.next}while(null!==u&&u!==i);null===c?s=r:c.next=l,sr(r,t.memoizedState)||(vs=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){o=e;do{i=o.lane,si.lanes|=i,Il|=i,o=o.next}while(o!==e)}else null===o&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function xi(e){var t=vi(),n=t.queue;if(null===n)throw Error(a(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,i=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{i=e(i,s.action),s=s.next}while(s!==o);sr(i,t.memoizedState)||(vs=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Si(){}function Ei(e,t){var n=si,r=vi(),o=t(),i=!sr(r.memoizedState,o);if(i&&(r.memoizedState=o,vs=!0),r=r.queue,Ii(Ti.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==ci&&1&ci.memoizedState.tag){if(n.flags|=2048,Ri(9,Ci.bind(null,n,r,o,t),void 0,null),null===jl)throw Error(a(349));0!=(30&ii)||_i(n,t,o)}return o}function _i(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=si.updateQueue)?(t={lastEffect:null,stores:null},si.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ci(e,t,n,r){t.value=n,t.getSnapshot=r,Li(t)&&ji(e)}function Ti(e,t,n){return n((function(){Li(t)&&ji(e)}))}function Li(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sr(e,n)}catch(r){return!0}}function ji(e){var t=Da(e,1);null!==t&&nc(t,e,1,-1)}function Pi(e){var t=yi();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:wi,lastRenderedState:e},t.queue=e,e=e.dispatch=Wi.bind(null,si,e),[t.memoizedState,e]}function Ri(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=si.updateQueue)?(t={lastEffect:null,stores:null},si.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function Ai(){return vi().memoizedState}function Ni(e,t,n,r){var o=yi();si.flags|=e,o.memoizedState=Ri(1|t,n,void 0,void 0===r?null:r)}function Oi(e,t,n,r){var o=vi();r=void 0===r?null:r;var a=void 0;if(null!==li){var i=li.memoizedState;if(a=i.destroy,null!==r&&mi(r,i.deps))return void(o.memoizedState=Ri(t,n,a,r))}si.flags|=e,o.memoizedState=Ri(1|t,n,a,r)}function Di(e,t){return Ni(8390656,8,e,t)}function Ii(e,t){return Oi(2048,8,e,t)}function Fi(e,t){return Oi(4,2,e,t)}function Mi(e,t){return Oi(4,4,e,t)}function zi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Bi(e,t,n){return n=null!=n?n.concat([e]):null,Oi(4,4,zi.bind(null,t,e),n)}function $i(){}function Ui(e,t){var n=vi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&mi(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function qi(e,t){var n=vi();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&mi(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Hi(e,t,n){return 0==(21&ii)?(e.baseState&&(e.baseState=!1,vs=!0),e.memoizedState=n):(sr(n,t)||(n=mt(),si.lanes|=n,Il|=n,e.baseState=!0),t)}function Qi(e,t){var n=vt;vt=0!==n&&4>n?n:4,e(!0);var r=ai.transition;ai.transition={};try{e(!1),t()}finally{vt=n,ai.transition=r}}function Zi(){return vi().memoizedState}function Vi(e,t,n){var r=tc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Gi(e))Ki(t,n);else if(null!==(n=Oa(e,t,n,r))){nc(n,e,r,ec()),Yi(n,t,r)}}function Wi(e,t,n){var r=tc(e),o={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Gi(e))Ki(t,o);else{var a=e.alternate;if(0===e.lanes&&(null===a||0===a.lanes)&&null!==(a=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=a(i,n);if(o.hasEagerState=!0,o.eagerState=s,sr(s,i)){var l=t.interleaved;return null===l?(o.next=o,Na(t)):(o.next=l.next,l.next=o),void(t.interleaved=o)}}catch(c){}null!==(n=Oa(e,t,o,r))&&(nc(n,e,r,o=ec()),Yi(n,t,r))}}function Gi(e){var t=e.alternate;return e===si||null!==t&&t===si}function Ki(e,t){di=ui=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Yi(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var Xi={readContext:Ra,useCallback:hi,useContext:hi,useEffect:hi,useImperativeHandle:hi,useInsertionEffect:hi,useLayoutEffect:hi,useMemo:hi,useReducer:hi,useRef:hi,useState:hi,useDebugValue:hi,useDeferredValue:hi,useTransition:hi,useMutableSource:hi,useSyncExternalStore:hi,useId:hi,unstable_isNewReconciler:!1},Ji={readContext:Ra,useCallback:function(e,t){return yi().memoizedState=[e,void 0===t?null:t],e},useContext:Ra,useEffect:Di,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,Ni(4194308,4,zi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Ni(4194308,4,e,t)},useInsertionEffect:function(e,t){return Ni(4,2,e,t)},useMemo:function(e,t){var n=yi();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=yi();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Vi.bind(null,si,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},yi().memoizedState=e},useState:Pi,useDebugValue:$i,useDeferredValue:function(e){return yi().memoizedState=e},useTransition:function(){var e=Pi(!1),t=e[0];return e=Qi.bind(null,e[1]),yi().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=si,o=yi();if(aa){if(void 0===n)throw Error(a(407));n=n()}else{if(n=t(),null===jl)throw Error(a(349));0!=(30&ii)||_i(r,t,n)}o.memoizedState=n;var i={value:n,getSnapshot:t};return o.queue=i,Di(Ti.bind(null,r,i,e),[e]),r.flags|=2048,Ri(9,Ci.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=yi(),t=jl.identifierPrefix;if(aa){var n=Xo;t=":"+t+"R"+(n=(Yo&~(1<<32-it(Yo)-1)).toString(32)+n),0<(n=pi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=fi++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},es={readContext:Ra,useCallback:Ui,useContext:Ra,useEffect:Ii,useImperativeHandle:Bi,useInsertionEffect:Fi,useLayoutEffect:Mi,useMemo:qi,useReducer:ki,useRef:Ai,useState:function(){return ki(wi)},useDebugValue:$i,useDeferredValue:function(e){return Hi(vi(),li.memoizedState,e)},useTransition:function(){return[ki(wi)[0],vi().memoizedState]},useMutableSource:Si,useSyncExternalStore:Ei,useId:Zi,unstable_isNewReconciler:!1},ts={readContext:Ra,useCallback:Ui,useContext:Ra,useEffect:Ii,useImperativeHandle:Bi,useInsertionEffect:Fi,useLayoutEffect:Mi,useMemo:qi,useReducer:xi,useRef:Ai,useState:function(){return xi(wi)},useDebugValue:$i,useDeferredValue:function(e){var t=vi();return null===li?t.memoizedState=e:Hi(t,li.memoizedState,e)},useTransition:function(){return[xi(wi)[0],vi().memoizedState]},useMutableSource:Si,useSyncExternalStore:Ei,useId:Zi,unstable_isNewReconciler:!1};function ns(e,t){if(e&&e.defaultProps){for(var n in t=F({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}function rs(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:F({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var os={isMounted:function(e){return!!(e=e._reactInternals)&&Ue(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=ec(),o=tc(e),a=za(r,o);a.payload=t,null!=n&&(a.callback=n),null!==(t=Ba(e,a,o))&&(nc(t,e,o,r),$a(t,e,o))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=ec(),o=tc(e),a=za(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),null!==(t=Ba(e,a,o))&&(nc(t,e,o,r),$a(t,e,o))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=ec(),r=tc(e),o=za(n,r);o.tag=2,null!=t&&(o.callback=t),null!==(t=Ba(e,o,r))&&(nc(t,e,r,n),$a(t,e,r))}};function as(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(o,a))}function is(e,t,n){var r=!1,o=Lo,a=t.contextType;return"object"==typeof a&&null!==a?a=Ra(a):(o=No(t)?Ro:jo.current,a=(r=null!=(r=t.contextTypes))?Ao(e,o):Lo),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=os,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function ss(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&os.enqueueReplaceState(t,t.state,null)}function ls(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs={},Fa(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=Ra(a):(a=No(t)?Ro:jo.current,o.context=Ao(e,a)),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(rs(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&os.enqueueReplaceState(o,o.state,null),qa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4194308)}function cs(e,t){try{var n="",r=t;do{n+=$(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o,digest:null}}function us(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function ds(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var ps="function"==typeof WeakMap?WeakMap:Map;function fs(e,t,n){(n=za(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Hl||(Hl=!0,Ql=r),ds(0,t)},n}function hs(e,t,n){(n=za(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return r(o)},n.callback=function(){ds(0,t)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){ds(0,t),"function"!=typeof r&&(null===Zl?Zl=new Set([this]):Zl.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function ms(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new ps;var o=new Set;r.set(t,o)}else void 0===(o=r.get(t))&&(o=new Set,r.set(t,o));o.has(n)||(o.add(n),e=_c.bind(null,e,t,n),t.then(e,e))}function gs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function bs(e,t,n,r,o){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=za(-1,1)).tag=2,Ba(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var ys=w.ReactCurrentOwner,vs=!1;function ws(e,t,n,r){t.child=null===e?xa(t,null,n,r):ka(t,e.child,n,r)}function ks(e,t,n,r,o){n=n.render;var a=t.ref;return Pa(t,o),r=gi(e,t,n,r,a,o),n=bi(),null===e||vs?(aa&&n&&ta(t),t.flags|=1,ws(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Hs(e,t,o))}function xs(e,t,n,r,o){if(null===e){var a=n.type;return"function"!=typeof a||Ac(a)||void 0!==a.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Oc(n.type,null,r,t,t.mode,o)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=a,Ss(e,t,a,r,o))}if(a=e.child,0==(e.lanes&o)){var i=a.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(i,r)&&e.ref===t.ref)return Hs(e,t,o)}return t.flags|=1,(e=Nc(a,r)).ref=t.ref,e.return=t,t.child=e}function Ss(e,t,n,r,o){if(null!==e){var a=e.memoizedProps;if(lr(a,r)&&e.ref===t.ref){if(vs=!1,t.pendingProps=r=a,0==(e.lanes&o))return t.lanes=e.lanes,Hs(e,t,o);0!=(131072&e.flags)&&(vs=!0)}}return Cs(e,t,n,r,o)}function Es(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},To(Nl,Al),Al|=n;else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,To(Nl,Al),Al|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==a?a.baseLanes:n,To(Nl,Al),Al|=r}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,To(Nl,Al),Al|=r;return ws(e,t,o,n),t.child}function _s(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Cs(e,t,n,r,o){var a=No(n)?Ro:jo.current;return a=Ao(t,a),Pa(t,o),n=gi(e,t,n,r,a,o),r=bi(),null===e||vs?(aa&&r&&ta(t),t.flags|=1,ws(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,Hs(e,t,o))}function Ts(e,t,n,r,o){if(No(n)){var a=!0;Fo(t)}else a=!1;if(Pa(t,o),null===t.stateNode)qs(e,t),is(t,n,r),ls(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;"object"==typeof c&&null!==c?c=Ra(c):c=Ao(t,c=No(n)?Ro:jo.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&ss(t,i,r,c),Ia=!1;var p=t.memoizedState;i.state=p,qa(t,r,i,o),l=t.memoizedState,s!==r||p!==l||Po.current||Ia?("function"==typeof u&&(rs(t,n,u,r),l=t.memoizedState),(s=Ia||as(t,n,s,r,p,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Ma(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:ns(t.type,s),i.props=c,d=t.pendingProps,p=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=Ra(l):l=Ao(t,l=No(n)?Ro:jo.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&ss(t,i,r,l),Ia=!1,p=t.memoizedState,i.state=p,qa(t,r,i,o);var h=t.memoizedState;s!==d||p!==h||Po.current||Ia?("function"==typeof f&&(rs(t,n,f,r),h=t.memoizedState),(c=Ia||as(t,n,c,r,p,h,l)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,h,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,h,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=h),i.props=r,i.state=h,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return Ls(e,t,n,r,a,o)}function Ls(e,t,n,r,o,a){_s(e,t);var i=0!=(128&t.flags);if(!r&&!i)return o&&Mo(t,n,!1),Hs(e,t,a);r=t.stateNode,ys.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=ka(t,e.child,null,a),t.child=ka(t,null,s,a)):ws(e,t,s,a),t.memoizedState=r.state,o&&Mo(t,n,!0),t.child}function js(e){var t=e.stateNode;t.pendingContext?Do(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Do(0,t.context,!1),Ka(e,t.containerInfo)}function Ps(e,t,n,r,o){return ha(),ma(o),t.flags|=256,ws(e,t,n,r),t.child}var Rs,As,Ns,Os,Ds={dehydrated:null,treeContext:null,retryLane:0};function Is(e){return{baseLanes:e,cachePool:null,transitions:null}}function Fs(e,t,n){var r,o=t.pendingProps,i=ei.current,s=!1,l=0!=(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),To(ei,1&i),null===e)return ua(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=o.children,e=o.fallback,s?(o=t.mode,s=t.child,l={mode:"hidden",children:l},0==(1&o)&&null!==s?(s.childLanes=0,s.pendingProps=l):s=Ic(l,o,0,null),e=Dc(e,o,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Is(n),t.memoizedState=Ds,e):Ms(t,l));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,o,i,s){if(n)return 256&t.flags?(t.flags&=-257,zs(e,t,s,r=us(Error(a(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,o=t.mode,r=Ic({mode:"visible",children:r.children},o,0,null),(i=Dc(i,o,s,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&ka(t,e.child,null,s),t.child.memoizedState=Is(s),t.memoizedState=Ds,i);if(0==(1&t.mode))return zs(e,t,s,null);if("$!"===o.data){if(r=o.nextSibling&&o.nextSibling.dataset)var l=r.dgst;return r=l,zs(e,t,s,r=us(i=Error(a(419)),r,void 0))}if(l=0!=(s&e.childLanes),vs||l){if(null!==(r=jl)){switch(s&-s){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}0!==(o=0!=(o&(r.suspendedLanes|s))?0:o)&&o!==i.retryLane&&(i.retryLane=o,Da(e,o),nc(r,e,o,-1))}return mc(),zs(e,t,s,r=us(Error(a(421))))}return"$?"===o.data?(t.flags|=128,t.child=e.child,t=Tc.bind(null,e),o._reactRetry=t,null):(e=i.treeContext,oa=co(o.nextSibling),ra=t,aa=!0,ia=null,null!==e&&(Wo[Go++]=Yo,Wo[Go++]=Xo,Wo[Go++]=Ko,Yo=e.id,Xo=e.overflow,Ko=t),t=Ms(t,r.children),t.flags|=4096,t)}(e,t,l,o,r,i,n);if(s){s=o.fallback,l=t.mode,r=(i=e.child).sibling;var c={mode:"hidden",children:o.children};return 0==(1&l)&&t.child!==i?((o=t.child).childLanes=0,o.pendingProps=c,t.deletions=null):(o=Nc(i,c)).subtreeFlags=14680064&i.subtreeFlags,null!==r?s=Nc(r,s):(s=Dc(s,l,n,null)).flags|=2,s.return=t,o.return=t,o.sibling=s,t.child=o,o=s,s=t.child,l=null===(l=e.child.memoizedState)?Is(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~n,t.memoizedState=Ds,o}return e=(s=e.child).sibling,o=Nc(s,{mode:"visible",children:o.children}),0==(1&t.mode)&&(o.lanes=n),o.return=t,o.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=o,t.memoizedState=null,o}function Ms(e,t){return(t=Ic({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function zs(e,t,n,r){return null!==r&&ma(r),ka(t,e.child,null,n),(e=Ms(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function Bs(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),ja(e.return,t,n)}function $s(e,t,n,r,o){var a=e.memoizedState;null===a?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o}:(a.isBackwards=t,a.rendering=null,a.renderingStartTime=0,a.last=r,a.tail=n,a.tailMode=o)}function Us(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(ws(e,t,r.children,n),0!=(2&(r=ei.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&Bs(e,n,t);else if(19===e.tag)Bs(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(To(ei,r),0==(1&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===ti(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),$s(t,!1,o,n,a);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===ti(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}$s(t,!0,n,null,a);break;case"together":$s(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function qs(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Hs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Il|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(a(153));if(null!==t.child){for(n=Nc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Nc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Qs(e,t){if(!aa)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Zs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=14680064&o.subtreeFlags,r|=14680064&o.flags,o.return=e,o=o.sibling;else for(o=e.child;null!==o;)n|=o.lanes|o.childLanes,r|=o.subtreeFlags,r|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Vs(e,t,n){var r=t.pendingProps;switch(na(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Zs(t),null;case 1:case 17:return No(t.type)&&Oo(),Zs(t),null;case 3:return r=t.stateNode,Ya(),Co(Po),Co(jo),ri(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(pa(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==ia&&(ic(ia),ia=null))),As(e,t),Zs(t),null;case 5:Ja(t);var o=Ga(Wa.current);if(n=t.type,null!==e&&null!=t.stateNode)Ns(e,t,n,r,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(a(166));return Zs(t),null}if(e=Ga(Za.current),pa(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[fo]=t,r[ho]=i,e=0!=(1&t.mode),n){case"dialog":zr("cancel",r),zr("close",r);break;case"iframe":case"object":case"embed":zr("load",r);break;case"video":case"audio":for(o=0;o<Dr.length;o++)zr(Dr[o],r);break;case"source":zr("error",r);break;case"img":case"image":case"link":zr("error",r),zr("load",r);break;case"details":zr("toggle",r);break;case"input":K(r,i),zr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},zr("invalid",r);break;case"textarea":oe(r,i),zr("invalid",r)}for(var l in ye(n,i),o=null,i)if(i.hasOwnProperty(l)){var c=i[l];"children"===l?"string"==typeof c?r.textContent!==c&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,c,e),o=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,c,e),o=["children",""+c]):s.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&zr("scroll",r)}switch(n){case"input":Z(r),J(r,i,!0);break;case"textarea":Z(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=Jr)}r=o,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===o.nodeType?o:o.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=se(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[fo]=t,e[ho]=r,Rs(e,t,!1,!1),t.stateNode=e;e:{switch(l=ve(n,r),n){case"dialog":zr("cancel",e),zr("close",e),o=r;break;case"iframe":case"object":case"embed":zr("load",e),o=r;break;case"video":case"audio":for(o=0;o<Dr.length;o++)zr(Dr[o],e);o=r;break;case"source":zr("error",e),o=r;break;case"img":case"image":case"link":zr("error",e),zr("load",e),o=r;break;case"details":zr("toggle",e),o=r;break;case"input":K(e,r),o=G(e,r),zr("invalid",e);break;case"option":default:o=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},o=F({},r,{value:void 0}),zr("invalid",e);break;case"textarea":oe(e,r),o=re(e,r),zr("invalid",e)}for(i in ye(n,o),c=o)if(c.hasOwnProperty(i)){var u=c[i];"style"===i?ge(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===i?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(s.hasOwnProperty(i)?null!=u&&"onScroll"===i&&zr("scroll",e):null!=u&&v(e,i,u,l))}switch(n){case"input":Z(e),J(e,r,!1);break;case"textarea":Z(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+H(r.value));break;case"select":e.multiple=!!r.multiple,null!=(i=r.value)?ne(e,!!r.multiple,i,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof o.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Zs(t),null;case 6:if(e&&null!=t.stateNode)Os(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(a(166));if(n=Ga(Wa.current),Ga(Za.current),pa(t)){if(r=t.stateNode,n=t.memoizedProps,r[fo]=t,(i=r.nodeValue!==n)&&null!==(e=ra))switch(e.tag){case 3:Xr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Xr(r.nodeValue,n,0!=(1&e.mode))}i&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[fo]=t,t.stateNode=r}return Zs(t),null;case 13:if(Co(ei),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(aa&&null!==oa&&0!=(1&t.mode)&&0==(128&t.flags))fa(),ha(),t.flags|=98560,i=!1;else if(i=pa(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(a(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(a(317));i[fo]=t}else ha(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Zs(t),i=!1}else null!==ia&&(ic(ia),ia=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&ei.current)?0===Ol&&(Ol=3):mc())),null!==t.updateQueue&&(t.flags|=4),Zs(t),null);case 4:return Ya(),As(e,t),null===e&&Ur(t.stateNode.containerInfo),Zs(t),null;case 10:return La(t.type._context),Zs(t),null;case 19:if(Co(ei),null===(i=t.memoizedState))return Zs(t),null;if(r=0!=(128&t.flags),null===(l=i.rendering))if(r)Qs(i,!1);else{if(0!==Ol||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(l=ti(e))){for(t.flags|=128,Qs(i,!1),null!==(r=l.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(i=n).flags&=14680066,null===(l=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=l.childLanes,i.lanes=l.lanes,i.child=l.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=l.memoizedProps,i.memoizedState=l.memoizedState,i.updateQueue=l.updateQueue,i.type=l.type,e=l.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return To(ei,1&ei.current|2),t.child}e=e.sibling}null!==i.tail&&Ye()>Ul&&(t.flags|=128,r=!0,Qs(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ti(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Qs(i,!0),null===i.tail&&"hidden"===i.tailMode&&!l.alternate&&!aa)return Zs(t),null}else 2*Ye()-i.renderingStartTime>Ul&&1073741824!==n&&(t.flags|=128,r=!0,Qs(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=i.last)?n.sibling=l:t.child=l,i.last=l)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Ye(),t.sibling=null,n=ei.current,To(ei,r?1&n|2:1&n),t):(Zs(t),null);case 22:case 23:return dc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Al)&&(Zs(t),6&t.subtreeFlags&&(t.flags|=8192)):Zs(t),null;case 24:case 25:return null}throw Error(a(156,t.tag))}function Ws(e,t){switch(na(t),t.tag){case 1:return No(t.type)&&Oo(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return Ya(),Co(Po),Co(jo),ri(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return Ja(t),null;case 13:if(Co(ei),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(a(340));ha()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Co(ei),null;case 4:return Ya(),null;case 10:return La(t.type._context),null;case 22:case 23:return dc(),null;default:return null}}Rs=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},As=function(){},Ns=function(e,t,n,r){var o=e.memoizedProps;if(o!==r){e=t.stateNode,Ga(Za.current);var a,i=null;switch(n){case"input":o=G(e,o),r=G(e,r),i=[];break;case"select":o=F({},o,{value:void 0}),r=F({},r,{value:void 0}),i=[];break;case"textarea":o=re(e,o),r=re(e,r),i=[];break;default:"function"!=typeof o.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ye(n,r),n=null,o)if(!r.hasOwnProperty(u)&&o.hasOwnProperty(u)&&null!=o[u])if("style"===u){var l=o[u];for(a in l)l.hasOwnProperty(a)&&(n||(n={}),n[a]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(s.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=o?o[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(a in l)!l.hasOwnProperty(a)||c&&c.hasOwnProperty(a)||(n||(n={}),n[a]="");for(a in c)c.hasOwnProperty(a)&&l[a]!==c[a]&&(n||(n={}),n[a]=c[a])}else n||(i||(i=[]),i.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(i=i||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(i=i||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(s.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&zr("scroll",e),i||l===c||(i=[])):(i=i||[]).push(u,c))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Os=function(e,t,n,r){n!==r&&(t.flags|=4)};var Gs=!1,Ks=!1,Ys="function"==typeof WeakSet?WeakSet:Set,Xs=null;function Js(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){Ec(e,t,r)}else n.current=null}function el(e,t,n){try{n()}catch(r){Ec(e,t,r)}}var tl=!1;function nl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var o=r=r.next;do{if((o.tag&e)===e){var a=o.destroy;o.destroy=void 0,void 0!==a&&el(t,n,a)}o=o.next}while(o!==r)}}function rl(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ol(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function al(e){var t=e.alternate;null!==t&&(e.alternate=null,al(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fo],delete t[ho],delete t[go],delete t[bo],delete t[yo])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function il(e){return 5===e.tag||3===e.tag||4===e.tag}function sl(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||il(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function ll(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(ll(e,t,n),e=e.sibling;null!==e;)ll(e,t,n),e=e.sibling}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}var ul=null,dl=!1;function pl(e,t,n){for(n=n.child;null!==n;)fl(e,t,n),n=n.sibling}function fl(e,t,n){if(at&&"function"==typeof at.onCommitFiberUnmount)try{at.onCommitFiberUnmount(ot,n)}catch(s){}switch(n.tag){case 5:Ks||Js(n,t);case 6:var r=ul,o=dl;ul=null,pl(e,t,n),dl=o,null!==(ul=r)&&(dl?(e=ul,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):ul.removeChild(n.stateNode));break;case 18:null!==ul&&(dl?(e=ul,n=n.stateNode,8===e.nodeType?lo(e.parentNode,n):1===e.nodeType&&lo(e,n),Ut(e)):lo(ul,n.stateNode));break;case 4:r=ul,o=dl,ul=n.stateNode.containerInfo,dl=!0,pl(e,t,n),ul=r,dl=o;break;case 0:case 11:case 14:case 15:if(!Ks&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){o=r=r.next;do{var a=o,i=a.destroy;a=a.tag,void 0!==i&&(0!=(2&a)||0!=(4&a))&&el(n,t,i),o=o.next}while(o!==r)}pl(e,t,n);break;case 1:if(!Ks&&(Js(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){Ec(n,t,s)}pl(e,t,n);break;case 21:pl(e,t,n);break;case 22:1&n.mode?(Ks=(r=Ks)||null!==n.memoizedState,pl(e,t,n),Ks=r):pl(e,t,n);break;default:pl(e,t,n)}}function hl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Ys),t.forEach((function(t){var r=Lc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function ml(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var o=n[r];try{var i=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 5:ul=l.stateNode,dl=!1;break e;case 3:case 4:ul=l.stateNode.containerInfo,dl=!0;break e}l=l.return}if(null===ul)throw Error(a(160));fl(i,s,o),ul=null,dl=!1;var c=o.alternate;null!==c&&(c.return=null),o.return=null}catch(u){Ec(o,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)gl(t,e),t=t.sibling}function gl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(ml(t,e),bl(e),4&r){try{nl(3,e,e.return),rl(3,e)}catch(g){Ec(e,e.return,g)}try{nl(5,e,e.return)}catch(g){Ec(e,e.return,g)}}break;case 1:ml(t,e),bl(e),512&r&&null!==n&&Js(n,n.return);break;case 5:if(ml(t,e),bl(e),512&r&&null!==n&&Js(n,n.return),32&e.flags){var o=e.stateNode;try{pe(o,"")}catch(g){Ec(e,e.return,g)}}if(4&r&&null!=(o=e.stateNode)){var i=e.memoizedProps,s=null!==n?n.memoizedProps:i,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===i.type&&null!=i.name&&Y(o,i),ve(l,s);var u=ve(l,i);for(s=0;s<c.length;s+=2){var d=c[s],p=c[s+1];"style"===d?ge(o,p):"dangerouslySetInnerHTML"===d?de(o,p):"children"===d?pe(o,p):v(o,d,p,u)}switch(l){case"input":X(o,i);break;case"textarea":ae(o,i);break;case"select":var f=o._wrapperState.wasMultiple;o._wrapperState.wasMultiple=!!i.multiple;var h=i.value;null!=h?ne(o,!!i.multiple,h,!1):f!==!!i.multiple&&(null!=i.defaultValue?ne(o,!!i.multiple,i.defaultValue,!0):ne(o,!!i.multiple,i.multiple?[]:"",!1))}o[ho]=i}catch(g){Ec(e,e.return,g)}}break;case 6:if(ml(t,e),bl(e),4&r){if(null===e.stateNode)throw Error(a(162));o=e.stateNode,i=e.memoizedProps;try{o.nodeValue=i}catch(g){Ec(e,e.return,g)}}break;case 3:if(ml(t,e),bl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Ut(t.containerInfo)}catch(g){Ec(e,e.return,g)}break;case 4:default:ml(t,e),bl(e);break;case 13:ml(t,e),bl(e),8192&(o=e.child).flags&&(i=null!==o.memoizedState,o.stateNode.isHidden=i,!i||null!==o.alternate&&null!==o.alternate.memoizedState||($l=Ye())),4&r&&hl(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Ks=(u=Ks)||d,ml(t,e),Ks=u):ml(t,e),bl(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&0!=(1&e.mode))for(Xs=e,d=e.child;null!==d;){for(p=Xs=d;null!==Xs;){switch(h=(f=Xs).child,f.tag){case 0:case 11:case 14:case 15:nl(4,f,f.return);break;case 1:Js(f,f.return);var m=f.stateNode;if("function"==typeof m.componentWillUnmount){r=f,n=f.return;try{t=r,m.props=t.memoizedProps,m.state=t.memoizedState,m.componentWillUnmount()}catch(g){Ec(r,n,g)}}break;case 5:Js(f,f.return);break;case 22:if(null!==f.memoizedState){kl(p);continue}}null!==h?(h.return=f,Xs=h):kl(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{o=p.stateNode,u?"function"==typeof(i=o.style).setProperty?i.setProperty("display","none","important"):i.display="none":(l=p.stateNode,s=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,l.style.display=me("display",s))}catch(g){Ec(e,e.return,g)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(g){Ec(e,e.return,g)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:ml(t,e),bl(e),4&r&&hl(e);case 21:}}function bl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(il(n)){var r=n;break e}n=n.return}throw Error(a(160))}switch(r.tag){case 5:var o=r.stateNode;32&r.flags&&(pe(o,""),r.flags&=-33),cl(e,sl(e),o);break;case 3:case 4:var i=r.stateNode.containerInfo;ll(e,sl(e),i);break;default:throw Error(a(161))}}catch(s){Ec(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function yl(e,t,n){Xs=e,vl(e,t,n)}function vl(e,t,n){for(var r=0!=(1&e.mode);null!==Xs;){var o=Xs,a=o.child;if(22===o.tag&&r){var i=null!==o.memoizedState||Gs;if(!i){var s=o.alternate,l=null!==s&&null!==s.memoizedState||Ks;s=Gs;var c=Ks;if(Gs=i,(Ks=l)&&!c)for(Xs=o;null!==Xs;)l=(i=Xs).child,22===i.tag&&null!==i.memoizedState?xl(o):null!==l?(l.return=i,Xs=l):xl(o);for(;null!==a;)Xs=a,vl(a,t,n),a=a.sibling;Xs=o,Gs=s,Ks=c}wl(e)}else 0!=(8772&o.subtreeFlags)&&null!==a?(a.return=o,Xs=a):wl(e)}}function wl(e){for(;null!==Xs;){var t=Xs;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Ks||rl(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Ks)if(null===n)r.componentDidMount();else{var o=t.elementType===t.type?n.memoizedProps:ns(t.type,n.memoizedProps);r.componentDidUpdate(o,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&Ha(t,i,r);break;case 3:var s=t.updateQueue;if(null!==s){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Ha(t,s,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&Ut(p)}}}break;default:throw Error(a(163))}Ks||512&t.flags&&ol(t)}catch(f){Ec(t,t.return,f)}}if(t===e){Xs=null;break}if(null!==(n=t.sibling)){n.return=t.return,Xs=n;break}Xs=t.return}}function kl(e){for(;null!==Xs;){var t=Xs;if(t===e){Xs=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Xs=n;break}Xs=t.return}}function xl(e){for(;null!==Xs;){var t=Xs;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{rl(4,t)}catch(l){Ec(t,n,l)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var o=t.return;try{r.componentDidMount()}catch(l){Ec(t,o,l)}}var a=t.return;try{ol(t)}catch(l){Ec(t,a,l)}break;case 5:var i=t.return;try{ol(t)}catch(l){Ec(t,i,l)}}}catch(l){Ec(t,t.return,l)}if(t===e){Xs=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Xs=s;break}Xs=t.return}}var Sl,El=Math.ceil,_l=w.ReactCurrentDispatcher,Cl=w.ReactCurrentOwner,Tl=w.ReactCurrentBatchConfig,Ll=0,jl=null,Pl=null,Rl=0,Al=0,Nl=_o(0),Ol=0,Dl=null,Il=0,Fl=0,Ml=0,zl=null,Bl=null,$l=0,Ul=1/0,ql=null,Hl=!1,Ql=null,Zl=null,Vl=!1,Wl=null,Gl=0,Kl=0,Yl=null,Xl=-1,Jl=0;function ec(){return 0!=(6&Ll)?Ye():-1!==Xl?Xl:Xl=Ye()}function tc(e){return 0==(1&e.mode)?1:0!=(2&Ll)&&0!==Rl?Rl&-Rl:null!==ga.transition?(0===Jl&&(Jl=mt()),Jl):0!==(e=vt)?e:e=void 0===(e=window.event)?16:Kt(e.type)}function nc(e,t,n,r){if(50<Kl)throw Kl=0,Yl=null,Error(a(185));bt(e,n,r),0!=(2&Ll)&&e===jl||(e===jl&&(0==(2&Ll)&&(Fl|=n),4===Ol&&sc(e,Rl)),rc(e,r),1===n&&0===Ll&&0==(1&t.mode)&&(Ul=Ye()+500,Bo&&qo()))}function rc(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,o=e.expirationTimes,a=e.pendingLanes;0<a;){var i=31-it(a),s=1<<i,l=o[i];-1===l?0!=(s&n)&&0==(s&r)||(o[i]=ft(s,t)):l<=t&&(e.expiredLanes|=s),a&=~s}}(e,t);var r=pt(e,e===jl?Rl:0);if(0===r)null!==n&&We(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&We(n),1===t)0===e.tag?function(e){Bo=!0,Uo(e)}(lc.bind(null,e)):Uo(lc.bind(null,e)),io((function(){0==(6&Ll)&&qo()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=jc(n,oc.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function oc(e,t){if(Xl=-1,Jl=0,0!=(6&Ll))throw Error(a(327));var n=e.callbackNode;if(xc()&&e.callbackNode!==n)return null;var r=pt(e,e===jl?Rl:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=gc(e,r);else{t=r;var o=Ll;Ll|=2;var i=hc();for(jl===e&&Rl===t||(ql=null,Ul=Ye()+500,pc(e,t));;)try{yc();break}catch(l){fc(e,l)}Ta(),_l.current=i,Ll=o,null!==Pl?t=0:(jl=null,Rl=0,t=Ol)}if(0!==t){if(2===t&&(0!==(o=ht(e))&&(r=o,t=ac(e,o))),1===t)throw n=Dl,pc(e,0),sc(e,r),rc(e,Ye()),n;if(6===t)sc(e,r);else{if(o=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var o=n[r],a=o.getSnapshot;o=o.value;try{if(!sr(a(),o))return!1}catch(s){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(o)&&(2===(t=gc(e,r))&&(0!==(i=ht(e))&&(r=i,t=ac(e,i))),1===t))throw n=Dl,pc(e,0),sc(e,r),rc(e,Ye()),n;switch(e.finishedWork=o,e.finishedLanes=r,t){case 0:case 1:throw Error(a(345));case 2:case 5:kc(e,Bl,ql);break;case 3:if(sc(e,r),(130023424&r)===r&&10<(t=$l+500-Ye())){if(0!==pt(e,0))break;if(((o=e.suspendedLanes)&r)!==r){ec(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=ro(kc.bind(null,e,Bl,ql),t);break}kc(e,Bl,ql);break;case 4:if(sc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,o=-1;0<r;){var s=31-it(r);i=1<<s,(s=t[s])>o&&(o=s),r&=~i}if(r=o,10<(r=(120>(r=Ye()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*El(r/1960))-r)){e.timeoutHandle=ro(kc.bind(null,e,Bl,ql),r);break}kc(e,Bl,ql);break;default:throw Error(a(329))}}}return rc(e,Ye()),e.callbackNode===n?oc.bind(null,e):null}function ac(e,t){var n=zl;return e.current.memoizedState.isDehydrated&&(pc(e,t).flags|=256),2!==(e=gc(e,t))&&(t=Bl,Bl=n,null!==t&&ic(t)),e}function ic(e){null===Bl?Bl=e:Bl.push.apply(Bl,e)}function sc(e,t){for(t&=~Ml,t&=~Fl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),r=1<<n;e[n]=-1,t&=~r}}function lc(e){if(0!=(6&Ll))throw Error(a(327));xc();var t=pt(e,0);if(0==(1&t))return rc(e,Ye()),null;var n=gc(e,t);if(0!==e.tag&&2===n){var r=ht(e);0!==r&&(t=r,n=ac(e,r))}if(1===n)throw n=Dl,pc(e,0),sc(e,t),rc(e,Ye()),n;if(6===n)throw Error(a(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,kc(e,Bl,ql),rc(e,Ye()),null}function cc(e,t){var n=Ll;Ll|=1;try{return e(t)}finally{0===(Ll=n)&&(Ul=Ye()+500,Bo&&qo())}}function uc(e){null!==Wl&&0===Wl.tag&&0==(6&Ll)&&xc();var t=Ll;Ll|=1;var n=Tl.transition,r=vt;try{if(Tl.transition=null,vt=1,e)return e()}finally{vt=r,Tl.transition=n,0==(6&(Ll=t))&&qo()}}function dc(){Al=Nl.current,Co(Nl)}function pc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,oo(n)),null!==Pl)for(n=Pl.return;null!==n;){var r=n;switch(na(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Oo();break;case 3:Ya(),Co(Po),Co(jo),ri();break;case 5:Ja(r);break;case 4:Ya();break;case 13:case 19:Co(ei);break;case 10:La(r.type._context);break;case 22:case 23:dc()}n=n.return}if(jl=e,Pl=e=Nc(e.current,null),Rl=Al=t,Ol=0,Dl=null,Ml=Fl=Il=0,Bl=zl=null,null!==Aa){for(t=0;t<Aa.length;t++)if(null!==(r=(n=Aa[t]).interleaved)){n.interleaved=null;var o=r.next,a=n.pending;if(null!==a){var i=a.next;a.next=o,r.next=i}n.pending=r}Aa=null}return e}function fc(e,t){for(;;){var n=Pl;try{if(Ta(),oi.current=Xi,ui){for(var r=si.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ui=!1}if(ii=0,ci=li=si=null,di=!1,pi=0,Cl.current=null,null===n||null===n.return){Ol=1,Dl=t,Pl=null;break}e:{var i=e,s=n.return,l=n,c=t;if(t=Rl,l.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=l,p=d.tag;if(0==(1&d.mode)&&(0===p||11===p||15===p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var h=gs(s);if(null!==h){h.flags&=-257,bs(h,s,l,0,t),1&h.mode&&ms(i,u,t),c=u;var m=(t=h).updateQueue;if(null===m){var g=new Set;g.add(c),t.updateQueue=g}else m.add(c);break e}if(0==(1&t)){ms(i,u,t),mc();break e}c=Error(a(426))}else if(aa&&1&l.mode){var b=gs(s);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),bs(b,s,l,0,t),ma(cs(c,l));break e}}i=c=cs(c,l),4!==Ol&&(Ol=2),null===zl?zl=[i]:zl.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Ua(i,fs(0,c,t));break e;case 1:l=c;var y=i.type,v=i.stateNode;if(0==(128&i.flags)&&("function"==typeof y.getDerivedStateFromError||null!==v&&"function"==typeof v.componentDidCatch&&(null===Zl||!Zl.has(v)))){i.flags|=65536,t&=-t,i.lanes|=t,Ua(i,hs(i,l,t));break e}}i=i.return}while(null!==i)}wc(n)}catch(w){t=w,Pl===n&&null!==n&&(Pl=n=n.return);continue}break}}function hc(){var e=_l.current;return _l.current=Xi,null===e?Xi:e}function mc(){0!==Ol&&3!==Ol&&2!==Ol||(Ol=4),null===jl||0==(268435455&Il)&&0==(268435455&Fl)||sc(jl,Rl)}function gc(e,t){var n=Ll;Ll|=2;var r=hc();for(jl===e&&Rl===t||(ql=null,pc(e,t));;)try{bc();break}catch(o){fc(e,o)}if(Ta(),Ll=n,_l.current=r,null!==Pl)throw Error(a(261));return jl=null,Rl=0,Ol}function bc(){for(;null!==Pl;)vc(Pl)}function yc(){for(;null!==Pl&&!Ge();)vc(Pl)}function vc(e){var t=Sl(e.alternate,e,Al);e.memoizedProps=e.pendingProps,null===t?wc(e):Pl=t,Cl.current=null}function wc(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=Vs(n,t,Al)))return void(Pl=n)}else{if(null!==(n=Ws(n,t)))return n.flags&=32767,void(Pl=n);if(null===e)return Ol=6,void(Pl=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Pl=t);Pl=t=e}while(null!==t);0===Ol&&(Ol=5)}function kc(e,t,n){var r=vt,o=Tl.transition;try{Tl.transition=null,vt=1,function(e,t,n,r){do{xc()}while(null!==Wl);if(0!=(6&Ll))throw Error(a(327));n=e.finishedWork;var o=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(a(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var o=31-it(n),a=1<<o;t[o]=0,r[o]=-1,e[o]=-1,n&=~a}}(e,i),e===jl&&(Pl=jl=null,Rl=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||Vl||(Vl=!0,jc(tt,(function(){return xc(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=Tl.transition,Tl.transition=null;var s=vt;vt=1;var l=Ll;Ll|=4,Cl.current=null,function(e,t){if(eo=Ht,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var o=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(k){n=null;break e}var s=0,l=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var h;p!==n||0!==o&&3!==p.nodeType||(l=s+o),p!==i||0!==r&&3!==p.nodeType||(c=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(h=p.firstChild);)f=p,p=h;for(;;){if(p===e)break t;if(f===n&&++u===o&&(l=s),f===i&&++d===r&&(c=s),null!==(h=p.nextSibling))break;f=(p=f).parentNode}p=h}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(to={focusedElem:e,selectionRange:n},Ht=!1,Xs=t;null!==Xs;)if(e=(t=Xs).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Xs=e;else for(;null!==Xs;){t=Xs;try{var m=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==m){var g=m.memoizedProps,b=m.memoizedState,y=t.stateNode,v=y.getSnapshotBeforeUpdate(t.elementType===t.type?g:ns(t.type,g),b);y.__reactInternalSnapshotBeforeUpdate=v}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(a(163))}}catch(k){Ec(t,t.return,k)}if(null!==(e=t.sibling)){e.return=t.return,Xs=e;break}Xs=t.return}m=tl,tl=!1}(e,n),gl(n,e),hr(to),Ht=!!eo,to=eo=null,e.current=n,yl(n,e,o),Ke(),Ll=l,vt=s,Tl.transition=i}else e.current=n;if(Vl&&(Vl=!1,Wl=e,Gl=o),i=e.pendingLanes,0===i&&(Zl=null),function(e){if(at&&"function"==typeof at.onCommitFiberRoot)try{at.onCommitFiberRoot(ot,e,void 0,128==(128&e.current.flags))}catch(t){}}(n.stateNode),rc(e,Ye()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)o=t[n],r(o.value,{componentStack:o.stack,digest:o.digest});if(Hl)throw Hl=!1,e=Ql,Ql=null,e;0!=(1&Gl)&&0!==e.tag&&xc(),i=e.pendingLanes,0!=(1&i)?e===Yl?Kl++:(Kl=0,Yl=e):Kl=0,qo()}(e,t,n,r)}finally{Tl.transition=o,vt=r}return null}function xc(){if(null!==Wl){var e=wt(Gl),t=Tl.transition,n=vt;try{if(Tl.transition=null,vt=16>e?16:e,null===Wl)var r=!1;else{if(e=Wl,Wl=null,Gl=0,0!=(6&Ll))throw Error(a(331));var o=Ll;for(Ll|=4,Xs=e.current;null!==Xs;){var i=Xs,s=i.child;if(0!=(16&Xs.flags)){var l=i.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Xs=u;null!==Xs;){var d=Xs;switch(d.tag){case 0:case 11:case 15:nl(8,d,i)}var p=d.child;if(null!==p)p.return=d,Xs=p;else for(;null!==Xs;){var f=(d=Xs).sibling,h=d.return;if(al(d),d===u){Xs=null;break}if(null!==f){f.return=h,Xs=f;break}Xs=h}}}var m=i.alternate;if(null!==m){var g=m.child;if(null!==g){m.child=null;do{var b=g.sibling;g.sibling=null,g=b}while(null!==g)}}Xs=i}}if(0!=(2064&i.subtreeFlags)&&null!==s)s.return=i,Xs=s;else e:for(;null!==Xs;){if(0!=(2048&(i=Xs).flags))switch(i.tag){case 0:case 11:case 15:nl(9,i,i.return)}var y=i.sibling;if(null!==y){y.return=i.return,Xs=y;break e}Xs=i.return}}var v=e.current;for(Xs=v;null!==Xs;){var w=(s=Xs).child;if(0!=(2064&s.subtreeFlags)&&null!==w)w.return=s,Xs=w;else e:for(s=v;null!==Xs;){if(0!=(2048&(l=Xs).flags))try{switch(l.tag){case 0:case 11:case 15:rl(9,l)}}catch(x){Ec(l,l.return,x)}if(l===s){Xs=null;break e}var k=l.sibling;if(null!==k){k.return=l.return,Xs=k;break e}Xs=l.return}}if(Ll=o,qo(),at&&"function"==typeof at.onPostCommitFiberRoot)try{at.onPostCommitFiberRoot(ot,e)}catch(x){}r=!0}return r}finally{vt=n,Tl.transition=t}}return!1}function Sc(e,t,n){e=Ba(e,t=fs(0,t=cs(n,t),1),1),t=ec(),null!==e&&(bt(e,1,t),rc(e,t))}function Ec(e,t,n){if(3===e.tag)Sc(e,e,n);else for(;null!==t;){if(3===t.tag){Sc(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Zl||!Zl.has(r))){t=Ba(t,e=hs(t,e=cs(n,e),1),1),e=ec(),null!==t&&(bt(t,1,e),rc(t,e));break}}t=t.return}}function _c(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=ec(),e.pingedLanes|=e.suspendedLanes&n,jl===e&&(Rl&n)===n&&(4===Ol||3===Ol&&(130023424&Rl)===Rl&&500>Ye()-$l?pc(e,0):Ml|=n),rc(e,t)}function Cc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=ec();null!==(e=Da(e,t))&&(bt(e,t,n),rc(e,n))}function Tc(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Cc(e,n)}function Lc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,o=e.memoizedState;null!==o&&(n=o.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(a(314))}null!==r&&r.delete(t),Cc(e,n)}function jc(e,t){return Ve(e,t)}function Pc(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Rc(e,t,n,r){return new Pc(e,t,n,r)}function Ac(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Nc(e,t){var n=e.alternate;return null===n?((n=Rc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Oc(e,t,n,r,o,i){var s=2;if(r=e,"function"==typeof e)Ac(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case S:return Dc(n.children,o,i,t);case E:s=8,o|=8;break;case _:return(e=Rc(12,n,t,2|o)).elementType=_,e.lanes=i,e;case j:return(e=Rc(13,n,t,o)).elementType=j,e.lanes=i,e;case P:return(e=Rc(19,n,t,o)).elementType=P,e.lanes=i,e;case N:return Ic(n,o,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:s=10;break e;case T:s=9;break e;case L:s=11;break e;case R:s=14;break e;case A:s=16,r=null;break e}throw Error(a(130,null==e?e:typeof e,""))}return(t=Rc(s,n,t,o)).elementType=e,t.type=r,t.lanes=i,t}function Dc(e,t,n,r){return(e=Rc(7,e,r,t)).lanes=n,e}function Ic(e,t,n,r){return(e=Rc(22,e,r,t)).elementType=N,e.lanes=n,e.stateNode={isHidden:!1},e}function Fc(e,t,n){return(e=Rc(6,e,null,t)).lanes=n,e}function Mc(e,t,n){return(t=Rc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function zc(e,t,n,r,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=gt(0),this.expirationTimes=gt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=gt(0),this.identifierPrefix=r,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Bc(e,t,n,r,o,a,i,s,l){return e=new zc(e,t,n,s,l),1===t?(t=1,!0===a&&(t|=8)):t=0,a=Rc(3,null,null,t),e.current=a,a.stateNode=e,a.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Fa(a),e}function $c(e){if(!e)return Lo;e:{if(Ue(e=e._reactInternals)!==e||1!==e.tag)throw Error(a(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(No(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(a(171))}if(1===e.tag){var n=e.type;if(No(n))return Io(e,n,t)}return t}function Uc(e,t,n,r,o,a,i,s,l){return(e=Bc(n,r,!0,e,0,a,0,s,l)).context=$c(null),n=e.current,(a=za(r=ec(),o=tc(n))).callback=null!=t?t:null,Ba(n,a,o),e.current.lanes=o,bt(e,o,r),rc(e,r),e}function qc(e,t,n,r){var o=t.current,a=ec(),i=tc(o);return n=$c(n),null===t.context?t.context=n:t.pendingContext=n,(t=za(a,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Ba(o,t,i))&&(nc(e,o,i,a),$a(e,o,i)),i}function Hc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Qc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Zc(e,t){Qc(e,t),(e=e.alternate)&&Qc(e,t)}Sl=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||Po.current)vs=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return vs=!1,function(e,t,n){switch(t.tag){case 3:js(t),ha();break;case 5:Xa(t);break;case 1:No(t.type)&&Fo(t);break;case 4:Ka(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,o=t.memoizedProps.value;To(Sa,r._currentValue),r._currentValue=o;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(To(ei,1&ei.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Fs(e,t,n):(To(ei,1&ei.current),null!==(e=Hs(e,t,n))?e.sibling:null);To(ei,1&ei.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return Us(e,t,n);t.flags|=128}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),To(ei,ei.current),r)break;return null;case 22:case 23:return t.lanes=0,Es(e,t,n)}return Hs(e,t,n)}(e,t,n);vs=0!=(131072&e.flags)}else vs=!1,aa&&0!=(1048576&t.flags)&&ea(t,Vo,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;qs(e,t),e=t.pendingProps;var o=Ao(t,jo.current);Pa(t,n),o=gi(null,t,r,e,o,n);var i=bi();return t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,No(r)?(i=!0,Fo(t)):i=!1,t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,Fa(t),o.updater=os,t.stateNode=o,o._reactInternals=t,ls(t,r,e,n),t=Ls(null,t,r,!0,i,n)):(t.tag=0,aa&&i&&ta(t),ws(null,t,o,n),t=t.child),t;case 16:r=t.elementType;e:{switch(qs(e,t),e=t.pendingProps,r=(o=r._init)(r._payload),t.type=r,o=t.tag=function(e){if("function"==typeof e)return Ac(e)?1:0;if(null!=e){if((e=e.$$typeof)===L)return 11;if(e===R)return 14}return 2}(r),e=ns(r,e),o){case 0:t=Cs(null,t,r,e,n);break e;case 1:t=Ts(null,t,r,e,n);break e;case 11:t=ks(null,t,r,e,n);break e;case 14:t=xs(null,t,r,ns(r.type,e),n);break e}throw Error(a(306,r,""))}return t;case 0:return r=t.type,o=t.pendingProps,Cs(e,t,r,o=t.elementType===r?o:ns(r,o),n);case 1:return r=t.type,o=t.pendingProps,Ts(e,t,r,o=t.elementType===r?o:ns(r,o),n);case 3:e:{if(js(t),null===e)throw Error(a(387));r=t.pendingProps,o=(i=t.memoizedState).element,Ma(e,t),qa(t,r,null,n);var s=t.memoizedState;if(r=s.element,i.isDehydrated){if(i={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=Ps(e,t,r,n,o=cs(Error(a(423)),t));break e}if(r!==o){t=Ps(e,t,r,n,o=cs(Error(a(424)),t));break e}for(oa=co(t.stateNode.containerInfo.firstChild),ra=t,aa=!0,ia=null,n=xa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ha(),r===o){t=Hs(e,t,n);break e}ws(e,t,r,n)}t=t.child}return t;case 5:return Xa(t),null===e&&ua(t),r=t.type,o=t.pendingProps,i=null!==e?e.memoizedProps:null,s=o.children,no(r,o)?s=null:null!==i&&no(r,i)&&(t.flags|=32),_s(e,t),ws(e,t,s,n),t.child;case 6:return null===e&&ua(t),null;case 13:return Fs(e,t,n);case 4:return Ka(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=ka(t,null,r,n):ws(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,ks(e,t,r,o=t.elementType===r?o:ns(r,o),n);case 7:return ws(e,t,t.pendingProps,n),t.child;case 8:case 12:return ws(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,o=t.pendingProps,i=t.memoizedProps,s=o.value,To(Sa,r._currentValue),r._currentValue=s,null!==i)if(sr(i.value,s)){if(i.children===o.children&&!Po.current){t=Hs(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var l=i.dependencies;if(null!==l){s=i.child;for(var c=l.firstContext;null!==c;){if(c.context===r){if(1===i.tag){(c=za(-1,n&-n)).tag=2;var u=i.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=n,null!==(c=i.alternate)&&(c.lanes|=n),ja(i.return,n,t),l.lanes|=n;break}c=c.next}}else if(10===i.tag)s=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(s=i.return))throw Error(a(341));s.lanes|=n,null!==(l=s.alternate)&&(l.lanes|=n),ja(s,n,t),s=i.sibling}else s=i.child;if(null!==s)s.return=i;else for(s=i;null!==s;){if(s===t){s=null;break}if(null!==(i=s.sibling)){i.return=s.return,s=i;break}s=s.return}i=s}ws(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=t.pendingProps.children,Pa(t,n),r=r(o=Ra(o)),t.flags|=1,ws(e,t,r,n),t.child;case 14:return o=ns(r=t.type,t.pendingProps),xs(e,t,r,o=ns(r.type,o),n);case 15:return Ss(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:ns(r,o),qs(e,t),t.tag=1,No(r)?(e=!0,Fo(t)):e=!1,Pa(t,n),is(t,r,o),ls(t,r,o,n),Ls(null,t,r,!0,e,n);case 19:return Us(e,t,n);case 22:return Es(e,t,n)}throw Error(a(156,t.tag))};var Vc="function"==typeof reportError?reportError:function(e){console.error(e)};function Wc(e){this._internalRoot=e}function Gc(e){this._internalRoot=e}function Kc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Yc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Xc(){}function Jc(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a;if("function"==typeof o){var s=o;o=function(){var e=Hc(i);s.call(e)}}qc(t,i,e,o)}else i=function(e,t,n,r,o){if(o){if("function"==typeof r){var a=r;r=function(){var e=Hc(i);a.call(e)}}var i=Uc(t,r,e,0,null,!1,0,"",Xc);return e._reactRootContainer=i,e[mo]=i.current,Ur(8===e.nodeType?e.parentNode:e),uc(),i}for(;o=e.lastChild;)e.removeChild(o);if("function"==typeof r){var s=r;r=function(){var e=Hc(l);s.call(e)}}var l=Bc(e,0,!1,null,0,!1,0,"",Xc);return e._reactRootContainer=l,e[mo]=l.current,Ur(8===e.nodeType?e.parentNode:e),uc((function(){qc(t,l,n,r)})),l}(n,t,e,o,r);return Hc(i)}Gc.prototype.render=Wc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(a(409));qc(e,t,null,null)},Gc.prototype.unmount=Wc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;uc((function(){qc(null,e,null,null)})),t[mo]=null}},Gc.prototype.unstable_scheduleHydration=function(e){if(e){var t=Et();e={blockedOn:null,target:e,priority:t};for(var n=0;n<Nt.length&&0!==t&&t<Nt[n].priority;n++);Nt.splice(n,0,e),0===n&&Ft(e)}},kt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(yt(t,1|n),rc(t,Ye()),0==(6&Ll)&&(Ul=Ye()+500,qo()))}break;case 13:uc((function(){var t=Da(e,1);if(null!==t){var n=ec();nc(t,e,1,n)}})),Zc(e,1)}},xt=function(e){if(13===e.tag){var t=Da(e,134217728);if(null!==t)nc(t,e,134217728,ec());Zc(e,134217728)}},St=function(e){if(13===e.tag){var t=tc(e),n=Da(e,t);if(null!==n)nc(n,e,t,ec());Zc(e,t)}},Et=function(){return vt},_t=function(e,t){var n=vt;try{return vt=e,t()}finally{vt=n}},xe=function(e,t,n){switch(t){case"input":if(X(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=xo(r);if(!o)throw Error(a(90));V(r),X(r,o)}}}break;case"textarea":ae(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Le=cc,je=uc;var eu={usingClientEntryPoint:!1,Events:[wo,ko,xo,Ce,Te,cc]},tu={findFiberByHostInstance:vo,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},nu={bundleType:tu.bundleType,version:tu.version,rendererPackageName:tu.rendererPackageName,rendererConfig:tu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Qe(e))?null:e.stateNode},findFiberByHostInstance:tu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ru=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ru.isDisabled&&ru.supportsFiber)try{ot=ru.inject(nu),at=ru}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=eu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Kc(t))throw Error(a(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:x,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Kc(e))throw Error(a(299));var n=!1,r="",o=Vc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(o=t.onRecoverableError)),t=Bc(e,1,!1,null,0,n,0,r,o),e[mo]=t.current,Ur(8===e.nodeType?e.parentNode:e),new Wc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(a(188));throw e=Object.keys(e).join(","),Error(a(268,e))}return e=null===(e=Qe(t))?null:e.stateNode},t.flushSync=function(e){return uc(e)},t.hydrate=function(e,t,n){if(!Yc(t))throw Error(a(200));return Jc(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Kc(e))throw Error(a(405));var r=null!=n&&n.hydratedSources||null,o=!1,i="",s=Vc;if(null!=n&&(!0===n.unstable_strictMode&&(o=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(s=n.onRecoverableError)),t=Uc(t,null,e,1,null!=n?n:null,o,0,i,s),e[mo]=t.current,Ur(e),r)for(e=0;e<r.length;e++)o=(o=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,o]:t.mutableSourceEagerHydrationData.push(n,o);return new Gc(t)},t.render=function(e,t,n){if(!Yc(t))throw Error(a(200));return Jc(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Yc(e))throw Error(a(40));return!!e._reactRootContainer&&(uc((function(){Jc(null,null,e,!1,(function(){e._reactRootContainer=null,e[mo]=null}))})),!0)},t.unstable_batchedUpdates=cc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Yc(n))throw Error(a(200));if(null==e||void 0===e._reactInternals)throw Error(a(38));return Jc(e,t,n,!1,r)},t.version="18.3.1-next-f1338f8080-20240426"},745:(e,t,n)=>{"use strict";var r=n(3935);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,c,u;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(!a(e[l],i[l]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!a(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((s=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!a(e[c[l]],i[c[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>Q,ql:()=>J});var r=n(7294),o=n(5697),a=n.n(o),i=n(9590),s=n.n(i),l=n(1143),c=n.n(l),u=n(6774),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,h(e,t)}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function m(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},x=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},E=function(e){var t=S(e,g.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},_=function(e){return S(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},L=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var s=a[i],l=s.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][c]&&(o[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var s=a[i],l=p({},r[s],o[s]);r[s]=l}return e}),[]).reverse()},j=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},P=function(e){return Array.isArray(e)?e.join(""):e},R=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},A=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},N=[g.NOSCRIPT,g.SCRIPT,g.STYLE],O=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},D=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},I=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[k[n]||n]=e[n],t}),t)},F=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},M=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=I(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=D(n),a=P(t);return o?"<"+e+' data-rh="true" '+o+">"+O(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+O(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return I(t)},toString:function(){return D(t)}};default:return{toComponent:function(){return F(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+O(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===N.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},z=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var h=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=R(e.metaTags,v),a=R(t,b),i=R(n,y);return{priorityMethods:{toComponent:function(){return[].concat(F(g.META,o.priority),F(g.LINK,a.priority),F(g.SCRIPT,i.priority))},toString:function(){return M(g.META,o.priority,r)+" "+M(g.LINK,a.priority,r)+" "+M(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);f=h.priorityMethods,u=h.linkTags,d=h.metaTags,p=h.scriptTags}return{priority:f,base:M(g.BASE,t,r),bodyAttributes:M("bodyAttributes",n,r),htmlAttributes:M("htmlAttributes",o,r),link:M(g.LINK,u,r),meta:M(g.META,d,r),noscript:M(g.NOSCRIPT,a,r),script:M(g.SCRIPT,p,r),style:M(g.STYLE,i,r),title:M(g.TITLE,{title:l,titleAttributes:c},r)}},B=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?B:n.instances},add:function(e){(n.canUseDOM?B:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?B:n.instances).indexOf(e);(n.canUseDOM?B:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=z({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),q=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),H="undefined"!=typeof document,Q=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);Q.canUseDOM=H,Q.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},Q.defaultProps={context:{}},Q.displayName="HelmetProvider";var Z=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},V=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),s=0;s<i.length;s+=1){var l=i[s],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===o.indexOf(l)&&o.push(l);var u=a.indexOf(l);-1!==u&&a.splice(u,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},W=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;V(g.BODY,e.bodyAttributes),V(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=P(e)),V(g.TITLE,t)}(u,d);var p={baseTag:Z(g.BASE,n),linkTags:Z(g.LINK,o),metaTags:Z(g.META,a),noscriptTags:Z(g.NOSCRIPT,i),scriptTags:Z(g.SCRIPT,l),styleTags:Z(g.STYLE,c)},f={},h={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(h[e]=p[e].oldTags)})),t&&t(),s(e,f,h)},G=null,K=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:L(g.LINK,["rel","href"],e),metaTags:L(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:L(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:_(e),scriptTags:L(g.SCRIPT,["src","innerHTML"],e),styleTags:L(g.STYLE,["cssText"],e),title:E(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:j(e,"prioritizeSeoTags")});Q.canUseDOM?(t=a,G&&cancelAnimationFrame(G),t.defer?G=requestAnimationFrame((function(){W(t,(function(){G=null}))})):(W(t),G=null)):z&&(o=z(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);K.propTypes={context:q.isRequired},K.displayName="HelmetDispatcher";var Y=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(A(this.props,"helmetData"),A(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return p({},o,((t={})[r.type]=i,t.titleAttributes=p({},a),t));case g.BODY:return p({},o,{bodyAttributes:p({},a)});case g.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=m(r,Y),s=Object.keys(i).reduce((function(e,t){return e[x[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,a),l){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:s,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=m(e,X),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof $||(a=new $(a.context,a.instances)),a?r.createElement(K,p({},o,{context:a.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(K,p({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,h=n?Symbol.for("react.suspense_list"):60120,m=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case a:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case g:case m:case l:return e;default:return t}}case o:return t}}}function x(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=g,t.Memo=m,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return x(e)||k(e)===u},t.isConcurrentMode=x,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===a},t.isLazy=function(e){return k(e)===g},t.isMemo=function(e){return k(e)===m},t.isPortal=function(e){return k(e)===o},t.isProfiler=function(e){return k(e)===s},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===s||e===i||e===f||e===h||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===m||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var s=n(7294),l=n(5697),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function h(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var h=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),m=null;function g(){return m||(m=e(h.loader)),m.promise}return c.push(g),"function"==typeof h.webpack&&u.push((function(){if((0,h.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),p=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),m=e(h.loader),r._loadModule()})),g(),r.state={error:m.error,pastDelay:!1,timedOut:!1,loading:m.loading,loaded:m.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(h.modules)&&h.modules.forEach((function(t){e.context.loadable.report(t)})),m.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof h.delay&&(0===h.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),h.delay)),"number"==typeof h.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),h.timeout));var n=function(){t({error:m.error,loaded:m.loaded,loading:m.loading}),e._clearTimeouts()};m.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(h.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?h.render(this.state.loaded,this.props):null},n}(s.Component),a(d,"contextTypes",{loadable:l.shape({report:l.func.isRequired})}),p}function m(e){return h(d,e)}m.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return h(p,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return s.Children.only(this.props.children)},t}(s.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}a(g,"propTypes",{report:l.func.isRequired}),a(g,"childContextTypes",{loadable:l.shape({report:l.func.isRequired}).isRequired}),m.Capture=g,m.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},m.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=m},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>s,f:()=>i});var r=n(6550),o=n(7462),a=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>u,rU:()=>g});var r=n(6550),o=n(5068),a=n(7294),i=n(9318),s=n(7462),l=n(3366),c=n(8776),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},f=function(e){return e},h=a.forwardRef;void 0===h&&(h=f);var m=h((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,l.Z)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,s.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=f!==h&&t||n,a.createElement("a",u)}));var g=h((function(e,t){var n=e.component,o=void 0===n?m:n,u=e.replace,g=e.to,b=e.innerRef,y=(0,l.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=e.history,r=p(d(g,e.location),e.location),l=r?n.createHref(r):"",m=(0,s.Z)({},y,{href:l,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(u||r?n.replace:n.push)(t)}});return f!==h?m.ref=t||b:m.innerRef=b,a.createElement(o,m)}))})),b=function(e){return e},y=a.forwardRef;void 0===y&&(y=b);var v=y((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,f=e.activeStyle,h=e.className,m=e.exact,v=e.isActive,w=e.location,k=e.sensitive,x=e.strict,S=e.style,E=e.to,_=e.innerRef,C=(0,l.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=w||e.location,i=p(d(E,n),n),l=i.pathname,T=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),L=T?(0,r.LX)(n.pathname,{path:T,exact:m,sensitive:k,strict:x}):null,j=!!(v?v(L,n):L),P="function"==typeof h?h(j):h,R="function"==typeof S?S(j):S;j&&(P=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(P,u),R=(0,s.Z)({},R,f));var A=(0,s.Z)({"aria-current":j&&o||null,className:P,style:R,to:i},C);return b!==y?A.ref=t||_:A.innerRef=_,a.createElement(g,A)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>E,F0:()=>v,LX:()=>S,TH:()=>N,k6:()=>A,rs:()=>P,s6:()=>y});var r=n(5068),o=n(7294),a=n(5697),i=n.n(a),s=n(9318),l=n(8776),c=n(7462),u=n(4779),d=n.n(u),p=(n(9864),n(3366)),f=(n(8679),1073741823),h="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var m=o.createContext||function(e,t){var n,a,s="__create-react-context-"+function(){var e="__global_unique_id__";return h[e]=(h[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);l.childContextTypes=((n={})[s]=i().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},o.getValue=function(){return this.context[s]?this.context[s].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return c.contextTypes=((a={})[s]=i().object,a),{Provider:l,Consumer:c}},g=function(e){var t=m();return t.displayName=e,t},b=g("Router-History"),y=g("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},k=1e4,x=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,s=void 0!==i&&i,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return x<k&&(r[e]=a,x++),a}(n,{end:a,strict:s,sensitive:c}),o=r.regexp,i=r.keys,l=o.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return a&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:i.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var E=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,a=(0,c.Z)({},t,{location:n,match:r}),i=e.props,s=i.children,u=i.component,d=i.render;return Array.isArray(s)&&function(e){return 0===o.Children.count(e)}(s)&&(s=null),o.createElement(y.Provider,{value:a},a.match?s?"function"==typeof s?s(a):s:u?o.createElement(u,a):d?d(a):null:"function"==typeof s?s(a):null)}))},t}(o.Component);function _(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=_(e);return 0!==t.pathname.indexOf(n)?t:(0,c.Z)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,s.Ep)(e)}function L(e){return function(){(0,l.Z)(!1)}}function j(){}o.Component;var P=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(a.pathname,(0,c.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var R=o.useContext;function A(){return R(b)}function N(){return R(y).location}},5251:(e,t,n)=>{"use strict";var r=n(7294),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,a={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===a[r]&&(a[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:a,_owner:s.current}}t.Fragment=a,t.jsx=c,t.jsxs=c},2408:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),o=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m=Object.assign,g={};function b(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||h}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=g,this.updater=n||h}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=b.prototype;var w=v.prototype=new y;w.constructor=v,m(w,b.prototype),w.isPureReactComponent=!0;var k=Array.isArray,x=Object.prototype.hasOwnProperty,S={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function _(e,t,r){var o,a={},i=null,s=null;if(null!=t)for(o in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)x.call(t,o)&&!E.hasOwnProperty(o)&&(a[o]=t[o]);var l=arguments.length-2;if(1===l)a.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];a.children=c}if(e&&e.defaultProps)for(o in l=e.defaultProps)void 0===a[o]&&(a[o]=l[o]);return{$$typeof:n,type:e,key:i,ref:s,props:a,_owner:S.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var T=/\/+/g;function L(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function j(e,t,o,a,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case n:case r:l=!0}}if(l)return i=i(l=e),e=""===a?"."+L(l,0):a,k(i)?(o="",null!=e&&(o=e.replace(T,"$&/")+"/"),j(i,t,o,"",(function(e){return e}))):null!=i&&(C(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,o+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(T,"$&/")+"/")+e)),t.push(i)),1;if(l=0,a=""===a?".":a+":",k(e))for(var c=0;c<e.length;c++){var u=a+L(s=e[c],c);l+=j(s,t,o,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(s=e.next()).done;)l+=j(s=s.value,t,o,u=a+L(s,c++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function P(e,t,n){if(null==e)return e;var r=[],o=0;return j(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function R(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var A={current:null},N={transition:null},O={ReactCurrentDispatcher:A,ReactCurrentBatchConfig:N,ReactCurrentOwner:S};function D(){throw Error("act(...) is not supported in production builds of React.")}t.Children={map:P,forEach:function(e,t,n){P(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return P(e,(function(){t++})),t},toArray:function(e){return P(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=o,t.Profiler=i,t.PureComponent=v,t.StrictMode=a,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=O,t.act=D,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var o=m({},e.props),a=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=S.current),void 0!==t.key&&(a=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)x.call(t,c)&&!E.hasOwnProperty(c)&&(o[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)o.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];o.children=l}return{$$typeof:n,type:e.type,key:a,ref:i,props:o,_owner:s}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=_,t.createFactory=function(e){var t=_.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:R}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=N.transition;N.transition={};try{e()}finally{N.transition=t}},t.unstable_act=D,t.useCallback=function(e,t){return A.current.useCallback(e,t)},t.useContext=function(e){return A.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return A.current.useDeferredValue(e)},t.useEffect=function(e,t){return A.current.useEffect(e,t)},t.useId=function(){return A.current.useId()},t.useImperativeHandle=function(e,t,n){return A.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return A.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return A.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return A.current.useMemo(e,t)},t.useReducer=function(e,t,n){return A.current.useReducer(e,t,n)},t.useRef=function(e){return A.current.useRef(e)},t.useState=function(e){return A.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return A.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return A.current.useTransition()},t.version="18.3.1"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},5893:(e,t,n)=>{"use strict";e.exports=n(5251)},53:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,o=e[r];if(!(0<a(o,t)))break e;e[r]=t,e[n]=o,n=r}}function r(e){return 0===e.length?null:e[0]}function o(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length,i=o>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>a(l,n))c<o&&0>a(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c<o&&0>a(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function a(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,p=null,f=3,h=!1,m=!1,g=!1,b="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,v="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)o(u);else{if(!(t.startTime<=e))break;o(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function k(e){if(g=!1,w(e),!m)if(null!==r(c))m=!0,N(x);else{var t=r(u);null!==t&&O(k,t.startTime-e)}}function x(e,n){m=!1,g&&(g=!1,y(C),C=-1),h=!0;var a=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!j());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var s=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?p.callback=s:p===r(c)&&o(c),w(n)}else o(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&O(k,d.startTime-n),l=!1}return l}finally{p=null,f=a,h=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,E=!1,_=null,C=-1,T=5,L=-1;function j(){return!(t.unstable_now()-L<T)}function P(){if(null!==_){var e=t.unstable_now();L=e;var n=!0;try{n=_(!0,e)}finally{n?S():(E=!1,_=null)}}else E=!1}if("function"==typeof v)S=function(){v(P)};else if("undefined"!=typeof MessageChannel){var R=new MessageChannel,A=R.port2;R.port1.onmessage=P,S=function(){A.postMessage(null)}}else S=function(){b(P,0)};function N(e){_=e,E||(E=!0,S())}function O(e,n){C=b((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){m||h||(m=!0,N(x))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):T=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,o,a){var i=t.unstable_now();switch("object"==typeof a&&null!==a?a="number"==typeof(a=a.delay)&&0<a?i+a:i:a=i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:o,priorityLevel:e,startTime:a,expirationTime:s=a+s,sortIndex:-1},a>i?(e.sortIndex=a,n(u,e),null===r(c)&&e===r(u)&&(g?(y(C),C=-1):g=!0,O(k,a-i))):(e.sortIndex=s,n(c,e),m||h||(m=!0,N(x))),e},t.unstable_shouldYield=j,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l<a.length;l++){var c=a[l];if(!s(c))return!1;var u=e[c],d=t[c];if(!1===(o=n?n.call(r,u,d,c):void 0)||void 0===o&&u!==d)return!1}return!0}},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Dappnode",tagline:"Simplifying decentralization",favicon:"img/logo.png",url:"https://docs.dappnode.io",baseUrl:"/",organizationName:"dappnode",projectName:"Dappnode",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},plugins:["/home/runner/work/DAppNodeDocs/DAppNodeDocs/node_modules/@easyops-cn/docusaurus-search-local/dist/server/server/index.js"],presets:[["classic",{docs:{sidebarPath:"/home/runner/work/DAppNodeDocs/DAppNodeDocs/sidebars.js",editUrl:"https://github.com/dappnode/DappnodeDocs"},theme:{customCss:"/home/runner/work/DAppNodeDocs/DAppNodeDocs/src/css/custom.css"}}]],themeConfig:{image:"img/docusaurus-social-card.jpg",navbar:{title:"Dappnode Docs",logo:{alt:"Dappnode Logo",src:"img/logo.svg",href:"/"},items:[{type:"docSidebar",sidebarId:"userSidebar",position:"left",label:"User Docs"},{type:"docSidebar",sidebarId:"devSidebar",position:"left",label:"Dev Docs"},{type:"docSidebar",sidebarId:"smoothSidebar",position:"left",label:"Smooth"},{type:"docSidebar",sidebarId:"daoSidebar",position:"left",label:"DAO"},{href:"https://dappnode.com/",label:"Dappnode",position:"right"},{href:"https://github.com/dappnode/DappnodeDocs",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Getting Started",to:"/docs/user/getting-started/choose-your-path"},{label:"Staking",to:"/docs/user/staking/overview"},{label:"Access your Dappnode",to:"/docs/user/access-your-dappnode/overview"},{label:"Driving School",to:"/docs/user/videos-and-tutorials/driving-school/initial-setup"}]},{title:"Community",items:[{label:"Discord",href:"https://discord.gg/dappnode"},{label:"Twitter",href:"https://twitter.com/dappnode"}]},{title:"More",items:[{label:"GitHub",href:"https://github.com/dappnode"},{label:"Dappnode",href:"https://dappnode.com/"}]}],copyright:"Copyright \xa9 2024 Dappnode. Built with Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0}}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},4965:(e,t,n)=>{"use strict";n.d(t,{y$:()=>J,p1:()=>C});var r=n(7294);function o(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e)){var a=e.length;for(t=0;t<a;t++)e[t]&&(n=o(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}const a=function(){for(var e,t,n=0,r="",a=arguments.length;n<a;n++)(e=arguments[n])&&(t=o(e))&&(r&&(r+=" "),r+=t);return r};var i,s,l,c,u,d=Object.create,p=Object.defineProperty,f=Object.defineProperties,h=Object.getOwnPropertyDescriptor,m=Object.getOwnPropertyDescriptors,g=Object.getOwnPropertyNames,b=Object.getOwnPropertySymbols,y=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable,k=(e,t,n)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,x=(e,t)=>{for(var n in t||(t={}))v.call(t,n)&&k(e,n,t[n]);if(b)for(var n of b(t))w.call(t,n)&&k(e,n,t[n]);return e},S=(e,t)=>f(e,m(t)),E=(e,t)=>{var n={};for(var r in e)v.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&b)for(var r of b(e))t.indexOf(r)<0&&w.call(e,r)&&(n[r]=e[r]);return n},_=(i={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var s in a)if(a.hasOwnProperty(s)){if(s==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(s)||(i[s]=a[s])}var c=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],o||s);var l=t[s],c=r.util.type(l);"Object"!==c||a[i(l)]?"Array"!==c||a[i(l)]||(a[i(l)]=!0,e(l,n,s,a)):(a[i(l)]=!0,e(l,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",a),!a.grammar)throw new Error('The language "'+a.language+'" has no grammar.');return a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new s;return l(o,o.head,e),i(e,o,t,o.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,s,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var h=0;h<f.length;++h){if(d&&d.cause==p+","+h)return;var m=f[h],g=m.inside,b=!!m.lookbehind,y=!!m.greedy,v=m.alias;if(y&&!m.pattern.global){var w=m.pattern.toString().match(/[imsuy]*$/)[0];m.pattern=RegExp(m.pattern.source,w+"g")}for(var k=m.pattern||m,x=s.next,S=u;x!==t.tail&&!(d&&S>=d.reach);S+=x.value.length,x=x.next){var E=x.value;if(t.length>e.length)return;if(!(E instanceof o)){var _,C=1;if(y){if(!(_=a(k,S,e,b))||_.index>=e.length)break;var T=_.index,L=_.index+_[0].length,j=S;for(j+=x.value.length;T>=j;)j+=(x=x.next).value.length;if(S=j-=x.value.length,x.value instanceof o)continue;for(var P=x;P!==t.tail&&(j<L||"string"==typeof P.value);P=P.next)C++,j+=P.value.length;C--,E=e.slice(S,j),_.index-=S}else if(!(_=a(k,0,E,b)))continue;T=_.index;var R=_[0],A=E.slice(0,T),N=E.slice(T+R.length),O=S+E.length;d&&O>d.reach&&(d.reach=O);var D=x.prev;if(A&&(D=l(t,D,A),S+=A.length),c(t,D,C),x=l(t,D,new o(p,g?r.tokenize(R,g):R,v,R)),N&&l(t,x,N),C>1){var I={cause:p+","+h,reach:O};i(e,t,n,x.prev,S,I),d&&I.reach>d.reach&&(d.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function c(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var s="";for(var l in a.attributes)s+=" "+l+'="'+(a.attributes[l]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+s+">"+a.content+"</"+a.tag+">"},r}();t.exports=n,n.default=n}},function(){return s||(0,i[g(i)[0]])((s={exports:{}}).exports,s),s.exports}),C=((e,t,n)=>(n=null!=e?d(y(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let o of g(t))v.call(e,o)||o===n||p(e,o,{get:()=>t[o],enumerable:!(r=h(t,o))||r.enumerable});return e})(!t&&e&&e.__esModule?n:p(n,"default",{value:e,enumerable:!0}),e)))(_());C.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},C.languages.markup.tag.inside["attr-value"].inside.entity=C.languages.markup.entity,C.languages.markup.doctype.inside["internal-subset"].inside=C.languages.markup,C.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(C.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:C.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:C.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},C.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(C.languages.markup.tag,"addAttribute",{value:function(e,t){C.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:C.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),C.languages.html=C.languages.markup,C.languages.mathml=C.languages.markup,C.languages.svg=C.languages.markup,C.languages.xml=C.languages.extend("markup",{}),C.languages.ssml=C.languages.xml,C.languages.atom=C.languages.xml,C.languages.rss=C.languages.xml,function(e){var t={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},n=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/,r="(?:[^\\\\-]|"+n.source+")",o=(r=RegExp(r+"-"+r),{pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"});e.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:r,inside:{escape:n,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":t,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:n}},"special-escape":t,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":o}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:n,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":o}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}}}(C),C.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},C.languages.javascript=C.languages.extend("clike",{"class-name":[C.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),C.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,C.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:C.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:C.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:C.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:C.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:C.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),C.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:C.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),C.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),C.languages.markup&&(C.languages.markup.tag.addInlined("script","javascript"),C.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),C.languages.js=C.languages.javascript,C.languages.actionscript=C.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),C.languages.actionscript["class-name"].alias="function",delete C.languages.actionscript.parameter,delete C.languages.actionscript["literal-property"],C.languages.markup&&C.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:C.languages.markup}}),c=/#(?!\{).+/,u={pattern:/#\{[^}]+\}/,alias:"variable"},(l=C).languages.coffeescript=l.languages.extend("javascript",{comment:c,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:u}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),l.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:c,interpolation:u}}}),l.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:l.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:u}}]}),l.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete l.languages.coffeescript["template-string"],l.languages.coffee=l.languages.coffeescript,function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},o="doc-comment";if(a=e.languages[t]){var a,i=a[o];if((i=i||(a=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[o])instanceof RegExp&&(i=a[o]={pattern:i}),Array.isArray(i))for(var s=0,l=i.length;s<l;s++)i[s]instanceof RegExp&&(i[s]={pattern:i[s]}),r(i[s]);else r(i)}}))}}),t.addSupport(["java","javascript","php"],t)}(C),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(C),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(C),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(C),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o,a=t[n];"code"!==a.type?e(a.content):(o=a.content[1],a=a.content[3],o&&a&&"code-language"===o.type&&"code-block"===a.type&&"string"==typeof o.content&&(o=o.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),o="language-"+(o=(/[a-z][\w-]*/i.exec(o)||[""])[0].toLowerCase()),a.alias?"string"==typeof a.alias?a.alias=[a.alias,o]:a.alias.push(o):a.alias=[o]))}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r];if(a=/language-(.+)/.exec(a)){n=a[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n)):s[t]||e})),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})))}})),RegExp(e.languages.markup.tag.pattern.source,"gi")),s={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(C),C.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:C.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},C.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var a=p(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),0<o.length)){var s=p(/^\{$/,/^\}$/);if(-1!==s)for(var l=n;l<s;l++){var c=t[l];"variable"===c.type&&0<=o.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return}return 1}function p(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))o++;else if(r.test(s)&&0==--o)return a}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),C.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function l(t,n,i){var l=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),c=0,u={},d=(l=s(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+i.toUpperCase()+"_"+r+"___")););return u[n]=e,n})).join(""),n,i),Object.keys(u));return c=0,function t(n){for(var a=0;a<n.length;a++){if(c>=d.length)return;var i,l,p,f,h,m,g,b=n[a];"string"==typeof b||"string"==typeof b.content?(i=d[c],-1!==(g=(m="string"==typeof b?b:b.content).indexOf(i))&&(++c,l=m.substring(0,g),h=u[i],p=void 0,(f={})["interpolation-punctuation"]=o,3===(f=e.tokenize(h,f)).length&&((p=[1,1]).push.apply(p,s(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,h),f=m.substring(g+i.length),h=[],l&&h.push(l),h.push(p),f&&(t(m=[f]),h.push.apply(h,m)),"string"==typeof b?(n.splice.apply(n,[a,1].concat(h)),a+=h.length-1):b.content=h)):(g=b.content,Array.isArray(g)?t(g):t([g]))}}(l),new e.Token(i,l,"language-"+i,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in c&&function t(n){for(var r=0,o=n.length;r<o;r++){var a,i,s,c=n[r];"string"!=typeof c&&(a=c.content,Array.isArray(a)?"template-string"===c.type?(c=a[1],3===a.length&&"string"!=typeof c&&"embedded-code"===c.type&&(i=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,s=e.languages[c])&&(a[1]=l(i,s,c))):t(a):"string"!=typeof a&&t([a]))}}(t.tokens)}))}(C),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(C),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(C),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(C),C.languages.n4js=C.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),C.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),C.languages.n4jsd=C.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];o=(a="RegExp"===e.util.type(a)?e.languages.javascript[o]={pattern:a}:a).inside||{};(a.inside=o)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(C),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}function i(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;"string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===s(o.content[0].content[1])&&n.pop():"/>"!==o.content[o.content.length-1].content&&n.push({tagName:s(o.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&0<n.length&&0===n[n.length-1].openedBraces&&(a=s(o),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(a+=s(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(a=s(t[r-1])+a,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",a,null,a)),o.content&&"string"!=typeof o.content&&i(o.content)}}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var s=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(s).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||i(e.tokens)}))}(C),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(C),C.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},C.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=C.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(C),C.languages.c=C.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),C.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),C.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},C.languages.c.string],char:C.languages.c.char,comment:C.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:C.languages.c}}}}),C.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete C.languages.c.boolean,C.languages.objectivec=C.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete C.languages.objectivec["class-name"],C.languages.objc=C.languages.objectivec,C.languages.reason=C.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),C.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete C.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(C),C.languages.go=C.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),C.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete C.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(C),C.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},C.languages.python["string-interpolation"].inside.interpolation.inside.rest=C.languages.python,C.languages.py=C.languages.python;((e,t)=>{for(var n in t)p(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>T,duotoneDark:()=>L,duotoneLight:()=>j,github:()=>P,jettwaveDark:()=>q,jettwaveLight:()=>H,nightOwl:()=>R,nightOwlLight:()=>A,oceanicNext:()=>D,okaidia:()=>I,oneDark:()=>Q,oneLight:()=>Z,palenight:()=>F,shadesOfPurple:()=>M,synthwave84:()=>z,ultramin:()=>B,vsDark:()=>$,vsLight:()=>U});var T={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},L={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},j={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},P={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},R={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},A={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},N="#c5a5c5",O="#8dc891",D={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:N}},{types:["attr-value"],style:{color:O}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:O}},{types:["punctuation"],style:{color:O}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:N}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},I={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},F={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},M={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},z={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},B={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},$={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},U={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},q={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},H={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},Q={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},Z={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},V=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:o}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=x(x({},e[t]),o);e[t]=n})),e}),{});return r.root=n,r.plain=S(x({},n),{backgroundColor:void 0}),r},W=/\r\n|\r|\n/,G=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},K=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},Y=e=>{const t=[[]],n=[e],r=[0],o=[e.length];let a=0,i=0,s=[];const l=[s];for(;i>-1;){for(;(a=r[i]++)<o[i];){let e,c=t[i];const u=n[i][a];if("string"==typeof u?(c=i>0?c:["plain"],e=u):(c=K(c,u.type),u.alias&&(c=K(c,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(c),n.push(e),r.push(0),o.push(e.length);continue}const d=e.split(W),p=d.length;s.push({types:c,content:d[0]});for(let t=1;t<p;t++)G(s),l.push(s=[]),s.push({types:c,content:d[t]})}i--,t.pop(),n.pop(),r.pop(),o.pop()}return G(s),l},X=({children:e,language:t,code:n,theme:o,prism:i})=>{const s=t.toLowerCase(),l=((e,t)=>{const[n,o]=(0,r.useState)(V(t,e)),a=(0,r.useRef)(),i=(0,r.useRef)();return(0,r.useEffect)((()=>{t===a.current&&e===i.current||(a.current=t,i.current=e,o(V(t,e)))}),[e,t]),n})(s,o),c=(e=>(0,r.useCallback)((t=>{var n=t,{className:r,style:o,line:i}=n,s=E(n,["className","style","line"]);const l=S(x({},s),{className:a("token-line",r)});return"object"==typeof e&&"plain"in e&&(l.style=e.plain),"object"==typeof o&&(l.style=x(x({},l.style||{}),o)),l}),[e]))(l),u=(e=>{const t=(0,r.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,r.useCallback)((e=>{var n=e,{token:r,className:o,style:i}=n,s=E(n,["token","className","style"]);const l=S(x({},s),{className:a("token",...r.types,o),children:r.content,style:t(r)});return null!=i&&(l.style=x(x({},l.style||{}),i)),l}),[t])})(l),d=(({prism:e,code:t,grammar:n,language:o})=>{const a=(0,r.useRef)(e);return(0,r.useMemo)((()=>{if(null==n)return Y([t]);const e={code:t,grammar:n,language:o,tokens:[]};return a.current.hooks.run("before-tokenize",e),e.tokens=a.current.tokenize(t,n),a.current.hooks.run("after-tokenize",e),Y(e.tokens)}),[t,n,o])})({prism:i,language:s,code:n,grammar:i.languages[s]});return e({tokens:d,className:`prism-code language-${s}`,style:null!=l?l.root:{},getLineProps:c,getTokenProps:u})},J=e=>(0,r.createElement)(X,S(x({},e),{prism:e.prism||C,theme:e.theme||$,code:e.code,language:e.language}))},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports={}},6887:e=>{"use strict";e.exports=JSON.parse('{"/blog-62a":{"__comp":"a6aa9e1f","__context":{"plugin":"065c701c"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"f4f34a3a"},{"content":"8717b14a"},{"content":"925b3f96"}],"metadata":"b2b675dd"},"/blog/archive-818":{"__comp":"9e4087bc","__context":{"plugin":"065c701c"},"archive":"b2f554cd"},"/blog/first-blog-post-0b3":{"__comp":"ccc49370","__context":{"plugin":"065c701c"},"sidebar":"814f3328","content":"e273c56f"},"/blog/long-blog-post-a48":{"__comp":"ccc49370","__context":{"plugin":"065c701c"},"sidebar":"814f3328","content":"73664a40"},"/blog/mdx-blog-post-f6d":{"__comp":"ccc49370","__context":{"plugin":"065c701c"},"sidebar":"814f3328","content":"59362658"},"/blog/tags-3c3":{"__comp":"01a85c17","__context":{"plugin":"065c701c"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/docusaurus-e09":{"__comp":"6875c492","__context":{"plugin":"065c701c"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"f4f34a3a"},{"content":"8717b14a"},{"content":"925b3f96"}],"tag":"a80da1cf","listMetadata":"608ae6a4"},"/blog/tags/facebook-66f":{"__comp":"6875c492","__context":{"plugin":"065c701c"},"sidebar":"814f3328","items":[{"content":"7661071f"}],"tag":"031793e1","listMetadata":"096bfee4"},"/blog/tags/hello-f71":{"__comp":"6875c492","__context":{"plugin":"065c701c"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"8717b14a"}],"tag":"30a24c52","listMetadata":"66406991"},"/blog/tags/hola-fee":{"__comp":"6875c492","__context":{"plugin":"065c701c"},"sidebar":"814f3328","items":[{"content":"925b3f96"}],"tag":"e16015ca","listMetadata":"4c9e35b1"},"/blog/welcome-4bd":{"__comp":"ccc49370","__context":{"plugin":"065c701c"},"sidebar":"814f3328","content":"d9f32620"},"/search-af0":{"__comp":"1a4e3797","__context":{"plugin":"5373dce7"}},"/docs-88f":{"__comp":"5e95c892","__context":{"plugin":"6c88006d"}},"/docs-ff6":{"__comp":"a7bd4aaa","version":"935f2afb"},"/docs-886":{"__comp":"a94703ab"},"/docs/dao-f08":{"__comp":"17896441","content":"cbc5934e"},"/docs/dao/faq-93b":{"__comp":"17896441","content":"a83bdfda"},"/docs/dao/liquidity-mining-f84":{"__comp":"17896441","content":"89600f1f"},"/docs/dao/node-basics-5aa":{"__comp":"17896441","content":"027d004c"},"/docs/dao/node-drop-188":{"__comp":"17896441","content":"f557db91"},"/docs/dao/node-stream-e47":{"__comp":"17896441","content":"7ef68c32"},"/docs/dev-921":{"__comp":"17896441","content":"950718c7"},"/docs/dev/github-actions-769":{"__comp":"17896441","content":"8c6013e9"},"/docs/dev/references/docker-compose-7b3":{"__comp":"17896441","content":"82063238"},"/docs/dev/references/manifest-6e9":{"__comp":"17896441","content":"2a82f816"},"/docs/dev/references/setup-wizard-900":{"__comp":"17896441","content":"94131f31"},"/docs/dev/sdk/commands-665":{"__comp":"17896441","content":"7b2e8791"},"/docs/dev/sdk/overview-4c1":{"__comp":"17896441","content":"67625ece"},"/docs/smooth-9c0":{"__comp":"17896441","content":"34d45c9f"},"/docs/smooth/deep-dive-into-smooth/oracle-sm-986":{"__comp":"17896441","content":"1ee5c5d2"},"/docs/smooth/deep-dive-into-smooth/overview-79c":{"__comp":"17896441","content":"090ba480"},"/docs/smooth/deep-dive-into-smooth/rewards-20c":{"__comp":"17896441","content":"cdc6bc37"},"/docs/smooth/deep-dive-into-smooth/states-3a4":{"__comp":"17896441","content":"3fac1d53"},"/docs/smooth/faq-glossary-d7a":{"__comp":"17896441","content":"0af727f1"},"/docs/smooth/subscribe-to-smooth/automatic-53c":{"__comp":"17896441","content":"b9c10046"},"/docs/smooth/subscribe-to-smooth/manual-dd2":{"__comp":"17896441","content":"2c509ddc"},"/docs/smooth/subscribe-to-smooth/overview-713":{"__comp":"17896441","content":"773dc9fa"},"/docs/smooth/unsubscribe-from-smooth-032":{"__comp":"17896441","content":"6e93d9f5"},"/docs/user/access-your-dappnode/local-24f":{"__comp":"17896441","content":"5456a9ed"},"/docs/user/access-your-dappnode/overview-e1d":{"__comp":"17896441","content":"3f7aee3c"},"/docs/user/access-your-dappnode/terminal-4de":{"__comp":"17896441","content":"0f7f07eb"},"/docs/user/access-your-dappnode/vpn/openvpn-39c":{"__comp":"17896441","content":"5b35db5e"},"/docs/user/access-your-dappnode/vpn/overview-ff5":{"__comp":"17896441","content":"5f877448"},"/docs/user/access-your-dappnode/vpn/wireguard-40b":{"__comp":"17896441","content":"e28e223d"},"/docs/user/access-your-dappnode/wifi-60d":{"__comp":"17896441","content":"dfcea9c7"},"/docs/user/dappnode-cloud/overview-8a1":{"__comp":"17896441","content":"3093fe32"},"/docs/user/dappnode-cloud/providers/aws/faqs-ff8":{"__comp":"17896441","content":"fcb270fb"},"/docs/user/dappnode-cloud/providers/aws/overview-a22":{"__comp":"17896441","content":"0429b4a1"},"/docs/user/dappnode-cloud/providers/aws/set-up-instance-a3c":{"__comp":"17896441","content":"89e2558e"},"/docs/user/dappnode-cloud/providers/coming-soon-971":{"__comp":"17896441","content":"6e504cb9"},"/docs/user/ethical-metrics/metrics-b30":{"__comp":"17896441","content":"25229465"},"/docs/user/ethical-metrics/overview-059":{"__comp":"17896441","content":"20034248"},"/docs/user/ethical-metrics/setup-0d8":{"__comp":"17896441","content":"59a51c52"},"/docs/user/ethical-metrics/troubleshooting-373":{"__comp":"17896441","content":"a9241739"},"/docs/user/faqs-884":{"__comp":"17896441","content":"536a4320"},"/docs/user/getting-started/access-dappnode-via-wifi-920":{"__comp":"17896441","content":"90558919"},"/docs/user/getting-started/choose-your-path-daf":{"__comp":"17896441","content":"5d0a1dad"},"/docs/user/getting-started/connect-dappnode-to-the-router-90c":{"__comp":"17896441","content":"747b92bf"},"/docs/user/getting-started/next-steps-4fe":{"__comp":"17896441","content":"d267b4aa"},"/docs/user/getting-started/register-fff":{"__comp":"17896441","content":"c7a466cb"},"/docs/user/getting-started/setup-901":{"__comp":"17896441","content":"8ec292b8"},"/docs/user/hardware/maintenance-546":{"__comp":"17896441","content":"2057bc77"},"/docs/user/hardware/overview-c38":{"__comp":"17896441","content":"5d665ce0"},"/docs/user/hardware/temperature-676":{"__comp":"17896441","content":"769f9326"},"/docs/user/install/arm-89f":{"__comp":"17896441","content":"d61c7726"},"/docs/user/install/dappnode-commands-109":{"__comp":"17896441","content":"ef41a71b"},"/docs/user/install/iso-3bd":{"__comp":"17896441","content":"9e93dc42"},"/docs/user/install/overview-0da":{"__comp":"17896441","content":"c38c9aa9"},"/docs/user/install/script-2a7":{"__comp":"17896441","content":"22a3df87"},"/docs/user/packages/avalanche-201":{"__comp":"17896441","content":"dfbda110"},"/docs/user/packages/bitcoin-216":{"__comp":"17896441","content":"d47e1b16"},"/docs/user/packages/dms-412":{"__comp":"17896441","content":"1e4f1bb9"},"/docs/user/packages/ethclassic-6d5":{"__comp":"17896441","content":"e7ae4afa"},"/docs/user/packages/monero-b8c":{"__comp":"17896441","content":"53ed655b"},"/docs/user/packages/signature-7f0":{"__comp":"17896441","content":"91e54d81"},"/docs/user/packages/swarm-444":{"__comp":"17896441","content":"a960b763"},"/docs/user/packages/understanding-dappnode-packages-5b2":{"__comp":"17896441","content":"caaf4754"},"/docs/user/repository/ethereum-657":{"__comp":"17896441","content":"d912498a"},"/docs/user/repository/ipfs-8c2":{"__comp":"17896441","content":"af26485d"},"/docs/user/rollups/optimism-cfe":{"__comp":"17896441","content":"0085f636"},"/docs/user/rollups/overview-a8a":{"__comp":"17896441","content":"b4800274"},"/docs/user/staking/ethereum/dvt-technologies/diva-cf2":{"__comp":"17896441","content":"8f981d3f"},"/docs/user/staking/ethereum/dvt-technologies/obol-network-770":{"__comp":"17896441","content":"4d8f6977"},"/docs/user/staking/ethereum/dvt-technologies/ssv-network-085":{"__comp":"17896441","content":"e7fcc526"},"/docs/user/staking/ethereum/lsd-pools/rocketpool-fa6":{"__comp":"17896441","content":"ed77d0ad"},"/docs/user/staking/ethereum/lsd-pools/stakehouse-42f":{"__comp":"17896441","content":"e26c9afe"},"/docs/user/staking/ethereum/lsd-pools/stakewise-ee5":{"__comp":"17896441","content":"a33eb6a8"},"/docs/user/staking/ethereum/solo/holesky-301":{"__comp":"17896441","content":"14c20d3a"},"/docs/user/staking/ethereum/solo/mainnet-951":{"__comp":"17896441","content":"d6c02fb6"},"/docs/user/staking/gnosis-chain/solo-1f9":{"__comp":"17896441","content":"eef43c71"},"/docs/user/staking/lukso/solo-a2e":{"__comp":"17896441","content":"d36fd63a"},"/docs/user/staking/overview-93e":{"__comp":"17896441","content":"058440e4"},"/docs/user/videos-and-tutorials/crash-course-a95":{"__comp":"17896441","content":"c9627cbc"},"/docs/user/videos-and-tutorials/driving-school/configuration-8d6":{"__comp":"17896441","content":"4c4b1a63"},"/docs/user/videos-and-tutorials/driving-school/initial-setup-59c":{"__comp":"17896441","content":"89b6dee8"},"/docs/user/videos-and-tutorials/guides/connect-node-1da":{"__comp":"17896441","content":"f744a4d0"},"/docs/user/videos-and-tutorials/overview-a86":{"__comp":"17896441","content":"d508510a"},"/-4a5":{"__comp":"1df93b7f","__context":{"plugin":"0aa77f7e"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=7221,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.a30bed04.js.LICENSE.txt b/assets/js/main.50f3b005.js.LICENSE.txt similarity index 77% rename from assets/js/main.a30bed04.js.LICENSE.txt rename to assets/js/main.50f3b005.js.LICENSE.txt index fbc063517..5b49ae636 100644 --- a/assets/js/main.a30bed04.js.LICENSE.txt +++ b/assets/js/main.50f3b005.js.LICENSE.txt @@ -1,9 +1,3 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress * @license MIT */ @@ -63,16 +57,22 @@ object-assign * Copyright (C) 2020 Oliver Nightingale */ -/*!*************************************************** -* mark.js v8.11.1 -* https://markjs.io/ -* Copyright (c) 2014–2018, Julian Kühnel -* Released under the MIT license https://git.io/vwTVl -*****************************************************/ +/*! Bundled license information: + +prismjs/prism.js: + (** + * Prism: Lightweight, robust, elegant syntax highlighting + * + * @license MIT <https://opensource.org/licenses/MIT> + * @author Lea Verou <https://lea.verou.me> + * @namespace + * @public + *) +*/ /** * @license React - * use-sync-external-store-shim.production.min.js + * react-dom.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -81,22 +81,8 @@ object-assign */ /** - * Prism: Lightweight, robust, elegant syntax highlighting - * - * @license MIT <https://opensource.org/licenses/MIT> - * @author Lea Verou <https://lea.verou.me> - * @namespace - * @public - */ - -/** - * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 - * Copyright (C) 2020 Oliver Nightingale - * @license MIT - */ - -/** @license React v0.20.2 - * scheduler.production.min.js + * @license React + * react-jsx-runtime.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -104,8 +90,9 @@ object-assign * LICENSE file in the root directory of this source tree. */ -/** @license React v16.13.1 - * react-is.production.min.js +/** + * @license React + * react.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -113,8 +100,9 @@ object-assign * LICENSE file in the root directory of this source tree. */ -/** @license React v17.0.2 - * react-dom.production.min.js +/** + * @license React + * scheduler.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * @@ -122,8 +110,14 @@ object-assign * LICENSE file in the root directory of this source tree. */ -/** @license React v17.0.2 - * react.production.min.js +/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + */ + +/** @license React v16.13.1 + * react-is.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * diff --git a/assets/js/main.a30bed04.js b/assets/js/main.a30bed04.js deleted file mode 100644 index 26c7ba920..000000000 --- a/assets/js/main.a30bed04.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.a30bed04.js.LICENSE.txt */ -(self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[]).push([[179],{997:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),s=n(6887);const l={"0085f636":[()=>n.e(8925).then(n.bind(n,6146)),"@site/docs/user/rollups/optimism.md",6146],"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,2864)),"@theme/BlogTagsListPage",2864],"027d004c":[()=>n.e(8352).then(n.bind(n,8131)),"@site/docs/dao/node-basics.md",8131],"031793e1":[()=>n.e(1633).then(n.t.bind(n,2511,19)),"~blog/default/blog-tags-facebook-038.json",2511],"0429b4a1":[()=>n.e(6197).then(n.bind(n,6296)),"@site/docs/user/dappnode-cloud/providers/aws/overview.md",6296],"058440e4":[()=>n.e(3964).then(n.bind(n,1713)),"@site/docs/user/staking/overview.md",1713],"065c701c":[()=>n.e(7197).then(n.t.bind(n,4469,19)),"/home/runner/work/DAppNodeDocs/DAppNodeDocs/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"090ba480":[()=>n.e(5788).then(n.bind(n,6521)),"@site/docs/smooth/deep-dive-into-smooth/overview.md",6521],"096bfee4":[()=>n.e(7178).then(n.t.bind(n,5010,19)),"~blog/default/blog-tags-facebook-038-list.json",5010],"0aa77f7e":[()=>n.e(4585).then(n.t.bind(n,5745,19)),"/home/runner/work/DAppNodeDocs/DAppNodeDocs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"0af727f1":[()=>n.e(8999).then(n.bind(n,8190)),"@site/docs/smooth/faq-glossary.md",8190],"0f7f07eb":[()=>n.e(7675).then(n.bind(n,5881)),"@site/docs/user/access-your-dappnode/terminal.md",5881],"14c20d3a":[()=>n.e(903).then(n.bind(n,2774)),"@site/docs/user/staking/ethereum/solo/holesky.md",2774],17896441:[()=>Promise.all([n.e(532),n.e(2410),n.e(7918)]).then(n.bind(n,2692)),"@theme/DocItem",2692],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,1299)),"@theme/DocPage",1299],"1df93b7f":[()=>Promise.all([n.e(532),n.e(3237)]).then(n.bind(n,2833)),"@site/src/pages/index.tsx",2833],"1e4f1bb9":[()=>n.e(1323).then(n.bind(n,7459)),"@site/docs/user/packages/dms.md",7459],"1ee5c5d2":[()=>n.e(3389).then(n.bind(n,1837)),"@site/docs/smooth/deep-dive-into-smooth/oracle-sm.md",1837],20034248:[()=>n.e(3743).then(n.bind(n,242)),"@site/docs/user/ethical-metrics/overview.md",242],"2057bc77":[()=>n.e(5091).then(n.bind(n,1835)),"@site/docs/user/hardware/maintenance.md",1835],"22a3df87":[()=>n.e(2559).then(n.bind(n,8732)),"@site/docs/user/install/script.md",8732],25229465:[()=>n.e(4952).then(n.bind(n,3579)),"@site/docs/user/ethical-metrics/metrics.md",3579],"2a82f816":[()=>n.e(437).then(n.bind(n,6267)),"@site/docs/dev/references/manifest.md",6267],"2c509ddc":[()=>n.e(4840).then(n.bind(n,9700)),"@site/docs/smooth/subscribe-to-smooth/manual.md",9700],"3093fe32":[()=>n.e(641).then(n.bind(n,8782)),"@site/docs/user/dappnode-cloud/overview.md",8782],"30a24c52":[()=>n.e(453).then(n.t.bind(n,8605,19)),"~blog/default/blog-tags-hello-039.json",8605],"34d45c9f":[()=>n.e(7089).then(n.bind(n,6416)),"@site/docs/smooth.md",6416],"3f7aee3c":[()=>n.e(9779).then(n.bind(n,4990)),"@site/docs/user/access-your-dappnode/overview.md",4990],"3fac1d53":[()=>n.e(7533).then(n.bind(n,1406)),"@site/docs/smooth/deep-dive-into-smooth/states.md",1406],"4c4b1a63":[()=>n.e(3504).then(n.bind(n,7322)),"@site/docs/user/videos-and-tutorials/driving-school/configuration.md",7322],"4c9e35b1":[()=>n.e(9035).then(n.t.bind(n,499,19)),"~blog/default/blog-tags-hola-ea2-list.json",499],"4d8f6977":[()=>n.e(5815).then(n.bind(n,7693)),"@site/docs/user/staking/ethereum/dvt-technologies/obol-network.md",7693],"536a4320":[()=>n.e(9374).then(n.bind(n,8712)),"@site/docs/user/faqs.md",8712],"53ed655b":[()=>n.e(5708).then(n.bind(n,665)),"@site/docs/user/packages/monero.md",665],"5456a9ed":[()=>n.e(1600).then(n.bind(n,2737)),"@site/docs/user/access-your-dappnode/local.md",2737],59362658:[()=>n.e(2267).then(n.bind(n,1910)),"@site/blog/2021-08-01-mdx-blog-post.mdx",1910],"59a51c52":[()=>n.e(4980).then(n.bind(n,6958)),"@site/docs/user/ethical-metrics/setup.md",6958],"5b35db5e":[()=>n.e(7775).then(n.bind(n,3470)),"@site/docs/user/access-your-dappnode/vpn/openvpn.md",3470],"5d0a1dad":[()=>n.e(306).then(n.bind(n,8083)),"@site/docs/user/getting-started/choose-your-path.md",8083],"5d665ce0":[()=>n.e(8646).then(n.bind(n,9934)),"@site/docs/user/hardware/overview.md",9934],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"5f877448":[()=>n.e(839).then(n.bind(n,2955)),"@site/docs/user/access-your-dappnode/vpn/overview.md",2955],"608ae6a4":[()=>n.e(6938).then(n.t.bind(n,4545,19)),"~blog/default/blog-tags-docusaurus-0e0-list.json",4545],66406991:[()=>n.e(110).then(n.t.bind(n,711,19)),"~blog/default/blog-tags-hello-039-list.json",711],"67625ece":[()=>n.e(120).then(n.bind(n,236)),"@site/docs/dev/sdk/overview.md",236],"6875c492":[()=>Promise.all([n.e(532),n.e(2410),n.e(207),n.e(8610)]).then(n.bind(n,4883)),"@theme/BlogTagsPostsPage",4883],"6c88006d":[()=>n.e(1285).then(n.t.bind(n,3769,19)),"/home/runner/work/DAppNodeDocs/DAppNodeDocs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"6e504cb9":[()=>n.e(9402).then(n.bind(n,5898)),"@site/docs/user/dappnode-cloud/providers/coming-soon.md",5898],"6e93d9f5":[()=>n.e(935).then(n.bind(n,3612)),"@site/docs/smooth/unsubscribe-from-smooth.md",3612],"73664a40":[()=>n.e(3514).then(n.bind(n,6866)),"@site/blog/2019-05-29-long-blog-post.md",6866],"747b92bf":[()=>n.e(4743).then(n.bind(n,1488)),"@site/docs/user/getting-started/connect-dappnode-to-the-router.md",1488],"7661071f":[()=>n.e(9642).then(n.bind(n,1362)),"@site/blog/2021-08-26-welcome/index.md?truncated=true",1362],"769f9326":[()=>n.e(8233).then(n.bind(n,3441)),"@site/docs/user/hardware/temperature.md",3441],"773dc9fa":[()=>n.e(6471).then(n.bind(n,1020)),"@site/docs/smooth/subscribe-to-smooth/overview.md",1020],"7b2e8791":[()=>n.e(8804).then(n.bind(n,5900)),"@site/docs/dev/sdk/commands.md",5900],"7ef68c32":[()=>n.e(3036).then(n.bind(n,2495)),"@site/docs/dao/node-stream.md",2495],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],82063238:[()=>n.e(9984).then(n.bind(n,1504)),"@site/docs/dev/references/docker-compose.md",1504],"8717b14a":[()=>n.e(948).then(n.bind(n,8812)),"@site/blog/2019-05-29-long-blog-post.md?truncated=true",8812],"89600f1f":[()=>n.e(5599).then(n.bind(n,6993)),"@site/docs/dao/liquidity-mining.md",6993],"89b6dee8":[()=>n.e(3423).then(n.bind(n,4073)),"@site/docs/user/videos-and-tutorials/driving-school/initial-setup.md",4073],"89e2558e":[()=>n.e(5510).then(n.bind(n,2969)),"@site/docs/user/dappnode-cloud/providers/aws/set-up-instance.md",2969],"8c6013e9":[()=>n.e(6110).then(n.bind(n,1631)),"@site/docs/dev/github-actions.md",1631],"8ec292b8":[()=>n.e(9058).then(n.bind(n,8152)),"@site/docs/user/getting-started/setup.md",8152],"8f981d3f":[()=>n.e(6967).then(n.bind(n,2779)),"@site/docs/user/staking/ethereum/dvt-technologies/diva.md",2779],90558919:[()=>n.e(5458).then(n.bind(n,4289)),"@site/docs/user/getting-started/access-dappnode-via-wifi.md",4289],"91e54d81":[()=>n.e(2642).then(n.bind(n,7253)),"@site/docs/user/packages/signature.md",7253],"925b3f96":[()=>n.e(9003).then(n.bind(n,3858)),"@site/blog/2019-05-28-first-blog-post.md?truncated=true",3858],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"94131f31":[()=>n.e(4307).then(n.bind(n,8566)),"@site/docs/dev/references/setup-wizard.md",8566],"950718c7":[()=>n.e(1796).then(n.bind(n,5670)),"@site/docs/dev.md",5670],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8151)),"@theme/BlogArchivePage",8151],"9e93dc42":[()=>n.e(938).then(n.bind(n,8795)),"@site/docs/user/install/iso.md",8795],a33eb6a8:[()=>n.e(3680).then(n.bind(n,2601)),"@site/docs/user/staking/ethereum/lsd-pools/stakewise.md",2601],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(2410),n.e(207),n.e(3089)]).then(n.bind(n,9928)),"@theme/BlogListPage",9928],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],a80da1cf:[()=>n.e(3205).then(n.t.bind(n,4863,19)),"~blog/default/blog-tags-docusaurus-0e0.json",4863],a83bdfda:[()=>n.e(8769).then(n.bind(n,7200)),"@site/docs/dao/faq.md",7200],a9241739:[()=>n.e(3295).then(n.bind(n,7207)),"@site/docs/user/ethical-metrics/troubleshooting.md",7207],a960b763:[()=>n.e(7484).then(n.bind(n,4452)),"@site/docs/user/packages/swarm.md",4452],af26485d:[()=>n.e(2217).then(n.bind(n,4843)),"@site/docs/user/repository/ipfs.md",4843],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],b4800274:[()=>n.e(5561).then(n.bind(n,1e3)),"@site/docs/user/rollups/overview.md",1e3],b9c10046:[()=>n.e(4765).then(n.bind(n,1740)),"@site/docs/smooth/subscribe-to-smooth/automatic.md",1740],c38c9aa9:[()=>n.e(8330).then(n.bind(n,5224)),"@site/docs/user/install/overview.md",5224],c7a466cb:[()=>n.e(78).then(n.bind(n,6497)),"@site/docs/user/getting-started/register.md",6497],c9627cbc:[()=>n.e(468).then(n.bind(n,3581)),"@site/docs/user/videos-and-tutorials/crash-course.md",3581],caaf4754:[()=>n.e(5914).then(n.bind(n,6420)),"@site/docs/user/packages/understanding-dappnode-packages.md",6420],cbc5934e:[()=>n.e(651).then(n.bind(n,828)),"@site/docs/dao.md",828],ccc49370:[()=>Promise.all([n.e(532),n.e(2410),n.e(207),n.e(6103)]).then(n.bind(n,324)),"@theme/BlogPostPage",324],cdc6bc37:[()=>n.e(4407).then(n.bind(n,6514)),"@site/docs/smooth/deep-dive-into-smooth/rewards.md",6514],d267b4aa:[()=>n.e(7563).then(n.bind(n,8809)),"@site/docs/user/getting-started/next-steps.md",8809],d36fd63a:[()=>n.e(6593).then(n.bind(n,2401)),"@site/docs/user/staking/lukso/solo.md",2401],d47e1b16:[()=>n.e(9739).then(n.bind(n,4001)),"@site/docs/user/packages/bitcoin.md",4001],d508510a:[()=>n.e(2245).then(n.bind(n,3599)),"@site/docs/user/videos-and-tutorials/overview.md",3599],d61c7726:[()=>n.e(5940).then(n.bind(n,6210)),"@site/docs/user/install/arm.md",6210],d6c02fb6:[()=>n.e(3633).then(n.bind(n,5758)),"@site/docs/user/staking/ethereum/solo/mainnet.md",5758],d912498a:[()=>n.e(6209).then(n.bind(n,5938)),"@site/docs/user/repository/ethereum.md",5938],d9f32620:[()=>n.e(1914).then(n.bind(n,2152)),"@site/blog/2021-08-26-welcome/index.md",2152],dfbda110:[()=>n.e(8162).then(n.bind(n,7345)),"@site/docs/user/packages/avalanche.md",7345],dfcea9c7:[()=>n.e(2441).then(n.bind(n,7351)),"@site/docs/user/access-your-dappnode/wifi.md",7351],e16015ca:[()=>n.e(9700).then(n.t.bind(n,5688,19)),"~blog/default/blog-tags-hola-ea2.json",5688],e26c9afe:[()=>n.e(1206).then(n.bind(n,92)),"@site/docs/user/staking/ethereum/lsd-pools/stakehouse.md",92],e273c56f:[()=>n.e(2362).then(n.bind(n,8502)),"@site/blog/2019-05-28-first-blog-post.md",8502],e28e223d:[()=>n.e(9091).then(n.bind(n,9350)),"@site/docs/user/access-your-dappnode/vpn/wireguard.md",9350],e7ae4afa:[()=>n.e(190).then(n.bind(n,5887)),"@site/docs/user/packages/ethclassic.md",5887],e7fcc526:[()=>n.e(5447).then(n.bind(n,4612)),"@site/docs/user/staking/ethereum/dvt-technologies/ssv-network.md",4612],ed77d0ad:[()=>n.e(3218).then(n.bind(n,8016)),"@site/docs/user/staking/ethereum/lsd-pools/rocketpool.md",8016],eef43c71:[()=>n.e(7365).then(n.bind(n,8754)),"@site/docs/user/staking/gnosis-chain/solo.md",8754],ef41a71b:[()=>n.e(4588).then(n.bind(n,7886)),"@site/docs/user/install/dappnode-commands.md",7886],f4f34a3a:[()=>n.e(8636).then(n.bind(n,6712)),"@site/blog/2021-08-01-mdx-blog-post.mdx?truncated=true",6712],f557db91:[()=>n.e(4543).then(n.bind(n,9109)),"@site/docs/dao/node-drop.md",9109],f744a4d0:[()=>n.e(1605).then(n.bind(n,979)),"@site/docs/user/videos-and-tutorials/guides/connect-node.md",979],fcb270fb:[()=>n.e(7410).then(n.bind(n,7707)),"@site/docs/user/dappnode-cloud/providers/aws/faqs.md",7707]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(5304),d=n(9656);function p(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4248).then(n.bind(n,4248)),modules:["@theme/NotFound"],webpack:()=>[4248],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=s[`${e}-${t}`],p={},f=[],m=[],h=(0,c.Z)(a);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=l[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const s=n.split(".");s.slice(0,-1).forEach((e=>{a=a[e]})),a[s[s.length-1]]=o}));const s=i.__comp;delete i.__comp;const l=i.__context;return delete i.__context,r.createElement(d.z,{value:l},r.createElement(s,(0,o.Z)({},i,n)))}})}const f=[{path:"/blog",component:p("/blog","62a"),exact:!0},{path:"/blog/archive",component:p("/blog/archive","818"),exact:!0},{path:"/blog/first-blog-post",component:p("/blog/first-blog-post","0b3"),exact:!0},{path:"/blog/long-blog-post",component:p("/blog/long-blog-post","a48"),exact:!0},{path:"/blog/mdx-blog-post",component:p("/blog/mdx-blog-post","f6d"),exact:!0},{path:"/blog/tags",component:p("/blog/tags","3c3"),exact:!0},{path:"/blog/tags/docusaurus",component:p("/blog/tags/docusaurus","e09"),exact:!0},{path:"/blog/tags/facebook",component:p("/blog/tags/facebook","66f"),exact:!0},{path:"/blog/tags/hello",component:p("/blog/tags/hello","f71"),exact:!0},{path:"/blog/tags/hola",component:p("/blog/tags/hola","fee"),exact:!0},{path:"/blog/welcome",component:p("/blog/welcome","4bd"),exact:!0},{path:"/docs",component:p("/docs","48c"),routes:[{path:"/docs/dao",component:p("/docs/dao","f08"),exact:!0,sidebar:"daoSidebar"},{path:"/docs/dao/faq",component:p("/docs/dao/faq","93b"),exact:!0,sidebar:"daoSidebar"},{path:"/docs/dao/liquidity-mining",component:p("/docs/dao/liquidity-mining","f84"),exact:!0,sidebar:"daoSidebar"},{path:"/docs/dao/node-basics",component:p("/docs/dao/node-basics","5aa"),exact:!0,sidebar:"daoSidebar"},{path:"/docs/dao/node-drop",component:p("/docs/dao/node-drop","188"),exact:!0},{path:"/docs/dao/node-stream",component:p("/docs/dao/node-stream","e47"),exact:!0},{path:"/docs/dev",component:p("/docs/dev","921"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/github-actions",component:p("/docs/dev/github-actions","769"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/references/docker-compose",component:p("/docs/dev/references/docker-compose","7b3"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/references/manifest",component:p("/docs/dev/references/manifest","6e9"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/references/setup-wizard",component:p("/docs/dev/references/setup-wizard","900"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/sdk/commands",component:p("/docs/dev/sdk/commands","665"),exact:!0,sidebar:"devSidebar"},{path:"/docs/dev/sdk/overview",component:p("/docs/dev/sdk/overview","4c1"),exact:!0,sidebar:"devSidebar"},{path:"/docs/smooth",component:p("/docs/smooth","9c0"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/oracle-sm",component:p("/docs/smooth/deep-dive-into-smooth/oracle-sm","986"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/overview",component:p("/docs/smooth/deep-dive-into-smooth/overview","79c"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/rewards",component:p("/docs/smooth/deep-dive-into-smooth/rewards","20c"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/deep-dive-into-smooth/states",component:p("/docs/smooth/deep-dive-into-smooth/states","3a4"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/faq-glossary",component:p("/docs/smooth/faq-glossary","d7a"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/subscribe-to-smooth/automatic",component:p("/docs/smooth/subscribe-to-smooth/automatic","53c"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/subscribe-to-smooth/manual",component:p("/docs/smooth/subscribe-to-smooth/manual","dd2"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/subscribe-to-smooth/overview",component:p("/docs/smooth/subscribe-to-smooth/overview","713"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/smooth/unsubscribe-from-smooth",component:p("/docs/smooth/unsubscribe-from-smooth","032"),exact:!0,sidebar:"smoothSidebar"},{path:"/docs/user/access-your-dappnode/local",component:p("/docs/user/access-your-dappnode/local","24f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/overview",component:p("/docs/user/access-your-dappnode/overview","e1d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/terminal",component:p("/docs/user/access-your-dappnode/terminal","4de"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/vpn/openvpn",component:p("/docs/user/access-your-dappnode/vpn/openvpn","39c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/vpn/overview",component:p("/docs/user/access-your-dappnode/vpn/overview","ff5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/vpn/wireguard",component:p("/docs/user/access-your-dappnode/vpn/wireguard","40b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/access-your-dappnode/wifi",component:p("/docs/user/access-your-dappnode/wifi","60d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/overview",component:p("/docs/user/dappnode-cloud/overview","8a1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/providers/aws/faqs",component:p("/docs/user/dappnode-cloud/providers/aws/faqs","ff8"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/providers/aws/overview",component:p("/docs/user/dappnode-cloud/providers/aws/overview","a22"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/providers/aws/set-up-instance",component:p("/docs/user/dappnode-cloud/providers/aws/set-up-instance","a3c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/dappnode-cloud/providers/coming-soon",component:p("/docs/user/dappnode-cloud/providers/coming-soon","971"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/ethical-metrics/metrics",component:p("/docs/user/ethical-metrics/metrics","b30"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/ethical-metrics/overview",component:p("/docs/user/ethical-metrics/overview","059"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/ethical-metrics/setup",component:p("/docs/user/ethical-metrics/setup","0d8"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/ethical-metrics/troubleshooting",component:p("/docs/user/ethical-metrics/troubleshooting","373"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/faqs",component:p("/docs/user/faqs","884"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/access-dappnode-via-wifi",component:p("/docs/user/getting-started/access-dappnode-via-wifi","920"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/choose-your-path",component:p("/docs/user/getting-started/choose-your-path","daf"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/connect-dappnode-to-the-router",component:p("/docs/user/getting-started/connect-dappnode-to-the-router","90c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/next-steps",component:p("/docs/user/getting-started/next-steps","4fe"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/register",component:p("/docs/user/getting-started/register","fff"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/getting-started/setup",component:p("/docs/user/getting-started/setup","901"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/maintenance",component:p("/docs/user/hardware/maintenance","546"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/overview",component:p("/docs/user/hardware/overview","c38"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/temperature",component:p("/docs/user/hardware/temperature","676"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/arm",component:p("/docs/user/install/arm","89f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/dappnode-commands",component:p("/docs/user/install/dappnode-commands","109"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/iso",component:p("/docs/user/install/iso","3bd"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/overview",component:p("/docs/user/install/overview","0da"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/install/script",component:p("/docs/user/install/script","2a7"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/avalanche",component:p("/docs/user/packages/avalanche","201"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/bitcoin",component:p("/docs/user/packages/bitcoin","216"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/dms",component:p("/docs/user/packages/dms","412"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/ethclassic",component:p("/docs/user/packages/ethclassic","6d5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/monero",component:p("/docs/user/packages/monero","b8c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/signature",component:p("/docs/user/packages/signature","7f0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/swarm",component:p("/docs/user/packages/swarm","444"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/packages/understanding-dappnode-packages",component:p("/docs/user/packages/understanding-dappnode-packages","5b2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/repository/ethereum",component:p("/docs/user/repository/ethereum","657"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/repository/ipfs",component:p("/docs/user/repository/ipfs","8c2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/rollups/optimism",component:p("/docs/user/rollups/optimism","cfe"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/rollups/overview",component:p("/docs/user/rollups/overview","a8a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/dvt-technologies/diva",component:p("/docs/user/staking/ethereum/dvt-technologies/diva","cf2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/dvt-technologies/obol-network",component:p("/docs/user/staking/ethereum/dvt-technologies/obol-network","770"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/dvt-technologies/ssv-network",component:p("/docs/user/staking/ethereum/dvt-technologies/ssv-network","085"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/rocketpool",component:p("/docs/user/staking/ethereum/lsd-pools/rocketpool","fa6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/stakehouse",component:p("/docs/user/staking/ethereum/lsd-pools/stakehouse","42f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/lsd-pools/stakewise",component:p("/docs/user/staking/ethereum/lsd-pools/stakewise","ee5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/solo/holesky",component:p("/docs/user/staking/ethereum/solo/holesky","301"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/ethereum/solo/mainnet",component:p("/docs/user/staking/ethereum/solo/mainnet","951"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/gnosis-chain/solo",component:p("/docs/user/staking/gnosis-chain/solo","1f9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/lukso/solo",component:p("/docs/user/staking/lukso/solo","a2e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/staking/overview",component:p("/docs/user/staking/overview","93e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/crash-course",component:p("/docs/user/videos-and-tutorials/crash-course","a95"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/driving-school/configuration",component:p("/docs/user/videos-and-tutorials/driving-school/configuration","8d6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/driving-school/initial-setup",component:p("/docs/user/videos-and-tutorials/driving-school/initial-setup","59c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/guides/connect-node",component:p("/docs/user/videos-and-tutorials/guides/connect-node","1da"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/videos-and-tutorials/overview",component:p("/docs/user/videos-and-tutorials/overview","a86"),exact:!0}]},{path:"/",component:p("/","4a5"),exact:!0},{path:"*",component:p("*")}]},5351:(e,t,n)=>{var r,o;!function(){var a,i,s,l,u,c,d,p,f,m,h,g,v,b,y,w,S,k,E,_,x,O,P,C,T,I,A,N,L,j,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},R.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},R.FieldRef.joiner="/",R.FieldRef.fromString=function(e){var t=e.indexOf(R.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new R.FieldRef(r,n,e)},R.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+R.FieldRef.joiner+this.docRef),this._stringValue},R.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},R.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},R.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},R.Set.prototype.contains=function(e){return!!this.elements[e]},R.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===R.Set.complete)return this;if(e===R.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new R.Set(o)},R.Set.prototype.union=function(e){return e===R.Set.complete?R.Set.complete:e===R.Set.empty?this:new R.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},R.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},R.Token=function(e,t){this.str=e||"",this.metadata=t||{}},R.Token.prototype.toString=function(){return this.str},R.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},R.Token.prototype.clone=function(e){return e=e||function(e){return e},new R.Token(e(this.str,this.metadata),this.metadata)},R.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new R.Token(R.utils.asString(e).toLowerCase(),R.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var s=a-i;if(n.charAt(a).match(R.tokenizer.separator)||a==r){if(s>0){var l=R.utils.clone(t)||{};l.position=[i,s],l.index=o.length,o.push(new R.Token(n.slice(i,a),l))}i=a+1}}return o},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var s=0;s<i.length;s++)o.push(i[s]);else o.push(i)}e=o}return e},R.Pipeline.prototype.runString=function(e,t){var n=new R.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},R.Pipeline.prototype.reset=function(){this._stack=[]},R.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return R.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},R.Vector=function(e){this._magnitude=0,this.elements=e||[]},R.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},R.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},R.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},R.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},R.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,s=0,l=0,u=0;l<o&&u<a;)(i=n[l])<(s=r[u])?l+=2:i>s?u+=2:i==s&&(t+=n[l+1]*r[u+1],l+=2,u+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},R.Vector.prototype.toJSON=function(){return this.elements},R.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},s={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},d="^("+(u="[^aeiou][^aeiouy]*")+")?"+(c=(l="[aeiouy]")+"[aeiou]*")+u+"("+c+")?$",p="^("+u+")?"+c+u+c+u,f="^("+u+")?"+l,m=new RegExp("^("+u+")?"+c+u),h=new RegExp(p),g=new RegExp(d),v=new RegExp(f),b=/^(.+?)(ss|i)es$/,y=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,S=/^(.+?)(ed|ing)$/,k=/.$/,E=/(at|bl|iz)$/,_=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+u+l+"[^aeiouwxy]$"),O=/^(.+?[^aeiou])y$/,P=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,C=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,T=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,I=/^(.+?)(s|t)(ion)$/,A=/^(.+?)e$/,N=/ll$/,L=new RegExp("^"+u+l+"[^aeiouwxy]$"),j=function(e){var t,n,r,o,a,l,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=y,(o=b).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=S,(o=w).test(e)){var c=o.exec(e);(o=m).test(c[1])&&(o=k,e=e.replace(o,""))}else a.test(e)&&(t=(c=a.exec(e))[1],(a=v).test(t)&&(l=_,u=x,(a=E).test(e=t)?e+="e":l.test(e)?(o=k,e=e.replace(o,"")):u.test(e)&&(e+="e")));return(o=O).test(e)&&(e=(t=(c=o.exec(e))[1])+"i"),(o=P).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+i[n])),(o=C).test(e)&&(t=(c=o.exec(e))[1],n=c[2],(o=m).test(t)&&(e=t+s[n])),a=I,(o=T).test(e)?(t=(c=o.exec(e))[1],(o=h).test(t)&&(e=t)):a.test(e)&&(t=(c=a.exec(e))[1]+c[2],(a=h).test(t)&&(e=t)),(o=A).test(e)&&(t=(c=o.exec(e))[1],a=g,l=L,((o=h).test(t)||a.test(t)&&!l.test(t))&&(e=t)),a=h,(o=N).test(e)&&a.test(e)&&(o=k,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(j)}),R.Pipeline.registerFunction(R.stemmer,"stemmer"),R.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},R.stopWordFilter=R.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),R.Pipeline.registerFunction(R.stopWordFilter,"stopWordFilter"),R.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},R.Pipeline.registerFunction(R.trimmer,"trimmer"),R.TokenSet=function(){this.final=!1,this.edges={},this.id=R.TokenSet._nextId,R.TokenSet._nextId+=1},R.TokenSet._nextId=1,R.TokenSet.fromArray=function(e){for(var t=new R.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},R.TokenSet.fromClause=function(e){return"editDistance"in e?R.TokenSet.fromFuzzyString(e.term,e.editDistance):R.TokenSet.fromString(e.term)},R.TokenSet.fromFuzzyString=function(e,t){for(var n=new R.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new R.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new R.TokenSet;o.node.edges["*"]=s}if(0==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new R.TokenSet;o.node.edges["*"]=l}1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new R.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var s=new R.TokenSet;s.final=i,t.edges[a]=s,t=s}}return n},R.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},R.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},R.TokenSet.prototype.intersect=function(e){for(var t=new R.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),s=i.length,l=0;l<a;l++)for(var u=o[l],c=0;c<s;c++){var d=i[c];if(d==u||"*"==u){var p=n.node.edges[d],f=n.qNode.edges[u],m=p.final&&f.final,h=void 0;d in n.output.edges?(h=n.output.edges[d]).final=h.final||m:((h=new R.TokenSet).final=m,n.output.edges[d]=h),r.push({qNode:f,output:h,node:p})}}}return t},R.TokenSet.Builder=function(){this.previousWord="",this.root=new R.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},R.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new R.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},R.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},R.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),s=0;s<this.fields.length;s++)r[this.fields[s]]=new R.Vector;e.call(t,t);for(s=0;s<t.clauses.length;s++){var l=t.clauses[s],u=null,c=R.Set.empty;u=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var d=0;d<u.length;d++){var p=u[d];l.term=p;var f=R.TokenSet.fromClause(l),m=this.tokenSet.intersect(f).toArray();if(0===m.length&&l.presence===R.Query.presence.REQUIRED){for(var h=0;h<l.fields.length;h++){a[A=l.fields[h]]=R.Set.empty}break}for(var g=0;g<m.length;g++){var v=m[g],b=this.invertedIndex[v],y=b._index;for(h=0;h<l.fields.length;h++){var w=b[A=l.fields[h]],S=Object.keys(w),k=v+"/"+A,E=new R.Set(S);if(l.presence==R.Query.presence.REQUIRED&&(c=c.union(E),void 0===a[A]&&(a[A]=R.Set.complete)),l.presence!=R.Query.presence.PROHIBITED){if(r[A].upsert(y,l.boost,(function(e,t){return e+t})),!o[k]){for(var _=0;_<S.length;_++){var x,O=S[_],P=new R.FieldRef(O,A),C=w[O];void 0===(x=n[P])?n[P]=new R.MatchData(v,A,C):x.add(v,A,C)}o[k]=!0}}else void 0===i[A]&&(i[A]=R.Set.empty),i[A]=i[A].union(E)}}}if(l.presence===R.Query.presence.REQUIRED)for(h=0;h<l.fields.length;h++){a[A=l.fields[h]]=a[A].intersect(c)}}var T=R.Set.complete,I=R.Set.empty;for(s=0;s<this.fields.length;s++){var A;a[A=this.fields[s]]&&(T=T.intersect(a[A])),i[A]&&(I=I.union(i[A]))}var N=Object.keys(n),L=[],j=Object.create(null);if(t.isNegated()){N=Object.keys(this.fieldVectors);for(s=0;s<N.length;s++){P=N[s];var D=R.FieldRef.fromString(P);n[P]=new R.MatchData}}for(s=0;s<N.length;s++){var M=(D=R.FieldRef.fromString(N[s])).docRef;if(T.contains(M)&&!I.contains(M)){var F,B=this.fieldVectors[D],z=r[D.fieldName].similarity(B);if(void 0!==(F=j[M]))F.score+=z,F.matchData.combine(n[D]);else{var U={ref:M,score:z,matchData:n[D]};j[M]=U,L.push(U)}}}return L.sort((function(e,t){return t.score-e.score}))},R.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:R.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},R.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new R.TokenSet.Builder,s=R.Pipeline.load(e.pipeline);e.version!=R.version&&R.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+R.version+"' does not match serialized index '"+e.version+"'");for(var l=0;l<r.length;l++){var u=(d=r[l])[0],c=d[1];n[u]=new R.Vector(c)}for(l=0;l<a.length;l++){var d,p=(d=a[l])[0],f=d[1];i.insert(p),o[p]=f}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=s,new R.Index(t)},R.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=R.tokenizer,this.pipeline=new R.Pipeline,this.searchPipeline=new R.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},R.Builder.prototype.ref=function(e){this._ref=e},R.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},R.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,s=this._fields[a].isLiteral??!1,l=i?i(e):e[a],u=s?[l]:this.tokenizer(l,{fields:[a]}),c=s?u:this.pipeline.run(u),d=new R.FieldRef(n,a),p=Object.create(null);this.fieldTermFrequencies[d]=p,this.fieldLengths[d]=0,this.fieldLengths[d]+=c.length;for(var f=0;f<c.length;f++){var m=c[f];if(null==p[m]&&(p[m]=0),p[m]+=1,null==this.invertedIndex[m]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var g=0;g<r.length;g++)h[r[g]]=Object.create(null);this.invertedIndex[m]=h}null==this.invertedIndex[m][a][n]&&(this.invertedIndex[m][a][n]=Object.create(null));for(var v=0;v<this.metadataWhitelist.length;v++){var b=this.metadataWhitelist[v],y=m.metadata[b];null==this.invertedIndex[m][a][n][b]&&(this.invertedIndex[m][a][n][b]=[]),this.invertedIndex[m][a][n][b].push(y)}}}},R.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=R.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var s=Object.keys(this._fields);for(o=0;o<s.length;o++){var l=s[o];n[l]=n[l]/r[l]}this.averageFieldLength=n},R.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=R.FieldRef.fromString(t[o]),i=a.fieldName,s=this.fieldLengths[a],l=new R.Vector,u=this.fieldTermFrequencies[a],c=Object.keys(u),d=c.length,p=this._fields[i].boost||1,f=this._documents[a.docRef].boost||1,m=0;m<d;m++){var h,g,v,b=c[m],y=u[b],w=this.invertedIndex[b]._index;void 0===r[b]?(h=R.idf(this.invertedIndex[b],this.documentCount),r[b]=h):h=r[b],g=h*((this._k1+1)*y)/(this._k1*(1-this._b+this._b*(s/this.averageFieldLength[i]))+y),g*=p,g*=f,v=Math.round(1e3*g)/1e3,l.insert(w,v)}e[a]=l}this.fieldVectors=e},R.Builder.prototype.createTokenSet=function(){this.tokenSet=R.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},R.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new R.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},R.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},R.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},R.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],s=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var l=0;l<s.length;l++){var u=s[l];null==this.metadata[r][i][u]?this.metadata[r][i][u]=e.metadata[r][i][u]:this.metadata[r][i][u]=this.metadata[r][i][u].concat(e.metadata[r][i][u])}}}},R.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},R.Query=function(e){this.clauses=[],this.allFields=e},R.Query.wildcard=new String("*"),R.Query.wildcard.NONE=0,R.Query.wildcard.LEADING=1,R.Query.wildcard.TRAILING=2,R.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},R.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=R.Query.wildcard.NONE),e.wildcard&R.Query.wildcard.LEADING&&e.term.charAt(0)!=R.Query.wildcard&&(e.term="*"+e.term),e.wildcard&R.Query.wildcard.TRAILING&&e.term.slice(-1)!=R.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=R.Query.presence.OPTIONAL),this.clauses.push(e),this},R.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=R.Query.presence.PROHIBITED)return!1;return!0},R.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,R.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},R.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},R.QueryParseError.prototype=new Error,R.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},R.QueryLexer.prototype.run=function(){for(var e=R.QueryLexer.lexText;e;)e=e(this)},R.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},R.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},R.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},R.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos<this.length},R.QueryLexer.EOS="EOS",R.QueryLexer.FIELD="FIELD",R.QueryLexer.TERM="TERM",R.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",R.QueryLexer.BOOST="BOOST",R.QueryLexer.PRESENCE="PRESENCE",R.QueryLexer.lexField=function(e){return e.backup(),e.emit(R.QueryLexer.FIELD),e.ignore(),R.QueryLexer.lexText},R.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(r.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new R.QueryParseError(r,t.start,t.end)}if(o.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return R})?r.call(t,n,t,e):r)||(e.exports=o)}()},8121:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},654:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),s=n(6136);const l=[n(984),n(2251),n(9957),n(6930)];var u=n(997),c=n(6550),d=n(8790);function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var f=n(7462),m=n(1514),h=n(9962),g=n(9524),v=n(107),b=n(5463),y=n(626),w=n(8181),S=n(246),k=n(3647);function E(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,h.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),o=function(){const{siteConfig:{url:e}}=(0,h.Z)(),{pathname:t}=(0,c.TH)();return e+(0,g.Z)(t)}(),a=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function x(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,v.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(b.d,{image:n}),r.createElement(_,null),r.createElement(E,null),r.createElement(k.Z,{tag:S.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,f.Z)({key:t},e))))))}const O=new Map;function P(e){if(O.has(e.pathname))return{...e,pathname:O.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return O.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return O.set(e.pathname,t),{...e,pathname:t}}var C=n(8121),T=n(694);function I(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=l.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const A=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),I("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function N(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class L extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?I("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=I("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),N(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(A,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const j=L,R="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",M="__docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function B(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${R}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${D}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${M}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${M}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function z(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,r.useLayoutEffect)((()=>{window[F]=!1}),[]),r.createElement(r.Fragment,null,!s.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,B(e))),r.createElement("div",{id:R}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(z,null):null}function $(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,h.Z)(),i=(0,g.Z)(e),{htmlLang:s,direction:l}=a[o];return r.createElement(m.Z,null,r.createElement("html",{lang:s,dir:l}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var q=n(3256);function H(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(q.Z,null,r.createElement(T.M,null,r.createElement(C.t,null,r.createElement(p,null,r.createElement($,null),r.createElement(x,null),r.createElement(U,null),r.createElement(j,{location:P(t)},e)))))}var G=n(6887);const Q=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var V=n(5304);const Z=new Set,W=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,Y={prefetch(e){if(!(e=>!K()&&!W.has(e)&&!Z.has(e))(e))return!1;Z.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,V.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Q(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!W.has(e))(e)&&(W.add(e),N(e))},X=Object.freeze(Y);if(s.Z.canUseDOM){window.docusaurus=X;const e=o.hydrate;N(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},694:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"user/getting-started/choose-your-path","docs":[{"id":"dao","path":"/docs/dao","sidebar":"daoSidebar"},{"id":"dao/faq","path":"/docs/dao/faq","sidebar":"daoSidebar"},{"id":"dao/liquidity-mining","path":"/docs/dao/liquidity-mining","sidebar":"daoSidebar"},{"id":"dao/node-basics","path":"/docs/dao/node-basics","sidebar":"daoSidebar"},{"id":"dao/node-drop","path":"/docs/dao/node-drop"},{"id":"dao/node-stream","path":"/docs/dao/node-stream"},{"id":"dev","path":"/docs/dev","sidebar":"devSidebar"},{"id":"dev/github-actions","path":"/docs/dev/github-actions","sidebar":"devSidebar"},{"id":"dev/references/docker-compose","path":"/docs/dev/references/docker-compose","sidebar":"devSidebar"},{"id":"dev/references/manifest","path":"/docs/dev/references/manifest","sidebar":"devSidebar"},{"id":"dev/references/setup-wizard","path":"/docs/dev/references/setup-wizard","sidebar":"devSidebar"},{"id":"dev/sdk/commands","path":"/docs/dev/sdk/commands","sidebar":"devSidebar"},{"id":"dev/sdk/overview","path":"/docs/dev/sdk/overview","sidebar":"devSidebar"},{"id":"smooth","path":"/docs/smooth","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/oracle-sm","path":"/docs/smooth/deep-dive-into-smooth/oracle-sm","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/overview","path":"/docs/smooth/deep-dive-into-smooth/overview","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/rewards","path":"/docs/smooth/deep-dive-into-smooth/rewards","sidebar":"smoothSidebar"},{"id":"smooth/deep-dive-into-smooth/states","path":"/docs/smooth/deep-dive-into-smooth/states","sidebar":"smoothSidebar"},{"id":"smooth/faq-glossary","path":"/docs/smooth/faq-glossary","sidebar":"smoothSidebar"},{"id":"smooth/subscribe-to-smooth/automatic","path":"/docs/smooth/subscribe-to-smooth/automatic","sidebar":"smoothSidebar"},{"id":"smooth/subscribe-to-smooth/manual","path":"/docs/smooth/subscribe-to-smooth/manual","sidebar":"smoothSidebar"},{"id":"smooth/subscribe-to-smooth/overview","path":"/docs/smooth/subscribe-to-smooth/overview","sidebar":"smoothSidebar"},{"id":"smooth/unsubscribe-from-smooth","path":"/docs/smooth/unsubscribe-from-smooth","sidebar":"smoothSidebar"},{"id":"user/access-your-dappnode/local","path":"/docs/user/access-your-dappnode/local","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/overview","path":"/docs/user/access-your-dappnode/overview","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/terminal","path":"/docs/user/access-your-dappnode/terminal","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/vpn/openvpn","path":"/docs/user/access-your-dappnode/vpn/openvpn","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/vpn/overview","path":"/docs/user/access-your-dappnode/vpn/overview","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/vpn/wireguard","path":"/docs/user/access-your-dappnode/vpn/wireguard","sidebar":"userSidebar"},{"id":"user/access-your-dappnode/wifi","path":"/docs/user/access-your-dappnode/wifi","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/overview","path":"/docs/user/dappnode-cloud/overview","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/providers/aws/faqs","path":"/docs/user/dappnode-cloud/providers/aws/faqs","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/providers/aws/overview","path":"/docs/user/dappnode-cloud/providers/aws/overview","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/providers/aws/set-up-instance","path":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","sidebar":"userSidebar"},{"id":"user/dappnode-cloud/providers/coming-soon","path":"/docs/user/dappnode-cloud/providers/coming-soon","sidebar":"userSidebar"},{"id":"user/ethical-metrics/metrics","path":"/docs/user/ethical-metrics/metrics","sidebar":"userSidebar"},{"id":"user/ethical-metrics/overview","path":"/docs/user/ethical-metrics/overview","sidebar":"userSidebar"},{"id":"user/ethical-metrics/setup","path":"/docs/user/ethical-metrics/setup","sidebar":"userSidebar"},{"id":"user/ethical-metrics/troubleshooting","path":"/docs/user/ethical-metrics/troubleshooting","sidebar":"userSidebar"},{"id":"user/faqs","path":"/docs/user/faqs","sidebar":"userSidebar"},{"id":"user/getting-started/access-dappnode-via-wifi","path":"/docs/user/getting-started/access-dappnode-via-wifi","sidebar":"userSidebar"},{"id":"user/getting-started/choose-your-path","path":"/docs/user/getting-started/choose-your-path","sidebar":"userSidebar"},{"id":"user/getting-started/connect-dappnode-to-the-router","path":"/docs/user/getting-started/connect-dappnode-to-the-router","sidebar":"userSidebar"},{"id":"user/getting-started/next-steps","path":"/docs/user/getting-started/next-steps","sidebar":"userSidebar"},{"id":"user/getting-started/register","path":"/docs/user/getting-started/register","sidebar":"userSidebar"},{"id":"user/getting-started/setup","path":"/docs/user/getting-started/setup","sidebar":"userSidebar"},{"id":"user/hardware/maintenance","path":"/docs/user/hardware/maintenance","sidebar":"userSidebar"},{"id":"user/hardware/overview","path":"/docs/user/hardware/overview","sidebar":"userSidebar"},{"id":"user/hardware/temperature","path":"/docs/user/hardware/temperature","sidebar":"userSidebar"},{"id":"user/install/arm","path":"/docs/user/install/arm","sidebar":"userSidebar"},{"id":"user/install/dappnode-commands","path":"/docs/user/install/dappnode-commands","sidebar":"userSidebar"},{"id":"user/install/iso","path":"/docs/user/install/iso","sidebar":"userSidebar"},{"id":"user/install/overview","path":"/docs/user/install/overview","sidebar":"userSidebar"},{"id":"user/install/script","path":"/docs/user/install/script","sidebar":"userSidebar"},{"id":"user/packages/avalanche","path":"/docs/user/packages/avalanche","sidebar":"userSidebar"},{"id":"user/packages/bitcoin","path":"/docs/user/packages/bitcoin","sidebar":"userSidebar"},{"id":"user/packages/dms","path":"/docs/user/packages/dms","sidebar":"userSidebar"},{"id":"user/packages/ethclassic","path":"/docs/user/packages/ethclassic","sidebar":"userSidebar"},{"id":"user/packages/monero","path":"/docs/user/packages/monero","sidebar":"userSidebar"},{"id":"user/packages/signature","path":"/docs/user/packages/signature","sidebar":"userSidebar"},{"id":"user/packages/swarm","path":"/docs/user/packages/swarm","sidebar":"userSidebar"},{"id":"user/packages/understanding-dappnode-packages","path":"/docs/user/packages/understanding-dappnode-packages","sidebar":"userSidebar"},{"id":"user/repository/ethereum","path":"/docs/user/repository/ethereum","sidebar":"userSidebar"},{"id":"user/repository/ipfs","path":"/docs/user/repository/ipfs","sidebar":"userSidebar"},{"id":"user/rollups/optimism","path":"/docs/user/rollups/optimism","sidebar":"userSidebar"},{"id":"user/rollups/overview","path":"/docs/user/rollups/overview","sidebar":"userSidebar"},{"id":"user/staking/ethereum/dvt-technologies/diva","path":"/docs/user/staking/ethereum/dvt-technologies/diva","sidebar":"userSidebar"},{"id":"user/staking/ethereum/dvt-technologies/obol-network","path":"/docs/user/staking/ethereum/dvt-technologies/obol-network","sidebar":"userSidebar"},{"id":"user/staking/ethereum/dvt-technologies/ssv-network","path":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/rocketpool","path":"/docs/user/staking/ethereum/lsd-pools/rocketpool","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/stakehouse","path":"/docs/user/staking/ethereum/lsd-pools/stakehouse","sidebar":"userSidebar"},{"id":"user/staking/ethereum/lsd-pools/stakewise","path":"/docs/user/staking/ethereum/lsd-pools/stakewise","sidebar":"userSidebar"},{"id":"user/staking/ethereum/solo/holesky","path":"/docs/user/staking/ethereum/solo/holesky","sidebar":"userSidebar"},{"id":"user/staking/ethereum/solo/mainnet","path":"/docs/user/staking/ethereum/solo/mainnet","sidebar":"userSidebar"},{"id":"user/staking/gnosis-chain/solo","path":"/docs/user/staking/gnosis-chain/solo","sidebar":"userSidebar"},{"id":"user/staking/lukso/solo","path":"/docs/user/staking/lukso/solo","sidebar":"userSidebar"},{"id":"user/staking/overview","path":"/docs/user/staking/overview","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/crash-course","path":"/docs/user/videos-and-tutorials/crash-course","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/driving-school/configuration","path":"/docs/user/videos-and-tutorials/driving-school/configuration","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/driving-school/initial-setup","path":"/docs/user/videos-and-tutorials/driving-school/initial-setup","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/guides/connect-node","path":"/docs/user/videos-and-tutorials/guides/connect-node","sidebar":"userSidebar"},{"id":"user/videos-and-tutorials/overview","path":"/docs/user/videos-and-tutorials/overview"}],"draftIds":[],"sidebars":{"userSidebar":{"link":{"path":"/docs/user/getting-started/choose-your-path","label":"Choose your path"}},"devSidebar":{"link":{"path":"/docs/dev","label":"dev"}},"smoothSidebar":{"link":{"path":"/docs/smooth","label":"smooth"}},"daoSidebar":{"link":{"path":"/docs/dao","label":"dao"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(7529);const l=JSON.parse('{"docusaurusVersion":"2.4.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.1.0"}}}'),u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},3256:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(6136),a=n(1514),i=n(3905),s=n(1009);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(p,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(s.Z,null,r.createElement(l,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},6136:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},1514:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},3699:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7462),o=n(7294),a=n(3727),i=n(3905),s=n(9962),l=n(2735),u=n(6136);const c=o.createContext({collectLink:()=>{}});var d=n(9524);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:h,"data-noBrokenLinkCheck":g,autoAddBaseUrl:v=!0,...b}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,s.Z)(),{withBaseUrl:S}=(0,d.C)(),k=(0,o.useContext)(c),E=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>E.current));const _=p||f;const x=(0,l.Z)(_),O=_?.replace("pathname://","");let P=void 0!==O?(C=O,v&&(e=>e.startsWith("/"))(C)?S(C):C):void 0;var C;P&&x&&(P=(0,i.applyTrailingSlash)(P,{trailingSlash:y,baseUrl:w}));const T=(0,o.useRef)(!1),I=n?a.OL:a.rU,A=u.Z.canUseIntersectionObserver,N=(0,o.useRef)(),L=()=>{T.current||null==P||(window.docusaurus.preload(P),T.current=!0)};(0,o.useEffect)((()=>(!A&&x&&null!=P&&window.docusaurus.prefetch(P),()=>{A&&N.current&&N.current.disconnect()})),[N,P,A,x]);const j=P?.startsWith("#")??!1,R=!P||!x||j;return R||g||k.collectLink(P),R?o.createElement("a",(0,r.Z)({ref:E,href:P},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},b)):o.createElement(I,(0,r.Z)({},b,{onMouseEnter:L,onTouchStart:L,innerRef:e=>{E.current=e,A&&e&&x&&(N.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(N.current.unobserve(e),N.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),N.current.observe(e))},to:P},n&&{isActive:h,activeClassName:m}))}const f=o.forwardRef(p)},7325:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l,I:()=>s});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function l(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const s=i({message:t,id:n});return r.createElement(r.Fragment,null,o(s,a))}},6875:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},2735:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},9524:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(7294),o=n(9962),a=n(2735);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},9962:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(694);function a(){return(0,r.useContext)(o._)}},1610:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(9962),o=n(6875);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},1048:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(8121);function a(){return(0,r.useContext)(o._)}},5304:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},9656:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},868:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>h,gA:()=>d,WS:()=>p,_r:()=>u,Jo:()=>g,zh:()=>c,yW:()=>m,gB:()=>f});var r=n(6550),o=n(1610);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=a(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function s(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const l={},u=()=>(0,o.OD)("docusaurus-plugin-content-docs")??l,c=e=>(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function p(e){void 0===e&&(e={});const t=d(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function f(e){return c(e).versions}function m(e){const t=c(e);return a(t)}function h(e){const t=c(e),{pathname:n}=(0,r.TH)();return s(t,n)}function g(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},9957:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},2251:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},4082:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},1009:(e,t,n)=>{"use strict";n.d(t,{Z:()=>oi});var r=n(7294),o=n(6010),a=n(3256),i=n(5463),s=n(7462),l=n(6550),u=n(7325),c=n(3266);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,l.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??m,{containerRef:n,onClick:o}=f();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,s.Z)({},e,{href:`#${d}`,onClick:o}),t))}var g=n(3702),v=n(8181);const b={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(h,{className:b.skipToContent})}var w=n(107),S=n(5830);function k(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...l}=e;return r.createElement("svg",(0,s.Z)({viewBox:"0 0 15 15",width:t,height:n},l),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const E={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,s.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",E.closeButton,e.className)}),r.createElement(k,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,s.Z)({},e,{className:(0,o.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const P={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,S.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:P.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:P.announcementBarPlaceholder}),r.createElement(O,{className:P.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:P.announcementBarClose}))}var T=n(2600),I=n(2957);var A=n(3768),N=n(3086);const L=r.createContext(null);function j(e){let{children:t}=e;const n=function(){const e=(0,T.e)(),t=(0,N.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,A.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(L.Provider,{value:n},t)}function R(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(L);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,N.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var F=n(9200),B=n(1048);function z(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function U(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const $={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function q(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const s=(0,B.Z)(),l=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===a?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)($.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",$.toggleButton,!s&&$.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!s,title:l,"aria-label":l,"aria-live":"polite"},r.createElement(z,{className:(0,o.Z)($.toggleIcon,$.lightToggleIcon)}),r.createElement(U,{className:(0,o.Z)($.toggleIcon,$.darkToggleIcon)})))}const H=r.memo(q),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function Q(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,F.I)();return o?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var V=n(6811);function Z(){return r.createElement(V.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function W(){const e=(0,T.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(k,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(Z,null),r.createElement(Q,{className:"margin-right--md"}),r.createElement(W,null))}var Y=n(3699),X=n(9524),J=n(2735);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(4082);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:l,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const p=(0,X.Z)(o),f=(0,X.Z)(t),m=(0,X.Z)(a,{forcePrependBaseUrl:!0}),h=i&&a&&!(0,J.Z)(a),g=l?{dangerouslySetInnerHTML:{__html:l}}:{children:r.createElement(r.Fragment,null,i,h&&r.createElement(te.Z,u&&{width:12,height:12}))};return a?r.createElement(Y.Z,(0,s.Z)({href:c?m:a},d,g)):r.createElement(Y.Z,(0,s.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},d,g))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,s.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,s.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,s.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(4639),se=n(9003),le=n(9962);function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:a,onClick:i,...l}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,s.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:l.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},l,{onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),l.children??l.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(va,(0,s.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,l.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p})},r.createElement(ne,(0,s.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),f()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>r.createElement(va,(0,s.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function pe(e){let{mobile:t=!1,...n}=e;const o=t?de:ce;return r.createElement(o,n)}var fe=n(626);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const he="iconLanguage_nlXk";var ge=n(3935);function ve(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;a<r;a++)o[a]=arguments[a];n&&clearTimeout(n),n=setTimeout((function(){return e.apply(void 0,o)}),t)}}function be(e){return{current:e}}function ye(e){return e!==Object(e)}function we(e,t){if(e===t)return!0;if(ye(e)||ye(t)||"function"==typeof e||"function"==typeof t)return e===t;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(var n=0,r=Object.keys(e);n<r.length;n++){var o=r[n];if(!(o in t))return!1;if(!we(e[o],t[o]))return!1}return!0}var Se=function(){};function ke(e){var t=e.item,n=e.items,r=void 0===n?[]:n;return{index:t.__autocomplete_indexName,items:[t],positions:[1+r.findIndex((function(e){return e.objectID===t.objectID}))],queryID:t.__autocomplete_queryID,algoliaSource:["autocomplete"]}}function Ee(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,o,a,i,s=[],l=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(c){u=!0,o=c}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return _e(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _e(e,t)}(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 _e(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var xe=["items"],Oe=["items"];function Pe(e){return Pe="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},Pe(e)}function Ce(e){return function(e){if(Array.isArray(e))return Te(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Te(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Te(e,t)}(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 Te(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ie(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ne(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ae(Object(n),!0).forEach((function(t){Le(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ae(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Le(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Pe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Pe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Pe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function je(e){return e.map((function(e){var t=e.items,n=Ie(e,xe);return Ne(Ne({},n),{},{objectIDs:(null==t?void 0:t.map((function(e){return e.objectID})))||n.objectIDs})}))}function Re(e){var t=function(e){var t=Ee((e.version||"").split(".").map(Number),2),n=t[0],r=t[1];return n>=3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(Ce(r),[{headers:i}]))}else e.apply(void 0,[n].concat(Ce(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDsAfterSearch",je(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("clickedObjectIDs",je(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDsAfterSearch",je(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&n("convertedObjectIDs",je(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];t.length>0&&t.reduce((function(e,t){var n=t.items,r=Ie(t,Oe);return[].concat(Ce(e),Ce(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r<e.objectIDs.length;r+=t)n.push(Ne(Ne({},e),{},{objectIDs:e.objectIDs.slice(r,r+t)}));return n}(Ne(Ne({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return n("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];n.length>0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function De(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Me(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function Fe(e){return Fe="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},Fe(e)}function Be(e){return function(e){if(Array.isArray(e))return ze(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ze(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(e,t)}(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 ze(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Ue(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ue(Object(n),!0).forEach((function(t){qe(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ue(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function qe(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Fe(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Fe(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Fe(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var He="2.6.0",Ge="https://cdn.jsdelivr.net/npm/search-insights@".concat(He,"/dist/search-insights.min.js"),Qe=ve((function(e){var t=e.onItemsChange,n=e.items,r=e.insights,o=e.state;t({insights:r,insightsEvents:De({items:n}).map((function(e){return $e({eventName:"Items Viewed"},e)})),state:o})}),400);function Ve(e){var t=function(e){return $e({onItemsChange:function(e){var t=e.insights,n=e.insightsEvents;t.viewedObjectIDs.apply(t,Be(n.map((function(e){return $e($e({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onSelect:function(e){var t=e.insights,n=e.insightsEvents;t.clickedObjectIDsAfterSearch.apply(t,Be(n.map((function(e){return $e($e({},e),{},{algoliaSource:[].concat(Be(e.algoliaSource||[]),["autocomplete-internal"])})}))))},onActive:Se},e)}(e),n=t.insightsClient,r=t.onItemsChange,o=t.onSelect,a=t.onActive,i=n;n||function(e){if("undefined"!=typeof window)e({window:window})}((function(e){var t=e.window,n=t.AlgoliaAnalyticsObject||"aa";"string"==typeof n&&(i=t[n]),i||(t.AlgoliaAnalyticsObject=n,t[n]||(t[n]=function(){t[n].queue||(t[n].queue=[]);for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];t[n].queue.push(r)}),t[n].version=He,i=t[n],function(e){var t="[Autocomplete]: Could not load search-insights.js. Please load it manually following https://alg.li/insights-autocomplete";try{var n=e.document.createElement("script");n.async=!0,n.src=Ge,n.onerror=function(){console.error(t)},document.body.appendChild(n)}catch(r){console.error(t)}}(t))}));var s=Re(i),l=be([]),u=ve((function(e){var t=e.state;if(t.isOpen){var n=t.collections.reduce((function(e,t){return[].concat(Be(e),Be(t.items))}),[]).filter(Me);we(l.current.map((function(e){return e.objectID})),n.map((function(e){return e.objectID})))||(l.current=n,n.length>0&&Qe({onItemsChange:r,items:n,insights:s,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;i("addAlgoliaAgent","insights-plugin"),t({algoliaInsightsPlugin:{__algoliaSearchParameters:{clickAnalytics:!0},insights:s}}),n((function(e){var t=e.item,n=e.state,r=e.event,a=e.source;Me(t)&&o({state:n,event:r,insights:s,item:t,insightsEvents:[$e({eventName:"Item Selected"},ke({item:t,items:a.getItems().filter(Me)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;Me(t)&&a({state:r,event:o,insights:s,item:t,insightsEvents:[$e({eventName:"Item Active"},ke({item:t,items:n.getItems().filter(Me)}))]})}))},onStateChange:function(e){var t=e.state;u({state:t})},__autocomplete_pluginOptions:e}}function Ze(e){return Ze="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},Ze(e)}function We(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ke(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Ze(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Ze(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Ze(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ye(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?We(Object(n),!0).forEach((function(t){Ke(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):We(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}({},o);o=e(o,{type:r,props:t,payload:a}),n({state:o,prevState:i})},pendingRequests:(r=[],{add:function(e){return r.push(e),e.finally((function(){r=r.filter((function(t){return t!==e}))}))},cancelAll:function(){r.forEach((function(e){return e.cancel()}))},isEmpty:function(){return 0===r.length}})}}function Xe(e){return e.reduce((function(e,t){return e.concat(t)}),[])}function Je(e){return Je="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},Je(e)}function et(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?et(Object(n),!0).forEach((function(t){nt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):et(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Je(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Je(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Je(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rt(e){return 0===e.collections.length?0:e.collections.reduce((function(e,t){return e+t.items.length}),0)}var ot=0;function at(){return"autocomplete-".concat(ot++)}function it(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function st(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?it(Object(n),!0).forEach((function(t){lt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):it(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function lt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ut(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ut(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ut(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ut(e){return ut="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},ut(e)}function ct(e){return ct="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},ct(e)}function dt(e){return function(e){if(Array.isArray(e))return pt(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return pt(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return pt(e,t)}(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 pt(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function mt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ft(Object(n),!0).forEach((function(t){ht(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ft(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ht(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ct(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ct(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ct(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function gt(e,t){var n,r="undefined"!=typeof window?window:{},o=e.plugins||[];return mt(mt({debug:!1,openOnFocus:!1,enterKeyHint:void 0,placeholder:"",autoFocus:!1,defaultActiveItemId:null,stallThreshold:300,insights:!1,environment:r,shouldPanelOpen:function(e){return rt(e.state)>0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:at(),plugins:o,initialState:mt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(dt(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:Se,onResolve:Se};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=st(st({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return Xe(e)})).then((function(e){return e.map((function(e){return mt(mt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:mt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function vt(e){return vt="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},vt(e)}function bt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function yt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bt(Object(n),!0).forEach((function(t){wt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==vt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==vt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===vt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function St(e){return St="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},St(e)}function kt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Et(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?kt(Object(n),!0).forEach((function(t){_t(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):kt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function _t(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==St(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==St(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===St(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function xt(e){return function(e){if(Array.isArray(e))return Ot(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ot(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ot(e,t)}(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 Ot(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Pt(e){return Boolean(e.execute)}function Ct(e,t,n){if(o=e,Boolean(null==o?void 0:o.execute)){var r="algolia"===e.requesterId?Object.assign.apply(Object,[{}].concat(xt(Object.keys(n.context).map((function(e){var t;return null===(t=n.context[e])||void 0===t?void 0:t.__algoliaSearchParameters}))))):{};return Et(Et({},e),{},{requests:e.queries.map((function(n){return{query:"algolia"===e.requesterId?Et(Et({},n),{},{params:Et(Et({},r),n.params)}):n,sourceId:t,transformResponse:e.transformResponse}}))})}var o;return{items:e,sourceId:t}}function Tt(e){var t=e.reduce((function(e,t){if(!Pt(t))return e.push(t),e;var n=t.searchClient,r=t.execute,o=t.requesterId,a=t.requests,i=e.find((function(e){return Pt(t)&&Pt(e)&&e.searchClient===n&&Boolean(o)&&e.requesterId===o}));if(i){var s;(s=i.items).push.apply(s,xt(a))}else{var l={execute:r,requesterId:o,items:a,searchClient:n};e.push(l)}return e}),[]).map((function(e){if(!Pt(e))return Promise.resolve(e);var t=e,n=t.execute,r=t.items;return n({searchClient:t.searchClient,requests:r})}));return Promise.all(t).then((function(e){return Xe(e)}))}function It(e,t,n){return t.map((function(t){var r,o=e.filter((function(e){return e.sourceId===t.sourceId})),a=o.map((function(e){return e.items})),i=o[0].transformResponse,s=i?i({results:r=a,hits:r.map((function(e){return e.hits})).filter(Boolean),facetHits:r.map((function(e){var t;return null===(t=e.facetHits)||void 0===t?void 0:t.map((function(e){return{label:e.value,count:e.count,_highlightResult:{label:{value:e.highlighted}}}}))})).filter(Boolean)}):a;return t.onResolve({source:t,results:a,items:s,state:n.getState()}),Array.isArray(s),s.every(Boolean),'The `getItems` function from source "'.concat(t.sourceId,'" must return an array of items but returned ').concat(JSON.stringify(void 0),".\n\nDid you forget to return items?\n\nSee: https://www.algolia.com/doc/ui-libraries/autocomplete/core-concepts/sources/#param-getitems"),{source:t,items:s}}))}function At(e,t){var n=t;return{then:function(t,r){return At(e.then(jt(t,n,e),jt(r,n,e)),n)},catch:function(t){return At(e.catch(jt(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),At(e.finally(jt(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Nt(e){return At(new Promise((function(t,n){return e(t,n)})),{isCanceled:!1,onCancelList:[]})}function Lt(e){return At(e,{isCanceled:!1,onCancelList:[]})}function jt(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function Rt(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,a=0;!1===r;){var i=t.collections[o];if(i===n){r=!0;break}a+=i.items.length,o++}return t.activeItemId-a}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function Dt(e){return Dt="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},Dt(e)}Nt.resolve=function(e){return Lt(Promise.resolve(e))},Nt.reject=function(e){return Lt(Promise.reject(e))};var Mt=["event","nextState","props","query","refresh","store"];function Ft(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Bt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ft(Object(n),!0).forEach((function(t){zt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ft(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function zt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Dt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Dt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Dt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ut(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var $t,qt,Ht,Gt=null,Qt=($t=-1,qt=-1,Ht=void 0,function(e){var t=++$t;return Promise.resolve(e).then((function(e){return Ht&&t<qt?Ht:(qt=t,Ht=e,e)}))});function Vt(e){var t=e.event,n=e.nextState,r=void 0===n?{}:n,o=e.props,a=e.query,i=e.refresh,s=e.store,l=Ut(e,Mt);Gt&&o.environment.clearTimeout(Gt);var u=l.setCollections,c=l.setIsOpen,d=l.setQuery,p=l.setActiveItemId,f=l.setStatus;if(d(a),p(o.defaultActiveItemId),!a&&!1===o.openOnFocus){var m,h=s.getState().collections.map((function(e){return Bt(Bt({},e),{},{items:[]})}));f("idle"),u(h),c(null!==(m=r.isOpen)&&void 0!==m?m:o.shouldPanelOpen({state:s.getState()}));var g=Lt(Qt(h).then((function(){return Promise.resolve()})));return s.pendingRequests.add(g)}f("loading"),Gt=o.environment.setTimeout((function(){f("stalled")}),o.stallThreshold);var v=Lt(Qt(o.getSources(Bt({query:a,refresh:i,state:s.getState()},l)).then((function(e){return Promise.all(e.map((function(e){return Promise.resolve(e.getItems(Bt({query:a,refresh:i,state:s.getState()},l))).then((function(t){return Ct(t,e.sourceId,s.getState())}))}))).then(Tt).then((function(t){return It(t,e,s)})).then((function(e){return function(e){var t=e.collections,n=e.props,r=e.state,o=t.reduce((function(e,t){return yt(yt({},e),{},wt({},t.source.sourceId,yt(yt({},t.source),{},{getItems:function(){return Xe(t.items)}})))}),{}),a=n.plugins.reduce((function(e,t){return t.reshape?t.reshape(e):e}),{sourcesBySourceId:o,state:r}).sourcesBySourceId;return Xe(n.reshape({sourcesBySourceId:a,sources:Object.values(a),state:r})).filter(Boolean).map((function(e){return{source:e,items:e.getItems()}}))}({collections:e,props:o,state:s.getState()})}))})))).then((function(e){var n;f("idle"),u(e);var d=o.shouldPanelOpen({state:s.getState()});c(null!==(n=r.isOpen)&&void 0!==n?n:o.openOnFocus&&!a&&d||d);var p=Rt(s.getState());if(null!==s.getState().activeItemId&&p){var m=p.item,h=p.itemInputValue,g=p.itemUrl,v=p.source;v.onActive(Bt({event:t,item:m,itemInputValue:h,itemUrl:g,refresh:i,source:v,state:s.getState()},l))}})).finally((function(){f("idle"),Gt&&o.environment.clearTimeout(Gt)}));return s.pendingRequests.add(v)}function Zt(e){return Zt="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},Zt(e)}var Wt=["event","props","refresh","store"];function Kt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Yt(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Kt(Object(n),!0).forEach((function(t){Xt(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Kt(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Xt(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Zt(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Zt(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Zt(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Jt(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var en=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function tn(e){return tn="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},tn(e)}var nn=["props","refresh","store"],rn=["inputElement","formElement","panelElement"],on=["inputElement"],an=["inputElement","maxLength"],sn=["sourceIndex"],ln=["sourceIndex"],un=["item","source","sourceIndex"];function cn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?cn(Object(n),!0).forEach((function(t){pn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):cn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function pn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function fn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function mn(e){var t=e.props,n=e.refresh,r=e.store,o=fn(e,nn),a=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return dn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},fn(e,rn))},getRootProps:function(e){return dn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return dn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(dn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},fn(e,on))},getLabelProps:function(e){var n=e||{},r=n.sourceIndex,o=fn(n,sn);return dn({htmlFor:"".concat(a(t.id,r),"-input"),id:"".concat(a(t.id,r),"-label")},o)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Vt(dn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var s=e||{},l=(s.inputElement,s.maxLength),u=void 0===l?512:l,c=fn(s,an),d=Rt(r.getState()),p=function(e){return Boolean(e&&e.match(en))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),f=t.enterKeyHint||(null!=d&&d.itemUrl&&!p?"go":"search");return dn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:f,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){Vt(dn({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=Jt(e,Wt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},s=function(){var e=Rt(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,s=e.itemUrl,l=e.source;l.onActive(Yt({event:t,item:n,itemInputValue:i,itemUrl:s,refresh:r,source:l,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Vt(Yt({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),s(),setTimeout(i,0)})):(o.dispatch(t.key,{}),s(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=Rt(o.getState()),u=l.item,c=l.itemInputValue,d=l.itemUrl,p=l.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(p.onSelect(Yt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(p.onSelect(Yt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return p.onSelect(Yt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:u,state:o.getState()});Vt(Yt({event:t,nextState:{isOpen:!1},props:n,query:c,refresh:r,store:o},a)).then((function(){p.onSelect(Yt({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:p,state:o.getState()},a))}))}}}(dn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:Se,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},c)},getPanelProps:function(e){return dn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.sourceIndex,o=fn(n,ln);return dn({role:"listbox","aria-labelledby":"".concat(a(t.id,r),"-label"),id:"".concat(a(t.id,r),"-list")},o)},getItemProps:function(e){var i=e.item,s=e.source,l=e.sourceIndex,u=fn(e,un);return dn({id:"".concat(a(t.id,l),"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=Rt(r.getState());if(null!==r.getState().activeItemId&&t){var a=t.item,s=t.itemInputValue,l=t.itemUrl,u=t.source;u.onActive(dn({event:e,item:a,itemInputValue:s,itemUrl:l,refresh:n,source:u,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=s.getItemInputValue({item:i,state:r.getState()}),l=s.getItemUrl({item:i,state:r.getState()});(l?Promise.resolve():Vt(dn({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){s.onSelect(dn({event:e,item:i,itemInputValue:a,itemUrl:l,refresh:n,source:s,state:r.getState()},o))}))}},u)}}}var hn="1.10.0",gn=[{segment:"autocomplete-core",version:hn}];function vn(e){return vn="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},vn(e)}function bn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function yn(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?bn(Object(n),!0).forEach((function(t){wn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):bn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function wn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==vn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==vn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===vn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Sn(e){var t,n,r,o,a=e.plugins,i=e.options,s=null===(t=((null===(n=i.__autocomplete_metadata)||void 0===n?void 0:n.userAgents)||[])[0])||void 0===t?void 0:t.segment,l=s?wn({},s,Object.keys((null===(r=i.__autocomplete_metadata)||void 0===r?void 0:r.options)||{})):{};return{plugins:a.map((function(e){return{name:e.name,options:Object.keys(e.__autocomplete_pluginOptions||[])}})),options:yn({"autocomplete-core":Object.keys(i)},l),ua:gn.concat((null===(o=i.__autocomplete_metadata)||void 0===o?void 0:o.userAgents)||[])}}function kn(e){var t,n=e.state;return!1===n.isOpen||null===n.activeItemId?null:(null===(t=Rt(n))||void 0===t?void 0:t.itemInputValue)||null}function En(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}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 xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function On(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?xn(Object(n),!0).forEach((function(t){Pn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):xn(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Pn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==_n(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==_n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===_n(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Cn=function(e,t){switch(t.type){case"setActiveItemId":case"mousemove":return On(On({},e),{},{activeItemId:t.payload});case"setQuery":return On(On({},e),{},{query:t.payload,completion:null});case"setCollections":return On(On({},e),{},{collections:t.payload});case"setIsOpen":return On(On({},e),{},{isOpen:t.payload});case"setStatus":return On(On({},e),{},{status:t.payload});case"setContext":return On(On({},e),{},{context:On(On({},e.context),t.payload)});case"ArrowDown":var n=On(On({},e),{},{activeItemId:t.payload.hasOwnProperty("nextActiveItemId")?t.payload.nextActiveItemId:En(1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},n),{},{completion:kn({state:n})});case"ArrowUp":var r=On(On({},e),{},{activeItemId:En(-1,e.activeItemId,rt(e),t.props.defaultActiveItemId)});return On(On({},r),{},{completion:kn({state:r})});case"Escape":return e.isOpen?On(On({},e),{},{activeItemId:null,isOpen:!1,completion:null}):On(On({},e),{},{activeItemId:null,query:"",status:"idle",collections:[]});case"submit":return On(On({},e),{},{activeItemId:null,isOpen:!1,status:"idle"});case"reset":return On(On({},e),{},{activeItemId:!0===t.props.openOnFocus?t.props.defaultActiveItemId:null,status:"idle",query:""});case"focus":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId,isOpen:(t.props.openOnFocus||Boolean(e.query))&&t.props.shouldPanelOpen({state:e})});case"blur":return t.props.debug?e:On(On({},e),{},{isOpen:!1,activeItemId:null});case"mouseleave":return On(On({},e),{},{activeItemId:t.props.defaultActiveItemId});default:return"The reducer action ".concat(JSON.stringify(t.type)," is not supported."),e}};function Tn(e){return Tn="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},Tn(e)}function In(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function An(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?In(Object(n),!0).forEach((function(t){Nn(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):In(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Nn(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Tn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Tn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Tn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ln(e){var t=[],n=gt(e,t),r=Ye(Cn,n,(function(e){var t=e.prevState,r=e.state;n.onStateChange(An({prevState:t,state:r,refresh:i,navigator:n.navigator},o))})),o=function(e){var t=e.store;return{setActiveItemId:function(e){t.dispatch("setActiveItemId",e)},setQuery:function(e){t.dispatch("setQuery",e)},setCollections:function(e){var n=0,r=e.map((function(e){return tt(tt({},e),{},{items:Xe(e.items).map((function(e){return tt(tt({},e),{},{__autocomplete_id:n++})}))})}));t.dispatch("setCollections",r)},setIsOpen:function(e){t.dispatch("setIsOpen",e)},setStatus:function(e){t.dispatch("setStatus",e)},setContext:function(e){t.dispatch("setContext",e)}}}({store:r}),a=mn(An({props:n,refresh:i,store:r,navigator:n.navigator},o));function i(){return Vt(An({event:new Event("input"),nextState:{isOpen:r.getState().isOpen},props:n,navigator:n.navigator,query:r.getState().query,refresh:i,store:r},o))}if(e.insights&&!n.plugins.some((function(e){return"aa.algoliaInsightsPlugin"===e.name}))){var s="boolean"==typeof e.insights?{}:e.insights;n.plugins.push(Ve(s))}return n.plugins.forEach((function(e){var r;return null===(r=e.subscribe)||void 0===r?void 0:r.call(e,An(An({},o),{},{navigator:n.navigator,refresh:i,onSelect:function(e){t.push({onSelect:e})},onActive:function(e){t.push({onActive:e})},onResolve:function(e){t.push({onResolve:e})}}))})),function(e){var t,n,r=e.metadata,o=e.environment;if(null===(t=o.navigator)||void 0===t||null===(n=t.userAgent)||void 0===n?void 0:n.includes("Algolia Crawler")){var a=o.document.createElement("meta"),i=o.document.querySelector("head");a.name="algolia:metadata",setTimeout((function(){a.content=JSON.stringify(r),i.appendChild(a)}),0)}}({metadata:Sn({plugins:n.plugins,options:e}),environment:n.environment}),An(An({refresh:i,navigator:n.navigator},a),o)}var jn=function(e,t,n,r){var o;t[0]=0;for(var a=1;a<t.length;a++){var i=t[a++],s=t[a]?(t[0]|=i?1:2,n[t[a++]]):t[++a];3===i?r[0]=s:4===i?r[1]=Object.assign(r[1]||{},s):5===i?(r[1]=r[1]||{})[t[++a]]=s:6===i?r[1][t[++a]]+=s+"":i?(o=e.apply(s,jn(e,s,n,["",null])),r.push(o),s[0]?t[0]|=2:(t[a-2]=0,t[a]=o)):r.push(s)}return r},Rn=new Map;function Dn(e){var t=Rn.get(this);return t||(t=new Map,Rn.set(this,t)),(t=jn(this,t.get(e)||(t.set(e,t=function(e){for(var t,n,r=1,o="",a="",i=[0],s=function(e){1===r&&(e||(o=o.replace(/^\s*\n\s*|\s*\n\s*$/g,"")))?i.push(0,e,o):3===r&&(e||o)?(i.push(3,e,o),r=2):2===r&&"..."===o&&e?i.push(4,e,0):2===r&&o&&!e?i.push(5,0,!0,o):r>=5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},l=0;l<e.length;l++){l&&(1===r&&s(),s(l));for(var u=0;u<e[l].length;u++)t=e[l][u],1===r?"<"===t?(s(),i=[i],r=3):o+=t:4===r?"--"===o&&">"===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(s(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[l][u+1])?(s(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(s(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return s(),i}(e)),t),arguments,[])).length>1?t:t[0]}var Mn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},Fn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},Bn=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='<circle\n cx="50"\n cy="50"\n fill="none"\n r="35"\n stroke="currentColor"\n stroke-dasharray="164.93361431346415 56.97787143782138"\n stroke-width="6"\n>\n <animateTransform\n attributeName="transform"\n type="rotate"\n repeatCount="indefinite"\n dur="1s"\n values="0 50 50;90 50 50;180 50 50;360 50 50"\n keyTimes="0;0.40;0.65;1"\n />\n</circle>',t},zn=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function Un(e,t,n){e[t]=null===n?"":"number"!=typeof n?n:n+"px"}function $n(e){this._listeners[e.type](e)}function qn(e,t,n){var r,o,a=e[t];if("style"===t)if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)a&&n[t]===a[t]||Un(e.style,t,n[t]);else"o"===t[0]&&"n"===t[1]?(r=t!==(t=t.replace(/Capture$/,"")),((o=t.toLowerCase())in e||zn.includes(o))&&(t=o),t=t.slice(2),e._listeners||(e._listeners={}),e._listeners[t]=n,n?a||e.addEventListener(t,$n,r):e.removeEventListener(t,$n,r)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function Hn(e){return"onChange"===e?"onInput":e}function Gn(e,t){for(var n in t)qn(e,Hn(n),t[n])}function Qn(e,t){for(var n in t)"o"===n[0]&&"n"===n[1]||qn(e,Hn(n),t[n])}var Vn=["children"];function Zn(e){return function(e){if(Array.isArray(e))return Wn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Wn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Wn(e,t)}(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 Wn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Kn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Yn(e){return function(t,n){var r=n.children,o=void 0===r?[]:r,a=Kn(n,Vn),i=e.document.createElement(t);return Gn(i,a),i.append.apply(i,Zn(o)),i}}function Xn(e){return Xn="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},Xn(e)}var Jn=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function er(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function tr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?er(Object(n),!0).forEach((function(t){nr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):er(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function nr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Xn(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Xn(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Xn(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function rr(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var or=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,s=rr(e,Jn),l=Yn(n)("input",s),u=r(tr({state:i,props:o({inputElement:l}),inputElement:l},t));return Gn(l,tr(tr({},u),{},{onKeyDown:function(e){a&&"Tab"===e.key||u.onKeyDown(e)}})),l};function ar(e){return ar="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},ar(e)}function ir(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function sr(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ir(Object(n),!0).forEach((function(t){lr(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ir(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function lr(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==ar(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==ar(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===ar(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var ur,cr,dr,pr,fr,mr,hr,gr={},vr=[],br=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,yr=Array.isArray;function wr(e,t){for(var n in t)e[n]=t[n];return e}function Sr(e){var t=e.parentNode;t&&t.removeChild(e)}function kr(e,t,n){var r,o,a,i={};for(a in t)"key"==a?r=t[a]:"ref"==a?o=t[a]:i[a]=t[a];if(arguments.length>2&&(i.children=arguments.length>3?ur.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return Er(e,i,r,o,null)}function Er(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++dr:o};return null==o&&null!=cr.vnode&&cr.vnode(a),a}function _r(e){return e.children}function xr(e,t){this.props=e,this.context=t}function Or(e,t){if(null==t)return e.__?Or(e.__,e.__.__k.indexOf(e)+1):null;for(var n;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e)return n.__e;return"function"==typeof e.type?Or(e):null}function Pr(e){var t,n;if(null!=(e=e.__)&&null!=e.__c){for(e.__e=e.__c.base=null,t=0;t<e.__k.length;t++)if(null!=(n=e.__k[t])&&null!=n.__e){e.__e=e.__c.base=n.__e;break}return Pr(e)}}function Cr(e){(!e.__d&&(e.__d=!0)&&pr.push(e)&&!Tr.__r++||fr!==cr.debounceRendering)&&((fr=cr.debounceRendering)||mr)(Tr)}function Tr(){var e,t,n,r,o,a,i,s,l;for(pr.sort(hr);e=pr.shift();)e.__d&&(t=pr.length,r=void 0,o=void 0,a=void 0,s=(i=(n=e).__v).__e,(l=n.__P)&&(r=[],o=[],(a=wr({},i)).__v=i.__v+1,Fr(l,i,a,n.__n,void 0!==l.ownerSVGElement,null!=i.__h?[s]:null,r,null==s?Or(i):s,i.__h,o),Br(r,i,o),i.__e!=s&&Pr(i)),pr.length>t&&pr.sort(hr));Tr.__r=0}function Ir(e,t,n,r,o,a,i,s,l,u,c){var d,p,f,m,h,g,v,b,y,w,S=0,k=r&&r.__k||vr,E=k.length,_=E,x=t.length;for(n.__k=[],d=0;d<x;d++)null!=(m=n.__k[d]=null==(m=t[d])||"boolean"==typeof m||"function"==typeof m?null:"string"==typeof m||"number"==typeof m||"bigint"==typeof m?Er(null,m,null,null,m):yr(m)?Er(_r,{children:m},null,null,null):m.__b>0?Er(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)&&(m.__=n,m.__b=n.__b+1,-1===(b=Lr(m,k,v=d+S,_))?f=gr:(f=k[b]||gr,k[b]=void 0,_--),Fr(e,m,f,o,a,i,s,l,u,c),h=m.__e,(p=m.ref)&&f.ref!=p&&(f.ref&&Ur(f.ref,null,m),c.push(p,m.__c||h,m)),null!=h&&(null==g&&(g=h),w=!(y=f===gr||null===f.__v)&&b===v,y?-1==b&&S--:b!==v&&(b===v+1?(S++,w=!0):b>v?_>x-v?(S+=b-v,w=!0):S--:S=b<v&&b==v-1?b-v:0),v=d+S,w=w||b==d&&!y,"function"!=typeof m.type||b===v&&f.__k!==m.__k?"function"==typeof m.type||w?void 0!==m.__d?(l=m.__d,m.__d=void 0):l=h.nextSibling:l=Nr(e,h,l):l=Ar(m,l,e),"function"==typeof n.type&&(n.__d=l)));for(n.__e=g,d=E;d--;)null!=k[d]&&("function"==typeof n.type&&null!=k[d].__e&&k[d].__e==n.__d&&(n.__d=k[d].__e.nextSibling),$r(k[d],k[d]))}function Ar(e,t,n){for(var r,o=e.__k,a=0;o&&a<o.length;a++)(r=o[a])&&(r.__=e,t="function"==typeof r.type?Ar(r,t,n):Nr(n,r.__e,t));return t}function Nr(e,t,n){return null==n||n.parentNode!==e?e.insertBefore(t,null):t==n&&null!=t.parentNode||e.insertBefore(t,n),t.nextSibling}function Lr(e,t,n,r){var o=e.key,a=e.type,i=n-1,s=n+1,l=t[n];if(null===l||l&&o==l.key&&a===l.type)return n;if(r>(null!=l?1:0))for(;i>=0||s<t.length;){if(i>=0){if((l=t[i])&&o==l.key&&a===l.type)return i;i--}if(s<t.length){if((l=t[s])&&o==l.key&&a===l.type)return s;s++}}return-1}function jr(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||br.test(t)?n:n+"px"}function Rr(e,t,n,r,o){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||jr(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||jr(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r||e.addEventListener(t,a?Mr:Dr,a):e.removeEventListener(t,a?Mr:Dr,a);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&"rowSpan"!==t&&"colSpan"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function Dr(e){return this.l[e.type+!1](cr.event?cr.event(e):e)}function Mr(e){return this.l[e.type+!0](cr.event?cr.event(e):e)}function Fr(e,t,n,r,o,a,i,s,l,u){var c,d,p,f,m,h,g,v,b,y,w,S,k,E,_,x=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(l=n.__h,s=t.__e=n.__e,t.__h=null,a=[s]),(c=cr.__b)&&c(t);try{e:if("function"==typeof x){if(v=t.props,b=(c=x.contextType)&&r[c.__c],y=c?b?b.props.value:c.__:r,n.__c?g=(d=t.__c=n.__c).__=d.__E:("prototype"in x&&x.prototype.render?t.__c=d=new x(v,y):(t.__c=d=new xr(v,y),d.constructor=x,d.render=qr),b&&b.sub(d),d.props=v,d.state||(d.state={}),d.context=y,d.__n=r,p=d.__d=!0,d.__h=[],d._sb=[]),null==d.__s&&(d.__s=d.state),null!=x.getDerivedStateFromProps&&(d.__s==d.state&&(d.__s=wr({},d.__s)),wr(d.__s,x.getDerivedStateFromProps(v,d.__s))),f=d.props,m=d.state,d.__v=t,p)null==x.getDerivedStateFromProps&&null!=d.componentWillMount&&d.componentWillMount(),null!=d.componentDidMount&&d.__h.push(d.componentDidMount);else{if(null==x.getDerivedStateFromProps&&v!==f&&null!=d.componentWillReceiveProps&&d.componentWillReceiveProps(v,y),!d.__e&&(null!=d.shouldComponentUpdate&&!1===d.shouldComponentUpdate(v,d.__s,y)||t.__v===n.__v)){for(t.__v!==n.__v&&(d.props=v,d.state=d.__s,d.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),w=0;w<d._sb.length;w++)d.__h.push(d._sb[w]);d._sb=[],d.__h.length&&i.push(d);break e}null!=d.componentWillUpdate&&d.componentWillUpdate(v,d.__s,y),null!=d.componentDidUpdate&&d.__h.push((function(){d.componentDidUpdate(f,m,h)}))}if(d.context=y,d.props=v,d.__P=e,d.__e=!1,S=cr.__r,k=0,"prototype"in x&&x.prototype.render){for(d.state=d.__s,d.__d=!1,S&&S(t),c=d.render(d.props,d.state,d.context),E=0;E<d._sb.length;E++)d.__h.push(d._sb[E]);d._sb=[]}else do{d.__d=!1,S&&S(t),c=d.render(d.props,d.state,d.context),d.state=d.__s}while(d.__d&&++k<25);d.state=d.__s,null!=d.getChildContext&&(r=wr(wr({},r),d.getChildContext())),p||null==d.getSnapshotBeforeUpdate||(h=d.getSnapshotBeforeUpdate(f,m)),Ir(e,yr(_=null!=c&&c.type===_r&&null==c.key?c.props.children:c)?_:[_],t,n,r,o,a,i,s,l,u),d.base=t.__e,t.__h=null,d.__h.length&&i.push(d),g&&(d.__E=d.__=null)}else null==a&&t.__v===n.__v?(t.__k=n.__k,t.__e=n.__e):t.__e=zr(n.__e,t,n,r,o,a,i,l,u);(c=cr.diffed)&&c(t)}catch(e){t.__v=null,(l||null!=a)&&(t.__e=s,t.__h=!!l,a[a.indexOf(s)]=null),cr.__e(e,t,n)}}function Br(e,t,n){for(var r=0;r<n.length;r++)Ur(n[r],n[++r],n[++r]);cr.__c&&cr.__c(t,e),e.some((function(t){try{e=t.__h,t.__h=[],e.some((function(e){e.call(t)}))}catch(e){cr.__e(e,t.__v)}}))}function zr(e,t,n,r,o,a,i,s,l){var u,c,d,p=n.props,f=t.props,m=t.type,h=0;if("svg"===m&&(o=!0),null!=a)for(;h<a.length;h++)if((u=a[h])&&"setAttribute"in u==!!m&&(m?u.localName===m:3===u.nodeType)){e=u,a[h]=null;break}if(null==e){if(null===m)return document.createTextNode(f);e=o?document.createElementNS("http://www.w3.org/2000/svg",m):document.createElement(m,f.is&&f),a=null,s=!1}if(null===m)p===f||s&&e.data===f||(e.data=f);else{if(a=a&&ur.call(e.childNodes),c=(p=n.props||gr).dangerouslySetInnerHTML,d=f.dangerouslySetInnerHTML,!s){if(null!=a)for(p={},h=0;h<e.attributes.length;h++)p[e.attributes[h].name]=e.attributes[h].value;(d||c)&&(d&&(c&&d.__html==c.__html||d.__html===e.innerHTML)||(e.innerHTML=d&&d.__html||""))}if(function(e,t,n,r,o){var a;for(a in n)"children"===a||"key"===a||a in t||Rr(e,a,null,n[a],r);for(a in t)o&&"function"!=typeof t[a]||"children"===a||"key"===a||"value"===a||"checked"===a||n[a]===t[a]||Rr(e,a,t[a],n[a],r)}(e,f,p,o,s),d)t.__k=[];else if(Ir(e,yr(h=t.props.children)?h:[h],t,n,r,o&&"foreignObject"!==m,a,i,a?a[0]:n.__k&&Or(n,0),s,l),null!=a)for(h=a.length;h--;)null!=a[h]&&Sr(a[h]);s||("value"in f&&void 0!==(h=f.value)&&(h!==e.value||"progress"===m&&!h||"option"===m&&h!==p.value)&&Rr(e,"value",h,p.value,!1),"checked"in f&&void 0!==(h=f.checked)&&h!==e.checked&&Rr(e,"checked",h,p.checked,!1))}return e}function Ur(e,t,n){try{"function"==typeof e?e(t):e.current=t}catch(e){cr.__e(e,n)}}function $r(e,t,n){var r,o;if(cr.unmount&&cr.unmount(e),(r=e.ref)&&(r.current&&r.current!==e.__e||Ur(r,null,t)),null!=(r=e.__c)){if(r.componentWillUnmount)try{r.componentWillUnmount()}catch(e){cr.__e(e,t)}r.base=r.__P=null,e.__c=void 0}if(r=e.__k)for(o=0;o<r.length;o++)r[o]&&$r(r[o],t,n||"function"!=typeof e.type);n||null==e.__e||Sr(e.__e),e.__=e.__e=e.__d=void 0}function qr(e,t,n){return this.constructor(e,n)}function Hr(e,t,n){var r,o,a,i;cr.__&&cr.__(e,t),o=(r="function"==typeof n)?null:n&&n.__k||t.__k,a=[],i=[],Fr(t,e=(!r&&n||t).__k=kr(_r,null,[e]),o||gr,gr,void 0!==t.ownerSVGElement,!r&&n?[n]:o?null:t.firstChild?ur.call(t.childNodes):null,a,!r&&n?n:o?o.__e:t.firstChild,r,i),Br(a,e,i)}function Gr(e,t){return t.reduce((function(e,t){return e&&e[t]}),e)}ur=vr.slice,cr={__e:function(e,t,n,r){for(var o,a,i;t=t.__;)if((o=t.__c)&&!o.__)try{if((a=o.constructor)&&null!=a.getDerivedStateFromError&&(o.setState(a.getDerivedStateFromError(e)),i=o.__d),null!=o.componentDidCatch&&(o.componentDidCatch(e,r||{}),i=o.__d),i)return o.__E=o}catch(t){e=t}throw e}},dr=0,xr.prototype.setState=function(e,t){var n;n=null!=this.__s&&this.__s!==this.state?this.__s:this.__s=wr({},this.state),"function"==typeof e&&(e=e(wr({},n),this.props)),e&&wr(n,e),null!=e&&this.__v&&(t&&this._sb.push(t),Cr(this))},xr.prototype.forceUpdate=function(e){this.__v&&(this.__e=!0,e&&this.__h.push(e),Cr(this))},xr.prototype.render=_r,pr=[],mr="function"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,hr=function(e,t){return e.__v.__b-t.__v.__b},Tr.__r=0;var Qr="__aa-highlight__",Vr="__/aa-highlight__";function Zr(e){var t=e.highlightedValue.split(Qr),n=t.shift(),r=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Vr);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Wr(e){return function(e){if(Array.isArray(e))return Kr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Kr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Kr(e,t)}(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 Kr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Yr(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Gr(t,["_highlightResult"].concat(Wr(r),["value"]));return"string"!=typeof o&&(o=Gr(t,r)||""),Zr({highlightedValue:o})}function Xr(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},Yr({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Highlight",r}var Jr={"&":"&","<":"<",">":">",""":'"',"'":"'"},eo=new RegExp(/\w/i),to=/&(amp|quot|lt|gt|#39);/g,no=RegExp(to.source);function ro(e,t){var n,r,o,a=e[t],i=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,s=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return eo.test((o=a.value)&&no.test(o)?o.replace(to,(function(e){return Jr[e]})):o)||s!==i?a.isHighlighted:s}function oo(e){return oo="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},oo(e)}function ao(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function io(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?ao(Object(n),!0).forEach((function(t){so(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):ao(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function so(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==oo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==oo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===oo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function lo(e){return e.some((function(e){return e.isHighlighted}))?e.map((function(t,n){return io(io({},t),{},{isHighlighted:!ro(e,n)})})):e.map((function(e){return io(io({},e),{},{isHighlighted:!1})}))}function uo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,s=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},lo(Yr(r))).map((function(e,n){return e.isHighlighted?t(s,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseHighlight",r}function co(e){return function(e){if(Array.isArray(e))return po(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return po(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return po(e,t)}(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 po(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function fo(e){var t=e.hit,n=e.attribute,r=Array.isArray(n)?n:[n],o=Gr(t,["_snippetResult"].concat(co(r),["value"]));return"string"!=typeof o&&(o=Gr(t,r)||""),Zr({highlightedValue:o})}function mo(e){var t=e.createElement,n=e.Fragment;function r(e){var r,o=e.hit,a=e.attribute,i=e.tagName,s=void 0===i?"mark":i;return t(n,{},(r={hit:o,attribute:a},lo(fo(r))).map((function(e,n){return e.isHighlighted?t(s,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="ReverseSnippet",r}function ho(e){var t=e.createElement,n=e.Fragment;function r(e){var r=e.hit,o=e.attribute,a=e.tagName,i=void 0===a?"mark":a;return t(n,{},fo({hit:r,attribute:o}).map((function(e,n){return e.isHighlighted?t(i,{key:n},e.value):e.value})))}return r.__autocomplete_componentName="Snippet",r}function go(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function vo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];r!==o&&(e[n]=[r,o].filter(Boolean).join(" "))})),e}),{})}function bo(e){return bo="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},bo(e)}var yo=["classNames","container","getEnvironmentProps","getFormProps","getInputProps","getItemProps","getLabelProps","getListProps","getPanelProps","getRootProps","panelContainer","panelPlacement","render","renderNoResults","renderer","detachedMediaQuery","components","translations"];function wo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function So(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?wo(Object(n),!0).forEach((function(t){ko(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):wo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function ko(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Eo(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var _o={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},xo=function(e,t){var n=e.children;(0,e.render)(n,t)},Oo={createElement:kr,Fragment:_r,render:Hr};function Po(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var s=r.getBoundingClientRect();return{top:i,left:s.left,right:o.document.documentElement.clientWidth-(s.left+s.width),width:"unset",maxWidth:"unset"};default:throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}function Co(e){return Co="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},Co(e)}function To(){return To=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},To.apply(this,arguments)}function Io(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ao(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Io(Object(n),!0).forEach((function(t){No(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Io(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function No(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Co(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Co(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Co(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var Lo=[{segment:"autocomplete-js",version:hn}];function jo(e){return function(e){if(Array.isArray(e))return Ro(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Ro(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ro(e,t)}(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 Ro(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Do(e){return Do="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},Do(e)}var Mo=function(e){return e&&"object"===Do(e)&&"[object Object]"===Object.prototype.toString.call(e)};function Fo(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.reduce((function(e,t){return Object.keys(t).forEach((function(n){var r=e[n],o=t[n];Array.isArray(r)&&Array.isArray(o)?e[n]=r.concat.apply(r,jo(o)):Mo(r)&&Mo(o)?e[n]=Fo(r,o):e[n]=o})),e}),{})}function Bo(e){return Bo="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},Bo(e)}function zo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Uo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?zo(Object(n),!0).forEach((function(t){$o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):zo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function $o(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Bo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Bo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Bo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function qo(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,o,a,i,s=[],l=!0,u=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);l=!0);}catch(c){u=!0,o=c}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw o}}return s}}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Ho(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ho(e,t)}(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 Ho(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var Go=["components"];function Qo(e){return Qo="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},Qo(e)}function Vo(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Zo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Wo(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Zo(Object(n),!0).forEach((function(t){Ko(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Zo(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Ko(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Qo(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Qo(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Qo(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Yo(e){var t,n=function(){var e=[],t=[];function n(n){e.push(n);var r=n();t.push(r)}return{runEffect:n,cleanupEffects:function(){var e=t;t=[],e.forEach((function(e){e()}))},runEffects:function(){var t=e;e=[],t.forEach((function(e){n(e)}))}}}(),r=n.runEffect,o=n.cleanupEffects,a=n.runEffects,i=(t=[],{reactive:function(e){var n=e(),r={_fn:e,_ref:{current:n},get value(){return this._ref.current},set value(e){this._ref.current=e}};return t.push(r),r},runReactives:function(){t.forEach((function(e){e._ref.current=e._fn()}))}}),s=i.reactive,l=i.runReactives,u=be(!1),c=be(e),d=be(void 0),p=s((function(){return function(e){var t,n=e.classNames,r=e.container,o=e.getEnvironmentProps,a=e.getFormProps,i=e.getInputProps,s=e.getItemProps,l=e.getLabelProps,u=e.getListProps,c=e.getPanelProps,d=e.getRootProps,p=e.panelContainer,f=e.panelPlacement,m=e.render,h=e.renderNoResults,g=e.renderer,v=e.detachedMediaQuery,b=e.components,y=e.translations,w=Eo(e,yo),S="undefined"!=typeof window?window:{},k=go(S,r);k.tagName;var E=So(So({},Oo),g),_={Highlight:Xr(E),ReverseHighlight:uo(E),ReverseSnippet:mo(E),Snippet:ho(E)};return{renderer:{classNames:vo(_o,null!=n?n:{}),container:k,getEnvironmentProps:null!=o?o:function(e){return e.props},getFormProps:null!=a?a:function(e){return e.props},getInputProps:null!=i?i:function(e){return e.props},getItemProps:null!=s?s:function(e){return e.props},getLabelProps:null!=l?l:function(e){return e.props},getListProps:null!=u?u:function(e){return e.props},getPanelProps:null!=c?c:function(e){return e.props},getRootProps:null!=d?d:function(e){return e.props},panelContainer:p?go(S,p):S.document.body,panelPlacement:null!=f?f:"input-wrapper-width",render:null!=m?m:xo,renderNoResults:h,renderer:E,detachedMediaQuery:null!=v?v:getComputedStyle(S.document.documentElement).getPropertyValue("--aa-detached-media-query"),components:So(So({},_),b),translations:So(So({},{clearButtonTitle:"Clear",detachedCancelButtonText:"Cancel",submitButtonTitle:"Submit"}),y)},core:So(So({},w),{},{id:null!==(t=w.id)&&void 0!==t?t:at(),environment:S})}}(c.current)})),f=s((function(){return p.value.core.environment.matchMedia(p.value.renderer.detachedMediaQuery).matches})),m=s((function(){return Ln(Wo(Wo({},p.value.core),{},{onStateChange:function(e){var t,n,r;u.current=e.state.collections.some((function(e){return e.source.templates.noResults})),null===(t=d.current)||void 0===t||t.call(d,e),null===(n=(r=p.value.core).onStateChange)||void 0===n||n.call(r,e)},shouldPanelOpen:c.current.shouldPanelOpen||function(e){var t=e.state;if(f.value)return!0;var n=rt(t)>0;if(!p.value.core.openOnFocus&&!t.query)return n;var r=Boolean(u.current||p.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:Lo,options:e}}))})),h=be(Wo({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},p.value.core.initialState)),g={getEnvironmentProps:p.value.renderer.getEnvironmentProps,getFormProps:p.value.renderer.getFormProps,getInputProps:p.value.renderer.getInputProps,getItemProps:p.value.renderer.getItemProps,getLabelProps:p.value.renderer.getLabelProps,getListProps:p.value.renderer.getListProps,getPanelProps:p.value.renderer.getPanelProps,getRootProps:p.value.renderer.getRootProps},v={setActiveItemId:m.value.setActiveItemId,setQuery:m.value.setQuery,setCollections:m.value.setCollections,setIsOpen:m.value.setIsOpen,setStatus:m.value.setStatus,setContext:m.value.setContext,refresh:m.value.refresh,navigator:m.value.navigator},b=s((function(){return Dn.bind(p.value.renderer.renderer.createElement)})),y=s((function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,s=void 0===i?"Search":i,l=e.propGetters,u=e.setIsModalOpen,c=e.state,d=e.translations,p=Yn(o),f=l.getRootProps(sr({state:c,props:t.getRootProps({})},n)),m=p("div",sr({class:r.root},f)),h=p("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),g=p("div",{class:r.detachedOverlay,children:[h],onMouseDown:function(){u(!1),t.setIsOpen(!1)}}),v=l.getLabelProps(sr({state:c,props:t.getLabelProps({})},n)),b=p("button",{class:r.submitButton,type:"submit",title:d.submitButtonTitle,children:[Mn({environment:o})]}),y=p("label",sr({class:r.label,children:[b]},v)),w=p("button",{class:r.clearButton,type:"reset",title:d.clearButtonTitle,children:[Fn({environment:o})]}),S=p("div",{class:r.loadingIndicator,children:[Bn({environment:o})]}),k=or({class:r.input,environment:o,state:c,getInputProps:l.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),E=p("div",{class:r.inputWrapperPrefix,children:[y,S]}),_=p("div",{class:r.inputWrapperSuffix,children:[w]}),x=p("div",{class:r.inputWrapper,children:[k]}),O=l.getFormProps(sr({state:c,props:t.getFormProps({inputElement:k})},n)),P=p("form",sr({class:r.form,children:[E,x,_]},O)),C=l.getPanelProps(sr({state:c,props:t.getPanelProps({})},n)),T=p("div",sr({class:r.panel},C)),I=p("div",{class:r.detachedSearchButtonQuery,textContent:c.query}),A=p("div",{class:r.detachedSearchButtonPlaceholder,hidden:Boolean(c.query),textContent:s});if(a){var N=p("div",{class:r.detachedSearchButtonIcon,children:[Mn({environment:o})]}),L=p("button",{type:"button",class:r.detachedSearchButton,onClick:function(){u(!0)},children:[N,A,I]}),j=p("button",{type:"button",class:r.detachedCancelButton,textContent:d.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),u(!1)}}),R=p("div",{class:r.detachedFormContainer,children:[P,j]});h.appendChild(R),m.appendChild(L)}else m.appendChild(P);return{detachedContainer:h,detachedOverlay:g,detachedSearchButtonQuery:I,detachedSearchButtonPlaceholder:A,inputWrapper:x,input:k,root:m,form:P,label:y,submitButton:b,clearButton:w,loadingIndicator:S,panel:T}}({autocomplete:m.value,autocompleteScopeApi:v,classNames:p.value.renderer.classNames,environment:p.value.core.environment,isDetached:f.value,placeholder:p.value.core.placeholder,propGetters:g,setIsModalOpen:E,state:h.current,translations:p.value.renderer.translations})}));function w(){Gn(y.value.panel,{style:f.value?{}:Po({panelPlacement:p.value.renderer.panelPlacement,container:y.value.root,form:y.value.form,environment:p.value.core.environment})})}function S(e){h.current=e;var t={autocomplete:m.value,autocompleteScopeApi:v,classNames:p.value.renderer.classNames,components:p.value.renderer.components,container:p.value.renderer.container,html:b.value,dom:y.value,panelContainer:f.value?y.value.detachedContainer:p.value.renderer.panelContainer,propGetters:g,state:h.current,renderer:p.value.renderer.renderer},n=!rt(e)&&!u.current&&p.value.renderer.renderNoResults||p.value.renderer.render;!function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.dom,o=e.propGetters,a=e.state;Qn(r.root,o.getRootProps(Ao({state:a,props:t.getRootProps({})},n))),Qn(r.input,o.getInputProps(Ao({state:a,props:t.getInputProps({inputElement:r.input}),inputElement:r.input},n))),Gn(r.label,{hidden:"stalled"===a.status}),Gn(r.loadingIndicator,{hidden:"stalled"!==a.status}),Gn(r.clearButton,{hidden:!a.query}),Gn(r.detachedSearchButtonQuery,{textContent:a.query}),Gn(r.detachedSearchButtonPlaceholder,{hidden:Boolean(a.query)})}(t),function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,s=t.panelContainer,l=t.propGetters,u=t.state,c=t.components,d=t.renderer;if(u.isOpen){s.contains(i.panel)||"loading"===u.status||s.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===u.status);var p=u.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var i=e.source,s=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:c,createElement:d.createElement,Fragment:d.Fragment,items:s,source:i,state:u,html:a})),i.templates.noResults&&0===s.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:c,createElement:d.createElement,Fragment:d.Fragment,source:i,state:u,html:a})):d.createElement("ul",To({className:o.list},l.getListProps(Ao({state:u,props:n.getListProps({sourceIndex:t})},r))),s.map((function(e){var s=n.getItemProps({item:e,source:i,sourceIndex:t});return d.createElement("li",To({key:s.id,className:o.item},l.getItemProps(Ao({state:u,props:s},r))),i.templates.item({components:c,createElement:d.createElement,Fragment:d.Fragment,item:e,state:u,html:a}))}))),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:c,createElement:d.createElement,Fragment:d.Fragment,items:s,source:i,state:u,html:a})))})),f=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},p),d.createElement("div",{className:"aa-GradientBottom"})),m=p.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(Ao(Ao({children:f,state:u,sections:p,elements:m},d),{},{components:c,html:a},r),i.panel)}else s.contains(i.panel)&&s.removeChild(i.panel)}(n,t)}function k(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var t,n,r=p.value.renderer,i=r.components,s=Vo(r,Go);c.current=Fo(s,p.value.core,{components:(t=i,n=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(t).reduce((function(e,t){var r=qo(t,2),o=r[0],a=r[1];return n({key:o,value:a})?Uo(Uo({},e),{},$o({},o,a)):e}),{})),initialState:h.current},e),l(),a(),m.value.refresh().then((function(){S(h.current)}))}function E(e){requestAnimationFrame((function(){var t=p.value.core.environment.document.body.contains(y.value.detachedOverlay);e!==t&&(e?(p.value.core.environment.document.body.appendChild(y.value.detachedOverlay),p.value.core.environment.document.body.classList.add("aa-Detached"),y.value.input.focus()):(p.value.core.environment.document.body.removeChild(y.value.detachedOverlay),p.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return r((function(){var e=m.value.getEnvironmentProps({formElement:y.value.form,panelElement:y.value.panel,inputElement:y.value.input});return Gn(p.value.core.environment,e),function(){Gn(p.value.core.environment,Object.keys(e).reduce((function(e,t){return Wo(Wo({},e),{},Ko({},t,void 0))}),{}))}})),r((function(){var e=f.value?p.value.core.environment.document.body:p.value.renderer.panelContainer,t=f.value?y.value.detachedOverlay:y.value.panel;return f.value&&h.current.isOpen&&E(!0),S(h.current),function(){e.contains(t)&&e.removeChild(t)}})),r((function(){var e=p.value.renderer.container;return e.appendChild(y.value.root),function(){e.removeChild(y.value.root)}})),r((function(){var e=ve((function(e){S(e.state)}),0);return d.current=function(t){var n=t.state,r=t.prevState;(f.value&&r.isOpen!==n.isOpen&&E(n.isOpen),f.value||!n.isOpen||r.isOpen||w(),n.query!==r.query)&&p.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){d.current=void 0}})),r((function(){var e=ve((function(){var e=f.value;f.value=p.value.core.environment.matchMedia(p.value.renderer.detachedMediaQuery).matches,e!==f.value?k({}):requestAnimationFrame(w)}),20);return p.value.core.environment.addEventListener("resize",e),function(){p.value.core.environment.removeEventListener("resize",e)}})),r((function(){if(!f.value)return function(){};function e(e){y.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=p.value.core.environment.matchMedia(getComputedStyle(p.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),r((function(){return requestAnimationFrame(w),function(){}})),Wo(Wo({},v),{},{update:k,destroy:function(){o()}})}var Xo=n(1514);const Jo=n(5351),ea=Jo;var ta=n(813),na=n.n(ta);function ra(){const e=(0,l.TH)(),t=(0,l.k6)(),{siteConfig:{baseUrl:n}}=(0,le.Z)(),[o,a]=(0,r.useState)({terms:[],isDocsOrBlog:!1});return(0,r.useEffect)((()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);const{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.cmfcmfhighlight,t,e]),(0,r.useEffect)((()=>{if(0===o.terms.length)return;const e=o.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;const t=new(na())(e),n={ignoreJoiners:!0};return t.mark(o.terms,n),()=>t.unmark(n)}),[o,n]),null}var oa=n(1610),aa=n(246);function ia(e){let{document:t}=e;const[n,r]=t.sectionRoute.split("#");let o=n;return r&&(o+="#"+r),o}const sa={documents:[],index:ea((function(){this.ref("id"),this.field("title"),this.field("content")}))};const la=()=>{const e=(0,B.Z)(),[t,n]=(0,r.useState)((()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme")));(0,r.useEffect)((()=>{const e=new MutationObserver((()=>{n("dark"===document.documentElement.getAttribute("data-theme"))}));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()}),[]);const{siteConfig:{baseUrl:o}}=(0,le.Z)(),{titleBoost:a,contentBoost:i,tagsBoost:s,parentCategoriesBoost:c,indexDocSidebarParentCategories:d,maxSearchResults:p}=(0,oa.eZ)("@cmfcmf/docusaurus-search-local"),f=(0,l.k6)(),{tags:m}=(0,aa._q)(),h=(0,r.useRef)(m);(0,r.useEffect)((()=>{h.current=m}),[m]);const g=(0,r.useRef)({}),v=async e=>{const t=g.current[e];switch(t?.state){case"ready":return t;case void 0:{const t=[];g.current[e]={state:"loading",callbacks:t};const n=await async function(e,t){{let r;try{const n=await fetch(`${e}search-index-${t}.json`);if(!n.ok)return sa;r=await n.json()}catch(n){return sa}return{documents:r.documents,index:ea.Index.load(r.index)}}}(o,e);return t.forEach((e=>e(n))),g.current[e]={state:"ready",...n}}case"loading":return new Promise((e=>{t.callbacks.push(e)}))}},b=(0,u.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),y=(0,r.useRef)(null),w=(0,r.useRef)(null);return(0,r.useEffect)((()=>{if(y.current)return w.current=Yo({container:y.current,placeholder:b,renderer:{createElement:r.createElement,Fragment:r.Fragment,render:ge.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;f.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e;const n=ia(t);return r.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),f.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},r.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&r.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),r.createElement("div",{className:"aa-ItemActions"},r.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},r.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},r.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},(0,u.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return ia(t)},async getItems(){const e=h.current,n=await Promise.all(e.map((e=>v(e)))),r=(e=>Jo.tokenizer(e).map((e=>e.str)))(t);return n.flatMap((e=>{let{index:t,documents:n}=e;return t.query((e=>{e.term(r,{fields:["title"],boost:a}),e.term(r,{fields:["title"],boost:a,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:i}),e.term(r,{fields:["content"],boost:i,wildcard:ea.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:s}),e.term(r,{fields:["tags"],boost:s,wildcard:ea.Query.wildcard.TRAILING}),d&&(e.term(r,{fields:["sidebarParentCategories"],boost:c}),e.term(r,{fields:["sidebarParentCategories"],boost:c,wildcard:ea.Query.wildcard.TRAILING}))})).slice(0,p).map((e=>({document:n.find((t=>t.id.toString()===e.ref)),score:e.score,terms:r})))})).sort(((e,t)=>t.score-e.score)).slice(0,p)}}]}}),()=>w.current?.destroy()}),[p]),r.createElement(r.Fragment,null,r.createElement(Xo.Z,null,r.createElement("body",{"data-theme":t?"dark":"light"})),r.createElement(ra,null),r.createElement("div",{className:"dsla-search-wrapper"},r.createElement("div",{className:"dsla-search-field",ref:y,"data-tags":m.join(",")})))},ua={searchBox:"searchBox_ZlJk"};function ca(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,ua.searchBox)},t)}var da=n(868),pa=n(3734);var fa=n(6409);const ma=e=>e.docs.find((t=>t.id===e.mainDocId));const ha={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.Z)(),p=(0,fe.l)(),{search:f,hash:m}=(0,l.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],g=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(pe,(0,s.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:he}),g),items:h}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ca,{className:n},r.createElement(la,null))},dropdown:pe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const s=i?"li":"div";return r.createElement(s,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),l=(0,pa.vY)(t,o);return null===l?null:r.createElement(ae,(0,s.Z)({exact:!0},a,{isActive:()=>i?.path===l.path||!!i?.sidebar&&i.sidebar===l.sidebar,label:n??l.id,to:l.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,da.Iw)(o),l=(0,pa.oz)(t,o).link;if(!l)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,s.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??l.label,to:l.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,pa.lO)(o)[0],l=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,s.Z)({},a,{label:l,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...c}=e;const{search:d,hash:p}=(0,l.TH)(),f=(0,da.Iw)(n),m=(0,da.gB)(n),{savePreferredVersionName:h}=(0,fa.J)(n),g=m.map((e=>{const t=f.alternateDocVersions[e.name]??ma(e);return{label:e.label,to:`${t.path}${d}${p}`,isActive:()=>e===f.activeVersion,onClick:()=>h(e.name)}})),v=[...a,...g,...i],b=(0,pa.lO)(n)[0],y=t&&v.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,w=t&&v.length>1?void 0:ma(b).path;return v.length<=1?r.createElement(ae,(0,s.Z)({},c,{mobile:t,label:y,to:w,isActive:o?()=>!1:void 0})):r.createElement(pe,(0,s.Z)({},c,{mobile:t,label:y,to:w,items:v,isActive:o?()=>!1:void 0}))}},ga=ha;function va(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=ga[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function ba(){const e=(0,T.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(va,(0,s.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function ya(e){return r.createElement("button",(0,s.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function wa(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(ya,{onClick:()=>t.hide()}),t.content)}function Sa(){const e=(0,T.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(K,null),primaryMenu:r.createElement(ba,null),secondaryMenu:r.createElement(wa,null)}):null}const ka={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ea(e){return r.createElement("div",(0,s.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function _a(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,T.e)(),{navbarRef:s,isNavbarVisible:l}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,I.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<a.current)return void n(!0);if(o.current)return void(o.current=!1);const s=r?.scrollY,l=document.documentElement.scrollHeight-a.current,u=window.innerHeight;s&&i>=s?n(!1):i+u<l&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:s,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[ka.navbarHideable,!l&&ka.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(Ea,{onClick:i.toggle}),r.createElement(Sa,null))}var xa=n(3905);const Oa={errorBoundaryError:"errorBoundaryError_a6uf"};function Pa(e){return r.createElement("button",(0,s.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function Ca(e){let{error:t}=e;const n=(0,xa.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Oa.errorBoundaryError},n)}class Ta extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const Ia="right";function Aa(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,s.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Na(){const{toggle:e,shown:t}=(0,T.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Aa,null))}const La={colorModeToggle:"colorModeToggle_DEke"};function ja(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ta,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(va,e)))))}function Ra(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Da(){const e=(0,T.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??Ia)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(Ra,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Na,null),r.createElement(Z,null),r.createElement(ja,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(ja,{items:o}),r.createElement(Q,{className:La.colorModeToggle}),!a&&r.createElement(ca,null,r.createElement(la,null)))})}function Ma(){return r.createElement(_a,null,r.createElement(Da,null))}function Fa(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...l}=t,u=(0,X.Z)(n),c=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(Y.Z,(0,s.Z)({className:"footer__link-item"},o?{href:i?c:o}:{to:u},l),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function Ba(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Fa,{item:t}))}function za(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(Ba,{key:t,item:e})))))}function Ua(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(za,{key:t,column:e}))))}function $a(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function qa(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Fa,{item:t})}function Ha(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(qa,{item:e}),t.length!==n+1&&r.createElement($a,null))))))}function Ga(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Ua,{columns:t}):r.createElement(Ha,{links:t})}var Qa=n(7909);const Va={footerLogoLink:"footerLogoLink_BH7S"};function Za(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Qa.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function Wa(e){let{logo:t}=e;return t.href?r.createElement(Y.Z,{href:t.href,className:Va.footerLogoLink,target:t.target},r.createElement(Za,{logo:t})):r.createElement(Za,{logo:t})}function Ka(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Ya(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function Xa(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(Ya,{style:a,links:n&&n.length>0&&r.createElement(Ga,{links:n}),logo:o&&r.createElement(Wa,{logo:o}),copyright:t&&r.createElement(Ka,{copyright:t})})}const Ja=r.memo(Xa),ei=(0,A.Qc)([F.S,S.pl,I.OC,fa.L5,i.VC,function(e){let{children:t}=e;return r.createElement(N.n2,null,r.createElement(T.M,null,r.createElement(j,null,t)))}]);function ti(e){let{children:t}=e;return r.createElement(ei,null,t)}function ni(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Pa,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(Ca,{error:t})))))}const ri={mainWrapper:"mainWrapper_z2l0"};function oi(e){const{children:t,noFooter:n,wrapperClassName:s,title:l,description:u}=e;return(0,v.t)(),r.createElement(ti,null,r.createElement(i.d,{title:l,description:u}),r.createElement(y,null),r.createElement(C,null),r.createElement(Ma,null),r.createElement("div",{id:d,className:(0,o.Z)(g.k.wrapper.main,ri.mainWrapper,s)},r.createElement(a.Z,{fallback:e=>r.createElement(ni,e)},t)),!n&&r.createElement(Ja,null))}},6811:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(3699),i=n(9524),s=n(9962),l=n(107),u=n(7909);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},s=o.createElement(u.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},s):s}function d(e){const{siteConfig:{title:t}}=(0,s.Z)(),{navbar:{title:n,logo:u}}=(0,l.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,i.Z)(u?.href||"/"),h=n?"":t,g=u?.alt??h;return o.createElement(a.Z,(0,r.Z)({to:m},f,u?.target&&{target:u.target}),u&&o.createElement(c,{logo:u,alt:g,imageClassName:d}),null!=n&&o.createElement("b",{className:p},n))}},3647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(1514);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},7909:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(6010),i=n(1048),s=n(9200);const l={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,s.I)(),{sources:u,className:c,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,f.map((e=>o.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,a.Z)(l.themedImage,l[`themedImage--${e}`],c)},p)))))}},4639:(e,t,n)=>{"use strict";n.d(t,{u:()=>l,z:()=>g});var r=n(7462),o=n(7294),a=n(6136),i=n(8986);const s="ease-in-out";function l(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??s}`,height:`${t}px`}}function l(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!a.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:s,disableSSRStyle:l}=e;const u=(0,o.useRef)(null);return p({collapsibleRef:u,collapsed:n,animation:a}),o.createElement(t,{ref:u,style:l?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:s},r)}function h(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[s,l]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&l(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:s})):null}function g(e){let{lazy:t,...n}=e;const r=t?h:m;return o.createElement(r,n)}},5830:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(7294),o=n(1048),a=n(2560),i=n(3768),s=n(107);const l=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===l.get(),d=e=>l.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(p.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9200:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>h});var r=n(7294),o=n(6136),a=n(3768),i=n(2560),s=n(107);const l=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},p=e=>e===d.dark?d.dark:d.light,f=e=>o.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{c.set(p(e))};function h(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[o,a]=(0,r.useState)(f(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(l.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(l);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},6409:(e,t,n)=>{"use strict";n.d(t,{J:()=>b,L5:()=>g,Oh:()=>y});var r=n(7294),o=n(868),a=n(6875),i=n(107),s=n(3734),l=n(3768),u=n(2560);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=m();return r.createElement(f.Provider,{value:n},t)}function g(e){let{children:t}=e;return s.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function v(){const e=(0,r.useContext)(f);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function b(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=v(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function y(){const e=(0,o._r)(),[t]=v();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4432:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,b:()=>s});var r=n(7294),o=n(3768);const a=Symbol("EmptyContext"),i=r.createContext(a);function s(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function l(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},2600:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(7294),o=n(3086),a=n(3488),i=n(6550),s=(n(1688),n(3768));function l(e){!function(e){const t=(0,i.k6)(),n=(0,s.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(107);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const c=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function p(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function f(){const e=r.useContext(c);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},3086:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>l,n2:()=>i});var r=n(7294),o=n(3768);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function s(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function l(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,s]=i,l=(0,o.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},8181:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},3488:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),o=n(6136);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const l=!1;function u(){const[e,t]=(0,r.useState)((()=>l?"ssr":s()));return(0,r.useEffect)((()=>{function e(){t(s())}const n=l?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},3702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},8986:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},3734:(e,t,n)=>{"use strict";n.d(t,{Wl:()=>p,_F:()=>h,cE:()=>d,hI:()=>S,lO:()=>b,vY:()=>w,oz:()=>y,s1:()=>v});var r=n(7294),o=n(6550),a=n(8790),i=n(868),s=n(6409),l=n(4432);function u(e){return Array.from(new Set(e))}var c=n(9003);const d=!!i._r;function p(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=p(t);if(e)return e}}}const f=(e,t)=>void 0!==e&&(0,c.Mg)(e,t),m=(e,t)=>e.some((e=>h(e,t)));function h(e,t){return"link"===e.type?f(e.href,t):"category"===e.type&&(f(e.href,t)||m(e.items,t))}function g(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,c.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,c.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function v(){const e=(0,l.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?g({sidebarItems:e.items,pathname:t}):null}function b(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>u([t,n,o].filter(Boolean))),[t,n,o])}function y(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function w(e,t){const n=b(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function S(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,s=i.find((e=>(0,o.LX)(r.pathname,e)));if(!s)return null;const l=s.sidebar,u=l?n.docsSidebars[l]:void 0;return{docElement:(0,a.H)(i),sidebarName:l,sidebarItems:u}}},5463:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>c,VC:()=>f});var r=n(7294),o=n(6010),a=n(1514),i=n(9656);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(9524),u=n(9962);function c(e){let{title:t,description:n,keywords:o,image:i,children:s}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.C)(),p=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),s)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:s},r.createElement(a.Z,null,r.createElement("html",{className:s})),n)}function f(e){let{children:t}=e;const n=s(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(p,{className:(0,o.Z)(a,i)},t)}},3768:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>l,i6:()=>s,zX:()=>a});var r=n(7294);const o=n(6136).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function l(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},9003:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(7294),o=n(997),a=n(9962);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2957:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>l,RF:()=>d});var r=n(7294),o=n(6136),a=n(1048),i=n(3768);const s=r.createContext(void 0);function l(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(s.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},246:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>l,os:()=>s});var r=n(868),o=n(9962),a=n(6409);const i="default";function s(e,t){return`docs-${e}-${t}`}function l(){const{i18n:e}=(0,o.Z)(),t=(0,r._r)(),n=(0,r.WS)(),l=(0,a.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=l[e],a=t[e].versions.find((e=>e.isLast));return s(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:u}}},2560:(e,t,n)=>{"use strict";n.d(t,{WA:()=>l});n(7294),n(1688);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=a(t?.persistence);return null===n?s:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},626:(e,t,n)=>{"use strict";n.d(t,{l:()=>a});var r=n(9962),o=n(6550);function a(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:a}}=(0,r.Z)(),{pathname:i}=(0,o.TH)(),s=a===n?e:e.replace(`/${a}/`,"/"),l=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:o}=e;return`${o?t:""}${function(e){return e===n?`${s}`:`${s}${e}/`}(r)}${l}`}}}},3266:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(3768);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},107:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(9962);function o(){return(0,r.Z)().siteConfig.themeConfig}},4136:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},5806:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},3905:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(4136);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(5806);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}n.d(t,{Z:()=>o});const o=function(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>O,ob:()=>f,PP:()=>C,Ep:()=>p});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&o(e),l=t&&o(t),u=s||l;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(8776);function l(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function g(e,t){t(window.confirm(e))}var v="popstate",b="hashchange";function y(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,s.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,S=i.getUserConfirmation,k=void 0===S?g:S,E=i.keyLength,_=void 0===E?6:E,x=e.basename?d(l(e.basename)):"";function O(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return x&&(a=c(a,x)),f(a,r,n)}function P(){return Math.random().toString(36).substr(2,_)}var C=m();function T(e){(0,r.Z)(U,e),U.length=n.length,C.notifyListeners(U.location,U.action)}function I(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||L(O(e.state))}function A(){L(O(y()))}var N=!1;function L(e){if(N)N=!1,T();else{C.confirmTransitionTo(e,"POP",k,(function(t){t?T({action:"POP",location:e}):function(e){var t=U.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(N=!0,M(o))}(e)}))}}var j=O(y()),R=[j.key];function D(e){return x+p(e)}function M(e){n.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?(window.addEventListener(v,I),a&&window.addEventListener(b,A)):0===F&&(window.removeEventListener(v,I),a&&window.removeEventListener(b,A))}var z=!1;var U={length:n.length,action:"POP",location:j,createHref:D,push:function(e,t){var r="PUSH",a=f(e,t,P(),U.location);C.confirmTransitionTo(a,r,k,(function(e){if(e){var t=D(a),i=a.key,s=a.state;if(o)if(n.pushState({key:i,state:s},null,t),w)window.location.href=t;else{var l=R.indexOf(U.location.key),u=R.slice(0,l+1);u.push(a.key),R=u,T({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,P(),U.location);C.confirmTransitionTo(a,r,k,(function(e){if(e){var t=D(a),i=a.key,s=a.state;if(o)if(n.replaceState({key:i,state:s},null,t),w)window.location.replace(t);else{var l=R.indexOf(U.location.key);-1!==l&&(R[l]=a.key),T({action:r,location:a})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=C.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=C.appendListener(e);return B(1),function(){B(-1),t()}}};return U}var S="hashchange",k={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+u(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:u,decodePath:l},slash:{encodePath:l,decodePath:l}};function E(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function x(e){window.location.replace(E(window.location.href)+"#"+e)}function O(e){void 0===e&&(e={}),h||(0,s.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?g:o,i=n.hashType,u=void 0===i?"slash":i,v=e.basename?d(l(e.basename)):"",b=k[u],y=b.encodePath,w=b.decodePath;function O(){var e=w(_());return v&&(e=c(e,v)),f(e)}var P=m();function C(e){(0,r.Z)(z,e),z.length=t.length,P.notifyListeners(z.location,z.action)}var T=!1,I=null;function A(){var e,t,n=_(),r=y(n);if(n!==r)x(r);else{var o=O(),i=z.location;if(!T&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(I===p(o))return;I=null,function(e){if(T)T=!1,C();else{var t="POP";P.confirmTransitionTo(e,t,a,(function(n){n?C({action:t,location:e}):function(e){var t=z.location,n=R.lastIndexOf(p(t));-1===n&&(n=0);var r=R.lastIndexOf(p(e));-1===r&&(r=0);var o=n-r;o&&(T=!0,D(o))}(e)}))}}(o)}}var N=_(),L=y(N);N!==L&&x(L);var j=O(),R=[p(j)];function D(e){t.go(e)}var M=0;function F(e){1===(M+=e)&&1===e?window.addEventListener(S,A):0===M&&window.removeEventListener(S,A)}var B=!1;var z={length:t.length,action:"POP",location:j,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=E(window.location.href)),n+"#"+y(v+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=y(v+t);if(_()!==o){I=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(p(z.location)),i=R.slice(0,a+1);i.push(t),R=i,C({action:n,location:r})}else C()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,z.location);P.confirmTransitionTo(r,n,a,(function(e){if(e){var t=p(r),o=y(v+t);_()!==o&&(I=t,x(o));var a=R.indexOf(p(z.location));-1!==a&&(R[a]=t),C({action:n,location:r})}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=P.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=P.appendListener(e);return F(1),function(){F(-1),t()}}};return z}function P(e,t,n){return Math.min(Math.max(e,t),n)}function C(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,s=void 0===i?0:i,l=t.keyLength,u=void 0===l?6:l,c=m();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,u)}var g=P(s,0,a.length-1),v=a.map((function(e){return f(e,void 0,"string"==typeof e?h():e.key||h())})),b=p;function y(e){var t=P(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:v.length,action:"POP",location:v[g],index:g,entries:v,createHref:b,push:function(e,t){var r="PUSH",o=f(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,h(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(9864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var s=l(t),h=l(n),g=0;g<i.length;++g){var v=i[g];if(!(a[v]||r&&r[v]||h&&h[v]||s&&s[v])){var b=p(n,v);try{u(t,v,b)}catch(y){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,s],c=0;(l=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},813:function(e){e.exports=function(){"use strict";var e="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},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(s){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),s=i.length,l=0;i=Array.prototype.slice.call(i);var u=function(){--s<=0&&a(l)};s||u(),i.forEach((function(t){e.matches(t,o.exclude)?u():o.onIframeReady(t,(function(e){n(t)&&(l++,r(e)),u()}),u)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),s=[],l=[],u=void 0,c=void 0,d=function(){var e=a.getIteratorNode(i);return c=e.prevNode,u=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(u,c,e,s)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return l.push(e)}),r)})),l.push(u);l.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(s,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var s=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,s):s()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(s)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,s=parseInt(e.start,10)-i;return(r=(s=s>a?a:s)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),s<0||r-s<0||s>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,s){var l=e.nodes[s+1];if(void 0===l||l.start>t){if(!r(i.node))return!1;var u=t-i.start,c=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),p=e.value.substr(c+i.start);if(i.node=a.wrapRangeInTextNode(i.node,u,c),e.value=d+p,e.nodes.forEach((function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=c),e.nodes[n].end-=c)})),n-=c,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var s=o.index;if(0!==i)for(var l=1;l<i;l++)s+=o[l].length;t=a.wrapRangeInTextNode(t,s,s+o[i].length),r(t.previousSibling),e.lastIndex=0}})),o()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){for(var s=void 0;null!==(s=e.exec(t.value))&&""!==s[i];){var l=s.index;if(0!==i)for(var u=1;u<i;u++)l+=s[u].length;var c=l+s[i].length;a.wrapRangeInMappedTextNode(t,l,c,(function(e){return n(s[i],e)}),(function(t,n){e.lastIndex=n,r(t)}))}o()}))}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var o=this;this.getTextNodes((function(a){var i=a.value.length;e.forEach((function(e,r){var s=o.checkWhitespaceRanges(e,i,a.value),l=s.start,u=s.end;s.valid&&o.wrapRangeInMappedTextNode(a,l,u,(function(n){return t(n,e,a.value.substring(l,u),r)}),(function(t){n(t,e)}))})),r()}))}},{key:"unwrapMatches",value:function(e){for(var t=e.parentNode,n=document.createDocumentFragment();e.firstChild;)n.appendChild(e.removeChild(e.firstChild));t.replaceChild(n,e),this.ie?this.normalizeTextNode(t):t.normalize()}},{key:"normalizeTextNode",value:function(e){if(e){if(3===e.nodeType)for(;e.nextSibling&&3===e.nextSibling.nodeType;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}},{key:"markRegExp",value:function(e,t){var n=this;this.opt=t,this.log('Searching with expression "'+e+'"');var r=0,o="wrapMatches",a=function(e){r++,n.opt.each(e)};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),this[o](e,this.opt.ignoreGroups,(function(e,t){return n.opt.filter(t,e,r)}),a,(function(){0===r&&n.opt.noMatch(e),n.opt.done(r)}))}},{key:"mark",value:function(e,t){var n=this;this.opt=t;var r=0,o="wrapMatches",a=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=a.keywords,s=a.length,l=this.opt.caseSensitive?"":"i",u=function e(t){var a=new RegExp(n.createRegExp(t),"gm"+l),u=0;n.log('Searching with expression "'+a+'"'),n[o](a,1,(function(e,o){return n.opt.filter(o,t,r,u)}),(function(e){u++,r++,n.opt.each(e)}),(function(){0===u&&n.opt.noMatch(t),i[s-1]===t?n.opt.done(r):e(i[i.indexOf(t)+1])}))};this.opt.acrossElements&&(o="wrapMatchesAcrossElements"),0===s?this.opt.done(r):u(i[0])}},{key:"markRanges",value:function(e,t){var n=this;this.opt=t;var r=0,o=this.checkRanges(e);o&&o.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(o)),this.wrapRangeFromIndex(o,(function(e,t,r,o){return n.opt.filter(e,t,r,o)}),(function(e,t){r++,n.opt.each(e,t)}),(function(){n.opt.done(r)}))):this.opt.done(r)}},{key:"unmark",value:function(e){var t=this;this.opt=e;var n=this.opt.element?this.opt.element:"*";n+="[data-markjs]",this.opt.className&&(n+="."+this.opt.className),this.log('Removal selector "'+n+'"'),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,(function(e){t.unwrapMatches(e)}),(function(e){var r=o.matches(e,n),a=t.matchesExclude(e);return!r||a?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),this.opt.done)}},{key:"opt",set:function(e){this._opt=r({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:function(){},noMatch:function(){},filter:function(){return!0},done:function(){},debug:!1,log:window.console},e)},get:function(){return this._opt}},{key:"iterator",get:function(){return new o(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),a}();function i(e){var t=this,n=new a(e);return this.mark=function(e,r){return n.mark(e,r),t},this.markRegExp=function(e,r){return n.markRegExp(e,r),t},this.markRanges=function(e,r){return n.markRanges(e,r),t},this.unmark=function(e){return n.unmark(e),t},this}return i}()},984:(e,t,n)=>{"use strict";n.r(t)},6930:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(u,i(e,c,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l<arguments.length;l++){for(var u in a=Object(arguments[l]))n.call(a,u)&&(s[u]=a[u]);if(t){i=t(a);for(var c=0;c<i.length;c++)r.call(a,i[c])&&(s[i[c]]=a[i[c]])}}return s}},4779:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=a,e.exports.compile=function(e,t){return s(a(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,s="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var m=e[i],h=n[2],g=n[3],v=n[4],b=n[5],y=n[6],w=n[7];s&&(r.push(s),s="");var S=null!=h&&null!=m&&m!==h,k="+"===y||"*"===y,E="?"===y||"*"===y,_=n[2]||c,x=v||b;r.push({name:g||a++,prefix:h||"",delimiter:_,optional:E,repeat:k,partial:S,asterisk:!!w,pattern:x?u(x):w?".*":"[^"+l(_)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&r.push(s),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",s=t||{},l=(o||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,p=s[c.name];if(null==p){if(c.optional){c.partial&&(a+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(p)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===f?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');a+=c.prefix+d}}else a+=c}return a}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",s=0;s<e.length;s++){var u=e[s];if("string"==typeof u)i+=l(u);else{var p=l(u.prefix),f="(?:"+u.pattern+")";t.push(u),u.repeat&&(f+="(?:"+p+f+")*"),i+=f=u.optional?u.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var m=l(n.delimiter||"/"),h=i.slice(-m.length)===m;return o||(i=(h?i.slice(0,-m.length):i)+"(?:"+m+"(?=$))?"),i+=a?"$":o&&h?"":"(?="+m+"|$)",c(new RegExp("^"+i,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(f(e[o],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(a(e,n),t,n)}(e,t,n)}},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var s in a)if(a.hasOwnProperty(s)){if(s==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(s)||(i[s]=a[s])}var u=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],o||s);var l=t[s],u=r.util.type(l);"Object"!==u||a[i(l)]?"Array"!==u||a[i(l)]||(a[i(l)]=!0,e(l,n,s,a)):(a[i(l)]=!0,e(l,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",a),a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new s;return l(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,s,c,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var m=0;m<f.length;++m){if(d&&d.cause==p+","+m)return;var h=f[m],g=h.inside,v=!!h.lookbehind,b=!!h.greedy,y=h.alias;if(b&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var S=h.pattern||h,k=s.next,E=c;k!==t.tail&&!(d&&E>=d.reach);E+=k.value.length,k=k.next){var _=k.value;if(t.length>e.length)return;if(!(_ instanceof o)){var x,O=1;if(b){if(!(x=a(S,E,e,v))||x.index>=e.length)break;var P=x.index,C=x.index+x[0].length,T=E;for(T+=k.value.length;P>=T;)T+=(k=k.next).value.length;if(E=T-=k.value.length,k.value instanceof o)continue;for(var I=k;I!==t.tail&&(T<C||"string"==typeof I.value);I=I.next)O++,T+=I.value.length;O--,_=e.slice(E,T),x.index-=E}else if(!(x=a(S,0,_,v)))continue;P=x.index;var A=x[0],N=_.slice(0,P),L=_.slice(P+A.length),j=E+_.length;d&&j>d.reach&&(d.reach=j);var R=k.prev;if(N&&(R=l(t,R,N),E+=N.length),u(t,R,O),k=l(t,R,new o(p,g?r.tokenize(A,g):A,y,A)),L&&l(t,k,L),O>1){var D={cause:p+","+m,reach:j};i(e,t,n,k.prev,E,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var s="";for(var l in a.attributes)s+=" "+l+'="'+(a.attributes[l]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+s+">"+a.content+"</"+a.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var a=o.content[1],i=o.content[3];if(a&&i&&"code-language"===a.type&&"code-block"===i.type&&"string"==typeof a.content){var s=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),l="language-"+(s=(/[a-z][\w-]*/i.exec(s)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,l]:i.alias.push(l):i.alias=[l]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r],u=/language-(.+)/.exec(a);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n);var r=s[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var p="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=p,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(p);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),s={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var a=p(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=c(0);"variable"===i.type&&(f(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,f(c(0),"property-mutation"),o.length>0)){var s=p(/^\{$/,/^\}$/);if(-1===s)continue;for(var l=n;l<s;l++){var u=t[l];"variable"===u.type&&o.indexOf(u.content)>=0&&f(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function p(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))o++;else if(r.test(s)&&0===--o)return a}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function l(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,l(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=l(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=s(i++,r)););return c[n]=o,n})).join(""),n,r),p=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=p[i],a="string"==typeof r?r:r.content,s=a.indexOf(o);if(-1!==s){++i;var l=a.substring(0,s),d=u(c[o]),f=a.substring(s+o.length),m=[];if(l&&m.push(l),m.push(d),f){var h=[f];e(h),m.push.apply(m,h)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var a=n[r];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var s=i[1];if(3===i.length&&"string"!=typeof s&&"embedded-code"===s.type){var l=p(s),u=s.alias,d=Array.isArray(u)?u[0]:u,f=e.languages[d];if(!f)continue;i[1]=c(l,f,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];"RegExp"===e.util.type(a)&&(a=e.languages.javascript[o]={pattern:a});var i=a.inside||{};a.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},s=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var l=i(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(l+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(l=i(t[r-1])+l,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",l,null,l)}o.content&&"string"!=typeof o.content&&s(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l<s.length&&!(o>=a.length);l++){var u=s[l];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++o;var h=p.substring(0,m),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),v=p.substring(m+f.length),b=[];h&&b.push.apply(b,i([h])),b.push(g),v&&b.push.apply(b,i([v])),"string"==typeof u?s.splice.apply(s,[l,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return s}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),o=n(9642),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),a.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},6500:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,a){if(!(r in n)){a.push(r);var i=a.indexOf(r);if(i<a.length-1)throw new Error("Circular dependency: "+a.slice(i).join(" -> "));var s={},l=e[r];if(l){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in o(t,a),s[t]=!0,n[t])s[i]=!0}t(l.require,u),t(l.optional,u),t(l.modify,u)}n[r]=s,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(l);i=i.map(u),s=(s||[]).map(u);var c=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var p,f=r(l),m=c;o(m);){for(var h in p={},m){var g=l[h];t(g&&g.modify,(function(e){e in d&&(p[e]=!0)}))}for(var v in d)if(!(v in c))for(var b in f(v))if(b in c){p[v]=!0;break}for(var y in m=p)c[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,s={},l={};function u(e){if(e in s)return s[e];l[e]=!0;var o,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)o=r(e);else{var p=i(c.map((function(e){var t=u(e);return delete l[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return s[e]=o}for(var c in n)u(c);var d=[];for(var p in l)d.push(s[p]);return i(d)}(f,c,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var s=new Set,l={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(l[e]=t,e=0;e<t.length;e++)s.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f=Object.prototype.hasOwnProperty,m={},h={};function g(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){v[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];v[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){v[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){v[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){v[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){v[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){v[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){v[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){v[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=v.hasOwnProperty(t)?v[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!f.call(h,e)||!f.call(m,e)&&(p.test(e)?h[e]=!0:(m[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);v[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);v[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);v[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){v[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),v.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){v[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var S=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=60103,E=60106,_=60107,x=60108,O=60114,P=60109,C=60110,T=60112,I=60113,A=60120,N=60115,L=60116,j=60121,R=60128,D=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;k=B("react.element"),E=B("react.portal"),_=B("react.fragment"),x=B("react.strict_mode"),O=B("react.profiler"),P=B("react.provider"),C=B("react.context"),T=B("react.forward_ref"),I=B("react.suspense"),A=B("react.suspense_list"),N=B("react.memo"),L=B("react.lazy"),j=B("react.block"),B("react.scope"),R=B("react.opaque.id"),D=B("react.debug_trace_mode"),M=B("react.offscreen"),F=B("react.legacy_hidden")}var z,U="function"==typeof Symbol&&Symbol.iterator;function $(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=U&&e[U]||e["@@iterator"])?e:null}function q(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var H=!1;function G(e,t){if(!e||H)return"";H=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(l){var r=l}Reflect.construct(e,[],t)}else{try{t.call()}catch(l){r=l}e.call(t.prototype)}else{try{throw Error()}catch(l){r=l}e()}}catch(l){if(l&&r&&"string"==typeof l.stack){for(var o=l.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,s=a.length-1;1<=i&&0<=s&&o[i]!==a[s];)s--;for(;1<=i&&0<=s;i--,s--)if(o[i]!==a[s]){if(1!==i||1!==s)do{if(i--,0>--s||o[i]!==a[s])return"\n"+o[i].replace(" at new "," at ")}while(1<=i&&0<=s);break}}}finally{H=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?q(e):""}function Q(e){switch(e.tag){case 5:return q(e.type);case 16:return q("Lazy");case 13:return q("Suspense");case 19:return q("SuspenseList");case 0:case 2:case 15:return e=G(e.type,!1);case 11:return e=G(e.type.render,!1);case 22:return e=G(e.type._render,!1);case 1:return e=G(e.type,!0);default:return""}}function V(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case _:return"Fragment";case E:return"Portal";case O:return"Profiler";case x:return"StrictMode";case I:return"Suspense";case A:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case C:return(e.displayName||"Context")+".Consumer";case P:return(e._context.displayName||"Context")+".Provider";case T:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case N:return V(e.type);case j:return V(e._render);case L:t=e._payload,e=e._init;try{return V(e(t))}catch(n){}}return null}function Z(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function W(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function K(e){e._valueTracker||(e._valueTracker=function(e){var t=W(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function Y(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=W(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function X(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=Z(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=Z(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,Z(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&X(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ae(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+Z(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function se(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function le(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:Z(n)}}function ue(e,t){var n=Z(t.value),r=Z(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function pe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function fe(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?pe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,he,ge=(he=function(e,t){if(e.namespaceURI!==de.svg||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return he(e,t)}))}:he);function ve(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var be={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ye=["Webkit","ms","Moz","O"];function we(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||be.hasOwnProperty(e)&&be[e]?(""+t).trim():t+"px"}function Se(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=we(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(be).forEach((function(e){ye.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),be[t]=be[e]}))}));var ke=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Ee(e,t){if(t){if(ke[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function _e(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Oe=null,Pe=null,Ce=null;function Te(e){if(e=no(e)){if("function"!=typeof Oe)throw Error(i(280));var t=e.stateNode;t&&(t=oo(t),Oe(e.stateNode,e.type,t))}}function Ie(e){Pe?Ce?Ce.push(e):Ce=[e]:Pe=e}function Ae(){if(Pe){var e=Pe,t=Ce;if(Ce=Pe=null,Te(e),t)for(e=0;e<t.length;e++)Te(t[e])}}function Ne(e,t){return e(t)}function Le(e,t,n,r,o){return e(t,n,r,o)}function je(){}var Re=Ne,De=!1,Me=!1;function Fe(){null===Pe&&null===Ce||(je(),Ae())}function Be(e,t){var n=e.stateNode;if(null===n)return null;var r=oo(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var ze=!1;if(d)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){ze=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch(he){ze=!1}function $e(e,t,n,r,o,a,i,s,l){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var qe=!1,He=null,Ge=!1,Qe=null,Ve={onError:function(e){qe=!0,He=e}};function Ze(e,t,n,r,o,a,i,s,l){qe=!1,He=null,$e.apply(Ve,arguments)}function We(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ke(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ye(e){if(We(e)!==e)throw Error(i(188))}function Xe(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=We(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return Ye(o),e;if(a===r)return Ye(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var s=!1,l=o.child;l;){if(l===n){s=!0,n=o,r=a;break}if(l===r){s=!0,r=o,n=a;break}l=l.sibling}if(!s){for(l=a.child;l;){if(l===n){s=!0,n=a,r=o;break}if(l===r){s=!0,r=a,n=o;break}l=l.sibling}if(!s)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function Je(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var et,tt,nt,rt,ot=!1,at=[],it=null,st=null,lt=null,ut=new Map,ct=new Map,dt=[],pt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function ft(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":it=null;break;case"dragenter":case"dragleave":st=null;break;case"mouseover":case"mouseout":lt=null;break;case"pointerover":case"pointerout":ut.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":ct.delete(t.pointerId)}}function ht(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e=ft(t,n,r,o,a),null!==t&&(null!==(t=no(t))&&tt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function gt(e){var t=to(e.target);if(null!==t){var n=We(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ke(n)))return e.blockedOn=t,void rt(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){nt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function vt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=no(n))&&tt(t),e.blockedOn=n,!1;t.shift()}return!0}function bt(e,t,n){vt(e)&&n.delete(t)}function yt(){for(ot=!1;0<at.length;){var e=at[0];if(null!==e.blockedOn){null!==(e=no(e.blockedOn))&&et(e);break}for(var t=e.targetContainers;0<t.length;){var n=Xt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&at.shift()}null!==it&&vt(it)&&(it=null),null!==st&&vt(st)&&(st=null),null!==lt&&vt(lt)&&(lt=null),ut.forEach(bt),ct.forEach(bt)}function wt(e,t){e.blockedOn===t&&(e.blockedOn=null,ot||(ot=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,yt)))}function St(e){function t(t){return wt(t,e)}if(0<at.length){wt(at[0],e);for(var n=1;n<at.length;n++){var r=at[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==it&&wt(it,e),null!==st&&wt(st,e),null!==lt&&wt(lt,e),ut.forEach(t),ct.forEach(t),n=0;n<dt.length;n++)(r=dt[n]).blockedOn===e&&(r.blockedOn=null);for(;0<dt.length&&null===(n=dt[0]).blockedOn;)gt(n),null===n.blockedOn&&dt.shift()}function kt(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Et={animationend:kt("Animation","AnimationEnd"),animationiteration:kt("Animation","AnimationIteration"),animationstart:kt("Animation","AnimationStart"),transitionend:kt("Transition","TransitionEnd")},_t={},xt={};function Ot(e){if(_t[e])return _t[e];if(!Et[e])return e;var t,n=Et[e];for(t in n)if(n.hasOwnProperty(t)&&t in xt)return _t[e]=n[t];return e}d&&(xt=document.createElement("div").style,"AnimationEvent"in window||(delete Et.animationend.animation,delete Et.animationiteration.animation,delete Et.animationstart.animation),"TransitionEvent"in window||delete Et.transitionend.transition);var Pt=Ot("animationend"),Ct=Ot("animationiteration"),Tt=Ot("animationstart"),It=Ot("transitionend"),At=new Map,Nt=new Map,Lt=["abort","abort",Pt,"animationEnd",Ct,"animationIteration",Tt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",It,"transitionEnd","waiting","waiting"];function jt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),Nt.set(r,t),At.set(r,o),u(o,[r])}}(0,a.unstable_now)();var Rt=8;function Dt(e){if(0!=(1&e))return Rt=15,1;if(0!=(2&e))return Rt=14,2;if(0!=(4&e))return Rt=13,4;var t=24&e;return 0!==t?(Rt=12,t):0!=(32&e)?(Rt=11,32):0!==(t=192&e)?(Rt=10,t):0!=(256&e)?(Rt=9,256):0!==(t=3584&e)?(Rt=8,t):0!=(4096&e)?(Rt=7,4096):0!==(t=4186112&e)?(Rt=6,t):0!==(t=62914560&e)?(Rt=5,t):67108864&e?(Rt=4,67108864):0!=(134217728&e)?(Rt=3,134217728):0!==(t=805306368&e)?(Rt=2,t):0!=(1073741824&e)?(Rt=1,1073741824):(Rt=8,e)}function Mt(e,t){var n=e.pendingLanes;if(0===n)return Rt=0;var r=0,o=0,a=e.expiredLanes,i=e.suspendedLanes,s=e.pingedLanes;if(0!==a)r=a,o=Rt=15;else if(0!==(a=134217727&n)){var l=a&~i;0!==l?(r=Dt(l),o=Rt):0!==(s&=a)&&(r=Dt(s),o=Rt)}else 0!==(a=n&~i)?(r=Dt(a),o=Rt):0!==s&&(r=Dt(s),o=Rt);if(0===r)return 0;if(r=n&((0>(r=31-qt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Dt(t),o<=Rt)return t;Rt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-qt(t)),r|=e[n],t&=~o;return r}function Ft(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function Bt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=zt(24&~t))?Bt(10,t):e;case 10:return 0===(e=zt(192&~t))?Bt(8,t):e;case 8:return 0===(e=zt(3584&~t))&&(0===(e=zt(4186112&~t))&&(e=512)),e;case 2:return 0===(t=zt(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function zt(e){return e&-e}function Ut(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function $t(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-qt(t)]=n}var qt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(Ht(e)/Gt|0)|0},Ht=Math.log,Gt=Math.LN2;var Qt=a.unstable_UserBlockingPriority,Vt=a.unstable_runWithPriority,Zt=!0;function Wt(e,t,n,r){De||je();var o=Yt,a=De;De=!0;try{Le(o,e,t,n,r)}finally{(De=a)||Fe()}}function Kt(e,t,n,r){Vt(Qt,Yt.bind(null,e,t,n,r))}function Yt(e,t,n,r){var o;if(Zt)if((o=0==(4&t))&&0<at.length&&-1<pt.indexOf(e))e=ft(null,e,t,n,r),at.push(e);else{var a=Xt(e,t,n,r);if(null===a)o&&mt(e,r);else{if(o){if(-1<pt.indexOf(e))return e=ft(a,e,t,n,r),void at.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return it=ht(it,e,t,n,r,o),!0;case"dragenter":return st=ht(st,e,t,n,r,o),!0;case"mouseover":return lt=ht(lt,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return ut.set(a,ht(ut.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,ct.set(a,ht(ct.get(a)||null,e,t,n,r,o)),!0}return!1}(a,e,t,n,r))return;mt(e,r)}jr(e,t,r,null,n)}}}function Xt(e,t,n,r){var o=xe(r);if(null!==(o=to(o))){var a=We(o);if(null===a)o=null;else{var i=a.tag;if(13===i){if(null!==(o=Ke(a)))return o;o=null}else if(3===i){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return jr(e,t,r,o,n),null}var Jt=null,en=null,tn=null;function nn(){if(tn)return tn;var e,t,n=en,r=n.length,o="value"in Jt?Jt.value:Jt.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return tn=o.slice(e,1<t?1-t:void 0)}function rn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function on(){return!0}function an(){return!1}function sn(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?on:an,this.isPropagationStopped=an,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=on)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=on)},persist:function(){},isPersistent:on}),t}var ln,un,cn,dn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},pn=sn(dn),fn=o({},dn,{view:0,detail:0}),mn=sn(fn),hn=o({},fn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Pn,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==cn&&(cn&&"mousemove"===e.type?(ln=e.screenX-cn.screenX,un=e.screenY-cn.screenY):un=ln=0,cn=e),ln)},movementY:function(e){return"movementY"in e?e.movementY:un}}),gn=sn(hn),vn=sn(o({},hn,{dataTransfer:0})),bn=sn(o({},fn,{relatedTarget:0})),yn=sn(o({},dn,{animationName:0,elapsedTime:0,pseudoElement:0})),wn=o({},dn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),Sn=sn(wn),kn=sn(o({},dn,{data:0})),En={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},_n={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},xn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function On(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=xn[e])&&!!t[e]}function Pn(){return On}var Cn=o({},fn,{key:function(e){if(e.key){var t=En[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=rn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?_n[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Pn,charCode:function(e){return"keypress"===e.type?rn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?rn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=sn(Cn),In=sn(o({},hn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),An=sn(o({},fn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Pn})),Nn=sn(o({},dn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Ln=o({},hn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),jn=sn(Ln),Rn=[9,13,27,32],Dn=d&&"CompositionEvent"in window,Mn=null;d&&"documentMode"in document&&(Mn=document.documentMode);var Fn=d&&"TextEvent"in window&&!Mn,Bn=d&&(!Dn||Mn&&8<Mn&&11>=Mn),zn=String.fromCharCode(32),Un=!1;function $n(e,t){switch(e){case"keyup":return-1!==Rn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function qn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Hn=!1;var Gn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Qn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Gn[e.type]:"textarea"===t}function Vn(e,t,n,r){Ie(r),0<(t=Dr(t,"onChange")).length&&(n=new pn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Zn=null,Wn=null;function Kn(e){Cr(e,0)}function Yn(e){if(Y(ro(e)))return e}function Xn(e,t){if("change"===e)return t}var Jn=!1;if(d){var er;if(d){var tr="oninput"in document;if(!tr){var nr=document.createElement("div");nr.setAttribute("oninput","return;"),tr="function"==typeof nr.oninput}er=tr}else er=!1;Jn=er&&(!document.documentMode||9<document.documentMode)}function rr(){Zn&&(Zn.detachEvent("onpropertychange",or),Wn=Zn=null)}function or(e){if("value"===e.propertyName&&Yn(Wn)){var t=[];if(Vn(t,Wn,e,xe(e)),e=Kn,De)e(t);else{De=!0;try{Ne(e,t)}finally{De=!1,Fe()}}}}function ar(e,t,n){"focusin"===e?(rr(),Wn=n,(Zn=t).attachEvent("onpropertychange",or)):"focusout"===e&&rr()}function ir(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Yn(Wn)}function sr(e,t){if("click"===e)return Yn(t)}function lr(e,t){if("input"===e||"change"===e)return Yn(t)}var ur="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},cr=Object.prototype.hasOwnProperty;function dr(e,t){if(ur(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!cr.call(t,n[r])||!ur(e[n[r]],t[n[r]]))return!1;return!0}function pr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function fr(e,t){var n,r=pr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=pr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function hr(){for(var e=window,t=X();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=X((e=t.contentWindow).document)}return t}function gr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var vr=d&&"documentMode"in document&&11>=document.documentMode,br=null,yr=null,wr=null,Sr=!1;function kr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;Sr||null==br||br!==X(r)||("selectionStart"in(r=br)&&gr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},wr&&dr(wr,r)||(wr=r,0<(r=Dr(yr,"onSelect")).length&&(t=new pn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=br)))}jt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),jt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),jt(Lt,2);for(var Er="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),_r=0;_r<Er.length;_r++)Nt.set(Er[_r],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var xr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Or=new Set("cancel close invalid load scroll toggle".split(" ").concat(xr));function Pr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,a,s,l,u){if(Ze.apply(this,arguments),qe){if(!qe)throw Error(i(198));var c=He;qe=!1,He=null,Ge||(Ge=!0,Qe=c)}}(r,t,void 0,e),e.currentTarget=null}function Cr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,u=s.currentTarget;if(s=s.listener,l!==a&&o.isPropagationStopped())break e;Pr(o,s,u),a=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,u=s.currentTarget,s=s.listener,l!==a&&o.isPropagationStopped())break e;Pr(o,s,u),a=l}}}if(Ge)throw e=Qe,Ge=!1,Qe=null,e}function Tr(e,t){var n=ao(t),r=e+"__bubble";n.has(r)||(Lr(t,e,2,!1),n.add(r))}var Ir="_reactListening"+Math.random().toString(36).slice(2);function Ar(e){e[Ir]||(e[Ir]=!0,s.forEach((function(t){Or.has(t)||Nr(t,!1,e,null),Nr(t,!0,e,null)})))}function Nr(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=n;if("selectionchange"===e&&9!==n.nodeType&&(a=n.ownerDocument),null!==r&&!t&&Or.has(e)){if("scroll"!==e)return;o|=2,a=r}var i=ao(a),s=e+"__"+(t?"capture":"bubble");i.has(s)||(t&&(o|=4),Lr(a,e,o,t),i.add(s))}function Lr(e,t,n,r){var o=Nt.get(t);switch(void 0===o?2:o){case 0:o=Wt;break;case 1:o=Kt;break;default:o=Yt}n=o.bind(null,t,n,e),o=void 0,!ze||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function jr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===o||8===s.nodeType&&s.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===o||8===l.nodeType&&l.parentNode===o))return;i=i.return}for(;null!==s;){if(null===(i=to(s)))return;if(5===(l=i.tag)||6===l){r=a=i;continue e}s=s.parentNode}}r=r.return}!function(e,t,n){if(Me)return e(t,n);Me=!0;try{return Re(e,t,n)}finally{Me=!1,Fe()}}((function(){var r=a,o=xe(n),i=[];e:{var s=At.get(e);if(void 0!==s){var l=pn,u=e;switch(e){case"keypress":if(0===rn(n))break e;case"keydown":case"keyup":l=Tn;break;case"focusin":u="focus",l=bn;break;case"focusout":u="blur",l=bn;break;case"beforeblur":case"afterblur":l=bn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=vn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=An;break;case Pt:case Ct:case Tt:l=yn;break;case It:l=Nn;break;case"scroll":l=mn;break;case"wheel":l=jn;break;case"copy":case"cut":case"paste":l=Sn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=In}var c=0!=(4&t),d=!c&&"scroll"===e,p=c?null!==s?s+"Capture":null:s;c=[];for(var f,m=r;null!==m;){var h=(f=m).stateNode;if(5===f.tag&&null!==h&&(f=h,null!==p&&(null!=(h=Be(m,p))&&c.push(Rr(m,h,f)))),d)break;m=m.return}0<c.length&&(s=new l(s,u,null,n,o),i.push({event:s,listeners:c}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!to(u)&&!u[Jr])&&(l||s)&&(s=o.window===o?o:(s=o.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=r,null!==(u=(u=n.relatedTarget||n.toElement)?to(u):null)&&(u!==(d=We(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(l=null,u=r),l!==u)){if(c=gn,h="onMouseLeave",p="onMouseEnter",m="mouse","pointerout"!==e&&"pointerover"!==e||(c=In,h="onPointerLeave",p="onPointerEnter",m="pointer"),d=null==l?s:ro(l),f=null==u?s:ro(u),(s=new c(h,m+"leave",l,n,o)).target=d,s.relatedTarget=f,h=null,to(o)===r&&((c=new c(p,m+"enter",u,n,o)).target=f,c.relatedTarget=d,h=c),d=h,l&&u)e:{for(p=u,m=0,f=c=l;f;f=Mr(f))m++;for(f=0,h=p;h;h=Mr(h))f++;for(;0<m-f;)c=Mr(c),m--;for(;0<f-m;)p=Mr(p),f--;for(;m--;){if(c===p||null!==p&&c===p.alternate)break e;c=Mr(c),p=Mr(p)}c=null}else c=null;null!==l&&Fr(i,s,l,c,!1),null!==u&&null!==d&&Fr(i,d,u,c,!0)}if("select"===(l=(s=r?ro(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var g=Xn;else if(Qn(s))if(Jn)g=lr;else{g=ir;var v=ar}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(g=sr);switch(g&&(g=g(e,r))?Vn(i,g,n,o):(v&&v(e,s,r),"focusout"===e&&(v=s._wrapperState)&&v.controlled&&"number"===s.type&&oe(s,"number",s.value)),v=r?ro(r):window,e){case"focusin":(Qn(v)||"true"===v.contentEditable)&&(br=v,yr=r,wr=null);break;case"focusout":wr=yr=br=null;break;case"mousedown":Sr=!0;break;case"contextmenu":case"mouseup":case"dragend":Sr=!1,kr(i,n,o);break;case"selectionchange":if(vr)break;case"keydown":case"keyup":kr(i,n,o)}var b;if(Dn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else Hn?$n(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(Bn&&"ko"!==n.locale&&(Hn||"onCompositionStart"!==y?"onCompositionEnd"===y&&Hn&&(b=nn()):(en="value"in(Jt=o)?Jt.value:Jt.textContent,Hn=!0)),0<(v=Dr(r,y)).length&&(y=new kn(y,e,null,n,o),i.push({event:y,listeners:v}),b?y.data=b:null!==(b=qn(n))&&(y.data=b))),(b=Fn?function(e,t){switch(e){case"compositionend":return qn(t);case"keypress":return 32!==t.which?null:(Un=!0,zn);case"textInput":return(e=t.data)===zn&&Un?null:e;default:return null}}(e,n):function(e,t){if(Hn)return"compositionend"===e||!Dn&&$n(e,t)?(e=nn(),tn=en=Jt=null,Hn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Bn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Dr(r,"onBeforeInput")).length&&(o=new kn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=b))}Cr(i,t)}))}function Rr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Dr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=Be(e,n))&&r.unshift(Rr(e,a,o)),null!=(a=Be(e,t))&&r.push(Rr(e,a,o))),e=e.return}return r}function Mr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Fr(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,u=s.stateNode;if(null!==l&&l===r)break;5===s.tag&&null!==u&&(s=u,o?null!=(l=Be(n,a))&&i.unshift(Rr(n,l,s)):o||null!=(l=Be(n,a))&&i.push(Rr(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function Br(){}var zr=null,Ur=null;function $r(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function qr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var Hr="function"==typeof setTimeout?setTimeout:void 0,Gr="function"==typeof clearTimeout?clearTimeout:void 0;function Qr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Vr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Zr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Wr=0;var Kr=Math.random().toString(36).slice(2),Yr="__reactFiber$"+Kr,Xr="__reactProps$"+Kr,Jr="__reactContainer$"+Kr,eo="__reactEvents$"+Kr;function to(e){var t=e[Yr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[Jr]||n[Yr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Zr(e);null!==e;){if(n=e[Yr])return n;e=Zr(e)}return t}n=(e=n).parentNode}return null}function no(e){return!(e=e[Yr]||e[Jr])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function ro(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function oo(e){return e[Xr]||null}function ao(e){var t=e[eo];return void 0===t&&(t=e[eo]=new Set),t}var io=[],so=-1;function lo(e){return{current:e}}function uo(e){0>so||(e.current=io[so],io[so]=null,so--)}function co(e,t){so++,io[so]=e.current,e.current=t}var po={},fo=lo(po),mo=lo(!1),ho=po;function go(e,t){var n=e.type.contextTypes;if(!n)return po;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function vo(e){return null!=(e=e.childContextTypes)}function bo(){uo(mo),uo(fo)}function yo(e,t,n){if(fo.current!==po)throw Error(i(168));co(fo,t),co(mo,n)}function wo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(i(108,V(t)||"Unknown",a));return o({},n,r)}function So(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||po,ho=fo.current,co(fo,e),co(mo,mo.current),!0}function ko(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=wo(e,t,ho),r.__reactInternalMemoizedMergedChildContext=e,uo(mo),uo(fo),co(fo,e)):uo(mo),co(mo,n)}var Eo=null,_o=null,xo=a.unstable_runWithPriority,Oo=a.unstable_scheduleCallback,Po=a.unstable_cancelCallback,Co=a.unstable_shouldYield,To=a.unstable_requestPaint,Io=a.unstable_now,Ao=a.unstable_getCurrentPriorityLevel,No=a.unstable_ImmediatePriority,Lo=a.unstable_UserBlockingPriority,jo=a.unstable_NormalPriority,Ro=a.unstable_LowPriority,Do=a.unstable_IdlePriority,Mo={},Fo=void 0!==To?To:function(){},Bo=null,zo=null,Uo=!1,$o=Io(),qo=1e4>$o?Io:function(){return Io()-$o};function Ho(){switch(Ao()){case No:return 99;case Lo:return 98;case jo:return 97;case Ro:return 96;case Do:return 95;default:throw Error(i(332))}}function Go(e){switch(e){case 99:return No;case 98:return Lo;case 97:return jo;case 96:return Ro;case 95:return Do;default:throw Error(i(332))}}function Qo(e,t){return e=Go(e),xo(e,t)}function Vo(e,t,n){return e=Go(e),Oo(e,t,n)}function Zo(){if(null!==zo){var e=zo;zo=null,Po(e)}Wo()}function Wo(){if(!Uo&&null!==Bo){Uo=!0;var e=0;try{var t=Bo;Qo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),Bo=null}catch(n){throw null!==Bo&&(Bo=Bo.slice(e+1)),Oo(No,Zo),n}finally{Uo=!1}}}var Ko=S.ReactCurrentBatchConfig;function Yo(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Xo=lo(null),Jo=null,ea=null,ta=null;function na(){ta=ea=Jo=null}function ra(e){var t=Xo.current;uo(Xo),e.type._context._currentValue=t}function oa(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function aa(e,t){Jo=e,ta=ea=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Di=!0),e.firstContext=null)}function ia(e,t){if(ta!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(ta=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ea){if(null===Jo)throw Error(i(308));ea=t,Jo.dependencies={lanes:0,firstContext:t,responders:null}}else ea=ea.next=t;return e._currentValue}var sa=!1;function la(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ua(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function ca(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function da(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function pa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function fa(e,t,n,r){var a=e.updateQueue;sa=!1;var i=a.firstBaseUpdate,s=a.lastBaseUpdate,l=a.shared.pending;if(null!==l){a.shared.pending=null;var u=l,c=u.next;u.next=null,null===s?i=c:s.next=c,s=u;var d=e.alternate;if(null!==d){var p=(d=d.updateQueue).lastBaseUpdate;p!==s&&(null===p?d.firstBaseUpdate=c:p.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(p=a.baseState,s=0,d=c=u=null;;){l=i.lane;var f=i.eventTime;if((r&l)===l){null!==d&&(d=d.next={eventTime:f,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var m=e,h=i;switch(l=t,f=n,h.tag){case 1:if("function"==typeof(m=h.payload)){p=m.call(f,p,l);break e}p=m;break e;case 3:m.flags=-4097&m.flags|64;case 0:if(null==(l="function"==typeof(m=h.payload)?m.call(f,p,l):m))break e;p=o({},p,l);break e;case 2:sa=!0}}null!==i.callback&&(e.flags|=32,null===(l=a.effects)?a.effects=[i]:l.push(i))}else f={eventTime:f,lane:l,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=f,u=p):d=d.next=f,s|=l;if(null===(i=i.next)){if(null===(l=a.shared.pending))break;i=l.next,l.next=null,a.lastBaseUpdate=l,a.shared.pending=null}}null===d&&(u=p),a.baseState=u,a.firstBaseUpdate=c,a.lastBaseUpdate=d,Us|=s,e.lanes=s,e.memoizedState=p}}function ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ha=(new r.Component).refs;function ga(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var va={isMounted:function(e){return!!(e=e._reactInternals)&&We(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=pl(),o=fl(e),a=ca(r,o);a.payload=t,null!=n&&(a.callback=n),da(e,a),ml(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=pl(),o=fl(e),a=ca(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),da(e,a),ml(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=pl(),r=fl(e),o=ca(n,r);o.tag=2,null!=t&&(o.callback=t),da(e,o),ml(e,r,n)}};function ba(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!dr(n,r)||!dr(o,a))}function ya(e,t,n){var r=!1,o=po,a=t.contextType;return"object"==typeof a&&null!==a?a=ia(a):(o=vo(t)?ho:fo.current,a=(r=null!=(r=t.contextTypes))?go(e,o):po),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=va,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function wa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&va.enqueueReplaceState(t,t.state,null)}function Sa(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ha,la(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=ia(a):(a=vo(t)?ho:fo.current,o.context=go(e,a)),fa(e,n,o,r),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(ga(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&va.enqueueReplaceState(o,o.state,null),fa(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var ka=Array.isArray;function Ea(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ha&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function _a(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function xa(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Ql(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function s(t){return e&&null===t.alternate&&(t.flags=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Kl(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=Ea(e,t,n),r.return=e,r):((r=Vl(n.type,n.key,n.props,null,e.mode,r)).ref=Ea(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Yl(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Zl(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Kl(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(n=Vl(t.type,t.key,t.props,null,e.mode,n)).ref=Ea(e,null,t),n.return=e,n;case E:return(t=Yl(t,e.mode,n)).return=e,t}if(ka(t)||$(t))return(t=Zl(t,e.mode,n,null)).return=e,t;_a(e,t)}return null}function f(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return n.key===o?n.type===_?d(e,t,n.props.children,r,o):u(e,t,n,r):null;case E:return n.key===o?c(e,t,n,r):null}if(ka(n)||$(n))return null!==o?null:d(e,t,n,r,null);_a(e,n)}return null}function m(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case k:return e=e.get(null===r.key?n:r.key)||null,r.type===_?d(t,e,r.props.children,o,r.key):u(t,e,r,o);case E:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(ka(r)||$(r))return d(t,e=e.get(n)||null,r,o,null);_a(t,r)}return null}function h(o,i,s,l){for(var u=null,c=null,d=i,h=i=0,g=null;null!==d&&h<s.length;h++){d.index>h?(g=d,d=null):g=d.sibling;var v=f(o,d,s[h],l);if(null===v){null===d&&(d=g);break}e&&d&&null===v.alternate&&t(o,d),i=a(v,i,h),null===c?u=v:c.sibling=v,c=v,d=g}if(h===s.length)return n(o,d),u;if(null===d){for(;h<s.length;h++)null!==(d=p(o,s[h],l))&&(i=a(d,i,h),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(o,d);h<s.length;h++)null!==(g=m(d,o,h,s[h],l))&&(e&&null!==g.alternate&&d.delete(null===g.key?h:g.key),i=a(g,i,h),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(o,e)})),u}function g(o,s,l,u){var c=$(l);if("function"!=typeof c)throw Error(i(150));if(null==(l=c.call(l)))throw Error(i(151));for(var d=c=null,h=s,g=s=0,v=null,b=l.next();null!==h&&!b.done;g++,b=l.next()){h.index>g?(v=h,h=null):v=h.sibling;var y=f(o,h,b.value,u);if(null===y){null===h&&(h=v);break}e&&h&&null===y.alternate&&t(o,h),s=a(y,s,g),null===d?c=y:d.sibling=y,d=y,h=v}if(b.done)return n(o,h),c;if(null===h){for(;!b.done;g++,b=l.next())null!==(b=p(o,b.value,u))&&(s=a(b,s,g),null===d?c=b:d.sibling=b,d=b);return c}for(h=r(o,h);!b.done;g++,b=l.next())null!==(b=m(h,o,g,b.value,u))&&(e&&null!==b.alternate&&h.delete(null===b.key?g:b.key),s=a(b,s,g),null===d?c=b:d.sibling=b,d=b);return e&&h.forEach((function(e){return t(o,e)})),c}return function(e,r,a,l){var u="object"==typeof a&&null!==a&&a.type===_&&null===a.key;u&&(a=a.props.children);var c="object"==typeof a&&null!==a;if(c)switch(a.$$typeof){case k:e:{for(c=a.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(a.type===_){n(e,u.sibling),(r=o(u,a.props.children)).return=e,e=r;break e}}else if(u.elementType===a.type){n(e,u.sibling),(r=o(u,a.props)).ref=Ea(e,u,a),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}a.type===_?((r=Zl(a.props.children,e.mode,l,a.key)).return=e,e=r):((l=Vl(a.type,a.key,a.props,null,e.mode,l)).ref=Ea(e,r,a),l.return=e,e=l)}return s(e);case E:e:{for(u=a.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Yl(a,e.mode,l)).return=e,e=r}return s(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,a)).return=e,e=r):(n(e,r),(r=Kl(a,e.mode,l)).return=e,e=r),s(e);if(ka(a))return h(e,r,a,l);if($(a))return g(e,r,a,l);if(c&&_a(e,a),void 0===a&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,V(e.type)||"Component"))}return n(e,r)}}var Oa=xa(!0),Pa=xa(!1),Ca={},Ta=lo(Ca),Ia=lo(Ca),Aa=lo(Ca);function Na(e){if(e===Ca)throw Error(i(174));return e}function La(e,t){switch(co(Aa,t),co(Ia,e),co(Ta,Ca),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:fe(null,"");break;default:t=fe(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}uo(Ta),co(Ta,t)}function ja(){uo(Ta),uo(Ia),uo(Aa)}function Ra(e){Na(Aa.current);var t=Na(Ta.current),n=fe(t,e.type);t!==n&&(co(Ia,e),co(Ta,n))}function Da(e){Ia.current===e&&(uo(Ta),uo(Ia))}var Ma=lo(0);function Fa(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var Ba=null,za=null,Ua=!1;function $a(e,t){var n=Hl(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function qa(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function Ha(e){if(Ua){var t=za;if(t){var n=t;if(!qa(e,t)){if(!(t=Vr(n.nextSibling))||!qa(e,t))return e.flags=-1025&e.flags|2,Ua=!1,void(Ba=e);$a(Ba,n)}Ba=e,za=Vr(t.firstChild)}else e.flags=-1025&e.flags|2,Ua=!1,Ba=e}}function Ga(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;Ba=e}function Qa(e){if(e!==Ba)return!1;if(!Ua)return Ga(e),Ua=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!qr(t,e.memoizedProps))for(t=za;t;)$a(e,t),t=Vr(t.nextSibling);if(Ga(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){za=Vr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}za=null}}else za=Ba?Vr(e.stateNode.nextSibling):null;return!0}function Va(){za=Ba=null,Ua=!1}var Za=[];function Wa(){for(var e=0;e<Za.length;e++)Za[e]._workInProgressVersionPrimary=null;Za.length=0}var Ka=S.ReactCurrentDispatcher,Ya=S.ReactCurrentBatchConfig,Xa=0,Ja=null,ei=null,ti=null,ni=!1,ri=!1;function oi(){throw Error(i(321))}function ai(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!ur(e[n],t[n]))return!1;return!0}function ii(e,t,n,r,o,a){if(Xa=a,Ja=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Ka.current=null===e||null===e.memoizedState?Ni:Li,e=n(r,o),ri){a=0;do{if(ri=!1,!(25>a))throw Error(i(301));a+=1,ti=ei=null,t.updateQueue=null,Ka.current=ji,e=n(r,o)}while(ri)}if(Ka.current=Ai,t=null!==ei&&null!==ei.next,Xa=0,ti=ei=Ja=null,ni=!1,t)throw Error(i(300));return e}function si(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ti?Ja.memoizedState=ti=e:ti=ti.next=e,ti}function li(){if(null===ei){var e=Ja.alternate;e=null!==e?e.memoizedState:null}else e=ei.next;var t=null===ti?Ja.memoizedState:ti.next;if(null!==t)ti=t,ei=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ei=e).memoizedState,baseState:ei.baseState,baseQueue:ei.baseQueue,queue:ei.queue,next:null},null===ti?Ja.memoizedState=ti=e:ti=ti.next=e}return ti}function ui(e,t){return"function"==typeof t?t(e):t}function ci(e){var t=li(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ei,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var s=o.next;o.next=a.next,a.next=s}r.baseQueue=o=a,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var l=s=a=null,u=o;do{var c=u.lane;if((Xa&c)===c)null!==l&&(l=l.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===l?(s=l=d,a=r):l=l.next=d,Ja.lanes|=c,Us|=c}u=u.next}while(null!==u&&u!==o);null===l?a=r:l.next=s,ur(r,t.memoizedState)||(Di=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=l,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function di(e){var t=li(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var s=o=o.next;do{a=e(a,s.action),s=s.next}while(s!==o);ur(a,t.memoizedState)||(Di=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function pi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Xa&e)===e)&&(t._workInProgressVersionPrimary=r,Za.push(t))),e)return n(t._source);throw Za.push(t),Error(i(350))}function fi(e,t,n,r){var o=Ls;if(null===o)throw Error(i(349));var a=t._getVersion,s=a(t._source),l=Ka.current,u=l.useState((function(){return pi(o,t,n)})),c=u[1],d=u[0];u=ti;var p=e.memoizedState,f=p.refs,m=f.getSnapshot,h=p.source;p=p.subscribe;var g=Ja;return e.memoizedState={refs:f,source:t,subscribe:r},l.useEffect((function(){f.getSnapshot=n,f.setSnapshot=c;var e=a(t._source);if(!ur(s,e)){e=n(t._source),ur(d,e)||(c(e),e=fl(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var l=31-qt(i),u=1<<l;r[l]|=e,i&=~u}}}),[n,t,r]),l.useEffect((function(){return r(t._source,(function(){var e=f.getSnapshot,n=f.setSnapshot;try{n(e(t._source));var r=fl(g);o.mutableReadLanes|=r&o.pendingLanes}catch(a){n((function(){throw a}))}}))}),[t,r]),ur(m,n)&&ur(h,t)&&ur(p,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:d}).dispatch=c=Ii.bind(null,Ja,e),u.queue=e,u.baseQueue=null,d=pi(o,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return fi(li(),e,t,n)}function hi(e){var t=si();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ui,lastRenderedState:e}).dispatch=Ii.bind(null,Ja,e),[t.memoizedState,e]}function gi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=Ja.updateQueue)?(t={lastEffect:null},Ja.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function vi(e){return e={current:e},si().memoizedState=e}function bi(){return li().memoizedState}function yi(e,t,n,r){var o=si();Ja.flags|=e,o.memoizedState=gi(1|t,n,void 0,void 0===r?null:r)}function wi(e,t,n,r){var o=li();r=void 0===r?null:r;var a=void 0;if(null!==ei){var i=ei.memoizedState;if(a=i.destroy,null!==r&&ai(r,i.deps))return void gi(t,n,a,r)}Ja.flags|=e,o.memoizedState=gi(1|t,n,a,r)}function Si(e,t){return yi(516,4,e,t)}function ki(e,t){return wi(516,4,e,t)}function Ei(e,t){return wi(4,2,e,t)}function _i(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function xi(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,_i.bind(null,t,e),n)}function Oi(){}function Pi(e,t){var n=li();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ci(e,t){var n=li();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ai(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Ti(e,t){var n=Ho();Qo(98>n?98:n,(function(){e(!0)})),Qo(97<n?97:n,(function(){var n=Ya.transition;Ya.transition=1;try{e(!1),t()}finally{Ya.transition=n}}))}function Ii(e,t,n){var r=pl(),o=fl(e),a={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?a.next=a:(a.next=i.next,i.next=a),t.pending=a,i=e.alternate,e===Ja||null!==i&&i===Ja)ri=ni=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var s=t.lastRenderedState,l=i(s,n);if(a.eagerReducer=i,a.eagerState=l,ur(l,s))return}catch(u){}ml(e,o,r)}}var Ai={readContext:ia,useCallback:oi,useContext:oi,useEffect:oi,useImperativeHandle:oi,useLayoutEffect:oi,useMemo:oi,useReducer:oi,useRef:oi,useState:oi,useDebugValue:oi,useDeferredValue:oi,useTransition:oi,useMutableSource:oi,useOpaqueIdentifier:oi,unstable_isNewReconciler:!1},Ni={readContext:ia,useCallback:function(e,t){return si().memoizedState=[e,void 0===t?null:t],e},useContext:ia,useEffect:Si,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,yi(4,2,_i.bind(null,t,e),n)},useLayoutEffect:function(e,t){return yi(4,2,e,t)},useMemo:function(e,t){var n=si();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=si();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ii.bind(null,Ja,e),[r.memoizedState,e]},useRef:vi,useState:hi,useDebugValue:Oi,useDeferredValue:function(e){var t=hi(e),n=t[0],r=t[1];return Si((function(){var t=Ya.transition;Ya.transition=1;try{r(e)}finally{Ya.transition=t}}),[e]),n},useTransition:function(){var e=hi(!1),t=e[0];return vi(e=Ti.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=si();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},fi(r,e,t,n)},useOpaqueIdentifier:function(){if(Ua){var e=!1,t=function(e){return{$$typeof:R,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Wr++).toString(36))),Error(i(355))})),n=hi(t)[1];return 0==(2&Ja.mode)&&(Ja.flags|=516,gi(5,(function(){n("r:"+(Wr++).toString(36))}),void 0,null)),t}return hi(t="r:"+(Wr++).toString(36)),t},unstable_isNewReconciler:!1},Li={readContext:ia,useCallback:Pi,useContext:ia,useEffect:ki,useImperativeHandle:xi,useLayoutEffect:Ei,useMemo:Ci,useReducer:ci,useRef:bi,useState:function(){return ci(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=ci(ui),n=t[0],r=t[1];return ki((function(){var t=Ya.transition;Ya.transition=1;try{r(e)}finally{Ya.transition=t}}),[e]),n},useTransition:function(){var e=ci(ui)[0];return[bi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return ci(ui)[0]},unstable_isNewReconciler:!1},ji={readContext:ia,useCallback:Pi,useContext:ia,useEffect:ki,useImperativeHandle:xi,useLayoutEffect:Ei,useMemo:Ci,useReducer:di,useRef:bi,useState:function(){return di(ui)},useDebugValue:Oi,useDeferredValue:function(e){var t=di(ui),n=t[0],r=t[1];return ki((function(){var t=Ya.transition;Ya.transition=1;try{r(e)}finally{Ya.transition=t}}),[e]),n},useTransition:function(){var e=di(ui)[0];return[bi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ui)[0]},unstable_isNewReconciler:!1},Ri=S.ReactCurrentOwner,Di=!1;function Mi(e,t,n,r){t.child=null===e?Pa(t,null,n,r):Oa(t,e.child,n,r)}function Fi(e,t,n,r,o){n=n.render;var a=t.ref;return aa(t,o),r=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,as(e,t,o))}function Bi(e,t,n,r,o,a){if(null===e){var i=n.type;return"function"!=typeof i||Gl(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Vl(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,zi(e,t,i,r,o,a))}return i=e.child,0==(o&a)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:dr)(o,r)&&e.ref===t.ref)?as(e,t,a):(t.flags|=1,(e=Ql(i,r)).ref=t.ref,e.return=t,t.child=e)}function zi(e,t,n,r,o,a){if(null!==e&&dr(e.memoizedProps,r)&&e.ref===t.ref){if(Di=!1,0==(a&o))return t.lanes=e.lanes,as(e,t,a);0!=(16384&e.flags)&&(Di=!0)}return qi(e,t,n,r,a)}function Ui(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},kl(t,n);else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},kl(t,e),null;t.memoizedState={baseLanes:0},kl(t,null!==a?a.baseLanes:n)}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,kl(t,r);return Mi(e,t,o,n),t.child}function $i(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function qi(e,t,n,r,o){var a=vo(n)?ho:fo.current;return a=go(t,a),aa(t,o),n=ii(e,t,n,r,a,o),null===e||Di?(t.flags|=1,Mi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,as(e,t,o))}function Hi(e,t,n,r,o){if(vo(n)){var a=!0;So(t)}else a=!1;if(aa(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),ya(t,n,r),Sa(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=ia(u):u=go(t,u=vo(n)?ho:fo.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==u)&&wa(t,i,r,u),sa=!1;var p=t.memoizedState;i.state=p,fa(t,r,i,o),l=t.memoizedState,s!==r||p!==l||mo.current||sa?("function"==typeof c&&(ga(t,n,c,r),l=t.memoizedState),(s=sa||ba(t,n,s,r,p,l,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=u,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,ua(e,t),s=t.memoizedProps,u=t.type===t.elementType?s:Yo(t.type,s),i.props=u,d=t.pendingProps,p=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=ia(l):l=go(t,l=vo(n)?ho:fo.current);var f=n.getDerivedStateFromProps;(c="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&wa(t,i,r,l),sa=!1,p=t.memoizedState,i.state=p,fa(t,r,i,o);var m=t.memoizedState;s!==d||p!==m||mo.current||sa?("function"==typeof f&&(ga(t,n,f,r),m=t.memoizedState),(u=sa||ba(t,n,u,r,p,m,l))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,m,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,m,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=m),i.props=r,i.state=m,i.context=l,r=u):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=256),r=!1)}return Gi(e,t,n,r,a,o)}function Gi(e,t,n,r,o,a){$i(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&ko(t,n,!1),as(e,t,a);r=t.stateNode,Ri.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Oa(t,e.child,null,a),t.child=Oa(t,null,s,a)):Mi(e,t,s,a),t.memoizedState=r.state,o&&ko(t,n,!0),t.child}function Qi(e){var t=e.stateNode;t.pendingContext?yo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&yo(0,t.context,!1),La(e,t.containerInfo)}var Vi,Zi,Wi,Ki,Yi={dehydrated:null,retryLane:0};function Xi(e,t,n){var r,o=t.pendingProps,a=Ma.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),co(Ma,1&a),null===e?(void 0!==o.fallback&&Ha(t),e=o.children,a=o.fallback,i?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Yi,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Yi,t.lanes=33554432,e):((n=Wl({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=ts(e,t,o.children,o.fallback,n),i=t.child,a=e.child.memoizedState,i.memoizedState=null===a?{baseLanes:n}:{baseLanes:a.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Yi,o):(n=es(e,t,o.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var o=e.mode,a=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=t):a=Wl(t,o,0,null),n=Zl(n,o,r,null),a.return=e,n.return=e,a.sibling=n,e.child=a,n}function es(e,t,n,r){var o=e.child;return e=o.sibling,n=Ql(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function ts(e,t,n,r,o){var a=t.mode,i=e.child;e=i.sibling;var s={mode:"hidden",children:n};return 0==(2&a)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=s,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Ql(i,s),null!==e?r=Ql(e,r):(r=Zl(r,a,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function ns(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),oa(e.return,t)}function rs(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=a)}function os(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Mi(e,t,r.children,n),0!=(2&(r=Ma.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&ns(e,n);else if(19===e.tag)ns(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(co(Ma,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Fa(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rs(t,!1,o,n,a,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Fa(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rs(t,!0,n,null,a,t.lastEffect);break;case"together":rs(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function as(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Us|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Ql(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Ql(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function is(e,t){if(!Ua)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ss(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return vo(t.type)&&bo(),null;case 3:return ja(),uo(mo),uo(fo),Wa(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Qa(t)?t.flags|=4:r.hydrate||(t.flags|=256)),Zi(t),null;case 5:Da(t);var a=Na(Aa.current);if(n=t.type,null!==e&&null!=t.stateNode)Wi(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Na(Ta.current),Qa(t)){r=t.stateNode,n=t.type;var s=t.memoizedProps;switch(r[Yr]=t,r[Xr]=s,n){case"dialog":Tr("cancel",r),Tr("close",r);break;case"iframe":case"object":case"embed":Tr("load",r);break;case"video":case"audio":for(e=0;e<xr.length;e++)Tr(xr[e],r);break;case"source":Tr("error",r);break;case"img":case"image":case"link":Tr("error",r),Tr("load",r);break;case"details":Tr("toggle",r);break;case"input":ee(r,s),Tr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!s.multiple},Tr("invalid",r);break;case"textarea":le(r,s),Tr("invalid",r)}for(var u in Ee(n,s),e=null,s)s.hasOwnProperty(u)&&(a=s[u],"children"===u?"string"==typeof a?r.textContent!==a&&(e=["children",a]):"number"==typeof a&&r.textContent!==""+a&&(e=["children",""+a]):l.hasOwnProperty(u)&&null!=a&&"onScroll"===u&&Tr("scroll",r));switch(n){case"input":K(r),re(r,s,!0);break;case"textarea":K(r),ce(r);break;case"select":case"option":break;default:"function"==typeof s.onClick&&(r.onclick=Br)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===a.nodeType?a:a.ownerDocument,e===de.html&&(e=pe(n)),e===de.html?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Yr]=t,e[Xr]=r,Vi(e,t,!1,!1),t.stateNode=e,u=_e(n,r),n){case"dialog":Tr("cancel",e),Tr("close",e),a=r;break;case"iframe":case"object":case"embed":Tr("load",e),a=r;break;case"video":case"audio":for(a=0;a<xr.length;a++)Tr(xr[a],e);a=r;break;case"source":Tr("error",e),a=r;break;case"img":case"image":case"link":Tr("error",e),Tr("load",e),a=r;break;case"details":Tr("toggle",e),a=r;break;case"input":ee(e,r),a=J(e,r),Tr("invalid",e);break;case"option":a=ae(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Tr("invalid",e);break;case"textarea":le(e,r),a=se(e,r),Tr("invalid",e);break;default:a=r}Ee(n,a);var c=a;for(s in c)if(c.hasOwnProperty(s)){var d=c[s];"style"===s?Se(e,d):"dangerouslySetInnerHTML"===s?null!=(d=d?d.__html:void 0)&&ge(e,d):"children"===s?"string"==typeof d?("textarea"!==n||""!==d)&&ve(e,d):"number"==typeof d&&ve(e,""+d):"suppressContentEditableWarning"!==s&&"suppressHydrationWarning"!==s&&"autoFocus"!==s&&(l.hasOwnProperty(s)?null!=d&&"onScroll"===s&&Tr("scroll",e):null!=d&&w(e,s,d,u))}switch(n){case"input":K(e),re(e,r,!1);break;case"textarea":K(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+Z(r.value));break;case"select":e.multiple=!!r.multiple,null!=(s=r.value)?ie(e,!!r.multiple,s,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Br)}$r(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Ki(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Na(Aa.current),Na(Ta.current),Qa(t)?(r=t.stateNode,n=t.memoizedProps,r[Yr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Yr]=t,t.stateNode=r)}return null;case 13:return uo(Ma),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Qa(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Ma.current)?0===Fs&&(Fs=3):(0!==Fs&&3!==Fs||(Fs=4),null===Ls||0==(134217727&Us)&&0==(134217727&$s)||bl(Ls,Rs))),(r||n)&&(t.flags|=4),null);case 4:return ja(),Zi(t),null===e&&Ar(t.stateNode.containerInfo),null;case 10:return ra(t),null;case 19:if(uo(Ma),null===(r=t.memoizedState))return null;if(s=0!=(64&t.flags),null===(u=r.rendering))if(s)is(r,!1);else{if(0!==Fs||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Fa(e))){for(t.flags|=64,is(r,!1),null!==(s=u.updateQueue)&&(t.updateQueue=s,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(s=n).flags&=2,s.nextEffect=null,s.firstEffect=null,s.lastEffect=null,null===(u=s.alternate)?(s.childLanes=0,s.lanes=e,s.child=null,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=u.childLanes,s.lanes=u.lanes,s.child=u.child,s.memoizedProps=u.memoizedProps,s.memoizedState=u.memoizedState,s.updateQueue=u.updateQueue,s.type=u.type,e=u.dependencies,s.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return co(Ma,1&Ma.current|2),t.child}e=e.sibling}null!==r.tail&&qo()>Qs&&(t.flags|=64,s=!0,is(r,!1),t.lanes=33554432)}else{if(!s)if(null!==(e=Fa(u))){if(t.flags|=64,s=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),is(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!Ua)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*qo()-r.renderingStartTime>Qs&&1073741824!==n&&(t.flags|=64,s=!0,is(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=qo(),n.sibling=null,t=Ma.current,co(Ma,s?1&t|2:1&t),n):null;case 23:case 24:return El(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function ls(e){switch(e.tag){case 1:vo(e.type)&&bo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(ja(),uo(mo),uo(fo),Wa(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Da(e),null;case 13:return uo(Ma),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return uo(Ma),null;case 4:return ja(),null;case 10:return ra(e),null;case 23:case 24:return El(),null;default:return null}}function us(e,t){try{var n="",r=t;do{n+=Q(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o}}function cs(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Vi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Zi=function(){},Wi=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,Na(Ta.current);var i,s=null;switch(n){case"input":a=J(e,a),r=J(e,r),s=[];break;case"option":a=ae(e,a),r=ae(e,r),s=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),s=[];break;case"textarea":a=se(e,a),r=se(e,r),s=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Br)}for(d in Ee(n,r),n=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if("style"===d){var u=a[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(l.hasOwnProperty(d)?s||(s=[]):(s=s||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(s||(s=[]),s.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(s=s||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(s=s||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(l.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Tr("scroll",e),s||u===c||(s=[])):"object"==typeof c&&null!==c&&c.$$typeof===R?c.toString():(s=s||[]).push(d,c))}n&&(s=s||[]).push("style",n);var d=s;(t.updateQueue=d)&&(t.flags|=4)}},Ki=function(e,t,n,r){n!==r&&(t.flags|=4)};var ds="function"==typeof WeakMap?WeakMap:Map;function ps(e,t,n){(n=ca(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Ks||(Ks=!0,Ys=r),cs(0,t)},n}function fs(e,t,n){(n=ca(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return cs(0,t),r(o)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Xs?Xs=new Set([this]):Xs.add(this),cs(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var ms="function"==typeof WeakSet?WeakSet:Set;function hs(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zl(e,n)}else t.current=null}function gs(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Yo(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Qr(t.stateNode.containerInfo))}throw Error(i(163))}function vs(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ml(n,e),Dl(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Yo(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ma(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ma(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&$r(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&St(n)))))}throw Error(i(163))}function bs(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=we("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function ys(e,t){if(_o&&"function"==typeof _o.onCommitFiberUnmount)try{_o.onCommitFiberUnmount(Eo,t)}catch(a){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ml(t,n);else{r=t;try{o()}catch(a){zl(r,a)}}n=n.next}while(n!==e)}break;case 1:if(hs(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(a){zl(t,a)}break;case 5:hs(t);break;case 4:xs(e,t)}}function ws(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function Ss(e){return 5===e.tag||3===e.tag||4===e.tag}function ks(e){e:{for(var t=e.return;null!==t;){if(Ss(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(ve(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||Ss(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?Es(e,n,t):_s(e,n,t)}function Es(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Br));else if(4!==r&&null!==(e=e.child))for(Es(e,t,n),e=e.sibling;null!==e;)Es(e,t,n),e=e.sibling}function _s(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(_s(e,t,n),e=e.sibling;null!==e;)_s(e,t,n),e=e.sibling}function xs(e,t){for(var n,r,o=t,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(i(160));switch(n=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var s=e,l=o,u=l;;)if(ys(s,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===l)break e;for(;null===u.sibling;){if(null===u.return||u.return===l)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(s=n,l=o.stateNode,8===s.nodeType?s.parentNode.removeChild(l):s.removeChild(l)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(ys(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function Os(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[Xr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),_e(e,o),t=_e(e,r),o=0;o<a.length;o+=2){var s=a[o],l=a[o+1];"style"===s?Se(n,l):"dangerouslySetInnerHTML"===s?ge(n,l):"children"===s?ve(n,l):w(n,s,l,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?ie(n,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,St(n.containerInfo)));case 13:return null!==t.memoizedState&&(Gs=qo(),bs(t.child,!0)),void Ps(t);case 19:return void Ps(t);case 23:case 24:return void bs(t,null!==t.memoizedState)}throw Error(i(163))}function Ps(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new ms),t.forEach((function(t){var r=$l.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Cs(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Ts=Math.ceil,Is=S.ReactCurrentDispatcher,As=S.ReactCurrentOwner,Ns=0,Ls=null,js=null,Rs=0,Ds=0,Ms=lo(0),Fs=0,Bs=null,zs=0,Us=0,$s=0,qs=0,Hs=null,Gs=0,Qs=1/0;function Vs(){Qs=qo()+500}var Zs,Ws=null,Ks=!1,Ys=null,Xs=null,Js=!1,el=null,tl=90,nl=[],rl=[],ol=null,al=0,il=null,sl=-1,ll=0,ul=0,cl=null,dl=!1;function pl(){return 0!=(48&Ns)?qo():-1!==sl?sl:sl=qo()}function fl(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===Ho()?1:2;if(0===ll&&(ll=zs),0!==Ko.transition){0!==ul&&(ul=null!==Hs?Hs.pendingLanes:0),e=ll;var t=4186112&~ul;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=Ho(),0!=(4&Ns)&&98===e?e=Bt(12,ll):e=Bt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ll),e}function ml(e,t,n){if(50<al)throw al=0,il=null,Error(i(185));if(null===(e=hl(e,t)))return null;$t(e,t,n),e===Ls&&($s|=t,4===Fs&&bl(e,Rs));var r=Ho();1===t?0!=(8&Ns)&&0==(48&Ns)?yl(e):(gl(e,n),0===Ns&&(Vs(),Zo())):(0==(4&Ns)||98!==r&&99!==r||(null===ol?ol=new Set([e]):ol.add(e)),gl(e,n)),Hs=e}function hl(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gl(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,s=e.pendingLanes;0<s;){var l=31-qt(s),u=1<<l,c=a[l];if(-1===c){if(0==(u&r)||0!=(u&o)){c=t,Dt(u);var d=Rt;a[l]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);s&=~u}if(r=Mt(e,e===Ls?Rs:0),t=Rt,0===r)null!==n&&(n!==Mo&&Po(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Mo&&Po(n)}15===t?(n=yl.bind(null,e),null===Bo?(Bo=[n],zo=Oo(No,Wo)):Bo.push(n),n=Mo):14===t?n=Vo(99,yl.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Vo(n,vl.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function vl(e){if(sl=-1,ul=ll=0,0!=(48&Ns))throw Error(i(327));var t=e.callbackNode;if(Rl()&&e.callbackNode!==t)return null;var n=Mt(e,e===Ls?Rs:0);if(0===n)return null;var r=n,o=Ns;Ns|=16;var a=Ol();for(Ls===e&&Rs===r||(Vs(),_l(e,r));;)try{Tl();break}catch(l){xl(e,l)}if(na(),Is.current=a,Ns=o,null!==js?r=0:(Ls=null,Rs=0,r=Fs),0!=(zs&$s))_l(e,0);else if(0!==r){if(2===r&&(Ns|=64,e.hydrate&&(e.hydrate=!1,Qr(e.containerInfo)),0!==(n=Ft(e))&&(r=Pl(e,n))),1===r)throw t=Bs,_l(e,0),bl(e,n),gl(e,qo()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Nl(e);break;case 3:if(bl(e,n),(62914560&n)===n&&10<(r=Gs+500-qo())){if(0!==Mt(e,0))break;if(((o=e.suspendedLanes)&n)!==n){pl(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=Hr(Nl.bind(null,e),r);break}Nl(e);break;case 4:if(bl(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var s=31-qt(n);a=1<<s,(s=r[s])>o&&(o=s),n&=~a}if(n=o,10<(n=(120>(n=qo()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Ts(n/1960))-n)){e.timeoutHandle=Hr(Nl.bind(null,e),n);break}Nl(e);break;default:throw Error(i(329))}}return gl(e,qo()),e.callbackNode===t?vl.bind(null,e):null}function bl(e,t){for(t&=~qs,t&=~$s,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-qt(t),r=1<<n;e[n]=-1,t&=~r}}function yl(e){if(0!=(48&Ns))throw Error(i(327));if(Rl(),e===Ls&&0!=(e.expiredLanes&Rs)){var t=Rs,n=Pl(e,t);0!=(zs&$s)&&(n=Pl(e,t=Mt(e,t)))}else n=Pl(e,t=Mt(e,0));if(0!==e.tag&&2===n&&(Ns|=64,e.hydrate&&(e.hydrate=!1,Qr(e.containerInfo)),0!==(t=Ft(e))&&(n=Pl(e,t))),1===n)throw n=Bs,_l(e,0),bl(e,t),gl(e,qo()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Nl(e),gl(e,qo()),null}function wl(e,t){var n=Ns;Ns|=1;try{return e(t)}finally{0===(Ns=n)&&(Vs(),Zo())}}function Sl(e,t){var n=Ns;Ns&=-2,Ns|=8;try{return e(t)}finally{0===(Ns=n)&&(Vs(),Zo())}}function kl(e,t){co(Ms,Ds),Ds|=t,zs|=t}function El(){Ds=Ms.current,uo(Ms)}function _l(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Gr(n)),null!==js)for(n=js.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&bo();break;case 3:ja(),uo(mo),uo(fo),Wa();break;case 5:Da(r);break;case 4:ja();break;case 13:case 19:uo(Ma);break;case 10:ra(r);break;case 23:case 24:El()}n=n.return}Ls=e,js=Ql(e.current,null),Rs=Ds=zs=t,Fs=0,Bs=null,qs=$s=Us=0}function xl(e,t){for(;;){var n=js;try{if(na(),Ka.current=Ai,ni){for(var r=Ja.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ni=!1}if(Xa=0,ti=ei=Ja=null,ri=!1,As.current=null,null===n||null===n.return){Fs=1,Bs=t,js=null;break}e:{var a=e,i=n.return,s=n,l=t;if(t=Rs,s.flags|=2048,s.firstEffect=s.lastEffect=null,null!==l&&"object"==typeof l&&"function"==typeof l.then){var u=l;if(0==(2&s.mode)){var c=s.alternate;c?(s.updateQueue=c.updateQueue,s.memoizedState=c.memoizedState,s.lanes=c.lanes):(s.updateQueue=null,s.memoizedState=null)}var d=0!=(1&Ma.current),p=i;do{var f;if(f=13===p.tag){var m=p.memoizedState;if(null!==m)f=null!==m.dehydrated;else{var h=p.memoizedProps;f=void 0!==h.fallback&&(!0!==h.unstable_avoidThisFallback||!d)}}if(f){var g=p.updateQueue;if(null===g){var v=new Set;v.add(u),p.updateQueue=v}else g.add(u);if(0==(2&p.mode)){if(p.flags|=64,s.flags|=16384,s.flags&=-2981,1===s.tag)if(null===s.alternate)s.tag=17;else{var b=ca(-1,1);b.tag=2,da(s,b)}s.lanes|=1;break e}l=void 0,s=t;var y=a.pingCache;if(null===y?(y=a.pingCache=new ds,l=new Set,y.set(u,l)):void 0===(l=y.get(u))&&(l=new Set,y.set(u,l)),!l.has(s)){l.add(s);var w=Ul.bind(null,a,u,s);u.then(w,w)}p.flags|=4096,p.lanes=t;break e}p=p.return}while(null!==p);l=Error((V(s.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fs&&(Fs=2),l=us(l,s),p=i;do{switch(p.tag){case 3:a=l,p.flags|=4096,t&=-t,p.lanes|=t,pa(p,ps(0,a,t));break e;case 1:a=l;var S=p.type,k=p.stateNode;if(0==(64&p.flags)&&("function"==typeof S.getDerivedStateFromError||null!==k&&"function"==typeof k.componentDidCatch&&(null===Xs||!Xs.has(k)))){p.flags|=4096,t&=-t,p.lanes|=t,pa(p,fs(p,a,t));break e}}p=p.return}while(null!==p)}Al(n)}catch(E){t=E,js===n&&null!==n&&(js=n=n.return);continue}break}}function Ol(){var e=Is.current;return Is.current=Ai,null===e?Ai:e}function Pl(e,t){var n=Ns;Ns|=16;var r=Ol();for(Ls===e&&Rs===t||_l(e,t);;)try{Cl();break}catch(o){xl(e,o)}if(na(),Ns=n,Is.current=r,null!==js)throw Error(i(261));return Ls=null,Rs=0,Fs}function Cl(){for(;null!==js;)Il(js)}function Tl(){for(;null!==js&&!Co();)Il(js)}function Il(e){var t=Zs(e.alternate,e,Ds);e.memoizedProps=e.pendingProps,null===t?Al(e):js=t,As.current=null}function Al(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ss(n,t,Ds)))return void(js=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&Ds)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=ls(t)))return n.flags&=2047,void(js=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(js=t);js=t=e}while(null!==t);0===Fs&&(Fs=5)}function Nl(e){var t=Ho();return Qo(99,Ll.bind(null,e,t)),null}function Ll(e,t){do{Rl()}while(null!==el);if(0!=(48&Ns))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var s=e.eventTimes,l=e.expirationTimes;0<a;){var u=31-qt(a),c=1<<u;o[u]=0,s[u]=-1,l[u]=-1,a&=~c}if(null!==ol&&0==(24&r)&&ol.has(e)&&ol.delete(e),e===Ls&&(js=Ls=null,Rs=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Ns,Ns|=32,As.current=null,zr=Zt,gr(s=hr())){if("selectionStart"in s)l={start:s.selectionStart,end:s.selectionEnd};else e:if(l=(l=s.ownerDocument)&&l.defaultView||window,(c=l.getSelection&&l.getSelection())&&0!==c.rangeCount){l=c.anchorNode,a=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{l.nodeType,u.nodeType}catch(O){l=null;break e}var d=0,p=-1,f=-1,m=0,h=0,g=s,v=null;t:for(;;){for(var b;g!==l||0!==a&&3!==g.nodeType||(p=d+a),g!==u||0!==c&&3!==g.nodeType||(f=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(b=g.firstChild);)v=g,g=b;for(;;){if(g===s)break t;if(v===l&&++m===a&&(p=d),v===u&&++h===c&&(f=d),null!==(b=g.nextSibling))break;v=(g=v).parentNode}g=b}l=-1===p||-1===f?null:{start:p,end:f}}else l=null;l=l||{start:0,end:0}}else l=null;Ur={focusedElem:s,selectionRange:l},Zt=!1,cl=null,dl=!1,Ws=r;do{try{jl()}catch(O){if(null===Ws)throw Error(i(330));zl(Ws,O),Ws=Ws.nextEffect}}while(null!==Ws);cl=null,Ws=r;do{try{for(s=e;null!==Ws;){var y=Ws.flags;if(16&y&&ve(Ws.stateNode,""),128&y){var w=Ws.alternate;if(null!==w){var S=w.ref;null!==S&&("function"==typeof S?S(null):S.current=null)}}switch(1038&y){case 2:ks(Ws),Ws.flags&=-3;break;case 6:ks(Ws),Ws.flags&=-3,Os(Ws.alternate,Ws);break;case 1024:Ws.flags&=-1025;break;case 1028:Ws.flags&=-1025,Os(Ws.alternate,Ws);break;case 4:Os(Ws.alternate,Ws);break;case 8:xs(s,l=Ws);var k=l.alternate;ws(l),null!==k&&ws(k)}Ws=Ws.nextEffect}}catch(O){if(null===Ws)throw Error(i(330));zl(Ws,O),Ws=Ws.nextEffect}}while(null!==Ws);if(S=Ur,w=hr(),y=S.focusedElem,s=S.selectionRange,w!==y&&y&&y.ownerDocument&&mr(y.ownerDocument.documentElement,y)){null!==s&&gr(y)&&(w=s.start,void 0===(S=s.end)&&(S=w),"selectionStart"in y?(y.selectionStart=w,y.selectionEnd=Math.min(S,y.value.length)):(S=(w=y.ownerDocument||document)&&w.defaultView||window).getSelection&&(S=S.getSelection(),l=y.textContent.length,k=Math.min(s.start,l),s=void 0===s.end?k:Math.min(s.end,l),!S.extend&&k>s&&(l=s,s=k,k=l),l=fr(y,k),a=fr(y,s),l&&a&&(1!==S.rangeCount||S.anchorNode!==l.node||S.anchorOffset!==l.offset||S.focusNode!==a.node||S.focusOffset!==a.offset)&&((w=w.createRange()).setStart(l.node,l.offset),S.removeAllRanges(),k>s?(S.addRange(w),S.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),S.addRange(w))))),w=[];for(S=y;S=S.parentNode;)1===S.nodeType&&w.push({element:S,left:S.scrollLeft,top:S.scrollTop});for("function"==typeof y.focus&&y.focus(),y=0;y<w.length;y++)(S=w[y]).element.scrollLeft=S.left,S.element.scrollTop=S.top}Zt=!!zr,Ur=zr=null,e.current=n,Ws=r;do{try{for(y=e;null!==Ws;){var E=Ws.flags;if(36&E&&vs(y,Ws.alternate,Ws),128&E){w=void 0;var _=Ws.ref;if(null!==_){var x=Ws.stateNode;Ws.tag,w=x,"function"==typeof _?_(w):_.current=w}}Ws=Ws.nextEffect}}catch(O){if(null===Ws)throw Error(i(330));zl(Ws,O),Ws=Ws.nextEffect}}while(null!==Ws);Ws=null,Fo(),Ns=o}else e.current=n;if(Js)Js=!1,el=e,tl=t;else for(Ws=r;null!==Ws;)t=Ws.nextEffect,Ws.nextEffect=null,8&Ws.flags&&((E=Ws).sibling=null,E.stateNode=null),Ws=t;if(0===(r=e.pendingLanes)&&(Xs=null),1===r?e===il?al++:(al=0,il=e):al=0,n=n.stateNode,_o&&"function"==typeof _o.onCommitFiberRoot)try{_o.onCommitFiberRoot(Eo,n,void 0,64==(64&n.current.flags))}catch(O){}if(gl(e,qo()),Ks)throw Ks=!1,e=Ys,Ys=null,e;return 0!=(8&Ns)||Zo(),null}function jl(){for(;null!==Ws;){var e=Ws.alternate;dl||null===cl||(0!=(8&Ws.flags)?Je(Ws,cl)&&(dl=!0):13===Ws.tag&&Cs(e,Ws)&&Je(Ws,cl)&&(dl=!0));var t=Ws.flags;0!=(256&t)&&gs(e,Ws),0==(512&t)||Js||(Js=!0,Vo(97,(function(){return Rl(),null}))),Ws=Ws.nextEffect}}function Rl(){if(90!==tl){var e=97<tl?97:tl;return tl=90,Qo(e,Fl)}return!1}function Dl(e,t){nl.push(t,e),Js||(Js=!0,Vo(97,(function(){return Rl(),null})))}function Ml(e,t){rl.push(t,e),Js||(Js=!0,Vo(97,(function(){return Rl(),null})))}function Fl(){if(null===el)return!1;var e=el;if(el=null,0!=(48&Ns))throw Error(i(331));var t=Ns;Ns|=32;var n=rl;rl=[];for(var r=0;r<n.length;r+=2){var o=n[r],a=n[r+1],s=o.destroy;if(o.destroy=void 0,"function"==typeof s)try{s()}catch(u){if(null===a)throw Error(i(330));zl(a,u)}}for(n=nl,nl=[],r=0;r<n.length;r+=2){o=n[r],a=n[r+1];try{var l=o.create;o.destroy=l()}catch(u){if(null===a)throw Error(i(330));zl(a,u)}}for(l=e.current.firstEffect;null!==l;)e=l.nextEffect,l.nextEffect=null,8&l.flags&&(l.sibling=null,l.stateNode=null),l=e;return Ns=t,Zo(),!0}function Bl(e,t,n){da(e,t=ps(0,t=us(n,t),1)),t=pl(),null!==(e=hl(e,1))&&($t(e,1,t),gl(e,t))}function zl(e,t){if(3===e.tag)Bl(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bl(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Xs||!Xs.has(r))){var o=fs(n,e=us(t,e),1);if(da(n,o),o=pl(),null!==(n=hl(n,1)))$t(n,1,o),gl(n,o);else if("function"==typeof r.componentDidCatch&&(null===Xs||!Xs.has(r)))try{r.componentDidCatch(t,e)}catch(a){}break}}n=n.return}}function Ul(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=pl(),e.pingedLanes|=e.suspendedLanes&n,Ls===e&&(Rs&n)===n&&(4===Fs||3===Fs&&(62914560&Rs)===Rs&&500>qo()-Gs?_l(e,0):qs|=n),gl(e,t)}function $l(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===Ho()?1:2:(0===ll&&(ll=zs),0===(t=zt(62914560&~ll))&&(t=4194304))),n=pl(),null!==(e=hl(e,t))&&($t(e,t,n),gl(e,n))}function ql(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Hl(e,t,n,r){return new ql(e,t,n,r)}function Gl(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Ql(e,t){var n=e.alternate;return null===n?((n=Hl(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Vl(e,t,n,r,o,a){var s=2;if(r=e,"function"==typeof e)Gl(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case _:return Zl(n.children,o,a,t);case D:s=8,o|=16;break;case x:s=8,o|=1;break;case O:return(e=Hl(12,n,t,8|o)).elementType=O,e.type=O,e.lanes=a,e;case I:return(e=Hl(13,n,t,o)).type=I,e.elementType=I,e.lanes=a,e;case A:return(e=Hl(19,n,t,o)).elementType=A,e.lanes=a,e;case M:return Wl(n,o,a,t);case F:return(e=Hl(24,n,t,o)).elementType=F,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case P:s=10;break e;case C:s=9;break e;case T:s=11;break e;case N:s=14;break e;case L:s=16,r=null;break e;case j:s=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Hl(s,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function Zl(e,t,n,r){return(e=Hl(7,e,r,t)).lanes=n,e}function Wl(e,t,n,r){return(e=Hl(23,e,r,t)).elementType=M,e.lanes=n,e}function Kl(e,t,n){return(e=Hl(6,e,null,t)).lanes=n,e}function Yl(e,t,n){return(t=Hl(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Xl(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ut(0),this.expirationTimes=Ut(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ut(0),this.mutableSourceEagerHydrationData=null}function Jl(e,t,n,r){var o=t.current,a=pl(),s=fl(o);e:if(n){t:{if(We(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var l=n;do{switch(l.tag){case 3:l=l.stateNode.context;break t;case 1:if(vo(l.type)){l=l.stateNode.__reactInternalMemoizedMergedChildContext;break t}}l=l.return}while(null!==l);throw Error(i(171))}if(1===n.tag){var u=n.type;if(vo(u)){n=wo(n,u,l);break e}}n=l}else n=po;return null===t.context?t.context=n:t.pendingContext=n,(t=ca(a,s)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),da(o,t),ml(o,s,a),s}function eu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function tu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function nu(e,t){tu(e,t),(e=e.alternate)&&tu(e,t)}function ru(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Xl(e,t,null!=n&&!0===n.hydrate),t=Hl(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,la(t),e[Jr]=n.current,Ar(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function ou(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function au(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a._internalRoot;if("function"==typeof o){var s=o;o=function(){var e=eu(i);s.call(e)}}Jl(t,i,e,o)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ru(e,0,t?{hydrate:!0}:void 0)}(n,r),i=a._internalRoot,"function"==typeof o){var l=o;o=function(){var e=eu(i);l.call(e)}}Sl((function(){Jl(t,i,e,o)}))}return eu(i)}function iu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!ou(t))throw Error(i(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:E,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)}Zs=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||mo.current)Di=!0;else{if(0==(n&r)){switch(Di=!1,t.tag){case 3:Qi(t),Va();break;case 5:Ra(t);break;case 1:vo(t.type)&&So(t);break;case 4:La(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;co(Xo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Xi(e,t,n):(co(Ma,1&Ma.current),null!==(t=as(e,t,n))?t.sibling:null);co(Ma,1&Ma.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return os(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),co(Ma,Ma.current),r)break;return null;case 23:case 24:return t.lanes=0,Ui(e,t,n)}return as(e,t,n)}Di=0!=(16384&e.flags)}else Di=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=go(t,fo.current),aa(t,n),o=ii(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,vo(r)){var a=!0;So(t)}else a=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,la(t);var s=r.getDerivedStateFromProps;"function"==typeof s&&ga(t,r,s,e),o.updater=va,t.stateNode=o,o._reactInternals=t,Sa(t,r,e,n),t=Gi(null,t,r,!0,a,n)}else t.tag=0,Mi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(a=o._init)(o._payload),t.type=o,a=t.tag=function(e){if("function"==typeof e)return Gl(e)?1:0;if(null!=e){if((e=e.$$typeof)===T)return 11;if(e===N)return 14}return 2}(o),e=Yo(o,e),a){case 0:t=qi(null,t,o,e,n);break e;case 1:t=Hi(null,t,o,e,n);break e;case 11:t=Fi(null,t,o,e,n);break e;case 14:t=Bi(null,t,o,Yo(o.type,e),r,n);break e}throw Error(i(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,qi(e,t,r,o=t.elementType===r?o:Yo(r,o),n);case 1:return r=t.type,o=t.pendingProps,Hi(e,t,r,o=t.elementType===r?o:Yo(r,o),n);case 3:if(Qi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ua(e,t),fa(t,r,null,n),(r=t.memoizedState.element)===o)Va(),t=as(e,t,n);else{if((a=(o=t.stateNode).hydrate)&&(za=Vr(t.stateNode.containerInfo.firstChild),Ba=t,a=Ua=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],Za.push(a);for(n=Pa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Mi(e,t,r,n),Va();t=t.child}return t;case 5:return Ra(t),null===e&&Ha(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,s=o.children,qr(r,o)?s=null:null!==a&&qr(r,a)&&(t.flags|=16),$i(e,t),Mi(e,t,s,n),t.child;case 6:return null===e&&Ha(t),null;case 13:return Xi(e,t,n);case 4:return La(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Oa(t,null,r,n):Mi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Fi(e,t,r,o=t.elementType===r?o:Yo(r,o),n);case 7:return Mi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Mi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,s=t.memoizedProps,a=o.value;var l=t.type._context;if(co(Xo,l._currentValue),l._currentValue=a,null!==s)if(l=s.value,0===(a=ur(l,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(l,a):1073741823))){if(s.children===o.children&&!mo.current){t=as(e,t,n);break e}}else for(null!==(l=t.child)&&(l.return=t);null!==l;){var u=l.dependencies;if(null!==u){s=l.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&a)){1===l.tag&&((c=ca(-1,n&-n)).tag=2,da(l,c)),l.lanes|=n,null!==(c=l.alternate)&&(c.lanes|=n),oa(l.return,n),u.lanes|=n;break}c=c.next}}else s=10===l.tag&&l.type===t.type?null:l.child;if(null!==s)s.return=l;else for(s=l;null!==s;){if(s===t){s=null;break}if(null!==(l=s.sibling)){l.return=s.return,s=l;break}s=s.return}l=s}Mi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(a=t.pendingProps).children,aa(t,n),r=r(o=ia(o,a.unstable_observedBits)),t.flags|=1,Mi(e,t,r,n),t.child;case 14:return a=Yo(o=t.type,t.pendingProps),Bi(e,t,o,a=Yo(o.type,a),r,n);case 15:return zi(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Yo(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,vo(r)?(e=!0,So(t)):e=!1,aa(t,n),ya(t,r,o),Sa(t,r,o,n),Gi(null,t,r,!0,e,n);case 19:return os(e,t,n);case 23:case 24:return Ui(e,t,n)}throw Error(i(156,t.tag))},ru.prototype.render=function(e){Jl(e,this._internalRoot,null,null)},ru.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;Jl(null,e,null,(function(){t[Jr]=null}))},et=function(e){13===e.tag&&(ml(e,4,pl()),nu(e,4))},tt=function(e){13===e.tag&&(ml(e,67108864,pl()),nu(e,67108864))},nt=function(e){if(13===e.tag){var t=pl(),n=fl(e);ml(e,n,t),nu(e,n)}},rt=function(e,t){return t()},Oe=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=oo(r);if(!o)throw Error(i(90));Y(r),ne(r,o)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ne=wl,Le=function(e,t,n,r,o){var a=Ns;Ns|=4;try{return Qo(98,e.bind(null,t,n,r,o))}finally{0===(Ns=a)&&(Vs(),Zo())}},je=function(){0==(49&Ns)&&(function(){if(null!==ol){var e=ol;ol=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gl(e,qo())}))}Zo()}(),Rl())},Re=function(e,t){var n=Ns;Ns|=2;try{return e(t)}finally{0===(Ns=n)&&(Vs(),Zo())}};var su={Events:[no,ro,oo,Ie,Ae,Rl,{current:!1}]},lu={findFiberByHostInstance:to,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},uu={bundleType:lu.bundleType,version:lu.version,rendererPackageName:lu.rendererPackageName,rendererConfig:lu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:S.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Xe(e))?null:e.stateNode},findFiberByHostInstance:lu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var cu=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!cu.isDisabled&&cu.supportsFiber)try{Eo=cu.inject(uu),_o=cu}catch(he){}}t.hydrate=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!0,n)},t.render=function(e,t,n){if(!ou(t))throw Error(i(200));return au(null,e,t,!1,n)}},3935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(4448)},9590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,u,c;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(!a(e[l],i[l]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(l=c.next()).done;)if(!i.has(l.value[0]))return!1;for(c=e.entries();!(l=c.next()).done;)if(!a(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(l=c.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((s=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,u[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!=l--;)if(("_owner"!==u[l]&&"__v"!==u[l]&&"__o"!==u[l]||!e.$$typeof)&&!a(e[u[l]],i[u[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>G,ql:()=>J});var r=n(7294),o=n(5697),a=n.n(o),i=n(9590),s=n.n(i),l=n(1143),u=n.n(l),c=n(6774),d=n.n(c);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,m(e,t)}function m(e,t){return m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},m(e,t)}function h(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},v={rel:["amphtml","canonical","alternate"]},b={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),S={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(S).reduce((function(e,t){return e[S[t]]=t,e}),{}),E=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=E(e,g.TITLE),n=E(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=E(e,"defaultTitle");return t||r||void 0},x=function(e){return E(e,"onChangeClientState")||function(){}},O=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},P=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},C=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var s=a[i],l=s.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][u]&&(o[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var s=a[i],l=p({},r[s],o[s]);r[s]=l}return e}),[]).reverse()},T=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},I=function(e){return Array.isArray(e)?e.join(""):e},A=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},N=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},L=[g.NOSCRIPT,g.SCRIPT,g.STYLE],j=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},D=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[S[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=S[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=D(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=I(t);return o?"<"+e+' data-rh="true" '+o+">"+j(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+j(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return D(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+j(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===L.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var m=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=A(e.metaTags,y),a=A(t,v),i=A(n,b);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,o.priority),M(g.LINK,a.priority),M(g.SCRIPT,i.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);f=m.priorityMethods,c=m.linkTags,d=m.metaTags,p=m.scriptTags}return{priority:f,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,c,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,p,r),style:F(g.STYLE,i,r),title:F(g.TITLE,{title:l,titleAttributes:u},r)}},z=[],U=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},$=r.createContext({}),q=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),H="undefined"!=typeof document,G=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new U(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement($.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);G.canUseDOM=H,G.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},G.defaultProps={context:{}},G.displayName="HelmetProvider";var Q=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},V=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),s=0;s<i.length;s+=1){var l=i[s],u=t[l]||"";n.getAttribute(l)!==u&&n.setAttribute(l,u),-1===o.indexOf(l)&&o.push(l);var c=a.indexOf(l);-1!==c&&a.splice(c,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},Z=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;V(g.BODY,e.bodyAttributes),V(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=I(e)),V(g.TITLE,t)}(c,d);var p={baseTag:Q(g.BASE,n),linkTags:Q(g.LINK,o),metaTags:Q(g.META,a),noscriptTags:Q(g.NOSCRIPT,i),scriptTags:Q(g.SCRIPT,l),styleTags:Q(g.STYLE,u)},f={},m={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(m[e]=p[e].oldTags)})),t&&t(),s(e,f,m)},W=null,K=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:P(["href"],e),bodyAttributes:O("bodyAttributes",e),defer:E(e,"defer"),encode:E(e,"encodeSpecialCharacters"),htmlAttributes:O("htmlAttributes",e),linkTags:C(g.LINK,["rel","href"],e),metaTags:C(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:C(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:x(e),scriptTags:C(g.SCRIPT,["src","innerHTML"],e),styleTags:C(g.STYLE,["cssText"],e),title:_(e),titleAttributes:O("titleAttributes",e),prioritizeSeoTags:T(e,"prioritizeSeoTags")});G.canUseDOM?(t=a,W&&cancelAnimationFrame(W),t.defer?W=requestAnimationFrame((function(){Z(t,(function(){W=null}))})):(Z(t),W=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);K.propTypes={context:q.isRequired},K.displayName="HelmetDispatcher";var Y=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(N(this.props,"helmetData"),N(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return p({},o,((t={})[r.type]=i,t.titleAttributes=p({},a),t));case g.BODY:return p({},o,{bodyAttributes:p({},a)});case g.HTML:return p({},o,{htmlAttributes:p({},a)});default:return p({},o,((n={})[r.type]=p({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=h(r,Y),s=Object.keys(i).reduce((function(e,t){return e[k[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,a),l){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:s,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),o=p({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof U||(a=new U(a.context,a.instances)),a?r.createElement(K,p({},o,{context:a.value,helmetData:void 0})):r.createElement($.Consumer,null,(function(e){return r.createElement(K,p({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},9921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function S(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case u:case p:case g:case h:case l:return e;default:return t}}case o:return t}}}function k(e){return S(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=g,t.Memo=h,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return k(e)||S(e)===c},t.isConcurrentMode=k,t.isContextConsumer=function(e){return S(e)===u},t.isContextProvider=function(e){return S(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return S(e)===p},t.isFragment=function(e){return S(e)===a},t.isLazy=function(e){return S(e)===g},t.isMemo=function(e){return S(e)===h},t.isPortal=function(e){return S(e)===o},t.isProfiler=function(e){return S(e)===s},t.isStrictMode=function(e){return S(e)===i},t.isSuspense=function(e){return S(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===s||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===h||e.$$typeof===l||e.$$typeof===u||e.$$typeof===p||e.$$typeof===b||e.$$typeof===y||e.$$typeof===w||e.$$typeof===v)},t.typeOf=S},9864:(e,t,n)=>{"use strict";e.exports=n(9921)},8356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var s=n(7294),l=n(5697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function m(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var m=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),h=null;function g(){return h||(h=e(m.loader)),h.promise}return u.push(g),"function"==typeof m.webpack&&c.push((function(){if((0,m.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),p=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(m.loader),r._loadModule()})),g(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(m.modules)&&m.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof m.delay&&(0===m.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),m.delay)),"number"==typeof m.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),m.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(m.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?m.render(this.state.loaded,this.props):null},n}(s.Component),a(d,"contextTypes",{loadable:l.shape({report:l.func.isRequired})}),p}function h(e){return m(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return m(p,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return s.Children.only(this.props.children)},t}(s.Component);function v(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return v(e)}))}a(g,"propTypes",{report:l.func.isRequired}),a(g,"childContextTypes",{loadable:l.shape({report:l.func.isRequired}).isRequired}),h.Capture=g,h.preloadAll=function(){return new Promise((function(e,t){v(u).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){v(c).then(e,e)}))},e.exports=h},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>s,f:()=>i});var r=n(6550),o=n(7462),a=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>c,rU:()=>g});var r=n(6550),o=n(5068),a=n(7294),i=n(9318),s=n(7462),l=n(3366),u=n(8776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},f=function(e){return e},m=a.forwardRef;void 0===m&&(m=f);var h=m((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,l.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,s.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=f!==m&&t||n,a.createElement("a",c)}));var g=m((function(e,t){var n=e.component,o=void 0===n?h:n,c=e.replace,g=e.to,v=e.innerRef,b=(0,l.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=p(d(g,e.location),e.location),l=r?n.createHref(r):"",h=(0,s.Z)({},b,{href:l,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(c||r?n.replace:n.push)(t)}});return f!==m?h.ref=t||v:h.innerRef=v,a.createElement(o,h)}))})),v=function(e){return e},b=a.forwardRef;void 0===b&&(b=v);var y=b((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,f=e.activeStyle,m=e.className,h=e.exact,y=e.isActive,w=e.location,S=e.sensitive,k=e.strict,E=e.style,_=e.to,x=e.innerRef,O=(0,l.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=p(d(_,n),n),l=i.pathname,P=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),C=P?(0,r.LX)(n.pathname,{path:P,exact:h,sensitive:S,strict:k}):null,T=!!(y?y(C,n):C),I="function"==typeof m?m(T):m,A="function"==typeof E?E(T):E;T&&(I=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(I,c),A=(0,s.Z)({},A,f));var N=(0,s.Z)({"aria-current":T&&o||null,className:I,style:A,to:i},O);return v!==b?N.ref=t||x:N.innerRef=x,a.createElement(g,N)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>_,F0:()=>y,LX:()=>E,TH:()=>L,k6:()=>N,rs:()=>I,s6:()=>b});var r=n(5068),o=n(7294),a=n(5697),i=n.n(a),s=n(9318),l=n(8776),u=n(7462),c=n(4779),d=n.n(c),p=(n(9864),n(3366)),f=(n(8679),1073741823),m="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=o.createContext||function(e,t){var n,a,s="__create-react-context-"+function(){var e="__global_unique_id__";return m[e]=(m[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];return(t=e.call.apply(e,[this].concat(a))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);l.childContextTypes=((n={})[s]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},o.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},o.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},o.getValue=function(){return this.context[s]?this.context[s].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return u.contextTypes=((a={})[s]=i().object,a),{Provider:l,Consumer:u}},g=function(e){var t=h();return t.displayName=e,t},v=g("Router-History"),b=g("Router"),y=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(b.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(v.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;o.Component;var w={},S=1e4,k=0;function E(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,s=void 0!==i&&i,l=n.sensitive,u=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return k<S&&(r[e]=a,k++),a}(n,{end:a,strict:s,sensitive:u}),o=r.regexp,i=r.keys,l=o.exec(e);if(!l)return null;var c=l[0],p=l.slice(1),f=e===c;return a&&!f?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:f,params:i.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,(function(t){t||(0,l.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?E(n.pathname,e.props):t.match,a=(0,u.Z)({},t,{location:n,match:r}),i=e.props,s=i.children,c=i.component,d=i.render;return Array.isArray(s)&&function(e){return 0===o.Children.count(e)}(s)&&(s=null),o.createElement(b.Provider,{value:a},a.match?s?"function"==typeof s?s(a):s:c?o.createElement(c,a):d?d(a):null:"function"==typeof s?s(a):null)}))},t}(o.Component);function x(e){return"/"===e.charAt(0)?e:"/"+e}function O(e,t){if(!e)return t;var n=x(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function P(e){return"string"==typeof e?e:(0,s.Ep)(e)}function C(e){return function(){(0,l.Z)(!1)}}function T(){}o.Component;var I=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(b.Consumer,null,(function(t){t||(0,l.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?E(a.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var A=o.useContext;function N(){return A(v)}function L(){return A(b).location}},2408:(e,t,n)=>{"use strict";var r=n(7418),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,s=60110,l=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d("react.element"),a=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),s=d("react.context"),l=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var p="function"==typeof Symbol&&Symbol.iterator;function f(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var m={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h={};function g(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}function v(){}function b(e,t,n){this.props=e,this.context=t,this.refs=h,this.updater=n||m}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(f(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=g.prototype;var y=b.prototype=new v;y.constructor=b,r(y,g.prototype),y.isPureReactComponent=!0;var w={current:null},S=Object.prototype.hasOwnProperty,k={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,n){var r,a={},i=null,s=null;if(null!=t)for(r in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)S.call(t,r)&&!k.hasOwnProperty(r)&&(a[r]=t[r]);var l=arguments.length-2;if(1===l)a.children=n;else if(1<l){for(var u=Array(l),c=0;c<l;c++)u[c]=arguments[c+2];a.children=u}if(e&&e.defaultProps)for(r in l=e.defaultProps)void 0===a[r]&&(a[r]=l[r]);return{$$typeof:o,type:e,key:i,ref:s,props:a,_owner:w.current}}function _(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var x=/\/+/g;function O(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function P(e,t,n,r,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case o:case a:l=!0}}if(l)return i=i(l=e),e=""===r?"."+O(l,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(x,"$&/")+"/"),P(i,t,n,"",(function(e){return e}))):null!=i&&(_(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(x,"$&/")+"/")+e)),t.push(i)),1;if(l=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+O(s=e[u],u);l+=P(s,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=p&&e[p]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(s=e.next()).done;)l+=P(s=s.value,t,n,c=r+O(s,u++),i);else if("object"===s)throw t=""+e,Error(f(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return l}function C(e,t,n){if(null==e)return e;var r=[],o=0;return P(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function T(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var I={current:null};function A(){var e=I.current;if(null===e)throw Error(f(321));return e}var N={ReactCurrentDispatcher:I,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:C,forEach:function(e,t,n){C(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return C(e,(function(){t++})),t},toArray:function(e){return C(e,(function(e){return e}))||[]},only:function(e){if(!_(e))throw Error(f(143));return e}},t.Component=g,t.PureComponent=b,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=N,t.cloneElement=function(e,t,n){if(null==e)throw Error(f(267,e));var a=r({},e.props),i=e.key,s=e.ref,l=e._owner;if(null!=t){if(void 0!==t.ref&&(s=t.ref,l=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)S.call(t,c)&&!k.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];a.children=u}return{$$typeof:o,type:e.type,key:i,ref:s,props:a,_owner:l}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:s,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=E,t.createFactory=function(e){var t=E.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:l,render:e}},t.isValidElement=_,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:T}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return A().useCallback(e,t)},t.useContext=function(e,t){return A().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return A().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return A().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return A().useLayoutEffect(e,t)},t.useMemo=function(e,t){return A().useMemo(e,t)},t.useReducer=function(e,t,n){return A().useReducer(e,t,n)},t.useRef=function(e){return A().useRef(e)},t.useState=function(e){return A().useState(e)},t.version="17.0.2"},7294:(e,t,n)=>{"use strict";e.exports=n(2408)},53:(e,t)=>{"use strict";var n,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},o=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var p=window.setTimeout,f=window.clearTimeout;if("undefined"!=typeof console){var m=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof m&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var h=!1,g=null,v=-1,b=5,y=0;t.unstable_shouldYield=function(){return t.unstable_now()>=y},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):b=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,S=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();y=e+b;try{g(!0,e)?S.postMessage(null):(h=!1,g=null)}catch(n){throw S.postMessage(null),n}}else h=!1},n=function(e){g=e,h||(h=!0,S.postMessage(null))},r=function(e,n){v=p((function(){e(t.unstable_now())}),n)},o=function(){f(v),v=-1}}function k(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<x(o,t)))break e;e[r]=t,e[n]=o,n=r}}function E(e){return void 0===(e=e[0])?null:e}function _(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,i=e[a],s=a+1,l=e[s];if(void 0!==i&&0>x(i,n))void 0!==l&&0>x(l,i)?(e[r]=l,e[s]=n,r=s):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==l&&0>x(l,n)))break e;e[r]=l,e[s]=n,r=s}}}return t}return null}function x(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var O=[],P=[],C=1,T=null,I=3,A=!1,N=!1,L=!1;function j(e){for(var t=E(P);null!==t;){if(null===t.callback)_(P);else{if(!(t.startTime<=e))break;_(P),t.sortIndex=t.expirationTime,k(O,t)}t=E(P)}}function R(e){if(L=!1,j(e),!N)if(null!==E(O))N=!0,n(D);else{var t=E(P);null!==t&&r(R,t.startTime-e)}}function D(e,n){N=!1,L&&(L=!1,o()),A=!0;var a=I;try{for(j(n),T=E(O);null!==T&&(!(T.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=T.callback;if("function"==typeof i){T.callback=null,I=T.priorityLevel;var s=i(T.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?T.callback=s:T===E(O)&&_(O),j(n)}else _(O);T=E(O)}if(null!==T)var l=!0;else{var u=E(P);null!==u&&r(R,u.startTime-n),l=!1}return l}finally{T=null,I=a,A=!1}}var M=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){N||A||(N=!0,n(D))},t.unstable_getCurrentPriorityLevel=function(){return I},t.unstable_getFirstCallbackNode=function(){return E(O)},t.unstable_next=function(e){switch(I){case 1:case 2:case 3:var t=3;break;default:t=I}var n=I;I=t;try{return e()}finally{I=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=M,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=I;I=e;try{return t()}finally{I=n}},t.unstable_scheduleCallback=function(e,a,i){var s=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?s+i:s:i=s,e){case 1:var l=-1;break;case 2:l=250;break;case 5:l=1073741823;break;case 4:l=1e4;break;default:l=5e3}return e={id:C++,callback:a,priorityLevel:e,startTime:i,expirationTime:l=i+l,sortIndex:-1},i>s?(e.sortIndex=i,k(P,e),null===E(O)&&e===E(P)&&(L?o():L=!0,r(R,i-s))):(e.sortIndex=l,k(O,e),N||A||(N=!0,n(D))),e},t.unstable_wrapCallback=function(e){var t=I;return function(){var n=I;I=t;try{return e.apply(this,arguments)}finally{I=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l<a.length;l++){var u=a[l];if(!s(u))return!1;var c=e[u],d=t[u];if(!1===(o=n?n.call(r,c,d,u):void 0)||void 0===o&&c!==d)return!1}return!0}},3250:(e,t,n)=>{"use strict";var r=n(7294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,s=r.useLayoutEffect,l=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return s((function(){o.value=n,o.getSnapshot=t,u(o)&&c({inst:o})}),[e,n,t]),i((function(){return u(o)&&c({inst:o}),e((function(){u(o)&&c({inst:o})}))}),[e]),l(n),n};void 0!==r.useSyncExternalStore&&r.useSyncExternalStore},1688:(e,t,n)=>{"use strict";n(3250)},6809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"Dappnode",tagline:"Simplifying decentralization",favicon:"img/logo.png",url:"https://docs.dappnode.io",baseUrl:"/",organizationName:"dappnode",projectName:"Dappnode",onBrokenLinks:"throw",onBrokenMarkdownLinks:"warn",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},plugins:["/home/runner/work/DAppNodeDocs/DAppNodeDocs/node_modules/@cmfcmf/docusaurus-search-local/lib/server/index.js"],presets:[["classic",{docs:{sidebarPath:"/home/runner/work/DAppNodeDocs/DAppNodeDocs/sidebars.js",editUrl:"https://github.com/dappnode/DappnodeDocs"},theme:{customCss:"/home/runner/work/DAppNodeDocs/DAppNodeDocs/src/css/custom.css"}}]],themeConfig:{image:"img/docusaurus-social-card.jpg",navbar:{title:"Dappnode Docs",logo:{alt:"Dappnode Logo",src:"img/logo.svg",href:"/"},items:[{type:"docSidebar",sidebarId:"userSidebar",position:"left",label:"User Docs"},{type:"docSidebar",sidebarId:"devSidebar",position:"left",label:"Dev Docs"},{type:"docSidebar",sidebarId:"smoothSidebar",position:"left",label:"Smooth"},{type:"docSidebar",sidebarId:"daoSidebar",position:"left",label:"DAO"},{href:"https://dappnode.com/",label:"Dappnode",position:"right"},{href:"https://github.com/dappnode/DappnodeDocs",label:"GitHub",position:"right"}],hideOnScroll:!1},footer:{style:"dark",links:[{title:"Docs",items:[{label:"Getting Started",to:"/docs/user/getting-started/choose-your-path"},{label:"Staking",to:"/docs/user/staking/overview"},{label:"Access your Dappnode",to:"/docs/user/access-your-dappnode/overview"},{label:"Driving School",to:"/docs/user/videos-and-tutorials/driving-school/initial-setup"}]},{title:"Community",items:[{label:"Discord",href:"https://discord.gg/dappnode"},{label:"Twitter",href:"https://twitter.com/dappnode"}]},{title:"More",items:[{label:"GitHub",href:"https://github.com/dappnode"},{label:"Dappnode",href:"https://dappnode.com/"}]}],copyright:"Copyright \xa9 2024 Dappnode. Built with Docusaurus."},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{mermaid:!1}}},7462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},5068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},3366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},7529:e=>{"use strict";e.exports=JSON.parse('{"cmfcmf/d-s-l.searchBar.placeholder":"Search...","cmfcmf/d-s-l.searchBar.noResults":"No results found.","cmfcmf/d-s-l.searchBar.clearButtonTitle":"Clear","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"Cancel","cmfcmf/d-s-l.searchBar.submitButtonTitle":"Submit"}')},6887:e=>{"use strict";e.exports=JSON.parse('{"/blog-62a":{"__comp":"a6aa9e1f","__context":{"plugin":"065c701c"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"f4f34a3a"},{"content":"8717b14a"},{"content":"925b3f96"}],"metadata":"b2b675dd"},"/blog/archive-818":{"__comp":"9e4087bc","__context":{"plugin":"065c701c"},"archive":"b2f554cd"},"/blog/first-blog-post-0b3":{"__comp":"ccc49370","__context":{"plugin":"065c701c"},"sidebar":"814f3328","content":"e273c56f"},"/blog/long-blog-post-a48":{"__comp":"ccc49370","__context":{"plugin":"065c701c"},"sidebar":"814f3328","content":"73664a40"},"/blog/mdx-blog-post-f6d":{"__comp":"ccc49370","__context":{"plugin":"065c701c"},"sidebar":"814f3328","content":"59362658"},"/blog/tags-3c3":{"__comp":"01a85c17","__context":{"plugin":"065c701c"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/docusaurus-e09":{"__comp":"6875c492","__context":{"plugin":"065c701c"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"f4f34a3a"},{"content":"8717b14a"},{"content":"925b3f96"}],"tag":"a80da1cf","listMetadata":"608ae6a4"},"/blog/tags/facebook-66f":{"__comp":"6875c492","__context":{"plugin":"065c701c"},"sidebar":"814f3328","items":[{"content":"7661071f"}],"tag":"031793e1","listMetadata":"096bfee4"},"/blog/tags/hello-f71":{"__comp":"6875c492","__context":{"plugin":"065c701c"},"sidebar":"814f3328","items":[{"content":"7661071f"},{"content":"8717b14a"}],"tag":"30a24c52","listMetadata":"66406991"},"/blog/tags/hola-fee":{"__comp":"6875c492","__context":{"plugin":"065c701c"},"sidebar":"814f3328","items":[{"content":"925b3f96"}],"tag":"e16015ca","listMetadata":"4c9e35b1"},"/blog/welcome-4bd":{"__comp":"ccc49370","__context":{"plugin":"065c701c"},"sidebar":"814f3328","content":"d9f32620"},"/docs-48c":{"__comp":"1be78505","__context":{"plugin":"6c88006d"},"versionMetadata":"935f2afb"},"/docs/dao-f08":{"__comp":"17896441","content":"cbc5934e"},"/docs/dao/faq-93b":{"__comp":"17896441","content":"a83bdfda"},"/docs/dao/liquidity-mining-f84":{"__comp":"17896441","content":"89600f1f"},"/docs/dao/node-basics-5aa":{"__comp":"17896441","content":"027d004c"},"/docs/dao/node-drop-188":{"__comp":"17896441","content":"f557db91"},"/docs/dao/node-stream-e47":{"__comp":"17896441","content":"7ef68c32"},"/docs/dev-921":{"__comp":"17896441","content":"950718c7"},"/docs/dev/github-actions-769":{"__comp":"17896441","content":"8c6013e9"},"/docs/dev/references/docker-compose-7b3":{"__comp":"17896441","content":"82063238"},"/docs/dev/references/manifest-6e9":{"__comp":"17896441","content":"2a82f816"},"/docs/dev/references/setup-wizard-900":{"__comp":"17896441","content":"94131f31"},"/docs/dev/sdk/commands-665":{"__comp":"17896441","content":"7b2e8791"},"/docs/dev/sdk/overview-4c1":{"__comp":"17896441","content":"67625ece"},"/docs/smooth-9c0":{"__comp":"17896441","content":"34d45c9f"},"/docs/smooth/deep-dive-into-smooth/oracle-sm-986":{"__comp":"17896441","content":"1ee5c5d2"},"/docs/smooth/deep-dive-into-smooth/overview-79c":{"__comp":"17896441","content":"090ba480"},"/docs/smooth/deep-dive-into-smooth/rewards-20c":{"__comp":"17896441","content":"cdc6bc37"},"/docs/smooth/deep-dive-into-smooth/states-3a4":{"__comp":"17896441","content":"3fac1d53"},"/docs/smooth/faq-glossary-d7a":{"__comp":"17896441","content":"0af727f1"},"/docs/smooth/subscribe-to-smooth/automatic-53c":{"__comp":"17896441","content":"b9c10046"},"/docs/smooth/subscribe-to-smooth/manual-dd2":{"__comp":"17896441","content":"2c509ddc"},"/docs/smooth/subscribe-to-smooth/overview-713":{"__comp":"17896441","content":"773dc9fa"},"/docs/smooth/unsubscribe-from-smooth-032":{"__comp":"17896441","content":"6e93d9f5"},"/docs/user/access-your-dappnode/local-24f":{"__comp":"17896441","content":"5456a9ed"},"/docs/user/access-your-dappnode/overview-e1d":{"__comp":"17896441","content":"3f7aee3c"},"/docs/user/access-your-dappnode/terminal-4de":{"__comp":"17896441","content":"0f7f07eb"},"/docs/user/access-your-dappnode/vpn/openvpn-39c":{"__comp":"17896441","content":"5b35db5e"},"/docs/user/access-your-dappnode/vpn/overview-ff5":{"__comp":"17896441","content":"5f877448"},"/docs/user/access-your-dappnode/vpn/wireguard-40b":{"__comp":"17896441","content":"e28e223d"},"/docs/user/access-your-dappnode/wifi-60d":{"__comp":"17896441","content":"dfcea9c7"},"/docs/user/dappnode-cloud/overview-8a1":{"__comp":"17896441","content":"3093fe32"},"/docs/user/dappnode-cloud/providers/aws/faqs-ff8":{"__comp":"17896441","content":"fcb270fb"},"/docs/user/dappnode-cloud/providers/aws/overview-a22":{"__comp":"17896441","content":"0429b4a1"},"/docs/user/dappnode-cloud/providers/aws/set-up-instance-a3c":{"__comp":"17896441","content":"89e2558e"},"/docs/user/dappnode-cloud/providers/coming-soon-971":{"__comp":"17896441","content":"6e504cb9"},"/docs/user/ethical-metrics/metrics-b30":{"__comp":"17896441","content":"25229465"},"/docs/user/ethical-metrics/overview-059":{"__comp":"17896441","content":"20034248"},"/docs/user/ethical-metrics/setup-0d8":{"__comp":"17896441","content":"59a51c52"},"/docs/user/ethical-metrics/troubleshooting-373":{"__comp":"17896441","content":"a9241739"},"/docs/user/faqs-884":{"__comp":"17896441","content":"536a4320"},"/docs/user/getting-started/access-dappnode-via-wifi-920":{"__comp":"17896441","content":"90558919"},"/docs/user/getting-started/choose-your-path-daf":{"__comp":"17896441","content":"5d0a1dad"},"/docs/user/getting-started/connect-dappnode-to-the-router-90c":{"__comp":"17896441","content":"747b92bf"},"/docs/user/getting-started/next-steps-4fe":{"__comp":"17896441","content":"d267b4aa"},"/docs/user/getting-started/register-fff":{"__comp":"17896441","content":"c7a466cb"},"/docs/user/getting-started/setup-901":{"__comp":"17896441","content":"8ec292b8"},"/docs/user/hardware/maintenance-546":{"__comp":"17896441","content":"2057bc77"},"/docs/user/hardware/overview-c38":{"__comp":"17896441","content":"5d665ce0"},"/docs/user/hardware/temperature-676":{"__comp":"17896441","content":"769f9326"},"/docs/user/install/arm-89f":{"__comp":"17896441","content":"d61c7726"},"/docs/user/install/dappnode-commands-109":{"__comp":"17896441","content":"ef41a71b"},"/docs/user/install/iso-3bd":{"__comp":"17896441","content":"9e93dc42"},"/docs/user/install/overview-0da":{"__comp":"17896441","content":"c38c9aa9"},"/docs/user/install/script-2a7":{"__comp":"17896441","content":"22a3df87"},"/docs/user/packages/avalanche-201":{"__comp":"17896441","content":"dfbda110"},"/docs/user/packages/bitcoin-216":{"__comp":"17896441","content":"d47e1b16"},"/docs/user/packages/dms-412":{"__comp":"17896441","content":"1e4f1bb9"},"/docs/user/packages/ethclassic-6d5":{"__comp":"17896441","content":"e7ae4afa"},"/docs/user/packages/monero-b8c":{"__comp":"17896441","content":"53ed655b"},"/docs/user/packages/signature-7f0":{"__comp":"17896441","content":"91e54d81"},"/docs/user/packages/swarm-444":{"__comp":"17896441","content":"a960b763"},"/docs/user/packages/understanding-dappnode-packages-5b2":{"__comp":"17896441","content":"caaf4754"},"/docs/user/repository/ethereum-657":{"__comp":"17896441","content":"d912498a"},"/docs/user/repository/ipfs-8c2":{"__comp":"17896441","content":"af26485d"},"/docs/user/rollups/optimism-cfe":{"__comp":"17896441","content":"0085f636"},"/docs/user/rollups/overview-a8a":{"__comp":"17896441","content":"b4800274"},"/docs/user/staking/ethereum/dvt-technologies/diva-cf2":{"__comp":"17896441","content":"8f981d3f"},"/docs/user/staking/ethereum/dvt-technologies/obol-network-770":{"__comp":"17896441","content":"4d8f6977"},"/docs/user/staking/ethereum/dvt-technologies/ssv-network-085":{"__comp":"17896441","content":"e7fcc526"},"/docs/user/staking/ethereum/lsd-pools/rocketpool-fa6":{"__comp":"17896441","content":"ed77d0ad"},"/docs/user/staking/ethereum/lsd-pools/stakehouse-42f":{"__comp":"17896441","content":"e26c9afe"},"/docs/user/staking/ethereum/lsd-pools/stakewise-ee5":{"__comp":"17896441","content":"a33eb6a8"},"/docs/user/staking/ethereum/solo/holesky-301":{"__comp":"17896441","content":"14c20d3a"},"/docs/user/staking/ethereum/solo/mainnet-951":{"__comp":"17896441","content":"d6c02fb6"},"/docs/user/staking/gnosis-chain/solo-1f9":{"__comp":"17896441","content":"eef43c71"},"/docs/user/staking/lukso/solo-a2e":{"__comp":"17896441","content":"d36fd63a"},"/docs/user/staking/overview-93e":{"__comp":"17896441","content":"058440e4"},"/docs/user/videos-and-tutorials/crash-course-a95":{"__comp":"17896441","content":"c9627cbc"},"/docs/user/videos-and-tutorials/driving-school/configuration-8d6":{"__comp":"17896441","content":"4c4b1a63"},"/docs/user/videos-and-tutorials/driving-school/initial-setup-59c":{"__comp":"17896441","content":"89b6dee8"},"/docs/user/videos-and-tutorials/guides/connect-node-1da":{"__comp":"17896441","content":"f744a4d0"},"/docs/user/videos-and-tutorials/overview-a86":{"__comp":"17896441","content":"d508510a"},"/-4a5":{"__comp":"1df93b7f","__context":{"plugin":"0aa77f7e"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=654,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/runtime~main.e17fd9b6.js b/assets/js/runtime~main.e17fd9b6.js deleted file mode 100644 index 364866e50..000000000 --- a/assets/js/runtime~main.e17fd9b6.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,a,c,f,d,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],d=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&d||b>=d)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,d<b&&(b=d));if(t){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,f,d]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var d=Object.create(null);r.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(d,b),d},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",78:"c7a466cb",110:"66406991",120:"67625ece",190:"e7ae4afa",306:"5d0a1dad",437:"2a82f816",453:"30a24c52",468:"c9627cbc",533:"b2b675dd",641:"3093fe32",651:"cbc5934e",839:"5f877448",903:"14c20d3a",935:"6e93d9f5",938:"9e93dc42",948:"8717b14a",1206:"e26c9afe",1285:"6c88006d",1323:"1e4f1bb9",1477:"b2f554cd",1600:"5456a9ed",1605:"f744a4d0",1633:"031793e1",1713:"a7023ddc",1796:"950718c7",1914:"d9f32620",2217:"af26485d",2245:"d508510a",2267:"59362658",2362:"e273c56f",2441:"dfcea9c7",2535:"814f3328",2559:"22a3df87",2642:"91e54d81",3036:"7ef68c32",3089:"a6aa9e1f",3205:"a80da1cf",3218:"ed77d0ad",3237:"1df93b7f",3295:"a9241739",3389:"1ee5c5d2",3423:"89b6dee8",3504:"4c4b1a63",3514:"73664a40",3608:"9e4087bc",3633:"d6c02fb6",3680:"a33eb6a8",3743:"20034248",3964:"058440e4",4013:"01a85c17",4307:"94131f31",4407:"cdc6bc37",4543:"f557db91",4585:"0aa77f7e",4588:"ef41a71b",4743:"747b92bf",4765:"b9c10046",4840:"2c509ddc",4952:"25229465",4980:"59a51c52",5091:"2057bc77",5447:"e7fcc526",5458:"90558919",5510:"89e2558e",5561:"b4800274",5599:"89600f1f",5708:"53ed655b",5788:"090ba480",5815:"4d8f6977",5914:"caaf4754",5940:"d61c7726",6103:"ccc49370",6110:"8c6013e9",6197:"0429b4a1",6209:"d912498a",6471:"773dc9fa",6593:"d36fd63a",6938:"608ae6a4",6967:"8f981d3f",7089:"34d45c9f",7178:"096bfee4",7197:"065c701c",7365:"eef43c71",7410:"fcb270fb",7484:"a960b763",7533:"3fac1d53",7563:"d267b4aa",7675:"0f7f07eb",7775:"5b35db5e",7918:"17896441",8162:"dfbda110",8233:"769f9326",8330:"c38c9aa9",8352:"027d004c",8610:"6875c492",8636:"f4f34a3a",8646:"5d665ce0",8769:"a83bdfda",8804:"7b2e8791",8925:"0085f636",8999:"0af727f1",9003:"925b3f96",9035:"4c9e35b1",9058:"8ec292b8",9091:"e28e223d",9374:"536a4320",9402:"6e504cb9",9514:"1be78505",9642:"7661071f",9700:"e16015ca",9739:"d47e1b16",9779:"3f7aee3c",9984:"82063238"}[e]||e)+"."+{53:"d167092e",78:"e0d756fb",110:"043cb654",120:"d4d8382e",190:"f4b21baa",207:"234b8fdf",306:"6a634fce",437:"ddd74d96",453:"3d4809d1",468:"93c4a5f2",533:"d52349d4",641:"b5b7438e",651:"7adfcf05",839:"cda86ebe",903:"60882400",935:"a76a2c8c",938:"067f400a",948:"d94c26ad",1206:"36302435",1285:"481c8ed1",1323:"bbb2152c",1477:"916cd470",1600:"28407620",1605:"53dbd09f",1633:"068e542a",1713:"c540eb40",1796:"6c460a57",1914:"85cb3876",2217:"bb17cc6d",2245:"208ba570",2267:"7e1a497f",2362:"20cc1e53",2410:"19858f3e",2441:"ecfb7705",2535:"3f452409",2559:"0556e798",2642:"f96a4ff8",3036:"75c64508",3089:"7f9a3445",3205:"5e2a619b",3218:"ac61a04b",3237:"93141e84",3295:"a6af1d30",3389:"e1d4fcd8",3423:"4af4ff6b",3504:"fda7797e",3514:"a988e157",3608:"5de22c6a",3633:"a772a398",3680:"d90f5bc3",3743:"2920c117",3964:"04f784ff",4013:"ead953d1",4248:"7c4eeb2c",4307:"7685661d",4407:"1a361d72",4543:"e36c8d24",4585:"d3241413",4588:"0e257dbc",4743:"bf5aff42",4765:"aaa11874",4840:"b72b7b21",4952:"87285cfa",4980:"947a6830",5091:"17692e27",5447:"2f0cf05c",5458:"addb6277",5510:"af9481f1",5561:"89df982d",5599:"4af1ac52",5708:"95aef4df",5788:"3d806478",5815:"468ee51d",5914:"eb8046b2",5940:"a8ea57dc",6103:"88a7723b",6110:"4f0ba9da",6197:"75792dba",6209:"f5fa04d0",6471:"5ecc2397",6593:"9869b593",6938:"0621db3f",6967:"8182e993",7089:"3de4b327",7178:"3d88b358",7197:"678f9898",7365:"c70ef395",7410:"251db153",7484:"23498b33",7533:"b395668d",7563:"c80f1fca",7675:"f599eb23",7775:"42cb4405",7918:"bdf97490",8162:"91aaee4a",8233:"b68781fb",8330:"6c6bbdc1",8352:"a5affc84",8610:"b010a3d3",8636:"2f65a1ee",8646:"834d76f8",8769:"327f0737",8804:"8224c8fa",8925:"7bb09368",8999:"a8bafb01",9003:"2541a15e",9035:"d61ab797",9058:"010408e1",9091:"ac6588ab",9374:"54f1de4b",9402:"6f3e8a52",9514:"b1c6e321",9642:"655fc62f",9700:"4c049e6b",9739:"bd0b4ce3",9779:"5499c15e",9984:"21b18e62"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},d="d-app-node-docs:",r.l=(e,a,c,b)=>{if(f[e])f[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==d+c){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",d+c),t.src=e),f[e]=[a];var l=(a,c)=>{t.onerror=t.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],t.parentNode&&t.parentNode.removeChild(t),d&&d.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918",20034248:"3743",25229465:"4952",59362658:"2267",66406991:"110",82063238:"9984",90558919:"5458","935f2afb":"53",c7a466cb:"78","67625ece":"120",e7ae4afa:"190","5d0a1dad":"306","2a82f816":"437","30a24c52":"453",c9627cbc:"468",b2b675dd:"533","3093fe32":"641",cbc5934e:"651","5f877448":"839","14c20d3a":"903","6e93d9f5":"935","9e93dc42":"938","8717b14a":"948",e26c9afe:"1206","6c88006d":"1285","1e4f1bb9":"1323",b2f554cd:"1477","5456a9ed":"1600",f744a4d0:"1605","031793e1":"1633",a7023ddc:"1713","950718c7":"1796",d9f32620:"1914",af26485d:"2217",d508510a:"2245",e273c56f:"2362",dfcea9c7:"2441","814f3328":"2535","22a3df87":"2559","91e54d81":"2642","7ef68c32":"3036",a6aa9e1f:"3089",a80da1cf:"3205",ed77d0ad:"3218","1df93b7f":"3237",a9241739:"3295","1ee5c5d2":"3389","89b6dee8":"3423","4c4b1a63":"3504","73664a40":"3514","9e4087bc":"3608",d6c02fb6:"3633",a33eb6a8:"3680","058440e4":"3964","01a85c17":"4013","94131f31":"4307",cdc6bc37:"4407",f557db91:"4543","0aa77f7e":"4585",ef41a71b:"4588","747b92bf":"4743",b9c10046:"4765","2c509ddc":"4840","59a51c52":"4980","2057bc77":"5091",e7fcc526:"5447","89e2558e":"5510",b4800274:"5561","89600f1f":"5599","53ed655b":"5708","090ba480":"5788","4d8f6977":"5815",caaf4754:"5914",d61c7726:"5940",ccc49370:"6103","8c6013e9":"6110","0429b4a1":"6197",d912498a:"6209","773dc9fa":"6471",d36fd63a:"6593","608ae6a4":"6938","8f981d3f":"6967","34d45c9f":"7089","096bfee4":"7178","065c701c":"7197",eef43c71:"7365",fcb270fb:"7410",a960b763:"7484","3fac1d53":"7533",d267b4aa:"7563","0f7f07eb":"7675","5b35db5e":"7775",dfbda110:"8162","769f9326":"8233",c38c9aa9:"8330","027d004c":"8352","6875c492":"8610",f4f34a3a:"8636","5d665ce0":"8646",a83bdfda:"8769","7b2e8791":"8804","0085f636":"8925","0af727f1":"8999","925b3f96":"9003","4c9e35b1":"9035","8ec292b8":"9058",e28e223d:"9091","536a4320":"9374","6e504cb9":"9402","1be78505":"9514","7661071f":"9642",e16015ca:"9700",d47e1b16:"9739","3f7aee3c":"9779"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,c)=>{var f=r.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var d=new Promise(((c,d)=>f=e[a]=[c,d]));c.push(f[2]=d);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",t.name="ChunkLoadError",t.type=d,t.request=b,f[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var f,d,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(f in t)r.o(t,f)&&(r.m[f]=t[f]);if(o)var i=o(r)}for(a&&a(c);n<b.length;n++)d=b[n],r.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return r.O(i)},c=self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})(); \ No newline at end of file diff --git a/assets/js/runtime~main.f1c06cc8.js b/assets/js/runtime~main.f1c06cc8.js new file mode 100644 index 000000000..fa5e0bba7 --- /dev/null +++ b/assets/js/runtime~main.f1c06cc8.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,a,c,d,f,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var c=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(c.exports,c,c.exports,r),c.loaded=!0,c.exports}r.m=b,r.c=t,e=[],r.O=(a,c,d,f)=>{if(!c){var b=1/0;for(i=0;i<e.length;i++){c=e[i][0],d=e[i][1],f=e[i][2];for(var t=!0,o=0;o<c.length;o++)(!1&f||b>=f)&&Object.keys(r.O).every((e=>r.O[e](c[o])))?c.splice(o--,1):(t=!1,f<b&&(b=f));if(t){e.splice(i--,1);var n=d();void 0!==n&&(a=n)}}return a}f=f||0;for(var i=e.length;i>0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[c,d,f]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var f=Object.create(null);r.r(f);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(f,b),f},r.d=(e,a)=>{for(var c in a)r.o(a,c)&&!r.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,c)=>(r.f[c](e,a),a)),[])),r.u=e=>"assets/js/"+({53:"935f2afb",78:"c7a466cb",110:"66406991",120:"67625ece",190:"e7ae4afa",306:"5d0a1dad",437:"2a82f816",453:"30a24c52",468:"c9627cbc",533:"b2b675dd",641:"3093fe32",651:"cbc5934e",839:"5f877448",903:"14c20d3a",935:"6e93d9f5",938:"9e93dc42",948:"8717b14a",1206:"e26c9afe",1285:"6c88006d",1323:"1e4f1bb9",1477:"b2f554cd",1600:"5456a9ed",1605:"f744a4d0",1606:"5373dce7",1633:"031793e1",1713:"a7023ddc",1796:"950718c7",1914:"d9f32620",2217:"af26485d",2245:"d508510a",2267:"59362658",2362:"e273c56f",2441:"dfcea9c7",2535:"814f3328",2559:"22a3df87",2642:"91e54d81",3036:"7ef68c32",3089:"a6aa9e1f",3205:"a80da1cf",3218:"ed77d0ad",3237:"1df93b7f",3295:"a9241739",3389:"1ee5c5d2",3423:"89b6dee8",3504:"4c4b1a63",3514:"73664a40",3608:"9e4087bc",3633:"d6c02fb6",3680:"a33eb6a8",3743:"20034248",3964:"058440e4",4013:"01a85c17",4307:"94131f31",4368:"a94703ab",4407:"cdc6bc37",4543:"f557db91",4585:"0aa77f7e",4588:"ef41a71b",4743:"747b92bf",4765:"b9c10046",4840:"2c509ddc",4952:"25229465",4980:"59a51c52",5091:"2057bc77",5447:"e7fcc526",5458:"90558919",5510:"89e2558e",5561:"b4800274",5599:"89600f1f",5708:"53ed655b",5788:"090ba480",5815:"4d8f6977",5914:"caaf4754",5940:"d61c7726",6103:"ccc49370",6110:"8c6013e9",6197:"0429b4a1",6209:"d912498a",6471:"773dc9fa",6593:"d36fd63a",6938:"608ae6a4",6967:"8f981d3f",7089:"34d45c9f",7178:"096bfee4",7197:"065c701c",7365:"eef43c71",7410:"fcb270fb",7484:"a960b763",7533:"3fac1d53",7563:"d267b4aa",7675:"0f7f07eb",7775:"5b35db5e",7918:"17896441",7920:"1a4e3797",8162:"dfbda110",8233:"769f9326",8330:"c38c9aa9",8352:"027d004c",8518:"a7bd4aaa",8610:"6875c492",8636:"f4f34a3a",8646:"5d665ce0",8769:"a83bdfda",8804:"7b2e8791",8925:"0085f636",8999:"0af727f1",9003:"925b3f96",9035:"4c9e35b1",9058:"8ec292b8",9091:"e28e223d",9374:"536a4320",9402:"6e504cb9",9642:"7661071f",9661:"5e95c892",9700:"e16015ca",9739:"d47e1b16",9779:"3f7aee3c",9984:"82063238"}[e]||e)+"."+{53:"faf505d0",78:"479665d6",110:"043cb654",120:"a4dc0a22",130:"78a0ec64",190:"25e59390",306:"fda2f78b",437:"85cb16f8",453:"8b6b1c0f",468:"c22bd77f",533:"d52349d4",641:"4c5bc10e",651:"9fd61c20",839:"89e09364",903:"61a9193d",935:"65732374",938:"edf13b8d",948:"fb07c460",1206:"83c310d4",1285:"481c8ed1",1323:"c1e680f7",1477:"f646151d",1600:"e6eff62e",1605:"e5711a70",1606:"f0bfd25b",1633:"d4fe0f16",1713:"c540eb40",1772:"854f594c",1796:"52387e10",1914:"9541b86f",2217:"e05f3298",2245:"12aa7031",2267:"2321f39d",2362:"c02cde2e",2441:"5aa66f33",2535:"cf45552c",2559:"08c71103",2642:"137d5b07",3036:"6a742b13",3089:"a18e22ce",3205:"da804b84",3218:"9dacab61",3237:"85070d01",3295:"f087813d",3389:"fb280457",3423:"bf59031f",3504:"b03c2ad9",3514:"c26c9299",3608:"e74391c6",3633:"fc75dd6d",3680:"9d9a935e",3743:"a521b89e",3964:"9ea1b92f",4013:"c921329a",4307:"df2e8a1b",4368:"0206c29e",4407:"7cdc5c32",4543:"baa824db",4585:"d3241413",4588:"f45fa360",4743:"93f2077a",4765:"95b35c48",4840:"7435ed98",4952:"91651391",4980:"f26ffb8c",5091:"a5570a8f",5447:"f9db6e61",5458:"4e9ac069",5510:"153a1fa7",5525:"46543622",5561:"6101b4c4",5599:"168a8da4",5708:"06f06d30",5788:"8980c16f",5815:"c943a5a9",5914:"2c80a9aa",5940:"a1dc1a69",6103:"1fab23a6",6110:"c974261e",6197:"e2f2a152",6209:"0ce69b56",6471:"1f43c6cc",6593:"5b547693",6938:"0621db3f",6967:"3eade2e1",7089:"b2e41baf",7178:"3d88b358",7197:"678f9898",7365:"f4b36e93",7410:"807d0857",7484:"3537f263",7533:"43076377",7563:"b4ea9152",7675:"82baa2f7",7775:"ed76c31a",7874:"528a2ea3",7918:"22fc0779",7920:"99395fd0",8162:"a6dfc351",8233:"b3090ddc",8330:"7435fbbf",8352:"4eb22b30",8443:"6d2e563d",8518:"66954c82",8610:"464585ab",8636:"4131e8b1",8646:"462ff5cd",8769:"5639167b",8804:"9388802d",8925:"ae384f80",8999:"7cdf92ce",9003:"b9118c97",9035:"d61ab797",9058:"80a3a62a",9091:"67920957",9374:"efd3187a",9402:"0b0e4ccf",9642:"ae9f9558",9661:"c2e7cc9c",9700:"259ca12c",9739:"5f6576f1",9779:"093d03b3",9984:"7513d20c"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},f="d-app-node-docs:",r.l=(e,a,c,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i<n.length;i++){var u=n[i];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==f+c){t=u;break}}t||(o=!0,(t=document.createElement("script")).charset="utf-8",t.timeout=120,r.nc&&t.setAttribute("nonce",r.nc),t.setAttribute("data-webpack",f+c),t.src=e),d[e]=[a];var l=(a,c)=>{t.onerror=t.onload=null,clearTimeout(s);var f=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),f&&f.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={17896441:"7918",20034248:"3743",25229465:"4952",59362658:"2267",66406991:"110",82063238:"9984",90558919:"5458","935f2afb":"53",c7a466cb:"78","67625ece":"120",e7ae4afa:"190","5d0a1dad":"306","2a82f816":"437","30a24c52":"453",c9627cbc:"468",b2b675dd:"533","3093fe32":"641",cbc5934e:"651","5f877448":"839","14c20d3a":"903","6e93d9f5":"935","9e93dc42":"938","8717b14a":"948",e26c9afe:"1206","6c88006d":"1285","1e4f1bb9":"1323",b2f554cd:"1477","5456a9ed":"1600",f744a4d0:"1605","5373dce7":"1606","031793e1":"1633",a7023ddc:"1713","950718c7":"1796",d9f32620:"1914",af26485d:"2217",d508510a:"2245",e273c56f:"2362",dfcea9c7:"2441","814f3328":"2535","22a3df87":"2559","91e54d81":"2642","7ef68c32":"3036",a6aa9e1f:"3089",a80da1cf:"3205",ed77d0ad:"3218","1df93b7f":"3237",a9241739:"3295","1ee5c5d2":"3389","89b6dee8":"3423","4c4b1a63":"3504","73664a40":"3514","9e4087bc":"3608",d6c02fb6:"3633",a33eb6a8:"3680","058440e4":"3964","01a85c17":"4013","94131f31":"4307",a94703ab:"4368",cdc6bc37:"4407",f557db91:"4543","0aa77f7e":"4585",ef41a71b:"4588","747b92bf":"4743",b9c10046:"4765","2c509ddc":"4840","59a51c52":"4980","2057bc77":"5091",e7fcc526:"5447","89e2558e":"5510",b4800274:"5561","89600f1f":"5599","53ed655b":"5708","090ba480":"5788","4d8f6977":"5815",caaf4754:"5914",d61c7726:"5940",ccc49370:"6103","8c6013e9":"6110","0429b4a1":"6197",d912498a:"6209","773dc9fa":"6471",d36fd63a:"6593","608ae6a4":"6938","8f981d3f":"6967","34d45c9f":"7089","096bfee4":"7178","065c701c":"7197",eef43c71:"7365",fcb270fb:"7410",a960b763:"7484","3fac1d53":"7533",d267b4aa:"7563","0f7f07eb":"7675","5b35db5e":"7775","1a4e3797":"7920",dfbda110:"8162","769f9326":"8233",c38c9aa9:"8330","027d004c":"8352",a7bd4aaa:"8518","6875c492":"8610",f4f34a3a:"8636","5d665ce0":"8646",a83bdfda:"8769","7b2e8791":"8804","0085f636":"8925","0af727f1":"8999","925b3f96":"9003","4c9e35b1":"9035","8ec292b8":"9058",e28e223d:"9091","536a4320":"9374","6e504cb9":"9402","7661071f":"9642","5e95c892":"9661",e16015ca:"9700",d47e1b16:"9739","3f7aee3c":"9779"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,c)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)c.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((c,f)=>d=e[a]=[c,f]));c.push(d[2]=f);var b=r.p+r.u(a),t=new Error;r.l(b,(c=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var f=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;t.message="Loading chunk "+a+" failed.\n("+f+": "+b+")",t.name="ChunkLoadError",t.type=f,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,c)=>{var d,f,b=c[0],t=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(c);n<b.length;n++)f=b[n],r.o(e,f)&&e[f]&&e[f][0](),e[f]=0;return r.O(i)},c=self.webpackChunkd_app_node_docs=self.webpackChunkd_app_node_docs||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})(); \ No newline at end of file diff --git a/blog/archive/index.html b/blog/archive/index.html index 6024a8fd6..c52cb82cc 100644 --- a/blog/archive/index.html +++ b/blog/archive/index.html @@ -1,17 +1,14 @@ <!doctype html> -<html lang="en" dir="ltr" class="plugin-blog plugin-id-default"> +<html lang="en" dir="ltr" class="plugin-blog plugin-id-default" data-has-hydrated="false"> <head> <meta charset="UTF-8"> -<meta name="generator" content="Docusaurus v2.4.1"> -<title data-rh="true">Archive | Dappnode - - - + +Archive | Dappnode + + + - - - - + + \ No newline at end of file diff --git a/blog/atom.xml b/blog/atom.xml index d8aa9c6dc..82e132cfe 100644 --- a/blog/atom.xml +++ b/blog/atom.xml @@ -13,7 +13,18 @@ 2021-08-26T00:00:00.000Z - Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

]]>
+ Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

]]>
Sébastien Lorber https://sebastienlorber.com @@ -32,7 +43,8 @@ 2021-08-01T00:00:00.000Z - Blog posts support Docusaurus Markdown features, such as MDX.

tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>
]]>
+ Blog posts support Docusaurus Markdown features, such as MDX.

+
tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>
]]>
Sébastien Lorber https://sebastienlorber.com @@ -45,7 +57,24 @@ 2019-05-29T00:00:00.000Z - This is the summary of a very long blog post,

Use a <!-- truncate --> comment to limit blog post size in the list view.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

]]>
+ This is the summary of a very long blog post,

+

Use a <!-- truncate --> comment to limit blog post size in the list view.

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

]]>
Endilie Yacop Sucipto https://github.com/endiliey diff --git a/blog/first-blog-post/index.html b/blog/first-blog-post/index.html index 7b171bb01..a3a5b3dae 100644 --- a/blog/first-blog-post/index.html +++ b/blog/first-blog-post/index.html @@ -1,17 +1,14 @@ - + - -First Blog Post | Dappnode - - - + +First Blog Post | Dappnode + + + - -
-

First Blog Post

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - + +

First Blog Post

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/blog/index.html b/blog/index.html index d1c3bdd82..86e888627 100644 --- a/blog/index.html +++ b/blog/index.html @@ -1,17 +1,27 @@ - + - -Blog | Dappnode - - - + +Blog | Dappnode + + + - -
-

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - + +

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/blog/long-blog-post/index.html b/blog/long-blog-post/index.html index 2c63bf5b9..3be00e8ad 100644 --- a/blog/long-blog-post/index.html +++ b/blog/long-blog-post/index.html @@ -1,17 +1,31 @@ - + - -Long Blog Post | Dappnode - - - + +Long Blog Post | Dappnode + + + - -
-

Long Blog Post

· 3 min read
Endilie Yacop Sucipto

This is the summary of a very long blog post,

Use a <!-- truncate --> comment to limit blog post size in the list view.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - + +

Long Blog Post

· 3 min read
Endilie Yacop Sucipto

This is the summary of a very long blog post,

+

Use a <!-- truncate --> comment to limit blog post size in the list view.

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/blog/mdx-blog-post/index.html b/blog/mdx-blog-post/index.html index 95b7b6f4a..6060842d1 100644 --- a/blog/mdx-blog-post/index.html +++ b/blog/mdx-blog-post/index.html @@ -1,17 +1,15 @@ - + - -MDX Blog Post | Dappnode - - - + +MDX Blog Post | Dappnode + + + - -
-

MDX Blog Post

· One min read
Sébastien Lorber

Blog posts support Docusaurus Markdown features, such as MDX.

tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>
- - + +

MDX Blog Post

· One min read
Sébastien Lorber

Blog posts support Docusaurus Markdown features, such as MDX.

+
tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>
\ No newline at end of file diff --git a/blog/rss.xml b/blog/rss.xml index 90c979bd3..602525e13 100644 --- a/blog/rss.xml +++ b/blog/rss.xml @@ -14,7 +14,18 @@ https://docs.dappnode.io/blog/welcome Thu, 26 Aug 2021 00:00:00 GMT - Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

]]>
+ Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

]]>
facebook hello docusaurus @@ -25,7 +36,8 @@ https://docs.dappnode.io/blog/mdx-blog-post Sun, 01 Aug 2021 00:00:00 GMT - Blog posts support Docusaurus Markdown features, such as MDX.

tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>
]]>
+ Blog posts support Docusaurus Markdown features, such as MDX.

+
tip

Use the power of React to create interactive blog posts.

<button onClick={() => alert('button clicked!')}>Click me!</button>
]]>
docusaurus @@ -34,7 +46,24 @@ https://docs.dappnode.io/blog/long-blog-post Wed, 29 May 2019 00:00:00 GMT - This is the summary of a very long blog post,

Use a <!-- truncate --> comment to limit blog post size in the list view.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

]]>
+ This is the summary of a very long blog post,

+

Use a <!-- truncate --> comment to limit blog post size in the list view.

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

]]>
hello docusaurus
diff --git a/blog/tags/docusaurus/index.html b/blog/tags/docusaurus/index.html index f05bd7430..46ac3a9b4 100644 --- a/blog/tags/docusaurus/index.html +++ b/blog/tags/docusaurus/index.html @@ -1,17 +1,27 @@ - + - -4 posts tagged with "docusaurus" | Dappnode - - - + +4 posts tagged with "docusaurus" | Dappnode + + + - -
-

4 posts tagged with "docusaurus"

View All Tags

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - + +

4 posts tagged with "docusaurus"

View All Tags

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/blog/tags/facebook/index.html b/blog/tags/facebook/index.html index 45b547756..4312148c7 100644 --- a/blog/tags/facebook/index.html +++ b/blog/tags/facebook/index.html @@ -1,17 +1,25 @@ - + - -One post tagged with "facebook" | Dappnode - - - + +One post tagged with "facebook" | Dappnode + + + - -
-

One post tagged with "facebook"

View All Tags

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- - + +

One post tagged with "facebook"

View All Tags

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

\ No newline at end of file diff --git a/blog/tags/hello/index.html b/blog/tags/hello/index.html index 97c6ccd09..bd8e0e9f8 100644 --- a/blog/tags/hello/index.html +++ b/blog/tags/hello/index.html @@ -1,17 +1,26 @@ - + - -2 posts tagged with "hello" | Dappnode - - - + +2 posts tagged with "hello" | Dappnode + + + - -
-

2 posts tagged with "hello"

View All Tags

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- - + +

2 posts tagged with "hello"

View All Tags

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

\ No newline at end of file diff --git a/blog/tags/hola/index.html b/blog/tags/hola/index.html index 5753a0584..baf60a57d 100644 --- a/blog/tags/hola/index.html +++ b/blog/tags/hola/index.html @@ -1,17 +1,14 @@ - + - -One post tagged with "hola" | Dappnode - - - + +One post tagged with "hola" | Dappnode + + + - -
-

One post tagged with "hola"

View All Tags

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

- - + +

One post tagged with "hola"

View All Tags

· One min read
Gao Wei

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet

\ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index f0ad0415f..c7091e333 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -1,17 +1,14 @@ - + - -Tags | Dappnode - - - + +Tags | Dappnode + + + - - - - + + \ No newline at end of file diff --git a/blog/welcome/index.html b/blog/welcome/index.html index a129aadd7..79c1db24a 100644 --- a/blog/welcome/index.html +++ b/blog/welcome/index.html @@ -1,17 +1,25 @@ - + - -Welcome | Dappnode - - - + +Welcome | Dappnode + + + - -
-

Welcome

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

Simply add Markdown files (or folders) to the blog directory.

Regular blog authors can be added to authors.yml.

The blog post date can be extracted from filenames, such as:

  • 2019-05-30-welcome.md
  • 2019-05-30-welcome/index.md

A blog post folder can be convenient to co-locate blog post images:

Docusaurus Plushie

The blog supports tags as well!

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

- - + +

Welcome

· One min read
Sébastien Lorber
Yangshun Tay

Docusaurus blogging features are powered by the blog plugin.

+

Simply add Markdown files (or folders) to the blog directory.

+

Regular blog authors can be added to authors.yml.

+

The blog post date can be extracted from filenames, such as:

+
    +
  • 2019-05-30-welcome.md
  • +
  • 2019-05-30-welcome/index.md
  • +
+

A blog post folder can be convenient to co-locate blog post images:

+

Docusaurus Plushie

+

The blog supports tags as well!

+

And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.

\ No newline at end of file diff --git a/docs/dao/faq/index.html b/docs/dao/faq/index.html index 3589e8b55..3b28321ae 100644 --- a/docs/dao/faq/index.html +++ b/docs/dao/faq/index.html @@ -1,17 +1,15 @@ - + - -Dappnode DAO FAQ | Dappnode - - - + +Dappnode DAO FAQ | Dappnode + + + - -
-

Dappnode DAO FAQ

What is a DAO?

A DAO, or Decentralized Autonomous Organization, is an organization represented by rules encoded as a computer program that is transparent, controlled by the organization members, and not influenced by a centralized government. It operates autonomously and can execute actions such as making decisions and managing resources based on pre-defined rules or through a consensus mechanism.

What is the purpose and mission of the Dappnode DAO?

DappNode's DAO aims to promote and simplify the use of decentralized infrastructure. It aspires to create a more decentralized web by providing tools that make running nodes, DApps, and blockchain-related software more user-friendly and accessible to a wider audience. By establishing a DAO, DappNode ensures that its mission and direction are decided collectively by its community, allowing for a more democratic and transparent decision-making process. The DappNode DAO encourages collaboration, fostering a community that is actively involved in the project's evolution, and ensuring the sustainability and success of the platform in the decentralized space.

- - + +

Dappnode DAO FAQ

What is a DAO?

A DAO, or Decentralized Autonomous Organization, is an organization represented by rules encoded as a computer program that is transparent, controlled by the organization members, and not influenced by a centralized government. It operates autonomously and can execute actions such as making decisions and managing resources based on pre-defined rules or through a consensus mechanism.

+
What is the purpose and mission of the Dappnode DAO?

DappNode's DAO aims to promote and simplify the use of decentralized infrastructure. It aspires to create a more decentralized web by providing tools that make running nodes, DApps, and blockchain-related software more user-friendly and accessible to a wider audience. By establishing a DAO, DappNode ensures that its mission and direction are decided collectively by its community, allowing for a more democratic and transparent decision-making process. The DappNode DAO encourages collaboration, fostering a community that is actively involved in the project's evolution, and ensuring the sustainability and success of the platform in the decentralized space.

\ No newline at end of file diff --git a/docs/dao/index.html b/docs/dao/index.html index c3ac61595..b6cfea73a 100644 --- a/docs/dao/index.html +++ b/docs/dao/index.html @@ -1,17 +1,27 @@ - + - -DAO | Dappnode - - - + +DAO | Dappnode + + + - -
-

DAO

Documentation alert

The DAO section of our documentation is currently outdated due to a security incident. For a detailed explanation of the issue and our response plan, please refer to our post-mortem report on the node hack.

Governance

Token Addresses

Mission & Membership

The Dappnode DAO will be an inclusive hub in which Dappnode’s community will carry on its mission to keep the web decentralized, uncensored and resilient. Active DAO members will have the opportunity to vote on Dappnode’s future projects and on how to expand its array of hardware and software solutions.

To get involved in Governance, DAO aspirants will need to make contributions to the ecosystem and help kick-start the NODE economy. Those who provide liquidity in the sanctioned pools (Uniswap and Sushiswap) or commit NODE to Governance Staking on Ethereum Mainnet or xDai will be granted voting powers proportional to their contributions. This way we can ensure that those with a voice are also those with a stake, and are not merely speculating with the token.

Architecture

DAppnode has tapped Snapshot technology to build its Governance structure. Snapshot is a novel piece of technology that allows off-chain voting for on-chain actions. It removes the prohibitive gas costs of participating in on-chain governance by taking snapshots of members’ NODE currently being staked. Voting and creating proposals with Snapshot is done with a simple crypto wallet signature, no gas needed.

DAO Projects

The first Dappnode project post-launch will be the hotly awaited ValidatorDAO. You can read this Medium article to learn more about how ValidatorDAO is poised to revolutionize the relationship between Validators and Nominators!

- - + +
Documentation alert

The DAO section of our documentation is currently outdated due to a security incident. For a detailed explanation of the issue and our response plan, please refer to our post-mortem report on the node hack.

+

Governance

+

Token Addresses

+ +

Mission & Membership

+

The Dappnode DAO will be an inclusive hub in which Dappnode’s community will carry on its mission to keep the web decentralized, uncensored and resilient. Active DAO members will have the opportunity to vote on Dappnode’s future projects and on how to expand its array of hardware and software solutions.

+

To get involved in Governance, DAO aspirants will need to make contributions to the ecosystem and help kick-start the NODE economy. Those who provide liquidity in the sanctioned pools (Uniswap and Sushiswap) or commit NODE to Governance Staking on Ethereum Mainnet or xDai will be granted voting powers proportional to their contributions. This way we can ensure that those with a voice are also those with a stake, and are not merely speculating with the token.

+

Architecture

+

DAppnode has tapped Snapshot technology to build its Governance structure. Snapshot is a novel piece of technology that allows off-chain voting for on-chain actions. It removes the prohibitive gas costs of participating in on-chain governance by taking snapshots of members’ NODE currently being staked. Voting and creating proposals with Snapshot is done with a simple crypto wallet signature, no gas needed.

+

DAO Projects

+

The first Dappnode project post-launch will be the hotly awaited ValidatorDAO. You can read this Medium article to learn more about how ValidatorDAO is poised to revolutionize the relationship between Validators and Nominators!

\ No newline at end of file diff --git a/docs/dao/liquidity-mining/index.html b/docs/dao/liquidity-mining/index.html index aadc6e999..72c047aa7 100644 --- a/docs/dao/liquidity-mining/index.html +++ b/docs/dao/liquidity-mining/index.html @@ -1,17 +1,42 @@ - + - -Liquidity Mining | Dappnode - - - + +Liquidity Mining | Dappnode + + + - -
-

Liquidity Mining

Liquidity Mining (LM) launched on Jul 17 2021, 20:00:00 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:

  • Sushiswap NODE/ETH Pool - 40% - 2,200,000 NODE
  • Uniswap NODE/ETH Pool - 40% - 2,200,000 NODE
  • NODE Governance Staking xDai - 10% - 550,000 NODE
  • NODE Governance Staking Mainnet -10% - 550,000 NODE

A further 5.5% of the token supply has been reserved for future rounds of LM. At the end of the first round the team will re-assess the Liquidity Mining program, potentially deploying new pools and distribution.

Liquidity Provision Pools Contract Addresses

LP Token Addresses (Mainnet)

Liquidity Mining Contracts

Weekly Distribution

Round 1 (26 weeks) weekly NODE rewards distribution percentages based on LM supply are as follows:

% per week0.00%3.80%3.80%3.00%3.00%2.50%2.50%2.50%2.50%2.60%2.80%3.00%3.20%3.40%3.60%3.80%4.00%4.20%4.40%4.60%4.80%5.00%5.20%5.40%5.60%5.80%5.00%
Week01234567891011121314151617181920212223242526
- - + +

Liquidity Mining

+

Liquidity Mining (LM) launched on Jul 17 2021, 20:00:00 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:

+
    +
  • Sushiswap NODE/ETH Pool - 40% - 2,200,000 NODE
  • +
  • Uniswap NODE/ETH Pool - 40% - 2,200,000 NODE
  • +
  • NODE Governance Staking xDai - 10% - 550,000 NODE
  • +
  • NODE Governance Staking Mainnet -10% - 550,000 NODE
  • +
+

A further 5.5% of the token supply has been reserved for future rounds of LM. At the end of the first round the team will re-assess the Liquidity Mining program, potentially deploying new pools and distribution.

+

Liquidity Provision Pools Contract Addresses

+ +

LP Token Addresses (Mainnet)

+ +

Liquidity Mining Contracts

+ +

Weekly Distribution

+

Round 1 (26 weeks) weekly NODE rewards distribution percentages based on LM supply are as follows:

+
% per week0.00%3.80%3.80%3.00%3.00%2.50%2.50%2.50%2.50%2.60%2.80%3.00%3.20%3.40%3.60%3.80%4.00%4.20%4.40%4.60%4.80%5.00%5.20%5.40%5.60%5.80%5.00%
Week01234567891011121314151617181920212223242526
\ No newline at end of file diff --git a/docs/dao/node-basics/index.html b/docs/dao/node-basics/index.html index 9e314f536..081e1b862 100644 --- a/docs/dao/node-basics/index.html +++ b/docs/dao/node-basics/index.html @@ -1,17 +1,46 @@ - + - -The NODE Economy | Dappnode - - - + +The NODE Economy | Dappnode + + + - -
-

The NODE Economy

NODE Basics

Token Address on Mainnet - 0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0

Token Address on xDai - 0xc60e38C6352875c051B481Cbe79Dd0383AdB7817

NODE has a total initial supply of 100,000,000 tokens. These tokens have been distributed in accordance with the following chart:

NODEdrop distribution pie chart

NODEdrop

NODE has been airdropped in a NODEdrop to our community of faithful supporters. Recipients of the NODEdrop include:

  • Dappnode Team Members
  • Dappnode Founders
  • Purchasers of Dappnode hardware
  • Code Contributors
  • Active community members, ranked by our sourcecred algorithm
  • Donors to Dappnode in Gitcoin Grants Rounds (with donations above $1)
  • Eth2 stakers who have self-identified as Dappnode runners by including the word "Dappnode" in their graffiti
  • Eth2 stakers present in the Genesis of Eth2

Check your NODEdrop here.

NODEstream

90% of the entire initial supply of NODE has been allocated to the "NODEstream" which is set to flow for a period of 3 years (36 months - i.e. until July 2024). This is essentially a continous stream of NODE that flows out of the "Reservoir" and into the "Claimable" section of the dashboard. NODEstream distribution can be roughly tracked as follows:

Table for Eth

DateMonthClaimableHeld in Reservoir
Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time)010%90%
Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time)932.5%67.5%
Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)1855%45%
Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)2777.5%22.5%
Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time)36100%0%

Table for xDai

DateMonthClaimableHeld in Reservoir
Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time)00%100%
Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time)925%75%
Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)1850%50%
Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)2775%35%
Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time)36100%0%

The NODEstream works on a time-based linear function, meaning the reservoir will gradually hold a smaller percentage of your NODE and thus more NODE is made instantly available from your staking rewards. At the end of the NODEstream The reservoir will no longer hold any NODE and 100% of your staking rewards will be instantly claimable.

This chart show how the function works in Etherum network.

This chart show how the function works in dao network. In Ethereum 10% was available at the beginning. In xdai is different, initally it was not available any % token.

The NODEstream has been designed to encourage long-term participation in the NODE Economy. As the NODE Economy grows and the Dappnode universe expands, our community is awarded even more NODE to use in DAO governance.

Recipients of the NODEdrop on xDai Network are granted the NODEstream, whereas on Mainnet the NODEdrop does not include the NODEstream automatically. In order to receive and augment the flow of NODE you must provide liquidity in any of the eligible pools. Some part of the rewards earned from NODEstaking are claimable immediately, where as the other part is allocated to the reservoir for NODEstreaming.

- - + +

The NODE Economy

+

NODE Basics

+

Token Address on Mainnet - 0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0

+

Token Address on xDai - 0xc60e38C6352875c051B481Cbe79Dd0383AdB7817

+

NODE has a total initial supply of 100,000,000 tokens. These tokens have been distributed in accordance with the following chart:

+

NODEdrop distribution pie chart

+

NODEdrop

+

NODE has been airdropped in a NODEdrop to our community of faithful supporters. Recipients of the NODEdrop include:

+
    +
  • Dappnode Team Members
  • +
  • Dappnode Founders
  • +
  • Purchasers of Dappnode hardware
  • +
  • Code Contributors
  • +
  • Active community members, ranked by our sourcecred algorithm
  • +
  • Donors to Dappnode in Gitcoin Grants Rounds (with donations above $1)
  • +
  • Eth2 stakers who have self-identified as Dappnode runners by including the word "Dappnode" in their graffiti
  • +
  • Eth2 stakers present in the Genesis of Eth2
  • +
+

Check your NODEdrop here.

+

NODEstream

+

90% of the entire initial supply of NODE has been allocated to the "NODEstream" which is set to flow for a period of 3 years (36 months - i.e. until July 2024). This is essentially a continous stream of NODE that flows out of the "Reservoir" and into the "Claimable" section of the dashboard. NODEstream distribution can be roughly tracked as follows:

+

Table for Eth

+
DateMonthClaimableHeld in Reservoir
Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time)010%90%
Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time)932.5%67.5%
Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)1855%45%
Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)2777.5%22.5%
Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time)36100%0%
+

Table for xDai

+
DateMonthClaimableHeld in Reservoir
Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time)00%100%
Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time)925%75%
Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)1850%50%
Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time)2775%35%
Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time)36100%0%
+

The NODEstream works on a time-based linear function, meaning the reservoir will gradually hold a smaller percentage of your NODE and thus more NODE is made instantly available from your staking rewards. At the end of the NODEstream The reservoir will no longer hold any NODE and 100% of your staking rewards will be instantly claimable.

+

This chart show how the function works in Etherum network.

+

+

This chart show how the function works in dao network. In Ethereum 10% was available at the beginning. In xdai is different, initally it was not available any % token.

+

+

The NODEstream has been designed to encourage long-term participation in the NODE Economy. As the NODE Economy grows and the Dappnode universe expands, our community is awarded even more NODE to use in DAO governance.

+

+

Recipients of the NODEdrop on xDai Network are granted the NODEstream, whereas on Mainnet the NODEdrop does not include the NODEstream automatically. In order to receive and augment the flow of NODE you must provide liquidity in any of the eligible pools. Some part of the rewards earned from NODEstaking are claimable immediately, where as the other part is allocated to the reservoir for NODEstreaming.

\ No newline at end of file diff --git a/docs/dao/node-drop/index.html b/docs/dao/node-drop/index.html index 4c6208ae3..f6b36724f 100644 --- a/docs/dao/node-drop/index.html +++ b/docs/dao/node-drop/index.html @@ -1,17 +1,15 @@ - + - -NODEdrop | Dappnode - - - + +NODEdrop | Dappnode + + + - -
-

NODEdrop

"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

- - + +

NODEdrop

+

"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

\ No newline at end of file diff --git a/docs/dao/node-stream/index.html b/docs/dao/node-stream/index.html index e183a7821..dc098d847 100644 --- a/docs/dao/node-stream/index.html +++ b/docs/dao/node-stream/index.html @@ -1,17 +1,15 @@ - + - -NODEstream | Dappnode - - - + +NODEstream | Dappnode + + + - -
-

NODEstream

"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

- - + +

NODEstream

+

"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

\ No newline at end of file diff --git a/docs/dev/github-actions/index.html b/docs/dev/github-actions/index.html index d453deade..2ae269a83 100644 --- a/docs/dev/github-actions/index.html +++ b/docs/dev/github-actions/index.html @@ -1,17 +1,36 @@ - + - -GitHub Actions for Dappnode Packages | Dappnode - - - + +GitHub Actions for Dappnode Packages | Dappnode + + + - -
-

GitHub Actions for Dappnode Packages

GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases.

1. Auto Check for Upstream Updates (auto_check.yml)

This action checks if there's an available update from the upstream repository. If an update is found, it creates a Pull Request with the new version.

Workflow File:

Filename: auto_check.yml

name: Bump upstream version

on:
schedule:
- cron: "00 */4 * * *"
push:
branches:
- "master"

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npx @dappnode/dappnodesdk github-action bump-upstream
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}
PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}

Features:

  • Scheduled Runs: The action runs every 4 hours (as per the cron setting).
  • Environment Variables: Uses GITHUB_TOKEN for authentication, and PINATA_API_KEY and PINATA_SECRET_API_KEY for interfacing with the IPFS pinning service Pinata.

2. Main Build and Pre-release (main.yml)

This action builds the Dappnode package and creates a pre-release that's ready to be published.

Workflow File:

Filename: main.yml

name: "Main"
on:
pull_request:
push:
branches:
- "main"
- "master"
- "v[0-9]+.[0-9]+.[0-9]+"
paths-ignore:
- "README.md"

jobs:
build-test:
runs-on: ubuntu-latest
name: Build test
if: github.event_name != 'push'
steps:
- uses: actions/checkout@v3
- run: npx @dappnode/dappnodesdk build --skip_save

release:
name: Release
runs-on: ubuntu-latest
if: github.event_name == 'push'
steps:
- uses: actions/checkout@v3
- name: Publish
run: npx @dappnode/dappnodesdk publish patch --dappnode_team_preset
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEVELOPER_ADDRESS: "0xf35960302a07022aba880dffaec2fdd64d5bf1c1"

Features:

  • Branch Filters: The action only triggers on the main, master, and version tags (e.g., v1.0.0).
  • Paths Ignore: Ignores changes solely related to README.md.
  • Conditional Runs: Different steps are executed based on the event that triggered the workflow (e.g., push event or pull request).
- - + +

GitHub Actions for Dappnode Packages

+

GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases.

+

1. Auto Check for Upstream Updates (auto_check.yml)

+

This action checks if there's an available update from the upstream repository. If an update is found, it creates a Pull Request with the new version.

+

Workflow File:

+

Filename: auto_check.yml

+
name: Bump upstream version

on:
schedule:
- cron: "00 */4 * * *"
push:
branches:
- "master"

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npx @dappnode/dappnodesdk github-action bump-upstream
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }}
PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }}
+

Features:

+
    +
  • Scheduled Runs: The action runs every 4 hours (as per the cron setting).
  • +
  • Environment Variables: Uses GITHUB_TOKEN for authentication, and PINATA_API_KEY and PINATA_SECRET_API_KEY for interfacing with the IPFS pinning service Pinata.
  • +
+

2. Main Build and Pre-release (main.yml)

+

This action builds the Dappnode package and creates a pre-release that's ready to be published.

+

Workflow File:

+

Filename: main.yml

+
name: "Main"
on:
pull_request:
push:
branches:
- "main"
- "master"
- "v[0-9]+.[0-9]+.[0-9]+"
paths-ignore:
- "README.md"

jobs:
build-test:
runs-on: ubuntu-latest
name: Build test
if: github.event_name != 'push'
steps:
- uses: actions/checkout@v3
- run: npx @dappnode/dappnodesdk build --skip_save

release:
name: Release
runs-on: ubuntu-latest
if: github.event_name == 'push'
steps:
- uses: actions/checkout@v3
- name: Publish
run: npx @dappnode/dappnodesdk publish patch --dappnode_team_preset
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEVELOPER_ADDRESS: "0xf35960302a07022aba880dffaec2fdd64d5bf1c1"
+

Features:

+
    +
  • Branch Filters: The action only triggers on the main, master, and version tags (e.g., v1.0.0).
  • +
  • Paths Ignore: Ignores changes solely related to README.md.
  • +
  • Conditional Runs: Different steps are executed based on the event that triggered the workflow (e.g., push event or pull request).
  • +
\ No newline at end of file diff --git a/docs/dev/index.html b/docs/dev/index.html index 95fec7816..d269478a3 100644 --- a/docs/dev/index.html +++ b/docs/dev/index.html @@ -1,17 +1,24 @@ - + - -Welcome to the Developer Documentation! | Dappnode - - - + +Welcome to the Developer Documentation! | Dappnode + + + - -
-

Welcome to the Developer Documentation!

Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.

caution

This documentation is for experienced people in the dappnode ecosystem or developers who want to contribute to dappnode by creating new packages. If you're new to dappnode, we recommend starting with the User Documentation.

Contributing

We welcome contributions from the community! If you'd like to contribute to Dappnode, please review our [Contributing Guidelines] to understand how you can get involved.

Feedback and Support

We're here to help! If you encounter any issues, have questions, or want to provide feedback, feel free to:

- - + +

Welcome to the Developer Documentation!

+

Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.

+
caution

This documentation is for experienced people in the dappnode ecosystem or developers who want to contribute to dappnode by creating new packages. If you're new to dappnode, we recommend starting with the User Documentation.

+

Contributing

+

We welcome contributions from the community! If you'd like to contribute to Dappnode, please review our [Contributing Guidelines] to understand how you can get involved.

+

Feedback and Support

+

We're here to help! If you encounter any issues, have questions, or want to provide feedback, feel free to:

+
\ No newline at end of file diff --git a/docs/dev/references/docker-compose/index.html b/docs/dev/references/docker-compose/index.html index ec6f02517..97d26cecf 100644 --- a/docs/dev/references/docker-compose/index.html +++ b/docs/dev/references/docker-compose/index.html @@ -1,17 +1,55 @@ - + - -Docker compose file | Dappnode - - - + +Docker compose file | Dappnode + + + - -
-

Docker compose file

Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.

Basic Example

A simple docker-compose.yml file looks like this:

version: "3.5"
services:
test.public.dappnode.eth:
build: .
image: "test.public.dappnode.eth:0.1.0"
restart: unless-stopped

This example illustrates the basic elements, which include the version of the docker-compose file, services, and the service's basic attributes.

Complex Example

A more intricate docker-compose.yml file could look like this:

version: "3.5"
services:
beacon-chain:
build:
context: beacon-chain
args:
UPSTREAM_VERSION: v4.0.7
volumes:
- "beacon-chain-data:/data"
ports:
- "12603:12603/tcp"
- "12603:12603/udp"
restart: unless-stopped
environment:
P2P_PORT: 12603
CHECKPOINT_SYNC_URL: "https://checkpoints.mainnet.lukso.network"
EXTRA_OPTS: ""
LOG_VERBOSITY: info
MIN_SYNC_PEERS: "0"
MAX_PEERS: "250"
SUBSCRIBE_ALL_SUBNETS: "true"
validator:
build:
context: validator
args:
UPSTREAM_VERSION: v4.0.7
volumes:
- "validator-data:/data"
restart: unless-stopped
environment:
LOG_VERBOSITY: info
GRAFFITI: validating_from_DAppNode
ENABLE_DOPPELGANGER: "true"
EXTRA_OPTS: ""
volumes:
beacon-chain-data: {}
validator-data: {}

In the complex example, you'll find:

  • Multiple services (like beacon-chain and validator).
  • Build arguments, such as the relevant UPSTREAM_VERSION.
  • Defined volumes, ports, and environment variables.

Notable Features

Environment Variables

  • All environment variables (envs) defined in the docker-compose.yml file will be visible in the package config post-installation. Users can modify these.
  • If the package has a setup-wizard, those environment variables not set within it will be hidden by default in the configuration. Users can view these by selecting "Show advanced config".

The UPSTREAM_VERSION Argument

  • The UPSTREAM_VERSION argument is mandatory if you wish to leverage GitHub actions that automatically create PRs when there's a new release in the upstream repository.

  • In the Dockerfile, UPSTREAM_VERSION is usually declared and used like this:

    ARG UPSTREAM_VERSION
    FROM consensys/teku:$UPSTREAM_VERSION
note

The upstreamVersion and upstreamRepo fields need to be defined in the dappnode_package.json file for the GitHub actions to work. Here is an example:

{
...
"upstreamVersion": "23.8.0",
"upstreamRepo": "ConsenSys/teku",
...
}

The EXTRA_OPTS Environment Variable

  • EXTRA_OPTS is an environment variable that allows users to add any flags that might not have been included by default.

  • Here's a typical use case for EXTRA_OPTS in the entrypoint script:

    exec /opt/teku/bin/teku \
    --network=prater \
    ...(omitting other flags) \
    --log-destination=CONSOLE \
    $EXTRA_OPTS
- - + +

Docker compose file

+

Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.

+

Basic Example

+

A simple docker-compose.yml file looks like this:

+
version: "3.5"
services:
test.public.dappnode.eth:
build: .
image: "test.public.dappnode.eth:0.1.0"
restart: unless-stopped
+

This example illustrates the basic elements, which include the version of the docker-compose file, services, and the service's basic attributes.

+

Complex Example

+

A more intricate docker-compose.yml file could look like this:

+
version: "3.5"
services:
beacon-chain:
build:
context: beacon-chain
args:
UPSTREAM_VERSION: v4.0.7
volumes:
- "beacon-chain-data:/data"
ports:
- "12603:12603/tcp"
- "12603:12603/udp"
restart: unless-stopped
environment:
P2P_PORT: 12603
CHECKPOINT_SYNC_URL: "https://checkpoints.mainnet.lukso.network"
EXTRA_OPTS: ""
LOG_VERBOSITY: info
MIN_SYNC_PEERS: "0"
MAX_PEERS: "250"
SUBSCRIBE_ALL_SUBNETS: "true"
validator:
build:
context: validator
args:
UPSTREAM_VERSION: v4.0.7
volumes:
- "validator-data:/data"
restart: unless-stopped
environment:
LOG_VERBOSITY: info
GRAFFITI: validating_from_DAppNode
ENABLE_DOPPELGANGER: "true"
EXTRA_OPTS: ""
volumes:
beacon-chain-data: {}
validator-data: {}
+

In the complex example, you'll find:

+
    +
  • Multiple services (like beacon-chain and validator).
  • +
  • Build arguments, such as the relevant UPSTREAM_VERSION.
  • +
  • Defined volumes, ports, and environment variables.
  • +
+

Notable Features

+

Environment Variables

+
    +
  • All environment variables (envs) defined in the docker-compose.yml file will be visible in the package config post-installation. Users can modify these.
  • +
  • If the package has a setup-wizard, those environment variables not set within it will be hidden by default in the configuration. Users can view these by selecting "Show advanced config".
  • +
+

The UPSTREAM_VERSION Argument

+
    +
  • +

    The UPSTREAM_VERSION argument is mandatory if you wish to leverage GitHub actions that automatically create PRs when there's a new release in the upstream repository.

    +
  • +
  • +

    In the Dockerfile, UPSTREAM_VERSION is usually declared and used like this:

    +
    ARG UPSTREAM_VERSION
    FROM consensys/teku:$UPSTREAM_VERSION
    +
  • +
+
note

The upstreamVersion and upstreamRepo fields need to be defined in the dappnode_package.json file for the GitHub actions to work. Here is an example:

{
...
"upstreamVersion": "23.8.0",
"upstreamRepo": "ConsenSys/teku",
...
}
+

The EXTRA_OPTS Environment Variable

+
    +
  • +

    EXTRA_OPTS is an environment variable that allows users to add any flags that might not have been included by default.

    +
  • +
  • +

    Here's a typical use case for EXTRA_OPTS in the entrypoint script:

    +
    exec /opt/teku/bin/teku \
    --network=prater \
    ...(omitting other flags) \
    --log-destination=CONSOLE \
    $EXTRA_OPTS
    +
  • +
\ No newline at end of file diff --git a/docs/dev/references/manifest/index.html b/docs/dev/references/manifest/index.html index fafecc503..571f2760f 100644 --- a/docs/dev/references/manifest/index.html +++ b/docs/dev/references/manifest/index.html @@ -1,43 +1,551 @@ - + - -Dappnode Package (DNP) manifest | Dappnode - - - + +Dappnode Package (DNP) manifest | Dappnode + + + - -
-

Dappnode Package (DNP) manifest

The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:

  • IPFS of BZZ hashes to download its docker image
  • Docker related data to configure and run its container
  • Metadata to control how the package is shown in the admin UI.

Example

{
"name": "ipfs.dnp.dappnode.eth",
"version": "0.2.0",
"upstreamVersion": "2.6.0-beta",
"shortDescription": "Distributed file system for storing and accessing data.",
"description": "Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you’re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \n\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API.",
"type": "service",
"chain": "ethereum",
"mainService": "webserver",
"dockerTimeout": "5min",
"dependencies": {
"bitcoin.dnp.dappnode.eth": "^0.1.2",
"swarm.dnp.dappnode.eth": "latest"
},
"requirements": {
"minimumDappnodeVersion": "0.2.0"
},
"globalEnvs": {
"all": "true"
},
"architectures": ["linux/amd64", "linux/arm64"],
"backup": [
{
"name": "keystore",
"path": "/root/.raiden/secret/keystore",
"service": "validator"
}
],
"changelog": "Brief summary of the most relevant changes that the user must known before installing",
"warnings": {
"onInstall": "You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly.",
"onUpdate": "Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site.",
"onReset": "You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds.",
"onRemove": "You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."
},
"updateAlerts": [
{
"from": "0.1.x",
"to": "0.1.x",
"message": "Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"
}
],
"disclaimer": {
"message": "This software is experimental, presented “as is” and inherently carries risks."
},
"style": {
"featuredBackground": "linear-gradient(to right, #323131, #395353)",
"featuredColor": "white",
"featuredAvatarFilter": "invert(1)"
},
"exposable": [
{
"name": "Geth JSON RPC",
"description": "JSON RPC endpoint for Geth mainnet",
"serviceName": "beacon_chain",
"port": 80
}
],
"author": "Dappnode Association <admin@dappnode.io> (https://github.com/dappnode)",
"contributors": [
"Michael First <developerHanlder@project.io> (https://github.com/developerHanlder)",
"Michael Second <developerHanlder@project.io> (https://github.com/developerHanlder)"
],
"categories": ["Developer tools", "Blockchain"],
"keywords": ["DappnodeCore"],
"links": {
"homepage": "https://github.com/dappnode/DNP_IPFS#readme",
"ui": "http://ipfs.dappnode:5001/webui",
"api": "http://ipfs.dappnode:5001/api/v0",
"gateway": "http://ipfs.dappnode:8080/ipfs"
},
"repository": {
"type": "git",
"url": "https://github.com/dappnode/DNP_IPFS.git",
"directory": "packages/react-dom"
},
"bugs": {
"url": "https://github.com/dappnode/DNP_IPFS/issues"
},
"license": "GPL-3.0"
}

Properties reference

PropertyTypeRequired
namestringRequired
versionstringRequired
upstreamVersionstringOptional
shortDescriptionstringOptional
descriptionstringRequired
typeenumRequired
chainenumOptional
mainServicestringOptional
dockerTimeoutstringOptional
dependenciesobjectOptional
requirementsobjectOptional
globalEnvsobjectOptional
architecturesenum[]Optional
backupobject[]Optional
changelogstringOptional
warningsobjectOptional
updateAlertsobject[]Optional
disclaimerobjectOptional
styleobjectOptional
exposableobject[]Optional
authorstringOptional
contributorsstring[]Optional
categoriesenum[]Optional
keywordsstring[]Optional
linksobjectOptional
repositoryobjectOptional
bugsobjectOptional
licensestringRequired

name

Dappnode Package ENS name.

  • is required
  • type: string

Example:

"ipfs.dnp.dappnode.eth"

version

Dappnode Package semantic version (semver).

  • is required
  • type: string

All instances must conform to this regular expression

^((([0-9]+).([0-9]+).([0-9]+)))$

Example:

"0.2.0"

upstreamVersion

For Dappnode Packages that only wrap existing software (i.e. Bitcoin node, Ethereum node), the underlying software -version can be specified here. It will be shown in the admin UI alongside the field version.

  • is optional
  • type: string

Examples:

"2.6.0-beta"
"any-text"

shortDescription

Short Dappnode Package description, 6-8 words sentence briefly describing the purpose of this Dappnode Package. The + +

Dappnode Package (DNP) manifest

+

The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:

+
    +
  • IPFS of BZZ hashes to download its docker image
  • +
  • Docker related data to configure and run its container
  • +
  • Metadata to control how the package is shown in the admin UI.
  • +
+

Example

+
{
"name": "ipfs.dnp.dappnode.eth",
"version": "0.2.0",
"upstreamVersion": "2.6.0-beta",
"shortDescription": "Distributed file system for storing and accessing data.",
"description": "Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you’re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \n\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API.",
"type": "service",
"chain": "ethereum",
"mainService": "webserver",
"dockerTimeout": "5min",
"dependencies": {
"bitcoin.dnp.dappnode.eth": "^0.1.2",
"swarm.dnp.dappnode.eth": "latest"
},
"requirements": {
"minimumDappnodeVersion": "0.2.0"
},
"globalEnvs": {
"all": "true"
},
"architectures": ["linux/amd64", "linux/arm64"],
"backup": [
{
"name": "keystore",
"path": "/root/.raiden/secret/keystore",
"service": "validator"
}
],
"changelog": "Brief summary of the most relevant changes that the user must known before installing",
"warnings": {
"onInstall": "You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly.",
"onUpdate": "Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site.",
"onReset": "You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds.",
"onRemove": "You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."
},
"updateAlerts": [
{
"from": "0.1.x",
"to": "0.1.x",
"message": "Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"
}
],
"disclaimer": {
"message": "This software is experimental, presented “as is” and inherently carries risks."
},
"style": {
"featuredBackground": "linear-gradient(to right, #323131, #395353)",
"featuredColor": "white",
"featuredAvatarFilter": "invert(1)"
},
"exposable": [
{
"name": "Geth JSON RPC",
"description": "JSON RPC endpoint for Geth mainnet",
"serviceName": "beacon_chain",
"port": 80
}
],
"author": "Dappnode Association <admin@dappnode.io> (https://github.com/dappnode)",
"contributors": [
"Michael First <developerHanlder@project.io> (https://github.com/developerHanlder)",
"Michael Second <developerHanlder@project.io> (https://github.com/developerHanlder)"
],
"categories": ["Developer tools", "Blockchain"],
"keywords": ["DappnodeCore"],
"links": {
"homepage": "https://github.com/dappnode/DNP_IPFS#readme",
"ui": "http://ipfs.dappnode:5001/webui",
"api": "http://ipfs.dappnode:5001/api/v0",
"gateway": "http://ipfs.dappnode:8080/ipfs"
},
"repository": {
"type": "git",
"url": "https://github.com/dappnode/DNP_IPFS.git",
"directory": "packages/react-dom"
},
"bugs": {
"url": "https://github.com/dappnode/DNP_IPFS/issues"
},
"license": "GPL-3.0"
}
+

Properties reference

+
PropertyTypeRequired
namestringRequired
versionstringRequired
upstreamVersionstringOptional
shortDescriptionstringOptional
descriptionstringRequired
typeenumRequired
chainenumOptional
mainServicestringOptional
dockerTimeoutstringOptional
dependenciesobjectOptional
requirementsobjectOptional
globalEnvsobjectOptional
architecturesenum[]Optional
backupobject[]Optional
changelogstringOptional
warningsobjectOptional
updateAlertsobject[]Optional
disclaimerobjectOptional
styleobjectOptional
exposableobject[]Optional
authorstringOptional
contributorsstring[]Optional
categoriesenum[]Optional
keywordsstring[]Optional
linksobjectOptional
repositoryobjectOptional
bugsobjectOptional
licensestringRequired
+

name

+

Dappnode Package ENS name.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
"ipfs.dnp.dappnode.eth"
+

version

+

Dappnode Package semantic version (semver).

+
    +
  • is required
  • +
  • type: string
  • +
+

All instances must conform to this regular expression

+
^((([0-9]+).([0-9]+).([0-9]+)))$
+ +

Example:

+
"0.2.0"
+

upstreamVersion

+

For Dappnode Packages that only wrap existing software (i.e. Bitcoin node, Ethereum node), the underlying software +version can be specified here. It will be shown in the admin UI alongside the field version.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
"2.6.0-beta"
+
"any-text"
+

shortDescription

+

Short Dappnode Package description, 6-8 words sentence briefly describing the purpose of this Dappnode Package. The purpose is to quickly grab users' attention and clearly define its purpose. Markdown is discouraged as it will NOT be -rendered on the Dappnode Package store view.

  • is optional
  • type: string

Example:

"Distributed file system for storing and accessing data."

description

Dappnode Package description. Markdown and links are allowed and ecouraged to give users the option to read more -information about this Dappnode Package.

  • is required
  • type: string

Example:

"Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you’re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \n\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API."

type

Type of this Dappnode Package. It is used to trigger some special features such as core functionality.

  • is required
  • default: "service"
  • type: string

The value of this property must be equal to one of the known values below.

ValueDescription
serviceCan have ENVs a depend on library Dappnode Packages
libraryShould not have ENVs and cannot depend on service Dappnode Packages
dncoreDappnode Packages that are part of the Dappnode core and have special permissions

Examples:

"service"
"dncore"

chain

Indicate that this Dappnode Package is a blockchain node so the admin UI shows its syncing status

  • is optional
  • type: string

The value of this property must be equal to one of the known values below.

ValueDescription
ethereumMust have an Ethereum JSON RPC exposed internally at port 8545
bitcoinMust have a standard Bitcoin JSON API exposed at the default port (8332). Uses the NPM package bitcoin-core
moneroMust have a Monero API exposed internally at port 18081. Uses the NPM package monero-rpc

Examples:

"ethereum"
"bitcoin"
"monero"

mainService

For multi-service packages, indicate which service is the main one. The root ENS domain of this package will be mapped -to this service IP.

  • is optional
  • type: string

Examples:

"webserver"
"backend"
"service1"

dockerTimeout

Modify the default Docker timeout of 10 seconds. It affects package updates, removals, container restarts, start and +rendered on the Dappnode Package store view.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"Distributed file system for storing and accessing data."
+

description

+

Dappnode Package description. Markdown and links are allowed and ecouraged to give users the option to read more +information about this Dappnode Package.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
"Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you’re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \n\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API."
+

type

+

Type of this Dappnode Package. It is used to trigger some special features such as core functionality.

+
    +
  • is required
  • +
  • default: "service"
  • +
  • type: string
  • +
+

The value of this property must be equal to one of the known values below.

+
ValueDescription
serviceCan have ENVs a depend on library Dappnode Packages
libraryShould not have ENVs and cannot depend on service Dappnode Packages
dncoreDappnode Packages that are part of the Dappnode core and have special permissions
+

Examples:

+
"service"
+
"dncore"
+

chain

+

Indicate that this Dappnode Package is a blockchain node so the admin UI shows its syncing status

+
    +
  • is optional
  • +
  • type: string
  • +
+

The value of this property must be equal to one of the known values below.

+
ValueDescription
ethereumMust have an Ethereum JSON RPC exposed internally at port 8545
bitcoinMust have a standard Bitcoin JSON API exposed at the default port (8332). Uses the NPM package bitcoin-core
moneroMust have a Monero API exposed internally at port 18081. Uses the NPM package monero-rpc
+

Examples:

+
"ethereum"
+
"bitcoin"
+
"monero"
+

mainService

+

For multi-service packages, indicate which service is the main one. The root ENS domain of this package will be mapped +to this service IP.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
"webserver"
+
"backend"
+
"service1"
+

dockerTimeout

+

Modify the default Docker timeout of 10 seconds. It affects package updates, removals, container restarts, start and stop, updating config environments and port mappings. You can either pass a numerical value in seconds or a string -representation parsed with timestring. Available from DAPPMANAGER v0.2.36

  • is optional
  • type: string

Examples:

"5min"
"60"

dependencies

Dappnode Package dependencies. Must be an object where the keys are the Dappnode Package's ENS. The values must be a +representation parsed with timestring. Available from DAPPMANAGER v0.2.36

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
"5min"
+
"60"
+

dependencies

+

Dappnode Package dependencies. Must be an object where the keys are the Dappnode Package's ENS. The values must be a semantic range, i.e. '0.2.0', '^0.2.1', '*', 'latest', -'/ipfs/QmWwMb3XhuCH6JnCF6m6EQzA4mW9pHHtg7rqAfhDr2ofi8'.

  • is optional
  • type: object with the following properties:
PropertyTypeRequired

Examples:

{
"bitcoin.dnp.dappnode.eth": "^0.1.2",
"swarm.dnp.dappnode.eth": "latest"
}
{
"only-for-dev-1.dappnode.eth": "/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o",
"only-for-dev-2.dappnode.eth": "/ipfs/zdj7WWeQ43G6JJvLWQWZpyHuAMq6uYWRjkBXFad11vE2LHhQ7"
}

requirements

Specify requirements to be met before allowing users to install this Dappnode Package.

  • is optional
  • type: object with the following properties:
PropertyTypeRequired
minimumDappnodeVersionstringOptional

minimumDappnodeVersion

Minimum Dappnode version that includes all the features necessary to run this Dappnode Package.

  • is optional
  • type: string

All instances must conform to this regular expression

^((([0-9]+).([0-9]+).([0-9]+)))$

Example:

"0.2.0"

globalEnvs

Request the DAPPMANAGER to inject global ENVs to this package's containers

  • is optional
  • type: object with the following properties:
PropertyTypeRequired
allbooleanOptional

all

Request the DAPPMANAGER to inject all available global ENVs

  • is optional
  • type: boolean

Example:

"true"

architectures

Build and distribute this package in multiple architectures using -Docker's buildx plugin

  • is optional
  • type: Array type: enum[]

All items must be of the type: string

The value of this property must be equal to one of the known values below.

ValueDescription
linux/amd64Default architecture, x86-64
linux/arm64ARM architecture

Example:

["linux/amd64", "linux/arm64"]

backup

Allows users to download and restore a backup of key files of this package. If this property is non-empty array, a new +'/ipfs/QmWwMb3XhuCH6JnCF6m6EQzA4mW9pHHtg7rqAfhDr2ofi8'.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
+

Examples:

+
{
"bitcoin.dnp.dappnode.eth": "^0.1.2",
"swarm.dnp.dappnode.eth": "latest"
}
+
{
"only-for-dev-1.dappnode.eth": "/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o",
"only-for-dev-2.dappnode.eth": "/ipfs/zdj7WWeQ43G6JJvLWQWZpyHuAMq6uYWRjkBXFad11vE2LHhQ7"
}
+

requirements

+

Specify requirements to be met before allowing users to install this Dappnode Package.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
minimumDappnodeVersionstringOptional
+

minimumDappnodeVersion

+

Minimum Dappnode version that includes all the features necessary to run this Dappnode Package.

+
    +
  • is optional
  • +
  • type: string
  • +
+

All instances must conform to this regular expression

+
^((([0-9]+).([0-9]+).([0-9]+)))$
+ +

Example:

+
"0.2.0"
+

globalEnvs

+

Request the DAPPMANAGER to inject global ENVs to this package's containers

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
allbooleanOptional
+

all

+

Request the DAPPMANAGER to inject all available global ENVs

+
    +
  • is optional
  • +
  • type: boolean
  • +
+

Example:

+
"true"
+

architectures

+

Build and distribute this package in multiple architectures using +Docker's buildx plugin

+
    +
  • is optional
  • +
  • type: Array type: enum[]
  • +
+

All items must be of the type: string

+

The value of this property must be equal to one of the known values below.

+
ValueDescription
linux/amd64Default architecture, x86-64
linux/arm64ARM architecture
+

Example:

+
["linux/amd64", "linux/arm64"]
+

backup

+

Allows users to download and restore a backup of key files of this package. If this property is non-empty array, a new view will be available in the admin UI for this Dappnode Package. The files or directories specified in the array will be bundled in a tarball. As long as the name properties stay the same, their associated paths can change in future versions. Then, when restoring an old backup, the new paths will be associated to files stored under the same name -keys. Note: it is recommended to only backup lightweight files such as configs, keys or passwords.

  • is optional
  • type: Array type: object[]

All items must be of the type: object with the following properties:

PropertyTypeRequired
namestringRequired
pathstringRequired
servicestringOptional

name

A key identifier of this file or directory. Its purpose is to allow the path to change in the future.

  • is required
  • type: string
  • minimum length: 1 characters

Examples:

"keystore"
"config"
"keys"

path

Path to the file or directory to backup. It MUST be an absolute path (do not use the ~ character) for the backup -tool to work correctly.

  • is required
  • type: string
  • minimum length: 1 characters

Examples:

"/root/.raiden/secret/keystore"
"/usr/src/app/config.json"

service

Service to which the path belongs to. Must be equal to the name used in the docker-compose services object

  • is optional
  • type: string
  • minimum length: 1 characters

Examples:

"validator"
"service1"

changelog

Description of relevant changes of this specific version. Supports markdown and links.

  • is optional
  • type: string

Example:

"Brief summary of the most relevant changes that the user must known before installing"

warnings

Very relevant information that MUST be shown to the user BEFORE executing a specific action in the Dappnode Package's -lifecycle.

  • is optional
  • type: object with the following properties:
PropertyTypeRequired
onInstallstringOptional
onUpdatestringOptional
onResetstringOptional
onRemovestringOptional

onInstall

Will be shown before installing the Dappnode Package.

  • is optional
  • type: string

Example:

"You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly."

onUpdate

Will be shown before updating the Dappnode Package, not in the first installation.

  • is optional
  • type: string

Example:

"Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site."

onReset

Will be shown before resetting the Dappnode Package.

  • is optional
  • type: string

Example:

"You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds."

onRemove

Will be shown before removing the Dappnode Package.

  • is optional
  • type: string

Example:

"You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."

updateAlerts

Alerts targeted to a specific update jump.

  • is optional
  • type: Array type: object[]

All items must be of the type: object with the following properties:

PropertyTypeRequiredDefault
fromstringRequired
tostringOptional"*"
messagestringRequired

from

Semver range, show this message when a user updates this Dappnode Package FROM a version that satisfies this range.

  • is required
  • type: string
  • minimum length: 1 characters

Examples:

"0.1.x"
"^0.2.0"

to

Semver range, show this message when a user updates this Dappnode Package TO a version that satisfies this range.

  • is optional
  • default: "*"
  • type: string
  • minimum length: 1 characters

Examples:

"0.1.x"
"^0.2.0"
"*"

message

Alert message to be shown when from and to ranges are satisfied.

  • is required
  • type: string
  • minimum length: 1 characters

Example:

"Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"

Specific update jump alert.

disclaimer

Disclaimer to be shown to the user on install, and will require the user to approve it.

  • is optional
  • type: object with the following properties:
PropertyTypeRequired
messagestringRequired

message

The message shown in the pop-up. Markdown and links are allowed.

  • is required
  • type: string

Example:

"This software is experimental, presented “as is” and inherently carries risks."

style

Graphic information to control the appearance of Dappnode Package related items in the admin UI.

  • is optional
  • type: object with the following properties:
PropertyTypeRequired
featuredBackgroundstringOptional
featuredColorstringOptional
featuredAvatarFilterstringOptional

featuredBackground

CSS background property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the -Mozilla CSS background reference for valid values.

  • is optional
  • type: string

Examples:

"linear-gradient(to right, #323131, #395353)"
"black"

featuredColor

CSS color property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the -Mozilla CSS color reference for valid values.

  • is optional
  • type: string

Examples:

"white"
"#fff"

featuredAvatarFilter

CSS filter property to be applied to <img> component (avatar) of the Dappnode Package card in the Dappnode Package +keys. Note: it is recommended to only backup lightweight files such as configs, keys or passwords.

+
    +
  • is optional
  • +
  • type: Array type: object[]
  • +
+

All items must be of the type: object with the following properties:

+
PropertyTypeRequired
namestringRequired
pathstringRequired
servicestringOptional
+

name

+

A key identifier of this file or directory. Its purpose is to allow the path to change in the future.

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Examples:

+
"keystore"
+
"config"
+
"keys"
+

path

+

Path to the file or directory to backup. It MUST be an absolute path (do not use the ~ character) for the backup +tool to work correctly.

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Examples:

+
"/root/.raiden/secret/keystore"
+
"/usr/src/app/config.json"
+

service

+

Service to which the path belongs to. Must be equal to the name used in the docker-compose services object

+
    +
  • is optional
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Examples:

+
"validator"
+
"service1"
+

changelog

+

Description of relevant changes of this specific version. Supports markdown and links.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"Brief summary of the most relevant changes that the user must known before installing"
+

warnings

+

Very relevant information that MUST be shown to the user BEFORE executing a specific action in the Dappnode Package's +lifecycle.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
onInstallstringOptional
onUpdatestringOptional
onResetstringOptional
onRemovestringOptional
+

onInstall

+

Will be shown before installing the Dappnode Package.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly."
+

onUpdate

+

Will be shown before updating the Dappnode Package, not in the first installation.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site."
+

onReset

+

Will be shown before resetting the Dappnode Package.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds."
+

onRemove

+

Will be shown before removing the Dappnode Package.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds."
+

updateAlerts

+

Alerts targeted to a specific update jump.

+
    +
  • is optional
  • +
  • type: Array type: object[]
  • +
+

All items must be of the type: object with the following properties:

+
PropertyTypeRequiredDefault
fromstringRequired
tostringOptional"*"
messagestringRequired
+

from

+

Semver range, show this message when a user updates this Dappnode Package FROM a version that satisfies this range.

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Examples:

+
"0.1.x"
+
"^0.2.0"
+

to

+

Semver range, show this message when a user updates this Dappnode Package TO a version that satisfies this range.

+
    +
  • is optional
  • +
  • default: "*"
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Examples:

+
"0.1.x"
+
"^0.2.0"
+
"*"
+

message

+

Alert message to be shown when from and to ranges are satisfied.

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io"
+

Specific update jump alert.

+

disclaimer

+

Disclaimer to be shown to the user on install, and will require the user to approve it.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
messagestringRequired
+

message

+

The message shown in the pop-up. Markdown and links are allowed.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
"This software is experimental, presented “as is” and inherently carries risks."
+

style

+

Graphic information to control the appearance of Dappnode Package related items in the admin UI.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
featuredBackgroundstringOptional
featuredColorstringOptional
featuredAvatarFilterstringOptional
+

featuredBackground

+

CSS background property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the +Mozilla CSS background reference for valid values.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
"linear-gradient(to right, #323131, #395353)"
+
"black"
+

featuredColor

+

CSS color property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the +Mozilla CSS color reference for valid values.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
"white"
+
"#fff"
+

featuredAvatarFilter

+

CSS filter property to be applied to <img> component (avatar) of the Dappnode Package card in the Dappnode Package store if featured. Go to the Mozilla CSS filter reference for -valid values.

  • is optional
  • type: string

Examples:

"invert(1)"
"grayscale(80%);"

exposable

Exposable services safe to be in the public internet

  • is optional
  • type: Array type: object[]

All items must be of the type: object with the following properties:

PropertyTypeRequired
namestringRequired
descriptionstringOptional
serviceNamestringOptional
portnumberRequired
fromSubdomainstringOptional

name

Short human readable name of this exposable service

  • is required
  • type: string
  • minimum length: 1 characters

Example:

"Geth JSON RPC"

description

Description of this exposable service

  • is optional
  • type: string

Example:

"JSON RPC endpoint for Geth mainnet"

serviceName

Docker compose service this exposable service belongs to. Defaults to the first service.

  • is optional
  • type: string
  • minimum length: 1 characters

Example:

"beacon_chain"

port

Port this exposable service listens to

  • is required
  • type: number

Examples:

80
5001
8545

Single exposable service item

author

Main author of this Dappnode Package. Must follow the structure ${name} <${email}> (${githubUserLink}).

  • is optional
  • type: string
  • minimum length: 1 characters

Example:

"Dappnode Association <admin@dappnode.io> (https://github.com/dappnode)"

contributors

Contributing authors of this Dappnode Package.

  • is optional
  • type: Array type: string[]

All items must be of the type: string

  • minimum length: 1 characters

Contributor author. Must follow the structure ${name} <${email}> (${githubUserLink}).

Example:

[
"Michael First <developerHanlder@project.io> (https://github.com/developerHanlder)",
"Michael Second <developerHanlder@project.io> (https://github.com/developerHanlder)"
]

categories

Categories to organize and group Dappnode Packages in the Dappnode Package store. Only one or two categories maximum +valid values.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
"invert(1)"
+
"grayscale(80%);"
+

exposable

+

Exposable services safe to be in the public internet

+
    +
  • is optional
  • +
  • type: Array type: object[]
  • +
+

All items must be of the type: object with the following properties:

+
PropertyTypeRequired
namestringRequired
descriptionstringOptional
serviceNamestringOptional
portnumberRequired
fromSubdomainstringOptional
+

name

+

Short human readable name of this exposable service

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"Geth JSON RPC"
+

description

+

Description of this exposable service

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"JSON RPC endpoint for Geth mainnet"
+

serviceName

+

Docker compose service this exposable service belongs to. Defaults to the first service.

+
    +
  • is optional
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"beacon_chain"
+

port

+

Port this exposable service listens to

+
    +
  • is required
  • +
  • type: number
  • +
+

Examples:

+
80
+
5001
+
8545
+

Single exposable service item

+

author

+

Main author of this Dappnode Package. Must follow the structure ${name} <${email}> (${githubUserLink}).

+
    +
  • is optional
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"Dappnode Association <admin@dappnode.io> (https://github.com/dappnode)"
+

contributors

+

Contributing authors of this Dappnode Package.

+
    +
  • is optional
  • +
  • type: Array type: string[]
  • +
+

All items must be of the type: string

+
    +
  • minimum length: 1 characters
  • +
+

Contributor author. Must follow the structure ${name} <${email}> (${githubUserLink}).

+

Example:

+
[
"Michael First <developerHanlder@project.io> (https://github.com/developerHanlder)",
"Michael Second <developerHanlder@project.io> (https://github.com/developerHanlder)"
]
+

categories

+

Categories to organize and group Dappnode Packages in the Dappnode Package store. Only one or two categories maximum should be specified per package. If you feel that any of the current categories represent the nature of your package, -please open an issue requesting a new category https://github.com/dappnode/dnp-manifest/issues/new

  • is optional
  • type: Array type: enum[]

All items must be of the type: string

The value of this property must be equal to one of the known values below.

ValueDescription
BlockchainBlockchain nodes, i.e. Bitcoin, Monero
CommunicationsDecentralized networking or chat solutions, i.e. Swarm
Developer toolsPackages that their main purpose is to aid in developing, i.e. testnets
ETH2.0Packages to participate or use the Eth2.0 network
Economic incentivePackages that offer an economic incentive or reward to the admin that runs it, i.e. Lightning Network
MonitoringPackages that track metrics
Payment channelsPackages whose main purpose is to manage or control payment channels, i.e. Raiden
StorageDecentralized storage solutions, i.e. Swarm

Example:

["Developer tools", "Blockchain"]

keywords

Keywords, relevant and descriptive of this Dappnode Package. They will be shown in the admin UI Dappnode Package store.

  • is optional
  • type: Array type: string[]

All items must be of the type: string

  • minimum length: 1 characters

Single keyword.

Various links (URLs) useful for the user of this package. All links will be shown in the dedicated view of this package +please open an issue requesting a new category https://github.com/dappnode/dnp-manifest/issues/new

+
    +
  • is optional
  • +
  • type: Array type: enum[]
  • +
+

All items must be of the type: string

+

The value of this property must be equal to one of the known values below.

+
ValueDescription
BlockchainBlockchain nodes, i.e. Bitcoin, Monero
CommunicationsDecentralized networking or chat solutions, i.e. Swarm
Developer toolsPackages that their main purpose is to aid in developing, i.e. testnets
ETH2.0Packages to participate or use the Eth2.0 network
Economic incentivePackages that offer an economic incentive or reward to the admin that runs it, i.e. Lightning Network
MonitoringPackages that track metrics
Payment channelsPackages whose main purpose is to manage or control payment channels, i.e. Raiden
StorageDecentralized storage solutions, i.e. Swarm
+

Example:

+
["Developer tools", "Blockchain"]
+

keywords

+

Keywords, relevant and descriptive of this Dappnode Package. They will be shown in the admin UI Dappnode Package store.

+
    +
  • is optional
  • +
  • type: Array type: string[]
  • +
+

All items must be of the type: string

+
    +
  • minimum length: 1 characters
  • +
+

Single keyword.

+ +

Various links (URLs) useful for the user of this package. All links will be shown in the dedicated view of this package in the admin UI. The predefined links properties below will be shown with concept related icons. Other links will be -shown as well but with their plain name instead of an icon.

  • is optional
  • type: object with the following properties:
PropertyTypeRequired
homepagestringOptional
uistringOptional
apistringOptional
gatewaystringOptional

homepage

Url to an informative homepage for this Dappnode Package. Should be a README or landing website.

  • is optional
  • type: string

Example:

"https://github.com/dappnode/DNP_IPFS#readme"

ui

Url to this DNP's Dappnode local UI.

  • is optional
  • type: string

Example:

"http://ipfs.dappnode:5001/webui"

api

Url to this DNP's Dappnode local HTTP API endpoint.

  • is optional
  • type: string

Example:

"http://ipfs.dappnode:5001/api/v0"

gateway

Url to this DNP's Dappnode local gateway.

  • is optional
  • type: string

Example:

"http://ipfs.dappnode:8080/ipfs"

repository

Dappnode Package's repository. Must be a publicly available url that can be handed directly to a VCS program.

  • is optional
  • type: object with the following properties:
PropertyTypeRequired
typestringRequired
urlstringRequired
directorystringOptional

type

  • is required
  • type: string
  • minimum length: 1 characters

Example:

"git"

url

  • is required
  • type: string
  • minimum length: 1 characters

Example:

"https://github.com/dappnode/DNP_IPFS.git"

directory

  • is optional
  • type: string

Example:

"packages/react-dom"

bugs

Url to your project’s issue tracker.

  • is optional
  • type: object with the following properties:
PropertyTypeRequired
urlstringRequired

url

  • is required
  • type: string

Example:

"https://github.com/dappnode/DNP_IPFS/issues"

license

Dappnode Package's License.

  • is required
  • type: string
  • minimum length: 1 characters

Example:

"GPL-3.0"
- - +shown as well but with their plain name instead of an icon.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
homepagestringOptional
uistringOptional
apistringOptional
gatewaystringOptional
+

homepage

+

Url to an informative homepage for this Dappnode Package. Should be a README or landing website.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"https://github.com/dappnode/DNP_IPFS#readme"
+

ui

+

Url to this DNP's Dappnode local UI.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"http://ipfs.dappnode:5001/webui"
+

api

+

Url to this DNP's Dappnode local HTTP API endpoint.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"http://ipfs.dappnode:5001/api/v0"
+

gateway

+

Url to this DNP's Dappnode local gateway.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"http://ipfs.dappnode:8080/ipfs"
+

repository

+

Dappnode Package's repository. Must be a publicly available url that can be handed directly to a VCS program.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
typestringRequired
urlstringRequired
directorystringOptional
+

type

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"git"
+

url

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"https://github.com/dappnode/DNP_IPFS.git"
+

directory

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
"packages/react-dom"
+

bugs

+

Url to your project’s issue tracker.

+
    +
  • is optional
  • +
  • type: object with the following properties:
  • +
+
PropertyTypeRequired
urlstringRequired
+

url

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
"https://github.com/dappnode/DNP_IPFS/issues"
+

license

+

Dappnode Package's License.

+
    +
  • is required
  • +
  • type: string
  • +
  • minimum length: 1 characters
  • +
+

Example:

+
"GPL-3.0"
\ No newline at end of file diff --git a/docs/dev/references/setup-wizard/index.html b/docs/dev/references/setup-wizard/index.html index f820ead9f..8ee3db90b 100644 --- a/docs/dev/references/setup-wizard/index.html +++ b/docs/dev/references/setup-wizard/index.html @@ -1,18 +1,190 @@ - + - -Wizard Reference | Dappnode - - - + +Wizard Reference | Dappnode + + + - -
-

Wizard Reference

The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.

How to use

To add this functionality, create a file setup-wizard.yml in the root of your Dappnode package directory. Both JSON and YAML formats are supported, but YAML makes writing markdown text blocks much easier (its used in the description property).

  DappnodePackage-my-package.public.dappnode.eth/
├── build
│ ├── ...
│ └── Dockerfile
├── avatar-my-package.png
├── dappnode_package.json
├── docker-compose.yml
+ └── setup-wizard.yml

Example

version: "2"
fields:
- id: payoutAddress,
target:
type: environment
name: PAYOUT_ADDRESS
service: service1
title: Payout address
description: >-
Address to send **payouts** too. [More info](https://more.info)
Supports markdown and multiline
secret: true
pattern: "^0x[a-fA-F0-9]{40}$"
patternErrorMessage: Must be a valid address (0x1fd16a...)
enum:
- normal
- archive
- advanced
required: true
if: { "mode": { "enum": ["advanced"] } }

version

Identify this setup wizard version. Currently only supports version "2"

  • is required
  • type: string
  • value: "2"

fields

Setup wizard fields. Fields to show in the setup wizard form UI

  • is required
  • type: Array type: object[]

All items must be of the type: object with the following properties:

PropertyTypeRequiredDefault
targetobjectOptional
idstringRequired
titlestringRequired
descriptionstringRequired
secretbooleanOptionalfalse
patternstringOptional
patternErrorMessagestringOptional
enumarrayOptional
requiredbooleanOptional
ifobjectOptional

id

Unique property ID required for internal form parsing, and to use the if conditional block.

  • is required
  • type: string

Example:

id: payoutAddress

target

Maps the setup wizard field to a package configuration option. Supports:

environment

To customize environment variables with user input. Targeted variables must be declared in the package's docker-compose. You can customize the type of input shown in the UI with this field properties

  • secret: Hides input, to collect sensitive data.
  • pattern: To validate input against any Regex expression.
  • enum: Show as a select dropdown menu.

It exists two ways of defining environment variables. -The first one, where you define one environment var for one service, you the format to do it is the following:

target:
type: environment
name: PAYOUT_ADDRESS
service: service1

In case you want to define an environment variable that is used in multiple services you can define it in the next way:

target:
type: environment
name: PAYOUT_ADDRESS
service: [service1, service2, service2]
name

The name of the environment variable as declared in the docker-compose.

  • is required
  • type: string

Example:

name: PAYOUT_ADDRESS
service

In multi-service package, which service should be targeted with this setting.

  • type: string

Examples:

service: service1

portMapping

To customize port mappings with user input. Targeted container port must be declared in the package's docker-compose.

target:
type: portMapping
containerPort: 9554/UDP
service: service1
containerPort

Exposed container port to map to. Must follow the format {portNumber} or {portNumber}/{PROTOCOL}, where PROTOCOL must be TCP or UDP in all caps.

  • is required
  • type: string

Examples:

containerPort: 9554
containerPort: 9554/TCP
service

See service

namedVolumeMountpoint

To allow hosting a specific package volume into a different drive or mountpoint

target:
type: namedVolumeMountpoint
volumeName: blockchain_data
volumeName

Name of the docker volume to allow the user to change its mountpoint. Must have the exact same name as declared in the package's compose volumes section.

  • is required
  • type: string

Example:

volumeName: blockchain_data

allNamedVolumesMountpoint

To allow hosting all package volumes into a different drive or mountpoint at once. Use this option if your package has multiple heavy volumes whose mountpoint should be changed at once.

target:
type: allNamedVolumesMountpoint

fileUpload

To allow uploading user files to the package container

target:
type: fileUpload
path: /usr/src/config.json
service: service1
path

Destination path to upload the file to. Must be a valid absolute path in the package container.

  • is required
  • type: string

Example:

path: /usr/src/config.json
service

See service

title

The Title Schema

  • is required
  • default: ""
  • type: string

Example:

title: Payout address

description

The Description Schema

  • is required
  • default: ""
  • type: string

Example:

description: >-
Address to send **payouts** too. [More info](https://more.info)
Supports markdown and multiline

secret

Display field input as hidden. Use to collect sensitive data. It will automatically activate if the field name contains "secret" "passphrase" or "password". Only available with target environment.

  • is optional
  • default: false
  • type: boolean

Example:

secret: true

pattern

Enforce this property to satisfy a regex before continuing. Only available with target environment. Use also patternErrorMessage to show a nicer error message when regex validation fails.

  • is optional
  • type: string

Example:

pattern: "^0x[a-fA-F0-9]{40}$"

patternErrorMessage

Error to show if the regex pattern validation fails. Only available with target environment.

  • is optional
  • type: string

Examples:

patternErrorMessage: Must be a valid address (0x1fd16a...)
patternErrorMessage: Must be at least 8 characters long

enum

List valid options. Will automatically display the input as a select menu. Only available with target environment.

  • is optional
  • type: Array type: string[]

All items must be of the type: string

Examples

enum:
- normal
- archive
- advanced

required

Enforce this property to be provided before continuing

  • is optional
  • type: boolean

Examples

required: true

if

Only display the field property if the if schema is valid against the current form data provided by the user. The form data is an object with the structure { [field.id]: JSONSchema }.

  • is optional
  • type: object

Examples:

if: { "mode": { "enum": ["advanced"] } }
if: { "mode": { "enum": ["archive"] } }
- - + +

Wizard Reference

+

The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.

+

How to use

+

To add this functionality, create a file setup-wizard.yml in the root of your Dappnode package directory. Both JSON and YAML formats are supported, but YAML makes writing markdown text blocks much easier (its used in the description property).

+
  DappnodePackage-my-package.public.dappnode.eth/
├── build
│ ├── ...
│ └── Dockerfile
├── avatar-my-package.png
├── dappnode_package.json
├── docker-compose.yml
+ └── setup-wizard.yml
+

Example

+
version: "2"
fields:
- id: payoutAddress,
target:
type: environment
name: PAYOUT_ADDRESS
service: service1
title: Payout address
description: >-
Address to send **payouts** too. [More info](https://more.info)
Supports markdown and multiline
secret: true
pattern: "^0x[a-fA-F0-9]{40}$"
patternErrorMessage: Must be a valid address (0x1fd16a...)
enum:
- normal
- archive
- advanced
required: true
if: { "mode": { "enum": ["advanced"] } }
+

version

+

Identify this setup wizard version. Currently only supports version "2"

+
    +
  • is required
  • +
  • type: string
  • +
  • value: "2"
  • +
+

fields

+

Setup wizard fields. Fields to show in the setup wizard form UI

+
    +
  • is required
  • +
  • type: Array type: object[]
  • +
+

All items must be of the type: object with the following properties:

+
PropertyTypeRequiredDefault
targetobjectOptional
idstringRequired
titlestringRequired
descriptionstringRequired
secretbooleanOptionalfalse
patternstringOptional
patternErrorMessagestringOptional
enumarrayOptional
requiredbooleanOptional
ifobjectOptional
+

id

+

Unique property ID required for internal form parsing, and to use the if conditional block.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
id: payoutAddress
+

target

+

Maps the setup wizard field to a package configuration option. Supports:

+ +

environment

+

To customize environment variables with user input. Targeted variables must be declared in the package's docker-compose. You can customize the type of input shown in the UI with this field properties

+
    +
  • secret: Hides input, to collect sensitive data.
  • +
  • pattern: To validate input against any Regex expression.
  • +
  • enum: Show as a select dropdown menu.
  • +
+

It exists two ways of defining environment variables. +The first one, where you define one environment var for one service, you the format to do it is the following:

+
target:
type: environment
name: PAYOUT_ADDRESS
service: service1
+

In case you want to define an environment variable that is used in multiple services you can define it in the next way:

+
target:
type: environment
name: PAYOUT_ADDRESS
service: [service1, service2, service2]
+
name
+

The name of the environment variable as declared in the docker-compose.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
name: PAYOUT_ADDRESS
+
service
+

In multi-service package, which service should be targeted with this setting.

+
    +
  • type: string
  • +
+

Examples:

+
service: service1
+

portMapping

+

To customize port mappings with user input. Targeted container port must be declared in the package's docker-compose.

+
target:
type: portMapping
containerPort: 9554/UDP
service: service1
+
containerPort
+

Exposed container port to map to. Must follow the format {portNumber} or {portNumber}/{PROTOCOL}, where PROTOCOL must be TCP or UDP in all caps.

+
    +
  • is required
  • +
  • type: string
  • +
+

Examples:

+
containerPort: 9554
+
containerPort: 9554/TCP
+
service
+

See service

+

namedVolumeMountpoint

+

To allow hosting a specific package volume into a different drive or mountpoint

+
target:
type: namedVolumeMountpoint
volumeName: blockchain_data
+
volumeName
+

Name of the docker volume to allow the user to change its mountpoint. Must have the exact same name as declared in the package's compose volumes section.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
volumeName: blockchain_data
+

allNamedVolumesMountpoint

+

To allow hosting all package volumes into a different drive or mountpoint at once. Use this option if your package has multiple heavy volumes whose mountpoint should be changed at once.

+
target:
type: allNamedVolumesMountpoint
+

fileUpload

+

To allow uploading user files to the package container

+
target:
type: fileUpload
path: /usr/src/config.json
service: service1
+
path
+

Destination path to upload the file to. Must be a valid absolute path in the package container.

+
    +
  • is required
  • +
  • type: string
  • +
+

Example:

+
path: /usr/src/config.json
+
service
+

See service

+

title

+

The Title Schema

+
    +
  • is required
  • +
  • default: ""
  • +
  • type: string
  • +
+

Example:

+
title: Payout address
+

description

+

The Description Schema

+
    +
  • is required
  • +
  • default: ""
  • +
  • type: string
  • +
+

Example:

+
description: >-
Address to send **payouts** too. [More info](https://more.info)
Supports markdown and multiline
+

secret

+

Display field input as hidden. Use to collect sensitive data. It will automatically activate if the field name contains "secret" "passphrase" or "password". Only available with target environment.

+
    +
  • is optional
  • +
  • default: false
  • +
  • type: boolean
  • +
+

Example:

+
secret: true
+

pattern

+

Enforce this property to satisfy a regex before continuing. Only available with target environment. Use also patternErrorMessage to show a nicer error message when regex validation fails.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Example:

+
pattern: "^0x[a-fA-F0-9]{40}$"
+

patternErrorMessage

+

Error to show if the regex pattern validation fails. Only available with target environment.

+
    +
  • is optional
  • +
  • type: string
  • +
+

Examples:

+
patternErrorMessage: Must be a valid address (0x1fd16a...)
+
patternErrorMessage: Must be at least 8 characters long
+

enum

+

List valid options. Will automatically display the input as a select menu. Only available with target environment.

+
    +
  • is optional
  • +
  • type: Array type: string[]
  • +
+

All items must be of the type: string

+

Examples

+
enum:
- normal
- archive
- advanced
+

required

+

Enforce this property to be provided before continuing

+
    +
  • is optional
  • +
  • type: boolean
  • +
+

Examples

+
required: true
+

if

+

Only display the field property if the if schema is valid against the current form data provided by the user. The form data is an object with the structure { [field.id]: JSONSchema }.

+
    +
  • is optional
  • +
  • type: object
  • +
+

Examples:

+
if: { "mode": { "enum": ["advanced"] } }
+
if: { "mode": { "enum": ["archive"] } }
\ No newline at end of file diff --git a/docs/dev/sdk/commands/index.html b/docs/dev/sdk/commands/index.html index 3f4330a58..f19f0e843 100644 --- a/docs/dev/sdk/commands/index.html +++ b/docs/dev/sdk/commands/index.html @@ -1,17 +1,30 @@ - + - -Main commands | Dappnode - - - + +Main commands | Dappnode + + + - -
-

Main commands

This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).

init

The init command allows you to initialize a new DAppNodePackage (DNP) repository. This is the first step when creating a new DNP. To use the init command, run the following:

npx @dappnode/dappnodesdk init

The following are all the possible init options:

      --dir, --directory   Change the base directory    [string] [default: "./"]
--compose_file_name Compose file for docker-compose
[string] [default: "docker-compose.yml"]
--silent Silence output to terminal [boolean]
--verbose, --debug Show more output to terminal [boolean]
-y, --yes Answer yes or the default option to all initializatio
n questions [boolean]
-f, --force Overwrite previous project if necessary [boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]

build

The build command is used to build a new version of a DNP. It generates the IPFS hash for the package. To use the build command, run the following:

npx @dappnode/dappnodesdk build

The following are all the possible build options:

      --dir, --directory   Change the base directory    [string] [default: "./"]
--compose_file_name Compose file for docker-compose
[string] [default: "docker-compose.yml"]
--silent Silence output to terminal [boolean]
--verbose, --debug Show more output to terminal [boolean]
-p, --provider Specify an ipfs provider: "dappnode" (default), "infu
ra", "localhost:5002" [default: "dappnode"]
-t, --timeout Overrides default build timeout: "15h", "20min 15s",
"5000". Specs npmjs.com/package/timestring
[default: "60min"]
--skip_save For testing only: do not save image to disk [boolean]
--skip_upload For testing only: do not upload image from disk
[boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]

publish

The publish command is used to publish a new version of the DNP in an Aragon Package Manager Repository. To use the publish command, run the following:

npx @dappnode/dappnodesdk publish

The following are all the possible publish options:

      --dir, --directory      Change the base directory [string] [default: "./"]
--compose_file_name Compose file for docker-compose
[string] [default: "docker-compose.yml"]
--silent Silence output to terminal [boolean]
--verbose, --debug Show more output to terminal [boolean]
--type Semver update type. Can also be provided with env
RELEASE_TYPE=[type] or via TRAVIS_TAG=release (pat
ch), TRAVIS_TAG=release/[type]
[string] [choices: "major", "minor", "patch"]
-p, --provider Specify a provider (overwrittes content_provider a
nd eth_provider): "dappnode" (default), "infura",
"http://localhost:8545" [string]
--eth_provider Specify an eth provider: "dappnode" (default), "in
fura", "localhost:8545"
[string] [default: "dappnode"]
--content_provider Specify an ipfs provider: "dappnode" (default), "i
nfura", "http://localhost:5001"
[string] [default: "dappnode"]
--upload_to Specify where to upload the release
[choices: "ipfs", "swarm"] [default: "ipfs"]
-a, --developer_address If there is no existing repo for this DNP the publ
ish command needs a developer address. If it is no
t provided as an option a prompt will request it
[string]
-t, --timeout Overrides default build timeout: "15h", "20min 15s
", "5000". Specs npmjs.com/package/timestring
[string]
--github_release Publish the release on the Github repo specified i
n the manifest. Requires a GITHUB_TOKEN ENV to aut
henticate [boolean]
--dappnode_team_preset Specific set of options used for internal DAppNode
releases. Caution: options may change without not
ice. [boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]```
- - + +

Main commands

+

This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).

+

init

+

The init command allows you to initialize a new DAppNodePackage (DNP) repository. This is the first step when creating a new DNP. To use the init command, run the following:

+
npx @dappnode/dappnodesdk init
+

The following are all the possible init options:

+
      --dir, --directory   Change the base directory    [string] [default: "./"]
--compose_file_name Compose file for docker-compose
[string] [default: "docker-compose.yml"]
--silent Silence output to terminal [boolean]
--verbose, --debug Show more output to terminal [boolean]
-y, --yes Answer yes or the default option to all initializatio
n questions [boolean]
-f, --force Overwrite previous project if necessary [boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]
+

build

+

The build command is used to build a new version of a DNP. It generates the IPFS hash for the package. To use the build command, run the following:

+
npx @dappnode/dappnodesdk build
+

The following are all the possible build options:

+
      --dir, --directory   Change the base directory    [string] [default: "./"]
--compose_file_name Compose file for docker-compose
[string] [default: "docker-compose.yml"]
--silent Silence output to terminal [boolean]
--verbose, --debug Show more output to terminal [boolean]
-p, --provider Specify an ipfs provider: "dappnode" (default), "infu
ra", "localhost:5002" [default: "dappnode"]
-t, --timeout Overrides default build timeout: "15h", "20min 15s",
"5000". Specs npmjs.com/package/timestring
[default: "60min"]
--skip_save For testing only: do not save image to disk [boolean]
--skip_upload For testing only: do not upload image from disk
[boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]
+

publish

+

The publish command is used to publish a new version of the DNP in an Aragon Package Manager Repository. To use the publish command, run the following:

+
npx @dappnode/dappnodesdk publish
+

The following are all the possible publish options:

+
      --dir, --directory      Change the base directory [string] [default: "./"]
--compose_file_name Compose file for docker-compose
[string] [default: "docker-compose.yml"]
--silent Silence output to terminal [boolean]
--verbose, --debug Show more output to terminal [boolean]
--type Semver update type. Can also be provided with env
RELEASE_TYPE=[type] or via TRAVIS_TAG=release (pat
ch), TRAVIS_TAG=release/[type]
[string] [choices: "major", "minor", "patch"]
-p, --provider Specify a provider (overwrittes content_provider a
nd eth_provider): "dappnode" (default), "infura",
"http://localhost:8545" [string]
--eth_provider Specify an eth provider: "dappnode" (default), "in
fura", "localhost:8545"
[string] [default: "dappnode"]
--content_provider Specify an ipfs provider: "dappnode" (default), "i
nfura", "http://localhost:5001"
[string] [default: "dappnode"]
--upload_to Specify where to upload the release
[choices: "ipfs", "swarm"] [default: "ipfs"]
-a, --developer_address If there is no existing repo for this DNP the publ
ish command needs a developer address. If it is no
t provided as an option a prompt will request it
[string]
-t, --timeout Overrides default build timeout: "15h", "20min 15s
", "5000". Specs npmjs.com/package/timestring
[string]
--github_release Publish the release on the Github repo specified i
n the manifest. Requires a GITHUB_TOKEN ENV to aut
henticate [boolean]
--dappnode_team_preset Specific set of options used for internal DAppNode
releases. Caution: options may change without not
ice. [boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]```
\ No newline at end of file diff --git a/docs/dev/sdk/overview/index.html b/docs/dev/sdk/overview/index.html index b05435ebf..84702fb2a 100644 --- a/docs/dev/sdk/overview/index.html +++ b/docs/dev/sdk/overview/index.html @@ -1,17 +1,21 @@ - + - -DappnodeSDK | Dappnode - - - + +DappnodeSDK | Dappnode + + + - -
-

DappnodeSDK

The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.

We have deployed a public APM (Aragon Package Manager) registry in which anyone can create their own APM repository: public.dappnode.eth

Demo GIF

Command-line options

DappnodeSDK is usually executed from the command line. The following are all the available commands.

info

You can run dappnodesdk <command> help to get more information about each command.

Usage: dappnodesdk <command> [options]

Commands:
build Build a new version (only generates the ipfs hash)
from_github [repoSlug] Gets an existing DNP Github release (assets) and uploa
d it to IPFS
increase [type] Increases the version defined in the manifest
init Initialize a new DAppNodePackage (DNP) repository
next [type] Compute the next release version from local
publish [type] Publish a new version of the package in an Aragon Pack
age Manager Repository
github-action Github actions tooling to be run in CI. Uses a specifi
c set of options for internal DAppNode use. Caution: o
ptions may change without notice.

Options:
--dir, --directory Change the base directory [string] [default: "./"]
--compose_file_name Compose file for docker-compose
[string] [default: "docker-compose.yml"]
--silent Silence output to terminal [boolean]
--verbose, --debug Show more output to terminal [boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]```
- - + +

DappnodeSDK

+

The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.

+

We have deployed a public APM (Aragon Package Manager) registry in which anyone can create their own APM repository: public.dappnode.eth

+

Demo GIF

+

Command-line options

+

DappnodeSDK is usually executed from the command line. The following are all the available commands.

+
info

You can run dappnodesdk <command> help to get more information about each command.

+
Usage: dappnodesdk <command> [options]

Commands:
build Build a new version (only generates the ipfs hash)
from_github [repoSlug] Gets an existing DNP Github release (assets) and uploa
d it to IPFS
increase [type] Increases the version defined in the manifest
init Initialize a new DAppNodePackage (DNP) repository
next [type] Compute the next release version from local
publish [type] Publish a new version of the package in an Aragon Pack
age Manager Repository
github-action Github actions tooling to be run in CI. Uses a specifi
c set of options for internal DAppNode use. Caution: o
ptions may change without notice.

Options:
--dir, --directory Change the base directory [string] [default: "./"]
--compose_file_name Compose file for docker-compose
[string] [default: "docker-compose.yml"]
--silent Silence output to terminal [boolean]
--verbose, --debug Show more output to terminal [boolean]
-h, --help Show help [boolean]
-v, --version Show version number [boolean]```
\ No newline at end of file diff --git a/docs/smooth/deep-dive-into-smooth/oracle-sm/index.html b/docs/smooth/deep-dive-into-smooth/oracle-sm/index.html index b8b9af481..c18648347 100644 --- a/docs/smooth/deep-dive-into-smooth/oracle-sm/index.html +++ b/docs/smooth/deep-dive-into-smooth/oracle-sm/index.html @@ -1,17 +1,23 @@ - + - -Smooth's architecture | Dappnode - - - + +Smooth's architecture | Dappnode + + + - -
-

Smooth's architecture

Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible of computing the rewards of each validator.

The Smart Contract

Smooth's Smart Contract is deployed on the Ethereum mainnet and is responsible for "receiving" all the events related to the pool onchain. This includes subscriptions, unsubscriptions, block proposals, and more. Since it is the Smart Contract the one who holds all the ETH collected by the pool, it is from the Smart Contract where all Smooth users will claim their rewards.

Computing and storing all rewards calculations onchain would be almost impossible and very expensive, so merkle trees are used to summarize the state of all validators. This allows the Smart Contract to store a single hash onchain that represents the state of all validators subscribed to the pool. This hash is called the Merkle Root and is computed by the Oracle.

The Oracle

As mentioned before, the Oracle is responsible for computing the rewards of each validator. It does so by computing a merkle tree that summarizes the state of all validators subscribed to the pool. This merkle tree, computed offchain, is summarized into a Merkle Root.

caution

Oracle works only with finalized data. This means that Oracle will effectively work with data from a few epochs ago. This is done to ensure that the data Oracle processes is non-reversible and no reorgs are possible.

Once every 28800 slots (4 days), the Oracle sends a transaction to the Smart Contract with the updated Merkle Root.

info

It is not untill the Oracle sends the transaction to the Smart Contract with the updated Merkle Root that the rewards are available to be claimed by the validators. This means that if a validator correctly proposes a block, it will not be able to claim its rewards until the Oracle sends the transaction to the Smart Contract with the updated Merkle Root.

- - + +

Smooth's architecture

+

Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible of computing the rewards of each validator.

+

The Smart Contract

+

Smooth's Smart Contract is deployed on the Ethereum mainnet and is responsible for "receiving" all the events related to the pool onchain. This includes subscriptions, unsubscriptions, block proposals, and more. Since it is the Smart Contract the one who holds all the ETH collected by the pool, it is from the Smart Contract where all Smooth users will claim their rewards.

+

Computing and storing all rewards calculations onchain would be almost impossible and very expensive, so merkle trees are used to summarize the state of all validators. This allows the Smart Contract to store a single hash onchain that represents the state of all validators subscribed to the pool. This hash is called the Merkle Root and is computed by the Oracle.

+

The Oracle

+

As mentioned before, the Oracle is responsible for computing the rewards of each validator. It does so by computing a merkle tree that summarizes the state of all validators subscribed to the pool. This merkle tree, computed offchain, is summarized into a Merkle Root.

+
caution

Oracle works only with finalized data. This means that Oracle will effectively work with data from a few epochs ago. This is done to ensure that the data Oracle processes is non-reversible and no reorgs are possible.

+

Once every 28800 slots (4 days), the Oracle sends a transaction to the Smart Contract with the updated Merkle Root.

+
info

It is not untill the Oracle sends the transaction to the Smart Contract with the updated Merkle Root that the rewards are available to be claimed by the validators. This means that if a validator correctly proposes a block, it will not be able to claim its rewards until the Oracle sends the transaction to the Smart Contract with the updated Merkle Root.

\ No newline at end of file diff --git a/docs/smooth/deep-dive-into-smooth/overview/index.html b/docs/smooth/deep-dive-into-smooth/overview/index.html index 347225547..2749b2a63 100644 --- a/docs/smooth/deep-dive-into-smooth/overview/index.html +++ b/docs/smooth/deep-dive-into-smooth/overview/index.html @@ -1,17 +1,27 @@ - + - -Deep Dive into Smooth! | Dappnode - - - + +Deep Dive into Smooth! | Dappnode + + + - -
-

Deep Dive into Smooth!

In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!

info

We recommend reading and understanding the contents of this section before subscribing to Smooth.

  1. Smooth's Rewards: Learn how Smooth handles incoming rewards and how they are distributed to validators.

  2. Validator States: A detailed explanation of all possible states of a subscribed Smooth validator.

  3. Smooth's Oracle and Smart Contract: Learn how the two main components of Smooth, the Oracle and smart contract work together to track validators and distribute rewards.

- - + +

Deep Dive into Smooth!

+

In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!

+
info

We recommend reading and understanding the contents of this section before subscribing to Smooth.

+
    +
  1. +

    Smooth's Rewards: Learn how Smooth handles incoming rewards and how they are distributed to validators.

    +
  2. +
  3. +

    Validator States: A detailed explanation of all possible states of a subscribed Smooth validator.

    +
  4. +
  5. +

    Smooth's Oracle and Smart Contract: Learn how the two main components of Smooth, the Oracle and smart contract work together to track validators and distribute rewards.

    +
  6. +
\ No newline at end of file diff --git a/docs/smooth/deep-dive-into-smooth/rewards/index.html b/docs/smooth/deep-dive-into-smooth/rewards/index.html index c9794a39b..afc7ee77e 100644 --- a/docs/smooth/deep-dive-into-smooth/rewards/index.html +++ b/docs/smooth/deep-dive-into-smooth/rewards/index.html @@ -1,17 +1,39 @@ - + - -Rewards | Dappnode - - - + +Rewards | Dappnode + + + - -
-

Rewards

Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.

Smooth's source of rewards

A Reward is considered to be any balance denominated in ETH that is sent to Smooth's address. When recieved, it is shared fairly among all the participants in the pool.

There are 2 main sources of rewards in Smooth:

  • Block Proposal rewards: These rewards are generated by validators within the pool. Whenever a validator successfully proposes a block, it sends the block reward to Smooth's address.
  • Donations: This are the rewards that are sent to Smooth's address by anyone who wants to support the project. Smooth only accepts donations in ETH.

How rewards are distributed

When a validator has an active subscription to the pool (Active or YellowCard state) it is eligible for rewards, meaning that it will receive a given share of each reward that is sent to the pool. Validators in RedCard are considered subscribed, but don't earn rewards until they become active again.

Smooth's distributes rewards to the validators as Pending Rewards. These are rewards that are not consolidated yet, meaning that they belong to the validator but they can not be claimed yet, until a valid block proposal is sent to Smooth by that validator.

Later on, when a validator sends a valid block proposal to Smooth, all its Pending Rewards are transformed into Accumulated Rewards. These rewards are consolidated and can be claimed by the validator.

Therefore, we consider that a validator has 2 types of rewards:

  • Pending Rewards: Rewards that are not consolidated yet. They can not be claimed.
  • Accumulated Rewards: Rewards that are consolidated and can be claimed by the validator.
info

Dappnode receives a 7% fee of all rewards distributed by Smooth. This fee is automatically deducted from the rewards before they are distributed to validators. This fee serves to support the development and sustainability of Smooth and Dappnode!

How rewards are claimed

As a Smooth user, you have a third type of reward: Claimable Rewards. These are the sum of all your validator's Accumulated Rewards with the same withdrawal address that you have not already claimed.

  • Claimable Rewards: Rewards that you can claim as a Smooth user. Sum of all your validator's unclaimed Accumulated Rewards.

Smooth's users can claim their rewards by visting Smooth's website and clicking on the Claim All button once logged in. This trigger a transaction that will send all claimable rewards to the user's address.

tip

Smooth identifies users through an ETH1 address, which serves as the withdrawal address for all your validators. If you have multiple validators associated with distinct withdrawal addresses, you will need to claim your rewards for each of them separately.

- - + +

Rewards

+

Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.

+

Smooth's source of rewards

+

A Reward is considered to be any balance denominated in ETH that is sent to Smooth's address. When recieved, it is shared fairly among all the participants in the pool.

+

There are 2 main sources of rewards in Smooth:

+
    +
  • Block Proposal rewards: These rewards are generated by validators within the pool. Whenever a validator successfully proposes a block, it sends the block reward to Smooth's address.
  • +
  • Donations: This are the rewards that are sent to Smooth's address by anyone who wants to support the project. Smooth only accepts donations in ETH.
  • +
+

How rewards are distributed

+

When a validator has an active subscription to the pool (Active or YellowCard state) it is eligible for rewards, meaning that it will receive a given share of each reward that is sent to the pool. Validators in RedCard are considered subscribed, but don't earn rewards until they become active again.

+

Smooth's distributes rewards to the validators as Pending Rewards. These are rewards that are not consolidated yet, meaning that they belong to the validator but they can not be claimed yet, until a valid block proposal is sent to Smooth by that validator.

+

Later on, when a validator sends a valid block proposal to Smooth, all its Pending Rewards are transformed into Accumulated Rewards. These rewards are consolidated and can be claimed by the validator.

+

Therefore, we consider that a validator has 2 types of rewards:

+
    +
  • Pending Rewards: Rewards that are not consolidated yet. They can not be claimed.
  • +
  • Accumulated Rewards: Rewards that are consolidated and can be claimed by the validator.
  • +
+
info

Dappnode receives a 7% fee of all rewards distributed by Smooth. This fee is automatically deducted from the rewards before they are distributed to validators. This fee serves to support the development and sustainability of Smooth and Dappnode!

+

How rewards are claimed

+

As a Smooth user, you have a third type of reward: Claimable Rewards. These are the sum of all your validator's Accumulated Rewards with the same withdrawal address that you have not already claimed.

+
    +
  • Claimable Rewards: Rewards that you can claim as a Smooth user. Sum of all your validator's unclaimed Accumulated Rewards.
  • +
+

Smooth's users can claim their rewards by visting Smooth's website and clicking on the Claim All button once logged in. This trigger a transaction that will send all claimable rewards to the user's address.

+
tip

Smooth identifies users through an ETH1 address, which serves as the withdrawal address for all your validators. If you have multiple validators associated with distinct withdrawal addresses, you will need to claim your rewards for each of them separately.

\ No newline at end of file diff --git a/docs/smooth/deep-dive-into-smooth/states/index.html b/docs/smooth/deep-dive-into-smooth/states/index.html index 340794fa5..16391ae43 100644 --- a/docs/smooth/deep-dive-into-smooth/states/index.html +++ b/docs/smooth/deep-dive-into-smooth/states/index.html @@ -1,17 +1,39 @@ - + - -Smooth Validator States | Dappnode - - - + +Smooth Validator States | Dappnode + + + - -
-

Smooth Validator States

A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.

State Machine Overview

The oracle employs a state machine to monitor the status of subscribed validators within Smooth. Various actions trigger state changes, detailed in the following image encompassing all possible transitions. Let's take a look at it:

statemachine

There are 6 different states a validator can have:

  • 🟢 Active: The validator is active and subscribed to the pool, earning rewards over time.
  • 🟡 YellowCard: The validator missed its last block proposal but not two in a row. This validator earns rewards as if it was active.
  • 🔴 RedCard: The validator missed its latest two block proposals in a row. As a penalty, the validator does not earn rewards until its next block is successfully proposed to the pool. In other words, this validator is not receiving Pending Rewards when somebody else contributes to the pool.
  • NotSubscribed: The validator is no longer subscribed to the pool, but still tracked by the validator. For example, a validator that unsubscribed. Note that this is still tracked because a validator can unsubscribe but it may still have pending balance to claim. In this state, the validator does not earn rewards.
  • ☠️ Banned: The validator is banned forever from the pool. A validator is banned when it is subscribed to the pool but proposes a block with the wrong fee recipient.
  • Untracked: The validator is not tracked by the pool. It has never subscribed to the pool.

And 6 different actions can trigger a state transition:

  • ProposalOk: The validator proposed a valid block with its rewards correctly sent to the smoothing pool address.
  • ProposalMissed: The validator should have proposed a block but missed its proposal.
  • ProposalWrongFee: The validator proposes a block but with a wrong fee recipient.
  • ManualSubscription: The validator manually subscribes to the pool, depositing collateral for its validator index by calling the smart contract function (see event).
  • AutoSubscription: The validator is automatically subscribed to the pool, by setting as fee recipient the smoothing pool address.
  • Unsubscribe: The validator manually unsubscribes to the pool, calling the unsubscribe function from the smart contract (see event).

The purpose of the State Machine

Beyond tracking validator statuses, the state machine ensures fair reward distribution and encourages correct behavior among validators.

Validators consistently proposing blocks receive greater rewards compared to those frequently missing proposals, promoting active participation and contribution to the pool.

- - + +

Smooth Validator States

+

A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.

+

State Machine Overview

+

The oracle employs a state machine to monitor the status of subscribed validators within Smooth. Various actions trigger state changes, detailed in the following image encompassing all possible transitions. Let's take a look at it:

+

statemachine

+

There are 6 different states a validator can have:

+
    +
  • 🟢 Active: The validator is active and subscribed to the pool, earning rewards over time.
  • +
  • 🟡 YellowCard: The validator missed its last block proposal but not two in a row. This validator earns rewards as if it was active.
  • +
  • 🔴 RedCard: The validator missed its latest two block proposals in a row. As a penalty, the validator does not earn rewards until its next block is successfully proposed to the pool. In other words, this validator is not receiving Pending Rewards when somebody else contributes to the pool.
  • +
  • NotSubscribed: The validator is no longer subscribed to the pool, but still tracked by the validator. For example, a validator that unsubscribed. Note that this is still tracked because a validator can unsubscribe but it may still have pending balance to claim. In this state, the validator does not earn rewards.
  • +
  • ☠️ Banned: The validator is banned forever from the pool. A validator is banned when it is subscribed to the pool but proposes a block with the wrong fee recipient.
  • +
  • Untracked: The validator is not tracked by the pool. It has never subscribed to the pool.
  • +
+

And 6 different actions can trigger a state transition:

+
    +
  • ProposalOk: The validator proposed a valid block with its rewards correctly sent to the smoothing pool address.
  • +
  • ProposalMissed: The validator should have proposed a block but missed its proposal.
  • +
  • ProposalWrongFee: The validator proposes a block but with a wrong fee recipient.
  • +
  • ManualSubscription: The validator manually subscribes to the pool, depositing collateral for its validator index by calling the smart contract function (see event).
  • +
  • AutoSubscription: The validator is automatically subscribed to the pool, by setting as fee recipient the smoothing pool address.
  • +
  • Unsubscribe: The validator manually unsubscribes to the pool, calling the unsubscribe function from the smart contract (see event).
  • +
+

The purpose of the State Machine

+

Beyond tracking validator statuses, the state machine ensures fair reward distribution and encourages correct behavior among validators.

+

Validators consistently proposing blocks receive greater rewards compared to those frequently missing proposals, promoting active participation and contribution to the pool.

\ No newline at end of file diff --git a/docs/smooth/faq-glossary/index.html b/docs/smooth/faq-glossary/index.html index b9d2a2069..a24f1b1d0 100644 --- a/docs/smooth/faq-glossary/index.html +++ b/docs/smooth/faq-glossary/index.html @@ -1,17 +1,28 @@ - + - -FAQ & Glossary | Dappnode - - - + +FAQ & Glossary | Dappnode + + + - -
-

FAQ & Glossary

FAQ

What do I need to do to claim my rewards?
Once your pending rewards are transformed into accumulated rewards after your block proposal, a small claim transaction will be required from the withdrawal address to send the ETH rewards to your wallet.
Is there a fee that Dappnode takes for participating in Smooth?
7% of all the Rewards goes to supporting the development of Dappnode and sustainability of Smooth
If I want to unsubscribe my validator from Smooth, when is the best time to do it?
Unsubscribing a validator from Smooth causes it to lose all its pending rewards. Hence, the ideal moment to exit Smooth is just after your last successful block proposal is reflected in Smooth's Smart Contract. A successful block proposal transfers all pending rewards claimable, allowing you to claim them before unsubscribing. This approach minimizes the pending rewards lost when unsubscribing.
Does Smooth take my Consensus Layer (CL) rewards?
No, Smooth does not take your CL rewards. CL rewards are always sent directly to your withdrawal address. Smooth only takes the execution layer rewards, which are the fees or MEV of the blocks you propose. These are the rewards that are sent to the fee recipient.

Glossary

Reward: Any balance denominated in ETH that is sent to Smooth. Rewards are detected by the oracle and shared fairly among all the participants in the pool. The oracle will detect all types of rewards and distribute them fairly. All rewards are denominated in ETH and other types of tokens such as ERC20 are not considered by the oracle. The vast majority of rewards come from block proposals of Smooth's validators and Donations.

Pending rewards: Pending rewards are those to be owned by the validator but not yet consolidated, rendering them unclaimable. Upon a successful block proposal by the validator, these rewards transition into the 'Accumulated rewards' category, becoming claimable. This mechanism ensures that validators can only claim rewards after contributing to the pool, guarding against cheating or exploiting the system.

Accumulated rewards: All consolidated rewards your validator has generated, i.e. those claimed and claimable.

Claimable rewards: Rewards ready to claim. Claimable rewards are the sum of all your accumulated rewards minus the rewards that have been claimed already. Only the withdrawal address of the validator can claim its rewards.

- - + +

FAQ & Glossary

+

FAQ

+
Details

What do I need to do to claim my rewards? +Once your pending rewards are transformed into accumulated rewards after your block proposal, a small claim transaction will be required from the withdrawal address to send the ETH rewards to your wallet.

+
Details

Is there a fee that Dappnode takes for participating in Smooth? +7% of all the Rewards goes to supporting the development of Dappnode and sustainability of Smooth

+
Details

If I want to unsubscribe my validator from Smooth, when is the best time to do it? +Unsubscribing a validator from Smooth causes it to lose all its pending rewards. Hence, the ideal moment to exit Smooth is just after your last successful block proposal is reflected in Smooth's Smart Contract. A successful block proposal transfers all pending rewards claimable, allowing you to claim them before unsubscribing. This approach minimizes the pending rewards lost when unsubscribing.

+
Details

Does Smooth take my Consensus Layer (CL) rewards? +No, Smooth does not take your CL rewards. CL rewards are always sent directly to your withdrawal address. Smooth only takes the execution layer rewards, which are the fees or MEV of the blocks you propose. These are the rewards that are sent to the fee recipient.

+

Glossary

+

Reward: Any balance denominated in ETH that is sent to Smooth. Rewards are detected by the oracle and shared fairly among all the participants in the pool. The oracle will detect all types of rewards and distribute them fairly. All rewards are denominated in ETH and other types of tokens such as ERC20 are not considered by the oracle. The vast majority of rewards come from block proposals of Smooth's validators and Donations.

+

Pending rewards: Pending rewards are those to be owned by the validator but not yet consolidated, rendering them unclaimable. Upon a successful block proposal by the validator, these rewards transition into the 'Accumulated rewards' category, becoming claimable. This mechanism ensures that validators can only claim rewards after contributing to the pool, guarding against cheating or exploiting the system.

+

Accumulated rewards: All consolidated rewards your validator has generated, i.e. those claimed and claimable.

+

Claimable rewards: Rewards ready to claim. Claimable rewards are the sum of all your accumulated rewards minus the rewards that have been claimed already. Only the withdrawal address of the validator can claim its rewards.

\ No newline at end of file diff --git a/docs/smooth/index.html b/docs/smooth/index.html index ffb9dde93..f7bb1b53f 100644 --- a/docs/smooth/index.html +++ b/docs/smooth/index.html @@ -1,17 +1,30 @@ - + - -Smooth | Dappnode - - - + +Smooth | Dappnode + + + - -
-

Welcome to Smooth, Dappnode's MEV Smoothing Pool!

Welcome to the Smooth Documentation! Here, you'll find detailed insights and essential information to navigate and maximize your experience with Smooth, an MEV Smoothing Pool designed to enhance rewards for Solo Stakers in the Ethereum network.

info

Interested in Smooth? Check out Deep Dive into Smooth to get a general idea of how Smooth works, or check the subscription guides to learn how to join!

What is Smooth and why should you join it?

Smooth is a MEV Smoothing Pool designed to elevate the Ethereum solo staking experience. By pooling MEV rewards, Smooth offers Solo Stakers the unique opportunity to earn higher rewards consistently, reducing reliance on luck and maximizing the potential of every staked ether. Join Smooth and take your solo staking experience to the next level!

🎰 Stop Depending on Luck!

Currently, luck plays a big role in every Solo Staker when it comes to earning rewards. While the average validator will propose 3 blocks per year, some will propose more, some less. A Solo Staker does not have any control over this, and can only hope to get lucky and propose as much blocks as possible to maximize their rewards.

Smooth changes this by pooling together the block proposals of all its members, so that every member gets a share of the rewards of every block proposed by the pool. This way, you can stop worrying about luck and start earning rewards consistently!

🚀 Don't miss high fee seasons!

With an average of only 3 block proposals per year, how likely are you to catch a period of high fees? How much does it hurt to see a NFT sale, or a peak in activity and not catch any of the action?

In Smooth, block proposals are constant, so no matter what happens in the network, you will always be there to get your share of it!

💰 Hitting MEV Lottery Blocks

Ever since they arrived, MEV rewards are distributed very unevenly. The vast majority of blocks have very low MEV rewards, while only very few blocks have very high rewards. As a Solo Staker, you have a very low chance of hitting one of these high-reward blocks. The median MEV typically hovers around 0.05 ETH, but certain lottery blocks can reach up to 30, 90, or even 300 ETH!

By adding together all our chances of hitting a lottery block, we have a much higher chance of proposing one! In backtesting simulations, rewards of a Smoothing Pool participant are up to 60% higher than those of a Solo Staker!

tip

For a detailed comparison between Solo Stakers and Smoothing Pool participants' rewards, explore this Smoothing Pool analysis

Lido, Centralized Exchanges and other pools with lots of validators consistently hit lottery blocks because of the sheer numbers of validators they have. They naturally split these rewards between all their validators, effectively being at an advantage vs the average Solo Staker.

This is a centralizing force, as the rich become richer and bigger operations get bigger rewards. Now, Solo Stakers with few validators don't depend on luck to be at par with the big guys!

- - + +

Welcome to Smooth, Dappnode's MEV Smoothing Pool!

+

Welcome to the Smooth Documentation! Here, you'll find detailed insights and essential information to navigate and maximize your experience with Smooth, an MEV Smoothing Pool designed to enhance rewards for Solo Stakers in the Ethereum network.

+
info

Interested in Smooth? Check out Deep Dive into Smooth to get a general idea of how Smooth works, or check the subscription guides to learn how to join!

+

What is Smooth and why should you join it?

+

Smooth is a MEV Smoothing Pool designed to elevate the Ethereum solo staking experience. By pooling MEV rewards, Smooth offers Solo Stakers the unique opportunity to earn higher rewards consistently, reducing reliance on luck and maximizing the potential of every staked ether. Join Smooth and take your solo staking experience to the next level!

+

🎰 Stop Depending on Luck!

+

Currently, luck plays a big role in every Solo Staker when it comes to earning rewards. While the average validator will propose 3 blocks per year, some will propose more, some less. A Solo Staker does not have any control over this, and can only hope to get lucky and propose as much blocks as possible to maximize their rewards.

+

Smooth changes this by pooling together the block proposals of all its members, so that every member gets a share of the rewards of every block proposed by the pool. This way, you can stop worrying about luck and start earning rewards consistently!

+

🚀 Don't miss high fee seasons!

+

With an average of only 3 block proposals per year, how likely are you to catch a period of high fees? How much does it hurt to see a NFT sale, or a peak in activity and not catch any of the action?

+

In Smooth, block proposals are constant, so no matter what happens in the network, you will always be there to get your share of it!

+

💰 Hitting MEV Lottery Blocks

+

Ever since they arrived, MEV rewards are distributed very unevenly. The vast majority of blocks have very low MEV rewards, while only very few blocks have very high rewards. As a Solo Staker, you have a very low chance of hitting one of these high-reward blocks. The median MEV typically hovers around 0.05 ETH, but certain lottery blocks can reach up to 30, 90, or even 300 ETH!

+

By adding together all our chances of hitting a lottery block, we have a much higher chance of proposing one! In backtesting simulations, rewards of a Smoothing Pool participant are up to 60% higher than those of a Solo Staker!

+
tip

For a detailed comparison between Solo Stakers and Smoothing Pool participants' rewards, explore this Smoothing Pool analysis

+

Lido, Centralized Exchanges and other pools with lots of validators consistently hit lottery blocks because of the sheer numbers of validators they have. They naturally split these rewards between all their validators, effectively being at an advantage vs the average Solo Staker.

+

This is a centralizing force, as the rich become richer and bigger operations get bigger rewards. Now, Solo Stakers with few validators don't depend on luck to be at par with the big guys!

\ No newline at end of file diff --git a/docs/smooth/subscribe-to-smooth/automatic/index.html b/docs/smooth/subscribe-to-smooth/automatic/index.html index b025aa906..4159bf2b1 100644 --- a/docs/smooth/subscribe-to-smooth/automatic/index.html +++ b/docs/smooth/subscribe-to-smooth/automatic/index.html @@ -1,18 +1,22 @@ - + - -Automatic Subscription | Dappnode - - - + +Automatic Subscription | Dappnode + + + - -
-

Automatic Subscription

This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block.

Before automatically subscribing to Smooth!

Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth.

Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth.

Step 1: Change your fee recipient to Smooth's address.

Go to your dappnode's staking brain and change the fee recipient of the validators you want to subscribe to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35). Once Smooth receives the rewards from your validator, it will automatically subscribe your validator, and you will start receiving rewards from other members. -fee_recipient

Keep the fee recipient set to Smooth's address!

It is extremely important that you keep the fee recipient of your validator set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) as long as it is subscribed to Smooth. If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from Smooth and will not be able to participate in it again.

Step 2: Check your subscription status!

Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear. Once the validator proposes a block, it will appear as subscribed. We recommend you familiarize yourself with this website! It is the place where you will manage your validators going forward.

- - + +

Automatic Subscription

+

This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block.

+
Before automatically subscribing to Smooth!

Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth.

Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth.

+

Step 1: Change your fee recipient to Smooth's address.

+

Go to your dappnode's staking brain and change the fee recipient of the validators you want to subscribe to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35). Once Smooth receives the rewards from your validator, it will automatically subscribe your validator, and you will start receiving rewards from other members. +fee_recipient

+
Keep the fee recipient set to Smooth's address!

It is extremely important that you keep the fee recipient of your validator set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) as long as it is subscribed to Smooth. If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from Smooth and will not be able to participate in it again.

+

Step 2: Check your subscription status!

+

Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear. Once the validator proposes a block, it will appear as subscribed. We recommend you familiarize yourself with this website! It is the place where you will manage your validators going forward.

\ No newline at end of file diff --git a/docs/smooth/subscribe-to-smooth/manual/index.html b/docs/smooth/subscribe-to-smooth/manual/index.html index f544a6feb..f32a7e7d9 100644 --- a/docs/smooth/subscribe-to-smooth/manual/index.html +++ b/docs/smooth/subscribe-to-smooth/manual/index.html @@ -1,18 +1,52 @@ - + - -Manual Subscription | Dappnode - - - + +Manual Subscription | Dappnode + + + - -
-

Manual Subscription

Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from Smooth.

The manual subscription is done through Smooth's website.

Step 1: Change your fee recipient to Smooth's address.

Change the fee recipient of your validator to Smooth's address, just as if you were subscribing automatically. In Dappnode, this process is as simple as changing the fee recipient in your staking brain.

fee_recipient

This step is extremely important. Make sure you're changing the fee recipient of the validators you are going to manually subscribe and that the fee recipient is correctly set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35). If a subscribed validator proposes a block with an incorrect fee recipient, it will be banned from Smooth and will not be able to participate in it again.

Keep the fee recipient set to Smooth's address!

It is crucial that you keep the fee recipient of your validator set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) as long as it is subscribed to Smooth. If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from Smooth and will not be able to participate in it again.

Step 2: Log in to Smooth's website.

Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear.

Step 3: Select your validator.

Select the validator you want to subscribe to Smooth by clicking on the "Subscribe" button. -my_validators

When clicking on the "Subscribe" button, Smooth will check if your validator is registered to any MEV relay. If it is, it will also check if the fee recipient of your validator is set to Smooth's address in each relay. Four different dialogs can appear, depending on the state of your validator and the MEV relays it is registered to.

Scenario 1: Validator is not registered to any MEV relay.

no_relays

When doing a manual subscription, it is obligatory to be registered in at least one MEV relay. In Dappnode, registering and using a relay is as simple as selecting the desired relay in the "MEV Boost" Card at the Stakers UI. Once you have selected at least one relay, you can go back to the Smooth website and click on the "Subscribe" button again.

Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay.

incorrect_fee_recipient

Please make sure that you have correctly done the first step of this guide! This dialog means that not a single relay has reflected your fee recipient change to Smooth's address. If running a dappnode, make sure your MEV boost package is running!

info

It can take up to a few minutes for relays to reflect your fee recipient change. If you have already changed your fee recipient but this alert still appears, please check the "Troubleshooting" section down below for more information.

Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays.

incorrect_fee_recipient

If this dialog appears, it means that your validator's fee recipient is set to Smooth in some relays while also being set to an incorrect address in others. This situation likely arises because your validator was registered in a relay it no longer uses, and the fee recipient in that specific relay wasn't updated accordingly.

info

Relays that you no longer use won't reflect the fee recipient changes you did for each validator in your staking brain. If you have already changed your fee recipient but the warning still appears, please check the "Troubleshooting" section down below for more information.

Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set.

correct_fee_recipient

This is the dialog you want to see! If you see this dialog, it means that your validator is registered to at least one MEV relay, and that the fee recipient of your validator is set to Smooth's address in all relays it has been registered to. In other words, this means that your validator is ready to subscribe to Smooth!

Step 4: Confirm Relays check.

mev_blocks

This step is just a confirmation of the relays your validator has the correct fee recipient set in. Click on "Next" to continue the subscription process, we're almost there!

Step 5: Make the deposit and subscribe!

deposit

This is the last step! Here, you will make the deposit to subscribe your validator to Smooth. The deposit is a one-time upfront payment that will be returned to you as Claimable rewards when proposing your first block to Smooth. The deposit is 0.01 ETH, and it is used to prevent spam and malicious validators from subscribing to Smooth.

Once the deposit transaction is processed by the chain, your validator will be subscribed to Smooth and you will start receiving rewards from other members of the pool!

subscription_success

caution

Since the Oracle operates with only finalized data, it will take up to 35 minutes to process your subscription. Your "My Validator" table will be updated instantly, but it may take a while to see how "Total Subscribers" counter increases. To know more, visit the Deep Dive into Smooth section.

Troubleshooting.

I have changed my fee recipient but the "Fee recipient warning" warning still appears!
If you have changed your fee recipient to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) but this warning still appears, it could be because of two reasons:
  • The relays you are registered to are not reflecting the change in the fee recipient yet. It can take up to a few minutes for the relays to reflect your fee recipient update. This is something that is out of Smooth's control. We recommend you to wait a few minutes and try again.
  • The fee recipient is only updated in your current active relays. This means that if you used to be registered to a relay, but you are not using it anymore, the fee recipient of your validator will not be updated in that relay. This is something expected and that it wont affect your validator's subscription to [Smooth](https://smooth.dappnode.io/). If you want to update the fee recipient in the relays you are no longer registered to, you can quickly register and unregister again to the outdated relays to force an update the fee recipient there.
To clarify: As long as the fee recipient of your validator is set to Smooth's address in your staking brain, you can continue the subscription process normally.
- - + +

Manual Subscription

+

Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from Smooth.

+

The manual subscription is done through Smooth's website.

+

Step 1: Change your fee recipient to Smooth's address.

+

Change the fee recipient of your validator to Smooth's address, just as if you were subscribing automatically. In Dappnode, this process is as simple as changing the fee recipient in your staking brain.

+

fee_recipient

+

This step is extremely important. Make sure you're changing the fee recipient of the validators you are going to manually subscribe and that the fee recipient is correctly set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35). If a subscribed validator proposes a block with an incorrect fee recipient, it will be banned from Smooth and will not be able to participate in it again.

+
Keep the fee recipient set to Smooth's address!

It is crucial that you keep the fee recipient of your validator set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) as long as it is subscribed to Smooth. If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from Smooth and will not be able to participate in it again.

+

Step 2: Log in to Smooth's website.

+

Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear.

+

Step 3: Select your validator.

+

Select the validator you want to subscribe to Smooth by clicking on the "Subscribe" button. +my_validators

+

When clicking on the "Subscribe" button, Smooth will check if your validator is registered to any MEV relay. If it is, it will also check if the fee recipient of your validator is set to Smooth's address in each relay. Four different dialogs can appear, depending on the state of your validator and the MEV relays it is registered to.

+

Scenario 1: Validator is not registered to any MEV relay.

+

no_relays

+

When doing a manual subscription, it is obligatory to be registered in at least one MEV relay. In Dappnode, registering and using a relay is as simple as selecting the desired relay in the "MEV Boost" Card at the Stakers UI. Once you have selected at least one relay, you can go back to the Smooth website and click on the "Subscribe" button again.

+

Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay.

+

incorrect_fee_recipient

+

Please make sure that you have correctly done the first step of this guide! This dialog means that not a single relay has reflected your fee recipient change to Smooth's address. If running a dappnode, make sure your MEV boost package is running!

+
info

It can take up to a few minutes for relays to reflect your fee recipient change. If you have already changed your fee recipient but this alert still appears, please check the "Troubleshooting" section down below for more information.

+

Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays.

+

incorrect_fee_recipient

+

If this dialog appears, it means that your validator's fee recipient is set to Smooth in some relays while also being set to an incorrect address in others. This situation likely arises because your validator was registered in a relay it no longer uses, and the fee recipient in that specific relay wasn't updated accordingly.

+
info

Relays that you no longer use won't reflect the fee recipient changes you did for each validator in your staking brain. If you have already changed your fee recipient but the warning still appears, please check the "Troubleshooting" section down below for more information.

+

Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set.

+

correct_fee_recipient

+

This is the dialog you want to see! If you see this dialog, it means that your validator is registered to at least one MEV relay, and that the fee recipient of your validator is set to Smooth's address in all relays it has been registered to. In other words, this means that your validator is ready to subscribe to Smooth!

+

Step 4: Confirm Relays check.

+

mev_blocks

+

This step is just a confirmation of the relays your validator has the correct fee recipient set in. Click on "Next" to continue the subscription process, we're almost there!

+

Step 5: Make the deposit and subscribe!

+

deposit

+

This is the last step! Here, you will make the deposit to subscribe your validator to Smooth. The deposit is a one-time upfront payment that will be returned to you as Claimable rewards when proposing your first block to Smooth. The deposit is 0.01 ETH, and it is used to prevent spam and malicious validators from subscribing to Smooth.

+

Once the deposit transaction is processed by the chain, your validator will be subscribed to Smooth and you will start receiving rewards from other members of the pool!

+

subscription_success

+
caution

Since the Oracle operates with only finalized data, it will take up to 35 minutes to process your subscription. Your "My Validator" table will be updated instantly, but it may take a while to see how "Total Subscribers" counter increases. To know more, visit the Deep Dive into Smooth section.

+

Troubleshooting.

+
I have changed my fee recipient but the "Fee recipient warning" warning still appears!

If you have changed your fee recipient to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) but this warning still appears, it could be because of two reasons:

  • The relays you are registered to are not reflecting the change in the fee recipient yet. It can take up to a few minutes for the relays to reflect your fee recipient update. This is something that is out of Smooth's control. We recommend you to wait a few minutes and try again.
  • The fee recipient is only updated in your current active relays. This means that if you used to be registered to a relay, but you are not using it anymore, the fee recipient of your validator will not be updated in that relay. This is something expected and that it wont affect your validator's subscription to Smooth. If you want to update the fee recipient in the relays you are no longer registered to, you can quickly register and unregister again to the outdated relays to force an update the fee recipient there.

To clarify: As long as the fee recipient of your validator is set to Smooth's address in your staking brain, you can continue the subscription process normally.

\ No newline at end of file diff --git a/docs/smooth/subscribe-to-smooth/overview/index.html b/docs/smooth/subscribe-to-smooth/overview/index.html index 938390aa8..9de694181 100644 --- a/docs/smooth/subscribe-to-smooth/overview/index.html +++ b/docs/smooth/subscribe-to-smooth/overview/index.html @@ -1,17 +1,25 @@ - + - -Subscribing to Smooth | Dappnode - - - + +Subscribing to Smooth | Dappnode + + + - -
-

Subscribing to Smooth

Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.

Before subscribing to Smooth!

Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth.

Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth.

You have two options to subscribe to Smooth:

  1. Automatic subscription: The simplest way to subscribe, change the fee recipient of your validators to Smooth's address and subscribe automatically when proposing your next block!

  2. Manual subscription: Change the fee recipient of your validators to Smooth's address and use the Smooth's website to subscribe right now, without waiting for your validators to propose a block. Start earning rewards right away!

- - + +

Subscribing to Smooth

+

Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.

+
Before subscribing to Smooth!

Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth.

Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth.

+

You have two options to subscribe to Smooth:

+
    +
  1. +

    Automatic subscription: The simplest way to subscribe, change the fee recipient of your validators to Smooth's address and subscribe automatically when proposing your next block!

    +
  2. +
  3. +

    Manual subscription: Change the fee recipient of your validators to Smooth's address and use the Smooth's website to subscribe right now, without waiting for your validators to propose a block. Start earning rewards right away!

    +
  4. +
\ No newline at end of file diff --git a/docs/smooth/unsubscribe-from-smooth/index.html b/docs/smooth/unsubscribe-from-smooth/index.html index 3132e2764..db32ae11f 100644 --- a/docs/smooth/unsubscribe-from-smooth/index.html +++ b/docs/smooth/unsubscribe-from-smooth/index.html @@ -1,17 +1,27 @@ - + - -Unsubscribing from Smooth. | Dappnode - - - + +Unsubscribing from Smooth. | Dappnode + + + - -
-

Unsubscribing from Smooth.

Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth's website and it only takes one simple transaction.

caution

When unsubscribing a validator from Smooth, you will lose all pending rewards attached to it. We recommend unsubscribing just after successfully proposing a block, so lost pending rewards are minimized.

Step 1: Log in to Smooth's website.

Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear.

Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.

Once logged in, click on the "Unsubscribe" button of the validator you want to unsubscribe from Smooth.

my-unsub-table

Step 3: Follow the dialog instructions.

unsub-initial-dialog

Once clicking on the "Unsubscribe" button, a dialog will appear warning you that you are about to unsubscribe from Smooth, and that it is recommended to do it when pending rewards are low. Click on "Claim my rewards" to continue and follow the dialog instructions. If you have any claimable rewards, a transaction that claims them will be prepared. If no claimable rewards are available, you will jump directly into the unsubscribe transaction.

unsub-done

Once the subscription transaction is processed by the chain, your validator will have been unsubscribed sucessfully from Smooth. You can check it by reloading your validator's table.

caution

After unsubscribing, we recommend to change your validator's fee recipient back to another address as soon as possible, in order to avoid automatically subscribing to Smooth again.

- - + +

Unsubscribing from Smooth.

+

Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth's website and it only takes one simple transaction.

+
caution

When unsubscribing a validator from Smooth, you will lose all pending rewards attached to it. We recommend unsubscribing just after successfully proposing a block, so lost pending rewards are minimized.

+

Step 1: Log in to Smooth's website.

+

Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear.

+

Step 2: Click on the "Unsubscribe" button of the validator you want to unsubscribe.

+

Once logged in, click on the "Unsubscribe" button of the validator you want to unsubscribe from Smooth.

+

my-unsub-table

+

Step 3: Follow the dialog instructions.

+

unsub-initial-dialog

+

Once clicking on the "Unsubscribe" button, a dialog will appear warning you that you are about to unsubscribe from Smooth, and that it is recommended to do it when pending rewards are low. Click on "Claim my rewards" to continue and follow the dialog instructions. If you have any claimable rewards, a transaction that claims them will be prepared. If no claimable rewards are available, you will jump directly into the unsubscribe transaction.

+

unsub-done

+

Once the subscription transaction is processed by the chain, your validator will have been unsubscribed sucessfully from Smooth. You can check it by reloading your validator's table.

+
caution

After unsubscribing, we recommend to change your validator's fee recipient back to another address as soon as possible, in order to avoid automatically subscribing to Smooth again.

\ No newline at end of file diff --git a/docs/user/access-your-dappnode/local/index.html b/docs/user/access-your-dappnode/local/index.html index 24e061e45..ab74572cd 100644 --- a/docs/user/access-your-dappnode/local/index.html +++ b/docs/user/access-your-dappnode/local/index.html @@ -1,17 +1,40 @@ - + - -Local Proxy Access to Dappnode | Dappnode - - - + +Local Proxy Access to Dappnode | Dappnode + + + - -
-

Local Proxy Access to Dappnode

The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users.

When to Use Local Proxy

  • 🛠 Setup & Recovery: If you're setting up your VPN or recovering from access issues, the local proxy can be really useful.
  • 📡 Same Network: It's crucial to be on the same local network as your Dappnode.
  • ⚠️ Network Limitations: Local proxy access might not always be available due to specific network configurations or restrictions.

Accessing Dappnode via Local Proxy

  1. 📱 On a device of your choice that's connected to the same network as your Dappnode, open a web browser.
  2. 🌐 Type in http://dappnode.local in the address bar.
  3. 🛡 If prompted, use your Dappnode credentials to log in or register as a new user if you haven't already.
caution

If http://dappnode.local doesn't work, there might be network-specific restrictions or configurations preventing access. In such cases, consider other access methods or reach out for support.

Limitations & Settings

  • ⚠️ Access Limitations: When using the local network proxy, you're limited to the Dappnode Admin UI dashboard at dappnode.local and cannot access other features like blockchain clients (Ethereum, Gnosis Chain, etc.). For full feature access, you'd need to configure and use either a VPN or the included Wi-Fi hotspot.

  • Turning Local Proxy Off: If you primarily use VPN features or the included Wi-Fi hotspot and find no use for local network access, you can disable it. Disabling can also be a security measure if you don't want all devices on your network to have access to this UI, even though it's protected by a password. To toggle local network access, navigate to the Wi-Fi sidebar menu on your Dappnode:

    🔍 Navigate to the Local Network menu on your Dappnode.

    🔧 Toggle the "Local Network Proxy" switch.

    Dappnode Local Proxy Switch

- - + +

Local Proxy Access to Dappnode

+

The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users.

+

When to Use Local Proxy

+
    +
  • 🛠 Setup & Recovery: If you're setting up your VPN or recovering from access issues, the local proxy can be really useful.
  • +
  • 📡 Same Network: It's crucial to be on the same local network as your Dappnode.
  • +
  • ⚠️ Network Limitations: Local proxy access might not always be available due to specific network configurations or restrictions.
  • +
+

Accessing Dappnode via Local Proxy

+
    +
  1. 📱 On a device of your choice that's connected to the same network as your Dappnode, open a web browser.
  2. +
  3. 🌐 Type in http://dappnode.local in the address bar.
  4. +
  5. 🛡 If prompted, use your Dappnode credentials to log in or register as a new user if you haven't already.
  6. +
+
caution

If http://dappnode.local doesn't work, there might be network-specific restrictions or configurations preventing access. In such cases, consider other access methods or reach out for support.

+

Limitations & Settings

+
    +
  • +

    ⚠️ Access Limitations: When using the local network proxy, you're limited to the Dappnode Admin UI dashboard at dappnode.local and cannot access other features like blockchain clients (Ethereum, Gnosis Chain, etc.). For full feature access, you'd need to configure and use either a VPN or the included Wi-Fi hotspot.

    +
  • +
  • +

    Turning Local Proxy Off: If you primarily use VPN features or the included Wi-Fi hotspot and find no use for local network access, you can disable it. Disabling can also be a security measure if you don't want all devices on your network to have access to this UI, even though it's protected by a password. To toggle local network access, navigate to the Wi-Fi sidebar menu on your Dappnode:

    +

    🔍 Navigate to the Local Network menu on your Dappnode.

    +

    🔧 Toggle the "Local Network Proxy" switch.

    +

    Dappnode Local Proxy Switch

    +
  • +
\ No newline at end of file diff --git a/docs/user/access-your-dappnode/overview/index.html b/docs/user/access-your-dappnode/overview/index.html index 2d497796a..ec57a51b5 100644 --- a/docs/user/access-your-dappnode/overview/index.html +++ b/docs/user/access-your-dappnode/overview/index.html @@ -1,17 +1,31 @@ - + - -🌐 Access your Dappnode | Dappnode - - - + +🌐 Access your Dappnode | Dappnode + + + - -
-

🌐 Access your Dappnode

Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.

Here are four ways you can connect to your Dappnode:

  1. 📡 Wifi: A user-friendly way, especially for those with Dappnode pre-installed on their machines.

  2. 🔐 VPN: Using either Wireguard or OpenVPN, this method is both secure and versatile. You can connect from inside or outside your local network, but if you're connecting from outside, you might need to adjust some settings.

  3. 🔗 Local Proxy (Recovery): This is a backup connection method. It allows you to connect to Dappmanager when you're on the same local network. It's mainly for recovery purposes because of its limitations.

  4. 💻 Terminal (Advanced, Recovery): This is for those who know their way around computer commands. It provides complete control but might be complex for some users.

info

💡 To ensure you can always access your Dappnode, it's a smart idea to set up and know more than one connection method. In the coming sections, we'll guide you through setting up each of these connection ways.

- - + +

🌐 Access your Dappnode

+

Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.

+

Here are four ways you can connect to your Dappnode:

+
    +
  1. +

    📡 Wifi: A user-friendly way, especially for those with Dappnode pre-installed on their machines.

    +
  2. +
  3. +

    🔐 VPN: Using either Wireguard or OpenVPN, this method is both secure and versatile. You can connect from inside or outside your local network, but if you're connecting from outside, you might need to adjust some settings.

    +
  4. +
  5. +

    🔗 Local Proxy (Recovery): This is a backup connection method. It allows you to connect to Dappmanager when you're on the same local network. It's mainly for recovery purposes because of its limitations.

    +
  6. +
  7. +

    💻 Terminal (Advanced, Recovery): This is for those who know their way around computer commands. It provides complete control but might be complex for some users.

    +
  8. +
+
info

💡 To ensure you can always access your Dappnode, it's a smart idea to set up and know more than one connection method. In the coming sections, we'll guide you through setting up each of these connection ways.

\ No newline at end of file diff --git a/docs/user/access-your-dappnode/terminal/index.html b/docs/user/access-your-dappnode/terminal/index.html index ed04e406b..21b09b2af 100644 --- a/docs/user/access-your-dappnode/terminal/index.html +++ b/docs/user/access-your-dappnode/terminal/index.html @@ -1,17 +1,62 @@ - + - -Terminal Access to Dappnode | Dappnode - - - + +Terminal Access to Dappnode | Dappnode + + + - -
-

Terminal Access to Dappnode

Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.

caution

Proceed with caution when using terminal access. Always understand the implications of commands and configurations before executing them.

SSH Access

SSH (Secure Shell) allows secure remote access to systems.

  1. Ensure your device is connected to the same network as the Dappnode.

  2. Open a terminal or command prompt on your device.

  3. Type:

    ssh dappnode@<DAPPNODE_LOCAL_IP_ADDRESS>

    Replace <DAPPNODE_LOCAL_IP_ADDRESS> with your Dappnode's actual IP address.

  4. When prompted, use the following credentials:

    • Username: dappnode
    • Password: dappnode.s0
note

During the onboarding process in Dappmanager, you are prompted to change the default host password for the "dappnode" user. If you have completed this step, the default password dappnode.s0 might no longer work. Always use the password you set during onboarding.

External SSH Access

For accessing Dappnode from outside your local network:

  1. Configure port forwarding on your router. Direct external SSH requests (typically port 22) to your Dappnode's internal IP address.

  2. For added security, use a strong password or implement SSH keys.

  3. To SSH, use:

    ssh dappnode@<EXTERNAL_IP_ADDRESS>
caution

Exposing SSH to the internet can be risky. Ensure you adopt robust security practices and are aware of potential vulnerabilities.

Physical Terminal Access

Directly interface with Dappnode using a monitor and keyboard:

  1. Connect a monitor via the HDMI/VGA port.
  2. Plug in a USB keyboard.
  3. Power on or restart the Dappnode machine.
  4. When prompted, enter the password: dappnode.s0 (or the one you've set if changed during onboarding).
- - + +

Terminal Access to Dappnode

+

Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.

+
caution

Proceed with caution when using terminal access. Always understand the implications of commands and configurations before executing them.

+

SSH Access

+

SSH (Secure Shell) allows secure remote access to systems.

+
    +
  1. +

    Ensure your device is connected to the same network as the Dappnode.

    +
  2. +
  3. +

    Open a terminal or command prompt on your device.

    +
  4. +
  5. +

    Type:

    +
    ssh dappnode@<DAPPNODE_LOCAL_IP_ADDRESS>
    +

    Replace <DAPPNODE_LOCAL_IP_ADDRESS> with your Dappnode's actual IP address.

    +
  6. +
  7. +

    When prompted, use the following credentials:

    +
      +
    • Username: dappnode
    • +
    • Password: dappnode.s0
    • +
    +
  8. +
+
note

During the onboarding process in Dappmanager, you are prompted to change the default host password for the "dappnode" user. If you have completed this step, the default password dappnode.s0 might no longer work. Always use the password you set during onboarding.

+

External SSH Access

+

For accessing Dappnode from outside your local network:

+
    +
  1. +

    Configure port forwarding on your router. Direct external SSH requests (typically port 22) to your Dappnode's internal IP address.

    +
  2. +
  3. +

    For added security, use a strong password or implement SSH keys.

    +
  4. +
  5. +

    To SSH, use:

    +
    ssh dappnode@<EXTERNAL_IP_ADDRESS>
    +
  6. +
+
caution

Exposing SSH to the internet can be risky. Ensure you adopt robust security practices and are aware of potential vulnerabilities.

+

Physical Terminal Access

+

Directly interface with Dappnode using a monitor and keyboard:

+
    +
  1. Connect a monitor via the HDMI/VGA port.
  2. +
  3. Plug in a USB keyboard.
  4. +
  5. Power on or restart the Dappnode machine.
  6. +
  7. When prompted, enter the password: dappnode.s0 (or the one you've set if changed during onboarding).
  8. +
\ No newline at end of file diff --git a/docs/user/access-your-dappnode/vpn/openvpn/index.html b/docs/user/access-your-dappnode/vpn/openvpn/index.html index b725693d5..e63d2e129 100644 --- a/docs/user/access-your-dappnode/vpn/openvpn/index.html +++ b/docs/user/access-your-dappnode/vpn/openvpn/index.html @@ -1,17 +1,109 @@ - + - -OpenVPN Access to Dappnode | Dappnode - - - + +OpenVPN Access to Dappnode | Dappnode + + + - -
-

OpenVPN Access to Dappnode

OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode.

Setting Up OpenVPN

1. Get VPN Credentials URL

There are two primary methods to obtain your VPN credentials, based on your access level to the Dappmanager:

Option 1: Via Dappmanager UI

If you have access to the Dappmanager:

  • Navigate to VPN > OpenVPN.

    • If you don't see any device added to the list:

      1. Provide a name for your device.
      2. Click on 'Add New Device'.
    • To retrieve the credentials:

      1. Click on the 'Get Link' button.
      2. Copy the URL displayed.
Separate Credentials for Each Device

For the best experience and to enable simultaneous access, it's recommended to create a separate device entry in the Dappnode VPN list for each device you intend to use for accessing your Dappnode.

While it's technically possible to use the same credentials on multiple devices, doing so can lead to connectivity issues when trying to access the Dappnode from multiple devices at the same time.

By setting up distinct credentials for each device, you ensure a smooth, uninterrupted connection for all your devices.

Option 2: Via Dappnode Terminal

If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:

  1. Access the Dappnode terminal, as explained here.

  2. Execute the command: dappnode_openvpn.

  3. A URL will be displayed on the terminal. Copy it.

2. Download OpenVPN Credentials

With the URL you obtained in the previous step, you'll now download the OpenVPN credentials:

  1. Open a web browser on any device.
  2. Paste the URL you copied into the address bar and navigate to it.
  3. You should be taken to a page where the OpenVPN credentials for your Dappnode can be downloaded. Click on the download button or link to download the .ovpn file, which contains your OpenVPN configuration and credentials.
caution

Ensure that you store credentials securely. The .ovpn file provides direct access to your Dappnode, so treat it with the same caution you'd treat a password.

3. OpenVPN Installation

Once you've obtained your OpenVPN credentials, the next step is to install an OpenVPN client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the OpenVPN website.

4. Connecting to Dappnode via OpenVPN

Once you have installed the OpenVPN client on your device, follow the steps below based on your operating system to connect to Dappnode:

Android
  1. Launch the OpenVPN for Android app.
  2. Tap on "Import file".
  3. Upload the .ovpn file you downloaded earlier.
  4. Click on "Connect".
  5. Allow the app to create a VPN connection.

Import file in Android

iPhone/iPad
  1. Go to the URL you obtained in the previous step.
  2. Download the .ovpn file.
  3. Click on "Open in OpenVPN".
  4. Click on "Add".
  5. Click on "Connect"
  6. Allow the app to create a VPN connection.

Import file in iPhone

macOS
  1. Launch Tunnelblick app for macOS.
  2. Click on "VPN Details" in the top bar menu.
  3. Drag and drop the .ovpn file you downloaded earlier in the left side bar.
  4. Click on Connect.

Import file in macOS

Windows
  1. Launch the OpenVPN for Windows app.
  2. Click on "Import file".
  3. Upload the .ovpn file you downloaded earlier.
  4. Allow the app to create a VPN connection.

Import file in Windows

Recent Ubuntu
  1. Open Settings>Network.
  2. Click on the "+" button to add a new VPN connection.
  3. Select "Import from file".
  4. Upload the .ovpn file you downloaded earlier.
  5. Click on "Add".
  6. Toggle the switch button to connect.

Import file in Ubuntu

Import file in Ubuntu

Other Linux
  1. Open the terminal.
  2. Navigate to the directory where you have stored your .ovpn file.
  3. Execute the command: sudo openvpn Dappnode_VPN.ovpn.

Testing Your Connection

Once connected, you can directly type http://my.dappnode in your browser to access the Dappmanager.

- - + +

OpenVPN Access to Dappnode

+

OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode.

+

Setting Up OpenVPN

+

1. Get VPN Credentials URL

+

There are two primary methods to obtain your VPN credentials, based on your access level to the Dappmanager:

+

Option 1: Via Dappmanager UI

+

If you have access to the Dappmanager:

+
    +
  • +

    Navigate to VPN > OpenVPN.

    +
      +
    • +

      If you don't see any device added to the list:

      +
        +
      1. Provide a name for your device.
      2. +
      3. Click on 'Add New Device'.
      4. +
      +
    • +
    • +

      To retrieve the credentials:

      +
        +
      1. Click on the 'Get Link' button.
      2. +
      3. Copy the URL displayed.
      4. +
      +
    • +
    +
  • +
+
Separate Credentials for Each Device

For the best experience and to enable simultaneous access, it's recommended to create a separate device entry in the Dappnode VPN list for each device you intend to use for accessing your Dappnode.

While it's technically possible to use the same credentials on multiple devices, doing so can lead to connectivity issues when trying to access the Dappnode from multiple devices at the same time.

By setting up distinct credentials for each device, you ensure a smooth, uninterrupted connection for all your devices.

+

Option 2: Via Dappnode Terminal

+

If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:

+
    +
  1. +

    Access the Dappnode terminal, as explained here.

    +
  2. +
  3. +

    Execute the command: dappnode_openvpn.

    +
  4. +
  5. +

    A URL will be displayed on the terminal. Copy it.

    +
  6. +
+

2. Download OpenVPN Credentials

+

With the URL you obtained in the previous step, you'll now download the OpenVPN credentials:

+
    +
  1. Open a web browser on any device.
  2. +
  3. Paste the URL you copied into the address bar and navigate to it.
  4. +
  5. You should be taken to a page where the OpenVPN credentials for your Dappnode can be downloaded. Click on the download button or link to download the .ovpn file, which contains your OpenVPN configuration and credentials.
  6. +
+
caution

Ensure that you store credentials securely. The .ovpn file provides direct access to your Dappnode, so treat it with the same caution you'd treat a password.

+

3. OpenVPN Installation

+

Once you've obtained your OpenVPN credentials, the next step is to install an OpenVPN client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the OpenVPN website.

+

4. Connecting to Dappnode via OpenVPN

+

Once you have installed the OpenVPN client on your device, follow the steps below based on your operating system to connect to Dappnode:

+
Android
    +
  1. Launch the OpenVPN for Android app.
  2. +
  3. Tap on "Import file".
  4. +
  5. Upload the .ovpn file you downloaded earlier.
  6. +
  7. Click on "Connect".
  8. +
  9. Allow the app to create a VPN connection.
  10. +

Import file in Android

+
iPhone/iPad
    +
  1. Go to the URL you obtained in the previous step.
  2. +
  3. Download the .ovpn file.
  4. +
  5. Click on "Open in OpenVPN".
  6. +
  7. Click on "Add".
  8. +
  9. Click on "Connect"
  10. +
  11. Allow the app to create a VPN connection.
  12. +

Import file in iPhone

+
macOS
    +
  1. Launch Tunnelblick app for macOS.
  2. +
  3. Click on "VPN Details" in the top bar menu.
  4. +
  5. Drag and drop the .ovpn file you downloaded earlier in the left side bar.
  6. +
  7. Click on Connect.
  8. +

Import file in macOS

+
Windows
    +
  1. Launch the OpenVPN for Windows app.
  2. +
  3. Click on "Import file".
  4. +
  5. Upload the .ovpn file you downloaded earlier.
  6. +
  7. Allow the app to create a VPN connection.
  8. +

Import file in Windows

+
Recent Ubuntu
    +
  1. Open Settings>Network.
  2. +
  3. Click on the "+" button to add a new VPN connection.
  4. +
  5. Select "Import from file".
  6. +
  7. Upload the .ovpn file you downloaded earlier.
  8. +
  9. Click on "Add".
  10. +
  11. Toggle the switch button to connect.
  12. +

Import file in Ubuntu

Import file in Ubuntu

+
Other Linux
    +
  1. Open the terminal.
  2. +
  3. Navigate to the directory where you have stored your .ovpn file.
  4. +
  5. Execute the command: sudo openvpn Dappnode_VPN.ovpn.
  6. +
+
+
Testing Your Connection

Once connected, you can directly type http://my.dappnode in your browser to access the Dappmanager.

\ No newline at end of file diff --git a/docs/user/access-your-dappnode/vpn/overview/index.html b/docs/user/access-your-dappnode/vpn/overview/index.html index f1b06266d..386700458 100644 --- a/docs/user/access-your-dappnode/vpn/overview/index.html +++ b/docs/user/access-your-dappnode/vpn/overview/index.html @@ -1,17 +1,37 @@ - + - -VPN Access to Dappnode | Dappnode - - - + +VPN Access to Dappnode | Dappnode + + + - -
-

VPN Access to Dappnode

Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.

note

It is not possible to use both Dappnode WiFi hotspot and VPN at the same time. If you want to use VPN, you'll need to disconnect your device from the WiFi hotspot.

VPN Clients

  • WireGuard is a newer, streamlined VPN protocol known for its simplicity, speed, and security.
  • It requires less configuration and is considered more efficient in terms of CPU usage. Learn more

OpenVPN

  • OpenVPN is a well-established VPN protocol praised for its security and reliability.
  • It's more versatile and can bypass most network restrictions and firewalls. Learn more

Local vs. Remote Access

  • Local Access: Connecting to your Dappnode when you're on the same local network. Generally, this means that your Dappnode machine and the device you're using to access it are connected to the same router.
  • Remote Access: Connecting to your Dappnode from a different network or location. This is one of the major advantages of using a VPN.
info

VPN provides a balance of security, versatility, and remote access capability. You can choose the VPN technology that best suits your needs and preferences, both fufill the requirements of most users.

- - + +

VPN Access to Dappnode

+

Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.

+
note

It is not possible to use both Dappnode WiFi hotspot and VPN at the same time. If you want to use VPN, you'll need to disconnect your device from the WiFi hotspot.

+

VPN Clients

+ +
    +
  • WireGuard is a newer, streamlined VPN protocol known for its simplicity, speed, and security.
  • +
  • It requires less configuration and is considered more efficient in terms of CPU usage. Learn more
  • +
+

OpenVPN

+
    +
  • OpenVPN is a well-established VPN protocol praised for its security and reliability.
  • +
  • It's more versatile and can bypass most network restrictions and firewalls. Learn more
  • +
+

Local vs. Remote Access

+
    +
  • +

    Local Access: Connecting to your Dappnode when you're on the same local network. Generally, this means that your Dappnode machine and the device you're using to access it are connected to the same router.

    +
  • +
  • +

    Remote Access: Connecting to your Dappnode from a different network or location. This is one of the major advantages of using a VPN.

    +
  • +
+
info

VPN provides a balance of security, versatility, and remote access capability. You can choose the VPN technology that best suits your needs and preferences, both fufill the requirements of most users.

\ No newline at end of file diff --git a/docs/user/access-your-dappnode/vpn/wireguard/index.html b/docs/user/access-your-dappnode/vpn/wireguard/index.html index 3ee62f09d..462603200 100644 --- a/docs/user/access-your-dappnode/vpn/wireguard/index.html +++ b/docs/user/access-your-dappnode/vpn/wireguard/index.html @@ -1,17 +1,128 @@ - + - -WireGuard Access to Dappnode | Dappnode - - - + +WireGuard Access to Dappnode | Dappnode + + + - -
-

WireGuard Access to Dappnode

WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.

You will need:

  1. Your dappnode
  2. A Wireguard client installed on your usual device (laptop, mobile, etc.)

Setting Up WireGuard

1. Get VPN Credentials

There are two primary methods to obtain your VPN credentials:

Option 1: Via Dappmanager UI

VPN_credentials

If you have access to the Dappmanager:

  • Navigate to VPN > WireGuard.

    • If you don't see any device added to the list:

      1. Provide a name for your device.
      2. Click on 'Add New Device'.
    • To retrieve the credentials:

      1. Click on the 'Get link' button on the credentials column.
      2. You will be shown 3 different ways of retrieving the credentials:
        • Download config: it will download a .txt file with the credentials in plaintext
        • Copy config: it will copy the credentials in your clipboard so you can paste them in your wireguard client
        • Show config QR code: it will generate a QR that you can scan with a wireguard mobile client to add the config directly
      3. Please, see step 3. Setting up Wireguard client to see how to use this config once you have a client in your device (desktop/laptop/phone)
    • For Local Access Credentials:

      1. Click on 'Show Local Credentials'.
      2. Copy the local credentials displayed.

Option 2: Via Dappnode Terminal

If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:

  1. Access the Dappnode terminal, as explained here.

  2. Execute the command: dappnode_wireguard.

  3. The credentials will be displayed directly on the terminal. Copy these credentials.

  • For Local Access Credentials:
    1. Execute the command: dappnode_wireguard --local.
    2. Copy the local credentials displayed.
Local Credentials Explained

Local credentials allow you to establish a connection to your Dappnode when you are on the same local network. They are especially useful when remote credentials might not work due to certain network restrictions or configurations.

While remote credentials enable access from outside your local network, local credentials ensure a reliable connection within your home or office network. It's recommended to use local credentials when you are in proximity to your Dappnode to guarantee a stable and swift connection.

Always remember: Local credentials only work inside your own network. If you're trying to access your Dappnode from a different location or network, you'll need to use the remote credentials.

tip

Ensure you store these credentials securely. They provide direct access to your Dappnode. Treat them with the same level of caution as you would a password.

2. Installing WireGuard Client

After obtaining your VPN credentials, the next step is to install the WireGuard client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the WireGuard website.

3. Setting Up WireGuard Client

After installing the client:

  1. Launch the WireGuard application.
  2. Click on 'Add Tunnel' or 'Import Tunnel from File' based on your platform.
  3. Import the credentials you obtained in the earlier steps.
  4. Once imported, connect to your Dappnode by activating the tunnel.
Connection Status

You can verify your connection status within the WireGuard application. It will display if the tunnel is active, as well as data transfer rates.

4. Connecting to Dappnode via WireGuard

Android
  1. Launch the OpenVPN for Android app.
  2. Tap on "+" icon.
  3. Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile.

Import file in Android

iPhone/iPad
  1. Launch the OpenVPN for Android app.
  2. Tap on "Add a tunnel".
  3. Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile.

Import file in iPhone

Linux
  1. Create a file for your credentials: sudo nano /etc/wireguard/wg0.conf
  2. Paste your credentials there and save the file (Ctrl+Shift+V, Ctrl+O, Ctrl+X).
  3. Activate the tunnel: sudo wg-quick up wg0
Tunnel Deactivation

To deactivate the tunnel, execute the command: sudo wg-quick down wg0.

macOS
  1. In the list of Applications, search for WireGuard and launch it.
  2. Click on "Manage Tunnels".
  3. Click on the "+" button.
  4. Select "Add empty tunnel".
  5. Paste the credentials you obtained earlier.
  6. Give a name to this profile and click on "Save".
  7. Click on "Activate" to connect to your Dappnode.

Manage tunnels in macOS

Credentials in macOS

Windows
  1. Launch the OpenVPN for Windows app.
  2. Click on "Add Tunnel".
  3. Paste the credentials you obtained earlier and save.
  4. Activate the tunnel.

Import file in Windows

Import file in Windows

Import file in Windows


Testing Your Connection

Once connected, you can directly type http://my.dappnode in your browser to access the Dappmanager.

- - + +

WireGuard Access to Dappnode

+

WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.

+

You will need:

+
    +
  1. Your dappnode
  2. +
  3. A Wireguard client installed on your usual device (laptop, mobile, etc.)
  4. +
+

Setting Up WireGuard

+

1. Get VPN Credentials

+

There are two primary methods to obtain your VPN credentials:

+

Option 1: Via Dappmanager UI

+

VPN_credentials

+

If you have access to the Dappmanager:

+
    +
  • +

    Navigate to VPN > WireGuard.

    +
      +
    • +

      If you don't see any device added to the list:

      +
        +
      1. Provide a name for your device.
      2. +
      3. Click on 'Add New Device'.
      4. +
      +
    • +
    • +

      To retrieve the credentials:

      +
        +
      1. Click on the 'Get link' button on the credentials column.
      2. +
      3. You will be shown 3 different ways of retrieving the credentials: +
          +
        • Download config: it will download a .txt file with the credentials in plaintext
        • +
        • Copy config: it will copy the credentials in your clipboard so you can paste them in your wireguard client
        • +
        • Show config QR code: it will generate a QR that you can scan with a wireguard mobile client to add the config directly
        • +
        +
      4. +
      5. Please, see step 3. Setting up Wireguard client to see how to use this config once you have a client in your device (desktop/laptop/phone)
      6. +
      +
    • +
    • +

      For Local Access Credentials:

      +
        +
      1. Click on 'Show Local Credentials'.
      2. +
      3. Copy the local credentials displayed.
      4. +
      +
    • +
    +
  • +
+

Option 2: Via Dappnode Terminal

+

If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal:

+
    +
  1. +

    Access the Dappnode terminal, as explained here.

    +
  2. +
  3. +

    Execute the command: dappnode_wireguard.

    +
  4. +
  5. +

    The credentials will be displayed directly on the terminal. Copy these credentials.

    +
  6. +
+
    +
  • For Local Access Credentials: +
      +
    1. Execute the command: dappnode_wireguard --local.
    2. +
    3. Copy the local credentials displayed.
    4. +
    +
  • +
+
Local Credentials Explained

Local credentials allow you to establish a connection to your Dappnode when you are on the same local network. They are especially useful when remote credentials might not work due to certain network restrictions or configurations.

While remote credentials enable access from outside your local network, local credentials ensure a reliable connection within your home or office network. It's recommended to use local credentials when you are in proximity to your Dappnode to guarantee a stable and swift connection.

Always remember: Local credentials only work inside your own network. If you're trying to access your Dappnode from a different location or network, you'll need to use the remote credentials.

+
tip

Ensure you store these credentials securely. They provide direct access to your Dappnode. Treat them with the same level of caution as you would a password.

+

2. Installing WireGuard Client

+

After obtaining your VPN credentials, the next step is to install the WireGuard client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the WireGuard website.

+

3. Setting Up WireGuard Client

+

After installing the client:

+
    +
  1. Launch the WireGuard application.
  2. +
  3. Click on 'Add Tunnel' or 'Import Tunnel from File' based on your platform.
  4. +
  5. Import the credentials you obtained in the earlier steps.
  6. +
  7. Once imported, connect to your Dappnode by activating the tunnel.
  8. +
+
Connection Status

You can verify your connection status within the WireGuard application. It will display if the tunnel is active, as well as data transfer rates.

+

4. Connecting to Dappnode via WireGuard

+
Android
    +
  1. Launch the OpenVPN for Android app.
  2. +
  3. Tap on "+" icon.
  4. +
  5. Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile.
  6. +

Import file in Android

+
iPhone/iPad
    +
  1. Launch the OpenVPN for Android app.
  2. +
  3. Tap on "Add a tunnel".
  4. +
  5. Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile.
  6. +

Import file in iPhone

+
Linux
    +
  1. Create a file for your credentials: sudo nano /etc/wireguard/wg0.conf
  2. +
  3. Paste your credentials there and save the file (Ctrl+Shift+V, Ctrl+O, Ctrl+X).
  4. +
  5. Activate the tunnel: sudo wg-quick up wg0
  6. +
Tunnel Deactivation

To deactivate the tunnel, execute the command: sudo wg-quick down wg0.

+
macOS
    +
  1. In the list of Applications, search for WireGuard and launch it.
  2. +
  3. Click on "Manage Tunnels".
  4. +
  5. Click on the "+" button.
  6. +
  7. Select "Add empty tunnel".
  8. +
  9. Paste the credentials you obtained earlier.
  10. +
  11. Give a name to this profile and click on "Save".
  12. +
  13. Click on "Activate" to connect to your Dappnode.
  14. +

Manage tunnels in macOS

Credentials in macOS

+
Windows
    +
  1. Launch the OpenVPN for Windows app.
  2. +
  3. Click on "Add Tunnel".
  4. +
  5. Paste the credentials you obtained earlier and save.
  6. +
  7. Activate the tunnel.
  8. +

Import file in Windows

Import file in Windows

Import file in Windows

+
+
Testing Your Connection

Once connected, you can directly type http://my.dappnode in your browser to access the Dappmanager.

\ No newline at end of file diff --git a/docs/user/access-your-dappnode/wifi/index.html b/docs/user/access-your-dappnode/wifi/index.html index a5d63ce82..6ecdd2cc5 100644 --- a/docs/user/access-your-dappnode/wifi/index.html +++ b/docs/user/access-your-dappnode/wifi/index.html @@ -1,17 +1,30 @@ - + - -Wi-Fi Access to Dappnode | Dappnode - - - + +Wi-Fi Access to Dappnode | Dappnode + + + - -
-

Wi-Fi Access to Dappnode

If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode's Wi-Fi hotspot.

For those who got their hardware elsewhere, there's a chance the Wi-Fi card might not be recognized by the operating system. If this happens, you might need to install the required firmware. Since the steps vary based on the hardware, please contact our support on Discord if you face any issues.

Connecting to Dappnode Wi-Fi

  1. 📱 On a device of your choice, navigate to the Wi-Fi settings.
  2. 🔍 Search and select the network labeled as DappnodeWIFI.
  3. 🔑 Enter the password: dappnode.
  4. 🌐 Open a browser and go to http://my.dappnode/.
caution

After connecting for the first time, go to the Wi-Fi section in the left menu of Dappmanager and change the hotspot password to something only you know.

Wi-Fi Settings in Dappmanager

Once in the Wi-Fi section, you'll find two main options:

  1. Toggle Wi-Fi: Here, you can turn the Wi-Fi feature on or off.
  2. Wi-Fi Credentials: Set a new network name (SSID) and password for your Dappnode's Wi-Fi. We strongly advise you to change the default settings for better security.
- - + +

Wi-Fi Access to Dappnode

+

If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode's Wi-Fi hotspot.

+

For those who got their hardware elsewhere, there's a chance the Wi-Fi card might not be recognized by the operating system. If this happens, you might need to install the required firmware. Since the steps vary based on the hardware, please contact our support on Discord if you face any issues.

+

Connecting to Dappnode Wi-Fi

+
    +
  1. 📱 On a device of your choice, navigate to the Wi-Fi settings.
  2. +
  3. 🔍 Search and select the network labeled as DappnodeWIFI.
  4. +
  5. 🔑 Enter the password: dappnode.
  6. +
  7. 🌐 Open a browser and go to http://my.dappnode/.
  8. +
+
caution

After connecting for the first time, go to the Wi-Fi section in the left menu of Dappmanager and change the hotspot password to something only you know.

+

Wi-Fi Settings in Dappmanager

+

Once in the Wi-Fi section, you'll find two main options:

+
    +
  1. Toggle Wi-Fi: Here, you can turn the Wi-Fi feature on or off.
  2. +
  3. Wi-Fi Credentials: Set a new network name (SSID) and password for your Dappnode's Wi-Fi. We strongly advise you to change the default settings for better security.
  4. +
\ No newline at end of file diff --git a/docs/user/dappnode-cloud/overview/index.html b/docs/user/dappnode-cloud/overview/index.html index ad95f6910..edc763e44 100644 --- a/docs/user/dappnode-cloud/overview/index.html +++ b/docs/user/dappnode-cloud/overview/index.html @@ -1,19 +1,42 @@ - + - -What is Dappnode Cloud? | Dappnode - - - + +What is Dappnode Cloud? | Dappnode + + + - -
-

What is Dappnode Cloud?

Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.

tip

This allows you to run your decentralized applications more efficiently and cost-effectively, as you can customize your hardware specifications to meet your needs.

Why using Dappnode Cloud?

Dappnode Cloud offers numerous advantages over traditional hardware-based setups. By leveraging cloud infrastructure, you can bypass the complexities and limitations associated with physical hardware. Here are the key benefits that make Dappnode Cloud an attractive option:

No Initial Hardware Investment 💰

With Dappnode Cloud, there is no need to purchase an entire new machine every time you need a new Dappnode. This significantly reduces the initial cost barrier, allowing you to test Dappnode before you decide to install it in a physical machine or to quickly deploy a new Dappnode without having to purchase a new machine.

Stop when you want 🧑‍🔧️

For short stints, Dappnode Cloud allows you to deploy and also to stop running your Dappnode as soon as you have performed the tasks you wanted to do, with no electronic waste or an unallocated physical machine on your side.

Scalability 📈

With Dappnode Cloud, you can easily scale your resources up or down based on your current needs. Whether you're experiencing a lack of storage or you need a few more nodes quickly, you can adjust your cloud resources accordingly without the constraints of physical hardware limitations.

Physical or Cloud?

It is much better to run a physical Dappnode at your place for these 2 main reasons:

1. Economics 💲

A physical machine has a higher initial cost, but leverages your existing internet connection and consumes less energy than your fridge. This initial cost is pretty much the only cost you will have for the lifetime of the hardware you use. -Cloud servers have monthly costs associated with it that never go away, resulting in higher cost in the long term.

In summary, you will be better off with a physical machine if you plan to use your Dappnode for a long time, and better off with a Dappnode Cloud if you only want to use the instance for a short period of time.

2. Decentralization 🗽

The networks you will run on your Dapppnode become more resilient to corporate capture, government interference and localized events the more decentralized their nodes are. By running a Node in the cloud it is very likely that there is already a node of that network in the same data center, therefore adding no extra value to the decentralization of the network. -If instead you run the same node in a home setup from your home, you are adding a node that is much harder to censor, block, locate and subjugate than a node controlled by a big infrastructure corporation.

Remember, "The Cloud" is just someone else's computer.

Use cases

Dappnode Cloud offers versatile solutions for various users, providing the flexibility and reliability needed to meet your goals. Here are some of the primary use cases:

Blockchain participation & Solo Staking ⛓️

If obtaining hardware is not an option, Dappnode Cloud allows you to run a full node or even host your Ethereum or Gnosis validators without worrying about hardware requirements, internet connectivity, or power outages. This ensures continuous participation in the blockchain network with minimal hassle.

Testing 🧪

For those considering purchasing their own Dappnode but still uncertain, Dappnode Cloud provides an excellent opportunity to run a temporary Dappnode. This allows you to demo the system without facing the initial cost barrier, helping you make an informed decision.

Developing 🧑‍💻️

Dappnode Cloud is an excellent choice for developers who need a reliable and scalable environment to test and deploy dApps. Without the constraints of local hardware, developers can quickly iterate and deploy their applications, leveraging the power of cloud computing to simulate real-world conditions.

- - + +

What is Dappnode Cloud?

+

Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.

+
tip

This allows you to run your decentralized applications more efficiently and cost-effectively, as you can customize your hardware specifications to meet your needs.

+

Why using Dappnode Cloud?

+

Dappnode Cloud offers numerous advantages over traditional hardware-based setups. By leveraging cloud infrastructure, you can bypass the complexities and limitations associated with physical hardware. Here are the key benefits that make Dappnode Cloud an attractive option:

+

No Initial Hardware Investment 💰

+

With Dappnode Cloud, there is no need to purchase an entire new machine every time you need a new Dappnode. This significantly reduces the initial cost barrier, allowing you to test Dappnode before you decide to install it in a physical machine or to quickly deploy a new Dappnode without having to purchase a new machine.

+

Stop when you want 🧑‍🔧️

+

For short stints, Dappnode Cloud allows you to deploy and also to stop running your Dappnode as soon as you have performed the tasks you wanted to do, with no electronic waste or an unallocated physical machine on your side.

+

Scalability 📈

+

With Dappnode Cloud, you can easily scale your resources up or down based on your current needs. Whether you're experiencing a lack of storage or you need a few more nodes quickly, you can adjust your cloud resources accordingly without the constraints of physical hardware limitations.

+

Physical or Cloud?

+

It is much better to run a physical Dappnode at your place for these 2 main reasons:

+

1. Economics 💲

+

A physical machine has a higher initial cost, but leverages your existing internet connection and consumes less energy than your fridge. This initial cost is pretty much the only cost you will have for the lifetime of the hardware you use. +Cloud servers have monthly costs associated with it that never go away, resulting in higher cost in the long term.

+

In summary, you will be better off with a physical machine if you plan to use your Dappnode for a long time, and better off with a Dappnode Cloud if you only want to use the instance for a short period of time.

+

2. Decentralization 🗽

+

The networks you will run on your Dapppnode become more resilient to corporate capture, government interference and localized events the more decentralized their nodes are. By running a Node in the cloud it is very likely that there is already a node of that network in the same data center, therefore adding no extra value to the decentralization of the network. +If instead you run the same node in a home setup from your home, you are adding a node that is much harder to censor, block, locate and subjugate than a node controlled by a big infrastructure corporation.

+

Remember, "The Cloud" is just someone else's computer.

+

Use cases

+

Dappnode Cloud offers versatile solutions for various users, providing the flexibility and reliability needed to meet your goals. Here are some of the primary use cases:

+

Blockchain participation & Solo Staking ⛓️

+

If obtaining hardware is not an option, Dappnode Cloud allows you to run a full node or even host your Ethereum or Gnosis validators without worrying about hardware requirements, internet connectivity, or power outages. This ensures continuous participation in the blockchain network with minimal hassle.

+

Testing 🧪

+

For those considering purchasing their own Dappnode but still uncertain, Dappnode Cloud provides an excellent opportunity to run a temporary Dappnode. This allows you to demo the system without facing the initial cost barrier, helping you make an informed decision.

+

Developing 🧑‍💻️

+

Dappnode Cloud is an excellent choice for developers who need a reliable and scalable environment to test and deploy dApps. Without the constraints of local hardware, developers can quickly iterate and deploy their applications, leveraging the power of cloud computing to simulate real-world conditions.

\ No newline at end of file diff --git a/docs/user/dappnode-cloud/providers/aws/faqs/index.html b/docs/user/dappnode-cloud/providers/aws/faqs/index.html index 13d1fdf4a..c441c2c93 100644 --- a/docs/user/dappnode-cloud/providers/aws/faqs/index.html +++ b/docs/user/dappnode-cloud/providers/aws/faqs/index.html @@ -1,17 +1,74 @@ - + - -FAQs & Troubleshooting | Dappnode - - - + +FAQs & Troubleshooting | Dappnode + + + - -
-

FAQs & Troubleshooting

Which machine should I choose?
All available machines on AWS when launching an instance are suitable for running Dappnode. However, the best choice depends on your specific needs and intentions. Here's a general guide to help you decide:
  • Basic Testing and Development: For basic testing or development purposes, where you don't need high performance or large storage, a smaller instance with 2 vCPUs and 4 GB RAM should be sufficient. This setup allows you to explore Dappnode functionalities without significant resource investment.

  • Running a Node: For running a full node in any network, a more powerful instance is required. We recommend an instance with at least 2 vCPUs and 8 GB RAM, but to handle the heavy computational, an instance with 4 vCPUs, 16 GB RAM would be the perfect option.

Evaluate your use case and choose an instance that aligns with your performance and scalability requirements.

How much storage do I need?
The storage requirements for your Dappnode instance depend largely on your intended use. Here are some guidelines for different scenarios:
  • Dappnode Testing: For basic testing purposes, a minimum of 30 GB of disk space is recommended. This is sufficient for exploring the Dappnode environment and testing small applications without significant data storage needs.

  • Running a Node in Mainnet: If you plan to run a full node in the Ethereum mainnet, you will need approximately 1.4 TB (1304 GiB)

  • Running a Node in Holesky: For running a node in the Holesky testnet, you should allocate around 180 GB (168 GiB)

  • Running a Node in Lukso: If your goal is to run a node in the Lukso network, you will need about 40 GB (38 GiB)

  • Running a Node in Gnosis: To run a node in the Gnosis network, you should provision around 503 GB (469 GiB)

tip

Regardless of your initial choice, AWS EC2 allows you to scale your storage as needed after the instance is launched. You can easily adjust the storage size through the AWS EC2 UI to meet your growing needs.

Is it safe to have those security groups? Why are they needed?
Setting the security groups as explained in the Launch an instance section does not automatically open the specified ports. This configuration allows services from your Dappnode to open the specified ports when needed. It's crucial to understand that having these inbound rules does not mean those ports are constantly exposed.

SSH (Port 22):

  • Purpose: Allows you to securely connect to your instance via SSH.
  • Why Needed: Essential for remote management and troubleshooting of your instance.

HTTP (Port 80):

  • Purpose: Enables HTTP traffic to your instance.
  • Why Needed: Required for accessing web services and interfaces hosted on your Dappnode.

HTTPS (Port 443):

  • Purpose: Enables HTTPS traffic, providing secure access to web services.
  • Why Needed: Ensures secure connections to web interfaces and services, protecting data in transit.

Wireguard (Port 51820):

  • Purpose: Facilitates Wireguard VPN connections.
  • Why Needed: Necessary for establishing secure VPN connections to your Dappnode instance.

General TCP (Ports 1024-65535):

  • Purpose: Allows various TCP services to communicate over a wide range of ports.
  • Why Needed: Ensures that your Dappnode instance can communicate effectively with other nodes and services, enhancing overall performance.

General UDP (Ports 1024-65535):

  • Purpose: Allows various UDP services to communicate over a wide range of ports.
  • Why Needed: Similar to TCP, but for UDP traffic, this rule ensures that your Dappnode instance can efficiently handle peer-to-peer connections and other UDP-based communications.\
tip

We recommend including all the ports mentioned in your security group inbound rules. This ensures that your Dappnode instance can perform optimally and access all necessary services. However, if you are an experienced user, you can customize these rules to suit your specific needs. You can control which ports to expose based on your security preferences and operational requirements.

Why is it necessary to provide my Telegram user ID if I also provide my bot token?

If you want to run commands to your Dappnode via Telegram is it essential to provide your Telegram user ID. Even if you already provide the bot token, anyone with the bot's username could send messages (and running commands so) to your dappnode. This could lead on someone getting the wireguard credentials of your Dappnode and connecting to it.

That is why its mandatory to provide it, so your bot only listens to commands given by the account linked to your Telegram user ID.

Why do I want to connect via SSH to my Dappnode?

Connecting via SSH to your Dappnode allows you to access your instance's terminal directly. Even if you have obtained your Wireguard credentials via Telegram, having SSH access is important for several reasons:

  • Full Control: SSH access gives you complete control over your Dappnode instance, allowing you to perform advanced configurations and manage the system directly.

  • Troubleshooting: In case of potential issues or errors, accessing the terminal via SSH enables you to diagnose and fix problems efficiently.

  • Advanced Management: You can run commands, update software, monitor system performance, and manage services that may not be accessible through the standard Dappnode UI.

Having SSH access is crucial for maintaining and managing your Dappnode instance effectively, ensuring you can handle any technical challenges that arise.

I've already launched my instance and I'm not getting my Wireguard credentials

If you are not receiving your Wireguard credentials immediately after launching your instance, the Dappnode Image might still be installing. If this happens, wait a few minutes and try again.

  • Via SSH: If you encounter this issue, exit your SSH session with the exit command in your instance terminal and reconnect as explained in the guide.
  • Via Telegram Bot: Simply retry the /get_wireguard_credentials command after a short wait.

Additionally, ensure that your instance storage has not filled up during the installation. For a testing Dappnode (a Dappnode not intended to run a node in any network), we recommend at least 30 GB of storage.

- - + +

FAQs & Troubleshooting

+
Which machine should I choose?

All available machines on AWS when launching an instance are suitable for running Dappnode. However, the best choice depends on your specific needs and intentions. Here's a general guide to help you decide:

    +
  • +

    Basic Testing and Development: For basic testing or development purposes, where you don't need high performance or large storage, a smaller instance with 2 vCPUs and 4 GB RAM should be sufficient. This setup allows you to explore Dappnode functionalities without significant resource investment.

    +
  • +
  • +

    Running a Node: For running a full node in any network, a more powerful instance is required. We recommend an instance with at least 2 vCPUs and 8 GB RAM, but to handle the heavy computational, an instance with 4 vCPUs, 16 GB RAM would be the perfect option.

    +
  • +

Evaluate your use case and choose an instance that aligns with your performance and scalability requirements.

+
How much storage do I need?

The storage requirements for your Dappnode instance depend largely on your intended use. Here are some guidelines for different scenarios:

    +
  • +

    Dappnode Testing: For basic testing purposes, a minimum of 30 GB of disk space is recommended. This is sufficient for exploring the Dappnode environment and testing small applications without significant data storage needs.

    +
  • +
  • +

    Running a Node in Mainnet: If you plan to run a full node in the Ethereum mainnet, you will need approximately 1.4 TB (1304 GiB)

    +
  • +
  • +

    Running a Node in Holesky: For running a node in the Holesky testnet, you should allocate around 180 GB (168 GiB)

    +
  • +
  • +

    Running a Node in Lukso: If your goal is to run a node in the Lukso network, you will need about 40 GB (38 GiB)

    +
  • +
  • +

    Running a Node in Gnosis: To run a node in the Gnosis network, you should provision around 503 GB (469 GiB)

    +
  • +
tip

Regardless of your initial choice, AWS EC2 allows you to scale your storage as needed after the instance is launched. You can easily adjust the storage size through the AWS EC2 UI to meet your growing needs.

+
Is it safe to have those security groups? Why are they needed?

Setting the security groups as explained in the Launch an instance section does not automatically open the specified ports. This configuration allows services from your Dappnode to open the specified ports when needed. It's crucial to understand that having these inbound rules does not mean those ports are constantly exposed.



SSH (Port 22):

    +
  • Purpose: Allows you to securely connect to your instance via SSH.
  • +
  • Why Needed: Essential for remote management and troubleshooting of your instance.
  • +

HTTP (Port 80):

    +
  • Purpose: Enables HTTP traffic to your instance.
  • +
  • Why Needed: Required for accessing web services and interfaces hosted on your Dappnode.
  • +

HTTPS (Port 443):

    +
  • Purpose: Enables HTTPS traffic, providing secure access to web services.
  • +
  • Why Needed: Ensures secure connections to web interfaces and services, protecting data in transit.
  • +

Wireguard (Port 51820):

    +
  • Purpose: Facilitates Wireguard VPN connections.
  • +
  • Why Needed: Necessary for establishing secure VPN connections to your Dappnode instance.
  • +

General TCP (Ports 1024-65535):

    +
  • Purpose: Allows various TCP services to communicate over a wide range of ports.
  • +
  • Why Needed: Ensures that your Dappnode instance can communicate effectively with other nodes and services, enhancing overall performance.
  • +

General UDP (Ports 1024-65535):

    +
  • Purpose: Allows various UDP services to communicate over a wide range of ports.
  • +
  • Why Needed: Similar to TCP, but for UDP traffic, this rule ensures that your Dappnode instance can efficiently handle peer-to-peer connections and other UDP-based communications.\
  • +
tip

We recommend including all the ports mentioned in your security group inbound rules. This ensures that your Dappnode instance can perform optimally and access all necessary services. However, if you are an experienced user, you can customize these rules to suit your specific needs. You can control which ports to expose based on your security preferences and operational requirements.

+
Why is it necessary to provide my Telegram user ID if I also provide my bot token?

If you want to run commands to your Dappnode via Telegram is it essential to provide your Telegram user ID. Even if you already provide the bot token, anyone with the bot's username could send messages (and running commands so) to your dappnode. This could lead on someone getting the wireguard credentials of your Dappnode and connecting to it.

That is why its mandatory to provide it, so your bot only listens to commands given by the account linked to your Telegram user ID.

+
Why do I want to connect via SSH to my Dappnode?

Connecting via SSH to your Dappnode allows you to access your instance's terminal directly. Even if you have obtained your Wireguard credentials via Telegram, having SSH access is important for several reasons:

    +
  • +

    Full Control: SSH access gives you complete control over your Dappnode instance, allowing you to perform advanced configurations and manage the system directly.

    +
  • +
  • +

    Troubleshooting: In case of potential issues or errors, accessing the terminal via SSH enables you to diagnose and fix problems efficiently.

    +
  • +
  • +

    Advanced Management: You can run commands, update software, monitor system performance, and manage services that may not be accessible through the standard Dappnode UI.

    +
  • +

Having SSH access is crucial for maintaining and managing your Dappnode instance effectively, ensuring you can handle any technical challenges that arise.

+
I've already launched my instance and I'm not getting my Wireguard credentials

If you are not receiving your Wireguard credentials immediately after launching your instance, the Dappnode Image might still be installing. If this happens, wait a few minutes and try again.

    +
  • Via SSH: If you encounter this issue, exit your SSH session with the exit command in your instance terminal and reconnect as explained in the guide.
  • +
  • Via Telegram Bot: Simply retry the /get_wireguard_credentials command after a short wait.
  • +

Additionally, ensure that your instance storage has not filled up during the installation. For a testing Dappnode (a Dappnode not intended to run a node in any network), we recommend at least 30 GB of storage.

\ No newline at end of file diff --git a/docs/user/dappnode-cloud/providers/aws/overview/index.html b/docs/user/dappnode-cloud/providers/aws/overview/index.html index 451aec370..79053d40f 100644 --- a/docs/user/dappnode-cloud/providers/aws/overview/index.html +++ b/docs/user/dappnode-cloud/providers/aws/overview/index.html @@ -1,17 +1,36 @@ - + - -AWS | Dappnode - - - + +AWS | Dappnode + + + - -
-

AWS

Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.

Dappnode AWS AMI

The Dappnode AMI is an image specifically designed for running Dappnode in the AWS environment. It contains all the pre-installed software and configurations required to deploy a fully functional Dappnode instance. By using the Dappnode AMI, users can quickly launch an instance in the cloud without having to manually set up and configure the Dappnode software, simplifying the deployment process and ensuring consistency across different instances.

info

An Amazon Machine Image (AMI) is a pre-configured template used to create a virtual machine within the AWS cloud.

Pricing

When using Dappnode Cloud on AWS, there are two main charges to consider:

Dappnode AMI 📀

The Dappnode AMI is available for $15 per month. This fee grants you access to the Dappnode image, allowing you to launch as many instances as you need. This cost covers the use of Dappnode's software in the cloud.

AWS Machines 🖥

In addition to the Dappnode AMI fee, you will incur charges for the AWS infrastructure itself. These costs vary based on several factors:

  • Instance Type: The specifications of the machine you choose, such as CPU and memory will affect the pricing.

  • Storage: The amount and type of storage you select for your instance, will also influence the cost.

  • Region: AWS pricing varies by region, so the location where you launch your instance can impact the overall cost.

info

AWS operates on a pay-as-you-go model, meaning you only pay for the resources you use. Before launching your instance, you can view an estimate of the expected costs on the Dappnode AMI launch page. This estimate provides transparency, helping you plan your budget effectively.

- - + +

AWS

+

Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.

+

Dappnode AWS AMI

+

The Dappnode AMI is an image specifically designed for running Dappnode in the AWS environment. It contains all the pre-installed software and configurations required to deploy a fully functional Dappnode instance. By using the Dappnode AMI, users can quickly launch an instance in the cloud without having to manually set up and configure the Dappnode software, simplifying the deployment process and ensuring consistency across different instances.

+
info

An Amazon Machine Image (AMI) is a pre-configured template used to create a virtual machine within the AWS cloud.

+

Pricing

+

When using Dappnode Cloud on AWS, there are two main charges to consider:

+

Dappnode AMI 📀

+

The Dappnode AMI is available for $15 per month. This fee grants you access to the Dappnode image, allowing you to launch as many instances as you need. This cost covers the use of Dappnode's software in the cloud.

+

AWS Machines 🖥

+

In addition to the Dappnode AMI fee, you will incur charges for the AWS infrastructure itself. These costs vary based on several factors:

+
    +
  • +

    Instance Type: The specifications of the machine you choose, such as CPU and memory will affect the pricing.

    +
  • +
  • +

    Storage: The amount and type of storage you select for your instance, will also influence the cost.

    +
  • +
  • +

    Region: AWS pricing varies by region, so the location where you launch your instance can impact the overall cost.

    +
  • +
+
info

AWS operates on a pay-as-you-go model, meaning you only pay for the resources you use. Before launching your instance, you can view an estimate of the expected costs on the Dappnode AMI launch page. This estimate provides transparency, helping you plan your budget effectively.

\ No newline at end of file diff --git a/docs/user/dappnode-cloud/providers/aws/set-up-instance/index.html b/docs/user/dappnode-cloud/providers/aws/set-up-instance/index.html index 7fb6d4b8a..2c0ce0463 100644 --- a/docs/user/dappnode-cloud/providers/aws/set-up-instance/index.html +++ b/docs/user/dappnode-cloud/providers/aws/set-up-instance/index.html @@ -1,21 +1,178 @@ - + - -How to Set Up an Instance | Dappnode - - - + +How to Set Up an Instance | Dappnode + + + - -
-

How to Set Up an Instance

To launch a Dappnode AMI instance, follow these steps:

1. Navigate to AWS Marketplace 🧭

2. AWS Account 👤

  • If you already have an AWS account, log in. If not, create an account. For more information on signing up, you can visit the AWS Sign-Up Documentation.

  • In case you end up on another website after signing up, navigate again to the AWS Marketplace.

3. Subscribe to Dappnode AMI 📀

  • Search "Dappnode" in the top search bar and choose the "Dappnode Cloud - Telegram Credentials - By Dappnode" option.

  • On our Dappnode AMI page, you can check some information about our image. When you are ready, click "Continue to Subscribe".

  • Accept the terms and click "Continue to Configuration".

  • Check the region and click "Continue to Launch" to proceed with the instance launch.

  • In the "Choose Action" dropdown, select "Launch through EC2" and click "Launch".

4. Set Up Telegram for Wireguard Credentials (Optional) 💬

This step is only necessary if you are planning to get your Wireguard credentials via Telegram.

  • Create a new bot using the /newbot command via BotFather's chat. It will ask you for a name and username, then generate an authentication token for your new bot. Save this token, as you will need to provide it when launching the AWS instance.

  • You will also need to provide your Telegram user ID. You can get it by sending /start to a bot such as @RawDataBot.

5. Launch Instance 🚀

Once in the EC2 "Launch an instance" UI you will have to choose the configuration of your instance. Next steps will explain you what configurations do you need to modify section by section.

  1. Name: Give a name to your instance. This name is for you to identify it in the EC2 UI.

  2. Application and OS Images (Amazon Machine Image): No changes needed, it comes pre-configurted according to the Dappnode Image.

  3. Instance type: Choose an instance type. All selectable options are suitable for running Dappnode. For more context based on your requirements, check the FAQs section.

  4. Key Pair: If you already have a key pair linked to your AWS account, you can use it. Alternatively, you can import keys to the EC2 or create a new one. These keys are essential for SSH access to the instance. Losing these keys could result in losing access to your instance.

  5. Network Settings:

    In this section, you will create a security group to allow necessary ports exposure. Follow these steps to ensure your Dappnode instance can perform optimally and access all required services:

    1. Click "Edit" under Network Settings and ensure the "Create security group" option is chosen.

    2. To add a new rule to the group, click the "Add security group rule" button below. Include the following rules:

      SSH:

      • Type: SSH

      HTTP:

      • Type: HTTP

      HTTPS:

      • Type: HTTPS

      Wireguard:

      • Type: Custom UDP
      • Port Range: 51820
      • Source: 0.0.0.0/0

      General TCP:

      • Type: Custom TCP
      • Port Range: 1024-65535
      • Source: 0.0.0.0/0

      General UDP:

      • Type: Custom UDP
      • Port Range: 1024-65535
      • Source: 0.0.0.0/0

    For more information about why this Inbound rules are needed and details about each one, visit the FAQs Section.

  6. Storage: Define the amount and type of storage for the instance. The storage requirements depend largely on your intended use.

    For more suggestions and context, refer to the FAQs section.

    info

    AWS also offers the possibility of extending storage once launched if needed.

  7. Advanced details (optional): No modifications are needed here unless you plan to get your Wireguard credentials via Telegram. If so, provide your userID and botToken in the text area at the end of "Advanced details", separated by a comma in the following format: (userID,botToken). -Example => 123456789,1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456

  8. Summary: Finally, review your configuration on the 'Summary' section located on the right and click the "Launch instance" button. Once clicked, your instance will be launched.

6. Get wireguard credentials 🔐

To obtain the Wireguard credentials for your instance, you have two different approaches:

  1. Via Telegram Bot

    • Ensure you have completed the optional Telegram setup steps mentioned earlier in the guide.

    • After launching the instance, go to your new bot's chat using the link provided by BotFather.

    • Send any message to your bot. If the configuration is correct, you should receive a message saying ✅ Successfully saved channel ID.

    • Send the command /get_wireguard_credentials in the bot chat. The bot should return your Wireguard credentials. Copy them, as the next step will explain how to use these credentials.

  2. Via SSH

    This approach is for more expiremented users, since you will have to use the terminal.

    • After launching the instance, click the "Connect" button in the AWS console.

    • Go to the "SSH client" tab where it will provide you with a command like this: + +

      How to Set Up an Instance

      +

      To launch a Dappnode AMI instance, follow these steps:

      +

      1. Navigate to AWS Marketplace 🧭

      + +

      2. AWS Account 👤

      +
        +
      • +

        If you already have an AWS account, log in. If not, create an account. For more information on signing up, you can visit the AWS Sign-Up Documentation.

        +
      • +
      • +

        In case you end up on another website after signing up, navigate again to the AWS Marketplace.

        +
      • +
      +

      3. Subscribe to Dappnode AMI 📀

      +
        +
      • +

        Search "Dappnode" in the top search bar and choose the "Dappnode Cloud - Telegram Credentials - By Dappnode" option.

        +
      • +
      • +

        On our Dappnode AMI page, you can check some information about our image. When you are ready, click "Continue to Subscribe".

        +
      • +
      • +

        Accept the terms and click "Continue to Configuration".

        +
      • +
      • +

        Check the region and click "Continue to Launch" to proceed with the instance launch.

        +
      • +
      • +

        In the "Choose Action" dropdown, select "Launch through EC2" and click "Launch".

        +
      • +
      +

      4. Set Up Telegram for Wireguard Credentials (Optional) 💬

      +

      This step is only necessary if you are planning to get your Wireguard credentials via Telegram.

      +
        +
      • +

        Create a new bot using the /newbot command via BotFather's chat. It will ask you for a name and username, then generate an authentication token for your new bot. Save this token, as you will need to provide it when launching the AWS instance.

        +
      • +
      • +

        You will also need to provide your Telegram user ID. You can get it by sending /start to a bot such as @RawDataBot.

        +
      • +
      +

      5. Launch Instance 🚀

      +

      Once in the EC2 "Launch an instance" UI you will have to choose the configuration of your instance. Next steps will explain you what configurations do you need to modify section by section.

      +
        +
      1. +

        Name: Give a name to your instance. This name is for you to identify it in the EC2 UI.

        +
      2. +
      3. +

        Application and OS Images (Amazon Machine Image): No changes needed, it comes pre-configurted according to the Dappnode Image.

        +
      4. +
      5. +

        Instance type: Choose an instance type. All selectable options are suitable for running Dappnode. For more context based on your requirements, check the FAQs section.

        +
      6. +
      7. +

        Key Pair: If you already have a key pair linked to your AWS account, you can use it. Alternatively, you can import keys to the EC2 or create a new one. These keys are essential for SSH access to the instance. Losing these keys could result in losing access to your instance.

        +
      8. +
      9. +

        Network Settings:

        +

        In this section, you will create a security group to allow necessary ports exposure. Follow these steps to ensure your Dappnode instance can perform optimally and access all required services:

        +
          +
        1. +

          Click "Edit" under Network Settings and ensure the "Create security group" option is chosen.

          +
        2. +
        3. +

          To add a new rule to the group, click the "Add security group rule" button below. Include the following rules:

          +

          SSH:

          +
            +
          • Type: SSH
          • +
          +

          HTTP:

          +
            +
          • Type: HTTP
          • +
          +

          HTTPS:

          +
            +
          • Type: HTTPS
          • +
          +

          Wireguard:

          +
            +
          • Type: Custom UDP
          • +
          • Port Range: 51820
          • +
          • Source: 0.0.0.0/0
          • +
          +

          General TCP:

          +
            +
          • Type: Custom TCP
          • +
          • Port Range: 1024-65535
          • +
          • Source: 0.0.0.0/0
          • +
          +

          General UDP:

          +
            +
          • Type: Custom UDP
          • +
          • Port Range: 1024-65535
          • +
          • Source: 0.0.0.0/0
          • +
          +
        4. +
        +

        For more information about why this Inbound rules are needed and details about each one, visit the FAQs Section.

        +
      10. +
      11. +

        Storage: Define the amount and type of storage for the instance. The storage requirements depend largely on your intended use.

        +

        For more suggestions and context, refer to the FAQs section.

        +
        info

        AWS also offers the possibility of extending storage once launched if needed.

        +
      12. +
      13. +

        Advanced details (optional): No modifications are needed here unless you plan to get your Wireguard credentials via Telegram. If so, provide your userID and botToken in the text area at the end of "Advanced details", separated by a comma in the following format: (userID,botToken). +Example => 123456789,1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456

        +
      14. +
      15. +

        Summary: Finally, review your configuration on the 'Summary' section located on the right and click the "Launch instance" button. Once clicked, your instance will be launched.

        +
      16. +
      +

      6. Get wireguard credentials 🔐

      +

      To obtain the Wireguard credentials for your instance, you have two different approaches:

      +
        +
      1. +

        Via Telegram Bot

        +
          +
        • +

          Ensure you have completed the optional Telegram setup steps mentioned earlier in the guide.

          +
        • +
        • +

          After launching the instance, go to your new bot's chat using the link provided by BotFather.

          +
        • +
        • +

          Send any message to your bot. If the configuration is correct, you should receive a message saying ✅ Successfully saved channel ID.

          +
        • +
        • +

          Send the command /get_wireguard_credentials in the bot chat. The bot should return your Wireguard credentials. Copy them, as the next step will explain how to use these credentials.

          +
        • +
        +
      2. +
      3. +

        Via SSH

        +

        This approach is for more expiremented users, since you will have to use the terminal.

        +
          +
        • +

          After launching the instance, click the "Connect" button in the AWS console.

          +
        • +
        • +

          Go to the "SSH client" tab where it will provide you with a command like this: ssh -i "yourKeyPair-aws.pem" root@yourInstanceDNS -Open your terminal and modify the command to use the ubuntu user and add sudo for permissions:

        sudo ssh -i "yourKeyPair-aws.pem" ubuntu@yourInstanceDNS
        tip

        Ensure this command is run in the directory where your key pair file is located.

        • Once connected to your instance, run the following command:
        dappnode_wireguard

        This command will output your Wireguard credentials. Copy them from your terminal using Ctrl+Shift+C / ⌘+Shift+C. The next step will explain how to use these credentials.

        info

        The installation of Dappnode on your instance may take a few minutes. If you try to obtain the credentials before the installation is complete, you may not receive them. If this happens, wait a few minutes and try again.

        • Via SSH: If you encounter this issue, exit your SSH session with the exit command and reconnect as explained above.
        • Via Telegram Bot: Simply retry the /get_wireguard_credentials command after a short wait. -:::

      7. Connect via Wireguard 🔌

      The setup process for connecting via Wireguard will depend on the operating system you are using. Refer to the Wireguard documentation section specific to your OS for detailed instructions.

      Once you have installed Wireguard and configured it with the credentials you obtained, you will be able to connect to your Dappnode instance securely.

      8. Navigate to Dappnode's UI 🏁

      Once your Wireguard tunnel is active, simply open your web browser and go to http://my.dappnode to begin your journey with Dappnode Cloud!

      - - +Open your terminal and modify the command to use the ubuntu user and add sudo for permissions:

      +
    • +
    +
    sudo ssh -i "yourKeyPair-aws.pem" ubuntu@yourInstanceDNS
    +
    tip

    Ensure this command is run in the directory where your key pair file is located.

    +
      +
    • Once connected to your instance, run the following command:
    • +
    +
    dappnode_wireguard
    +

    This command will output your Wireguard credentials. Copy them from your terminal using Ctrl+Shift+C / ⌘+Shift+C. The next step will explain how to use these credentials.

    +
    info

    The installation of Dappnode on your instance may take a few minutes. If you try to obtain the credentials before the installation is complete, you may not receive them. If this happens, wait a few minutes and try again.

      +
    • Via SSH: If you encounter this issue, exit your SSH session with the exit command and reconnect as explained above.
    • +
    • Via Telegram Bot: Simply retry the /get_wireguard_credentials command after a short wait.
    • +
    +
  3. +
+

7. Connect via Wireguard 🔌

+

The setup process for connecting via Wireguard will depend on the operating system you are using. Refer to the Wireguard documentation section specific to your OS for detailed instructions.

+

Once you have installed Wireguard and configured it with the credentials you obtained, you will be able to connect to your Dappnode instance securely.

+

8. Navigate to Dappnode's UI 🏁

+

Once your Wireguard tunnel is active, simply open your web browser and go to http://my.dappnode to begin your journey with Dappnode Cloud!

\ No newline at end of file diff --git a/docs/user/dappnode-cloud/providers/coming-soon/index.html b/docs/user/dappnode-cloud/providers/coming-soon/index.html index 6212654db..28d8a654f 100644 --- a/docs/user/dappnode-cloud/providers/coming-soon/index.html +++ b/docs/user/dappnode-cloud/providers/coming-soon/index.html @@ -1,17 +1,16 @@ - + - -More coming soon | Dappnode - - - + +More coming soon | Dappnode + + + - -
-

More coming soon

We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.

If you are willing to run Dappnode in a specific provider you can open an Issue in Dappnode's GitHub and tell us more about it!

- - + +

More coming soon

+

We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.

+

If you are willing to run Dappnode in a specific provider you can open an Issue in Dappnode's GitHub and tell us more about it!

\ No newline at end of file diff --git a/docs/user/ethical-metrics/metrics/index.html b/docs/user/ethical-metrics/metrics/index.html index abf777a4c..6fe1fbeb2 100644 --- a/docs/user/ethical-metrics/metrics/index.html +++ b/docs/user/ethical-metrics/metrics/index.html @@ -1,17 +1,66 @@ - + - -Metrics Collected by Ethical Metrics | Dappnode - - - + +Metrics Collected by Ethical Metrics | Dappnode + + + - -
-

Metrics Collected by Ethical Metrics

Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy.

Even if we can't link the metrics from your Dappnode to your identity, we are fully committed to maintain total transparency about the metrics we collect from your Dappnode when using Ethical Metrics. We want you to have a clear understanding of the information that is being monitored. The metrics we collect fall into several categories. Here's an overview of the metrics we gather.

info

These metrics also help us better allocate resources by knowing what our users are running on their Dappnodes. This way, we can better understand which packages are the most popular and which ones need improvement.

note

Ethical Metrics is one of our newest packages and it is still under constant improvement. This section will be updated as we add or remove metrics.

Dappnode host metrics

These are all the metrics related directly to the host machine running your Dappnode. All of these metrics are collected by the Dappnode Exporter package.

  • node_cpu_seconds_total: Total CPU usage in seconds by the node.
  • container_memory_usage_bytes: Memory usage in bytes by containers.
  • container_memory_cache: Memory cache usage by containers.
  • node_memory_MemTotal_bytes: Total memory available in bytes on the node.
  • node_memory_MemFree_bytes: Free memory in bytes on the node.
  • node_memory_Buffers_bytes: Memory used for buffers in bytes on the node.
  • node_memory_Cached_bytes: Cached memory in bytes on the node.
  • node_disk_io_time_seconds_total: Total disk I/O time in seconds on the node.
  • node_disk_reads_completed_total: Total completed disk reads on the node.
  • node_disk_writes_completed_total: Total completed disk writes on the node.
  • container_fs_usage_bytes: Filesystem usage by containers in bytes.
  • node_filesystem_size_bytes: Total size of the filesystem in bytes on the node.
  • node_filesystem_free_bytes: Free space in the filesystem in bytes on the node.
  • container_last_seen: Timestamp of the last seen container.
  • cadvisor_version_info: Information about the cAdvisor version.
  • container_cpu_usage_seconds_total: Total CPU usage in seconds by containers.

Dappmanager metrics

The following are all the metrics related to your Dappnode's configuration. These are all stored in your Dappmanager.

  • dappmmanager_staker_config: Your current staking package.
  • dappmanager_ipfs_client_target_local: Wether IPFS client is in local or remote mode.
  • dappmanager_eth_fallback_enabled: Wether the ethereum fallback client is enabled.
  • dappmanager_eth_client_target_local: Wether ethereum client is in local or remote mode.
  • dappmanager_auto_updates_user_packages: Wether auto updates for user packages is enabled.
  • dappmanager_auto_updates_system_packages: Wether auto updates for system packages is enabled.
  • dappmanager_host_info: Details including Docker and Docker Compose versions, kernel version, operating system version, and architecture type.

Staking Metrics

The following metrics are all related directly to the staking packages, including Web3Signer.

  • eth2_slashingprotection_prevented_signings: Number of prevented slashing signings.
  • signing_signers_loaded_count: Count of loaded validators signing in web3signer.
  • signing_bls_signing_duration: Duration of BLS signing.
  • signing_bls_signing_duration_count: Count of BLS signing durations.
  • signing_bls_signing_duration_sum: Sum of BLS signing durations.
  • signing_bls_missing_identifier_count: Count of missing BLS identifier.
  • api_rpc_cons_peers: Number of connected peers to your staking execution clients.
  • api_rpc_exec_peers: Number of connected peers to your staking consensus clients.
  • api_rpc_cons_syncing: Wether your staking execution clients are syncing.
  • api_rpc_exec_syncing: Wether your staking consensus clients are syncing.

To sum it up, the metrics we collect give us a peek into how your Dappnode is doing overall, how it allocates resources, memory, disk, and even info related to staking performance.

Your privacy is of utmost importance to us. Remember that all this data transmission occurs through the TOR network to protect your privacy.

note

For any questions or concerns about the metrics collected by Ethical Metrics, feel free to reach out to our support team.

- - + +

Metrics Collected by Ethical Metrics

+

Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy.

+

Even if we can't link the metrics from your Dappnode to your identity, we are fully committed to maintain total transparency about the metrics we collect from your Dappnode when using Ethical Metrics. We want you to have a clear understanding of the information that is being monitored. The metrics we collect fall into several categories. Here's an overview of the metrics we gather.

+
info

These metrics also help us better allocate resources by knowing what our users are running on their Dappnodes. This way, we can better understand which packages are the most popular and which ones need improvement.

+
note

Ethical Metrics is one of our newest packages and it is still under constant improvement. This section will be updated as we add or remove metrics.

+

Dappnode host metrics

+

These are all the metrics related directly to the host machine running your Dappnode. All of these metrics are collected by the Dappnode Exporter package.

+
    +
  • node_cpu_seconds_total: Total CPU usage in seconds by the node.
  • +
  • container_memory_usage_bytes: Memory usage in bytes by containers.
  • +
  • container_memory_cache: Memory cache usage by containers.
  • +
  • node_memory_MemTotal_bytes: Total memory available in bytes on the node.
  • +
  • node_memory_MemFree_bytes: Free memory in bytes on the node.
  • +
  • node_memory_Buffers_bytes: Memory used for buffers in bytes on the node.
  • +
  • node_memory_Cached_bytes: Cached memory in bytes on the node.
  • +
  • node_disk_io_time_seconds_total: Total disk I/O time in seconds on the node.
  • +
  • node_disk_reads_completed_total: Total completed disk reads on the node.
  • +
  • node_disk_writes_completed_total: Total completed disk writes on the node.
  • +
  • container_fs_usage_bytes: Filesystem usage by containers in bytes.
  • +
  • node_filesystem_size_bytes: Total size of the filesystem in bytes on the node.
  • +
  • node_filesystem_free_bytes: Free space in the filesystem in bytes on the node.
  • +
  • container_last_seen: Timestamp of the last seen container.
  • +
  • cadvisor_version_info: Information about the cAdvisor version.
  • +
  • container_cpu_usage_seconds_total: Total CPU usage in seconds by containers.
  • +
+

Dappmanager metrics

+

The following are all the metrics related to your Dappnode's configuration. These are all stored in your Dappmanager.

+
    +
  • dappmmanager_staker_config: Your current staking package.
  • +
  • dappmanager_ipfs_client_target_local: Wether IPFS client is in local or remote mode.
  • +
  • dappmanager_eth_fallback_enabled: Wether the ethereum fallback client is enabled.
  • +
  • dappmanager_eth_client_target_local: Wether ethereum client is in local or remote mode.
  • +
  • dappmanager_auto_updates_user_packages: Wether auto updates for user packages is enabled.
  • +
  • dappmanager_auto_updates_system_packages: Wether auto updates for system packages is enabled.
  • +
  • dappmanager_host_info: Details including Docker and Docker Compose versions, kernel version, operating system version, and architecture type.
  • +
+

Staking Metrics

+

The following metrics are all related directly to the staking packages, including Web3Signer.

+
    +
  • eth2_slashingprotection_prevented_signings: Number of prevented slashing signings.
  • +
  • signing_signers_loaded_count: Count of loaded validators signing in web3signer.
  • +
  • signing_bls_signing_duration: Duration of BLS signing.
  • +
  • signing_bls_signing_duration_count: Count of BLS signing durations.
  • +
  • signing_bls_signing_duration_sum: Sum of BLS signing durations.
  • +
  • signing_bls_missing_identifier_count: Count of missing BLS identifier.
  • +
  • api_rpc_cons_peers: Number of connected peers to your staking execution clients.
  • +
  • api_rpc_exec_peers: Number of connected peers to your staking consensus clients.
  • +
  • api_rpc_cons_syncing: Wether your staking execution clients are syncing.
  • +
  • api_rpc_exec_syncing: Wether your staking consensus clients are syncing.
  • +
+

To sum it up, the metrics we collect give us a peek into how your Dappnode is doing overall, how it allocates resources, memory, disk, and even info related to staking performance.

+

Your privacy is of utmost importance to us. Remember that all this data transmission occurs through the TOR network to protect your privacy.

+
note

For any questions or concerns about the metrics collected by Ethical Metrics, feel free to reach out to our support team.

\ No newline at end of file diff --git a/docs/user/ethical-metrics/overview/index.html b/docs/user/ethical-metrics/overview/index.html index 6839728ee..84fc23228 100644 --- a/docs/user/ethical-metrics/overview/index.html +++ b/docs/user/ethical-metrics/overview/index.html @@ -1,17 +1,24 @@ - + - -Ethical Metrics | Dappnode - - - + +Ethical Metrics | Dappnode + + + - -
-

Ethical Metrics

note

Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.

Introduction

When it comes to monitoring your Dappnode, the Dappnode Monitoring Service (DMS) offers valuable insights into the health and performance of your packages and system. Yet, there's a key thing that DMS can't do: DMS can't notify you when your Dappnode goes offline. This limitation arises because DMS operates from within your Dappnode, so it can't help when it experiences downtime.

Ethical Metrics solves this DMS limitation. It is a service that allows for external monitoring of your Dappnode without leaking any identifying information. This way, you will be able to recieve notifications when your Dappnode goes offline.

info

Ethical Metrics comes from the request of the users to have useful alerts and the strict compromise of Dappnode of preserving privacy for its users.

So, how did we manage to overcome the difficulty of monitoring your Dappnode without compromising your privacy? In order to keep your privacy intact, all the communication between your Dappnode and our monitoring servers is done through the TOR network. The TOR network enables anonymous communication by directing Internet traffic through a free, worldwide, volunteered overlay network that consists of more than seven thousand relays.

tip

In a nutshell, your Dappnode signals that it's alive via a private channel so we don't know where it comes from. If it stops sending this signal, we can assume that it's offline and send an alert to the Email or Telegram associated with that particular Dappnode. This way, your Dappnode's IP address remains hidden and nobody (not even us) can identify which metrics belong to who.

To put it simply: Ethical Metrics enables us to monitor a group of Dappnode metrics for you. In the event that your Dappnode goes offline, Ethical Metrics can send notifications to an email address or Telegram handle that you provide during configuration. All this communication occurs via the TOR network, which guarantees the protection of your Dappnode's IP address and the confidentiality of your metrics.

setup-5

info

Ethical metrics is one of our newest packages and it is still under constant improvement. Please come back to this page to check for updates.

- - + +

Ethical Metrics

+
note

Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.

+

Introduction

+

When it comes to monitoring your Dappnode, the Dappnode Monitoring Service (DMS) offers valuable insights into the health and performance of your packages and system. Yet, there's a key thing that DMS can't do: DMS can't notify you when your Dappnode goes offline. This limitation arises because DMS operates from within your Dappnode, so it can't help when it experiences downtime.

+

Ethical Metrics solves this DMS limitation. It is a service that allows for external monitoring of your Dappnode without leaking any identifying information. This way, you will be able to recieve notifications when your Dappnode goes offline.

+
info

Ethical Metrics comes from the request of the users to have useful alerts and the strict compromise of Dappnode of preserving privacy for its users.

+

So, how did we manage to overcome the difficulty of monitoring your Dappnode without compromising your privacy? In order to keep your privacy intact, all the communication between your Dappnode and our monitoring servers is done through the TOR network. The TOR network enables anonymous communication by directing Internet traffic through a free, worldwide, volunteered overlay network that consists of more than seven thousand relays.

+
tip

In a nutshell, your Dappnode signals that it's alive via a private channel so we don't know where it comes from. If it stops sending this signal, we can assume that it's offline and send an alert to the Email or Telegram associated with that particular Dappnode. This way, your Dappnode's IP address remains hidden and nobody (not even us) can identify which metrics belong to who.

+

To put it simply: Ethical Metrics enables us to monitor a group of Dappnode metrics for you. In the event that your Dappnode goes offline, Ethical Metrics can send notifications to an email address or Telegram handle that you provide during configuration. All this communication occurs via the TOR network, which guarantees the protection of your Dappnode's IP address and the confidentiality of your metrics.

+

setup-5

+
info

Ethical metrics is one of our newest packages and it is still under constant improvement. Please come back to this page to check for updates.

\ No newline at end of file diff --git a/docs/user/ethical-metrics/setup/index.html b/docs/user/ethical-metrics/setup/index.html index 6acc7f2cf..b0f3219bc 100644 --- a/docs/user/ethical-metrics/setup/index.html +++ b/docs/user/ethical-metrics/setup/index.html @@ -1,21 +1,52 @@ - + - -Setting up Ethical Metrics | Dappnode - - - + +Setting up Ethical Metrics | Dappnode + + + - -
-

Setting up Ethical Metrics

tip

We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.

Email notifications may sometimes encounter hurdles such as being categorized as spam or getting lost in a cluttered inbox. This could inadvertently lead to missing out on important notifications that require your immediate attention.

In contrast, Telegram channels provide a streamlined and efficient way to receive notifications directly to your device, ensuring that you stay informed without any interruptions.

setup-6

In order to setup your Ethical Metrics notification system, you need to follow these steps:

Telegram Notifications

  1. Access Telegram Web: -Open Telegram Web using this link and login with your account. Ensure the URL ends with /a/. If not, manually add /a/ after https://web.telegram.org/.

  2. Create a Private Channel.

  3. Add the DappNode bot (@ethicalMetricsAlerts_bot) to your channel as an administrator.

  4. Find Your Channel ID: + +

    Setting up Ethical Metrics

    +
    tip

    We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.

    +

    Email notifications may sometimes encounter hurdles such as being categorized as spam or getting lost in a cluttered inbox. This could inadvertently lead to missing out on important notifications that require your immediate attention.

    +

    In contrast, Telegram channels provide a streamlined and efficient way to receive notifications directly to your device, ensuring that you stay informed without any interruptions.

    +

    setup-6

    +

    In order to setup your Ethical Metrics notification system, you need to follow these steps:

    +

    Telegram Notifications

    +
      +
    1. +

      Access Telegram Web: +Open Telegram Web using this link and login with your account. Ensure the URL ends with /a/. If not, manually add /a/ after https://web.telegram.org/.

      +
    2. +
    3. +

      Create a Private Channel.

      +
    4. +
    5. +

      Add the DappNode bot (@ethicalMetricsAlerts_bot) to your channel as an administrator.

      +
    6. +
    7. +

      Find Your Channel ID: Copy the channel ID from the URL. -It's a 13-digit number following the - in the URL. The ID always starts with -100. Ensure to include the - when copying.

      telegram-channel-id

    8. Navigate to http://my.dappnode/system/notifications

    9. Enable Notifications: -Paste the channel ID into the Telegram Channel ID field and toggle the switch ON to start receiving notifications.

    Email Notifications

    1. Navigate to http://my.dappnode/system/notifications
    2. Introduce the email address where you want to receive the notifications and click on the switch to activate the notifications.
    3. Thats it! Your Ethical Metrics will automatically register your TOR instance with the email address you provided. This will happen through the TOR network, preserving your privacy. You should receive a welcome email in the following minutes.
    caution

    To send email notifications, it is necessary that you provide an email address. In order to remain private, we recommend you to use an address that can't be linked to your identity. For example, John Doe probably wouldn't want to use "johndoe@gmail.com" if he wanted to remain anoymous.

    - - +It's a 13-digit number following the - in the URL. The ID always starts with -100. Ensure to include the - when copying.

    +

    telegram-channel-id

    +
  5. +
  6. +

    Navigate to http://my.dappnode/system/notifications

    +
  7. +
  8. +

    Enable Notifications: +Paste the channel ID into the Telegram Channel ID field and toggle the switch ON to start receiving notifications.

    +
  9. +
+

Email Notifications

+
    +
  1. Navigate to http://my.dappnode/system/notifications
  2. +
  3. Introduce the email address where you want to receive the notifications and click on the switch to activate the notifications.
  4. +
  5. Thats it! Your Ethical Metrics will automatically register your TOR instance with the email address you provided. This will happen through the TOR network, preserving your privacy. You should receive a welcome email in the following minutes.
  6. +
+
caution

To send email notifications, it is necessary that you provide an email address. In order to remain private, we recommend you to use an address that can't be linked to your identity. For example, John Doe probably wouldn't want to use "johndoe@gmail.com" if he wanted to remain anoymous.

\ No newline at end of file diff --git a/docs/user/ethical-metrics/troubleshooting/index.html b/docs/user/ethical-metrics/troubleshooting/index.html index 3fe4eb981..dc405d045 100644 --- a/docs/user/ethical-metrics/troubleshooting/index.html +++ b/docs/user/ethical-metrics/troubleshooting/index.html @@ -1,17 +1,18 @@ - + - -Troubleshooting | Dappnode - - - + +Troubleshooting | Dappnode + + + - -
-

Troubleshooting

Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the Dappnode Discord and we'll be happy to assist you!

How can I make sure my Dappnode is registered?
Email: Upon registering, an email will be sent to your configured email address. If you don't receive this email, please check your spam folder.
Telegram: Once your bot has been set up, you can press the "Send Test Notification" button to see if everything is working as expected.
How can I test a "Dappnode down" notification?
There are various ways to test a "Dappnode down" notification. The easiest way is to stop your Dappnode temporarily, but you can also test it by stopping the "Prometheus" service of your Ethical Metrics package. After an hour, you should receive a "Dappnode down" notification in your Email and/or Telegram.
How can I unregister from the Ethical Metrics monitoring system?

1. Using the Dappnode Interface: From the active Dappnode, simply navigate to System > Notifications and toggle off Ethical Metrics. This will stop all notifications and halt metric collection from your Dappnode. As long as Ethical Metrics notifications are enabled in the Dappnode UI, your device remains registered in our monitoring system.

2. For Inactive Dappnodes: If your Dappnode is no longer accessible, locate the unregister link in the welcome email you received upon registration. Keep in mind that using this method won't employ our IP hiding measures, but you can enhance security using tools like a VPN. Please keep in mind that if your Dappnode is still up and running with Ethical Metrics notifications turned on, it'll register again by itself.

3. Manual Unregistration: Lost the welcome email? You can also unregister by inputting the following URL into your browser: https://ethical-metrics.dappnode.io/unregister-from-email/?instance=YOUR_INSTANCE.onion%3A9090. Make sure to replace YOUR_INSTANCE with the unique identifier for your Dappnode, excluding ".onion:9090", which is already included in the provided URL.

- - + +

Troubleshooting

+

Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the Dappnode Discord and we'll be happy to assist you!

+
How can I make sure my Dappnode is registered?

Email: Upon registering, an email will be sent to your configured email address. If you don't receive this email, please check your spam folder.

Telegram: Once your bot has been set up, you can press the "Send Test Notification" button to see if everything is working as expected.

+
How can I test a "Dappnode down" notification?

There are various ways to test a "Dappnode down" notification. The easiest way is to stop your Dappnode temporarily, but you can also test it by stopping the "Prometheus" service of your Ethical Metrics package. After an hour, you should receive a "Dappnode down" notification in your Email and/or Telegram.

+
How can I unregister from the Ethical Metrics monitoring system?

1. Using the Dappnode Interface: From the active Dappnode, simply navigate to System > Notifications and toggle off Ethical Metrics. This will stop all notifications and halt metric collection from your Dappnode. As long as Ethical Metrics notifications are enabled in the Dappnode UI, your device remains registered in our monitoring system.

2. For Inactive Dappnodes: If your Dappnode is no longer accessible, locate the unregister link in the welcome email you received upon registration. Keep in mind that using this method won't employ our IP hiding measures, but you can enhance security using tools like a VPN. Please keep in mind that if your Dappnode is still up and running with Ethical Metrics notifications turned on, it'll register again by itself.

3. Manual Unregistration: Lost the welcome email? You can also unregister by inputting the following URL into your browser: https://ethical-metrics.dappnode.io/unregister-from-email/?instance=YOUR_INSTANCE.onion%3A9090. Make sure to replace YOUR_INSTANCE with the unique identifier for your Dappnode, excluding ".onion:9090", which is already included in the provided URL.

\ No newline at end of file diff --git a/docs/user/faqs/index.html b/docs/user/faqs/index.html index 5aa457bd3..2ed082a13 100644 --- a/docs/user/faqs/index.html +++ b/docs/user/faqs/index.html @@ -1,17 +1,21 @@ - + - -FAQs | Dappnode - - - + +FAQs | Dappnode + + + - -
-

FAQs

How can I start validating?

These steps will help you set up an Ethereum/Gnosis Chain/LUKSO solo staker validator:

  1. Go to the Stakers menu, select the network tab that you want to validate in and select an execution client (Geth, Nethermind, Erigon or Besu), a consensus client (Prysm, Lighthouse, Teku, Nimbus or Lodestar) and Web3Signer. You can optionally select MEV Boost and any relays you choose to run (where applies).
  2. Create keystore and deposit files using Ethereum/Gnosis/LUKSO CLI or the Wagyu Keygen tool.
  3. Wait until clients are synced and check logs to see that everything is running fine.
  4. Import keystore file(s) into Web3Signer.
  5. Do the deposit. Make sure to triple-check you're interacting with the right website/contract!
  6. Wait until you start attesting.
I'm not able to install! / Package not found

You'll most likely have to switch your IPFS repository to remote, perform updates and go back to your Local IPFS node:

  1. Try switching local/remote in IPFS repository: http://my.dappnode/repository/ipfs
  2. Wait a few seconds, then retry downloading/updating your package.
  3. Make sure you set your IPFS node to Local for optimal Dappnode performance.
I want to install Dappnode, what are the minimum specs I need?

Assuming you want to sync only one chain (two clients) you should have at least:

  • 16GB RAM
  • 2TB of FAST storage (NVMe recommended)
  • Intel i3 or i5 processor

If you want to run Dappnode as recommended, we suggest the following specs:

  • 32-64GB RAM
  • 4TB NVMe
  • Intel i7 processor
VPN/Wireguard isn't working!
  • Are you in the same network as the Dappnode? Use the local proxy access to configure your VPN: http://dappnode.local/
  • Is UPnP enabled in your router settings? Try restarting your router after applying this setting!
  • Is the port for Wireguard open in your router's port forwarding settings? (UDP 51820)
  • Are you behind a CGNAT? You need to contact your ISP and request an IPv4 static address.
  • Are you connected to another VPN? Please disconnect from this VPN before connecting to your Dappnode's VPN.
  • If you're trying to access with Wireguard through a local network, make sure you're using your local credentials:
My Web3Signer status has an odd grey bar in its status, is something wrong?

Web3Signer includes 4 containers (services): Web3Signer, Brain, Flyway and Postgres. You can check it yourself in the package view.

Whenever one is indicated as Stopped (gray), it means that it was stopped. But in this case - just the flyway service is stopped, which is an expected behavior - it should run only once, while migration of the database. If it’s indicated as grey - that means that whenever it migrated - everything went well, and now there is no need for it to run!

My clients are not syncing!

It's always a good idea to check the logs first for any specific errors, but here are some of the most common issues:

  • Have you selected both Execution and Consensus clients in the Stakers Menu?
  • If something looks wrong in the dashboard, always check the logs first! The clients might be syncing as expected. Check if the block number and the package's volume size are increasing. This is a common issue for Nethermind.
How long do clients take to sync?

This is very different for every Dappnode depending on a number of factors:

  • Geographic location
  • Bandwidth
  • ISP limitations
  • Chosen EL and CL clients

There is no exact information on how long exactly every client takes to sync, but there are a couple of facts that would be useful:

  • Consensus client usually doesn't take longer than 5 minutes, as long as you enabled checksync when selecting your clients in the Stakers menu.
  • Execution client syncing time depends on many factors, but it might take up to several days in some cases, so if you felt like consensus client synced fast, and execution client is still syncing after several hours - that's ok, it might take some time!
- - + +

FAQs

+
How can I start validating?

These steps will help you set up an Ethereum/Gnosis Chain/LUKSO solo staker validator:

  1. Go to the Stakers menu, select the network tab that you want to validate in and select an execution client (Geth, Nethermind, Erigon or Besu), a consensus client (Prysm, Lighthouse, Teku, Nimbus or Lodestar) and Web3Signer. You can optionally select MEV Boost and any relays you choose to run (where applies).
  2. Create keystore and deposit files using Ethereum/Gnosis/LUKSO CLI or the Wagyu Keygen tool.
  3. Wait until clients are synced and check logs to see that everything is running fine.
  4. Import keystore file(s) into Web3Signer.
  5. Do the deposit. Make sure to triple-check you're interacting with the right website/contract!
  6. Wait until you start attesting.
+
I'm not able to install! / Package not found

You'll most likely have to switch your IPFS repository to remote, perform updates and go back to your Local IPFS node:

  1. Try switching local/remote in IPFS repository: http://my.dappnode/repository/ipfs
  2. Wait a few seconds, then retry downloading/updating your package.
  3. Make sure you set your IPFS node to Local for optimal Dappnode performance.
+
I want to install Dappnode, what are the minimum specs I need?

Assuming you want to sync only one chain (two clients) you should have at least:

  • 16GB RAM
  • 2TB of FAST storage (NVMe recommended)
  • Intel i3 or i5 processor

If you want to run Dappnode as recommended, we suggest the following specs:

  • 32-64GB RAM
  • 4TB NVMe
  • Intel i7 processor
+
VPN/Wireguard isn't working!
  • Are you in the same network as the Dappnode? Use the local proxy access to configure your VPN: http://dappnode.local/
  • Is UPnP enabled in your router settings? Try restarting your router after applying this setting!
  • Is the port for Wireguard open in your router's port forwarding settings? (UDP 51820)
  • Are you behind a CGNAT? You need to contact your ISP and request an IPv4 static address.
  • Are you connected to another VPN? Please disconnect from this VPN before connecting to your Dappnode's VPN.
  • If you're trying to access with Wireguard through a local network, make sure you're using your local credentials:
+
My Web3Signer status has an odd grey bar in its status, is something wrong?

Web3Signer includes 4 containers (services): Web3Signer, Brain, Flyway and Postgres. You can check it yourself in the package view.

Whenever one is indicated as Stopped (gray), it means that it was stopped. But in this case - just the flyway service is stopped, which is an expected behavior - it should run only once, while migration of the database. If it’s indicated as grey - that means that whenever it migrated - everything went well, and now there is no need for it to run!

+
My clients are not syncing!

It's always a good idea to check the logs first for any specific errors, but here are some of the most common issues:

  • Have you selected both Execution and Consensus clients in the Stakers Menu?
  • If something looks wrong in the dashboard, always check the logs first! The clients might be syncing as expected. Check if the block number and the package's volume size are increasing. This is a common issue for Nethermind.
+
How long do clients take to sync?

This is very different for every Dappnode depending on a number of factors:

  • Geographic location
  • Bandwidth
  • ISP limitations
  • Chosen EL and CL clients

There is no exact information on how long exactly every client takes to sync, but there are a couple of facts that would be useful:

  • Consensus client usually doesn't take longer than 5 minutes, as long as you enabled checksync when selecting your clients in the Stakers menu.
  • Execution client syncing time depends on many factors, but it might take up to several days in some cases, so if you felt like consensus client synced fast, and execution client is still syncing after several hours - that's ok, it might take some time!
\ No newline at end of file diff --git a/docs/user/getting-started/access-dappnode-via-wifi/index.html b/docs/user/getting-started/access-dappnode-via-wifi/index.html index 067f8ebc3..2c0662118 100644 --- a/docs/user/getting-started/access-dappnode-via-wifi/index.html +++ b/docs/user/getting-started/access-dappnode-via-wifi/index.html @@ -1,17 +1,43 @@ - + - -Access Dappnode via Wi-Fi | Dappnode - - - + +Access Dappnode via Wi-Fi | Dappnode + + + - -
-

Access Dappnode via Wi-Fi

After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it.

tip

You don't need a monitor, keyboard, or mouse to use Dappnode. You just need to plug it to your router and you can access it from your laptop or mobile phone's browser!

1. Connect to DappnodeWIFI:

  • After a couple of minutes of being turned on, your dappnode will generate a WiFi hotspot
  • From the device you wish to connect with, look for the Wi-Fi network named DappnodeWIFI.
  • Connect using the default password: dappnode.Connect to Dappnode Wi-Fi

2. Access the Dappnode Interface:

Troubleshooting:

How can I change my Dappnode Wi-Fi password?
To change the Wi-Fi password:
  1. While connected to the Dappnode, go to Wi-Fi Settings

  2. Enter your new desired password in both the "New Password" and "Confirm New Password" fields.

  3. Click on "Change Credentials".

I can't access my Dappnode via Wi-Fi
You can explore other methods to access your Dappnode here.
- - + +

Access Dappnode via Wi-Fi

+

After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it.

+
tip

You don't need a monitor, keyboard, or mouse to use Dappnode. You just need to plug it to your router and you can access it from your laptop or mobile phone's browser!

+

1. Connect to DappnodeWIFI:

+
    +
  • After a couple of minutes of being turned on, your dappnode will generate a WiFi hotspot
  • +
  • From the device you wish to connect with, look for the Wi-Fi network named DappnodeWIFI.
  • +
  • Connect using the default password: dappnode.
  • +
+

Connect to Dappnode Wi-Fi

+

2. Access the Dappnode Interface:

+ +

Troubleshooting:

+
Details

How can I change my Dappnode Wi-Fi password? +To change the Wi-Fi password:

    +
  1. +

    While connected to the Dappnode, go to Wi-Fi Settings

    +
  2. +
  3. +

    Enter your new desired password in both the "New Password" and "Confirm New Password" fields.

    +
  4. +
  5. +

    Click on "Change Credentials".

    +
  6. +
+
Details

I can't access my Dappnode via Wi-Fi +You can explore other methods to access your Dappnode here.

\ No newline at end of file diff --git a/docs/user/getting-started/choose-your-path/index.html b/docs/user/getting-started/choose-your-path/index.html index 057ff85de..f477ff61e 100644 --- a/docs/user/getting-started/choose-your-path/index.html +++ b/docs/user/getting-started/choose-your-path/index.html @@ -1,17 +1,17 @@ - + - -Choose your path | Dappnode - - - + +Choose your path | Dappnode + + + - - - - + + \ No newline at end of file diff --git a/docs/user/getting-started/connect-dappnode-to-the-router/index.html b/docs/user/getting-started/connect-dappnode-to-the-router/index.html index 4ff7c7d3b..0b8299d43 100644 --- a/docs/user/getting-started/connect-dappnode-to-the-router/index.html +++ b/docs/user/getting-started/connect-dappnode-to-the-router/index.html @@ -1,20 +1,42 @@ - + - -Connect your dappnode to the router and power | Dappnode - - - + +Connect your dappnode to the router and power | Dappnode + + + - -
-

Connect your dappnode to the router and power

Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.

Connect to router

Make sure you also connect your Dappnode to a power outlet and you are ready to turn it on.

Enable UPnP in your router

Enabling UPnP (Universal Plug and Play) on a router allows devices on your network to set up port forwarding rules for themselves automatically. This simplifies device communication and functions, especially for applications that require open ports, like some games and peer-to-peer programs.

Here are basic instructions to enable UPnP on most routers:

  1. Log into Your Router: Open a web browser on a computer connected to your network. + +

    Connect your dappnode to the router and power

    +

    Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.

    +

    Connect to router

    +

    Make sure you also connect your Dappnode to a power outlet and you are ready to turn it on.

    +

    Enable UPnP in your router

    +

    Enabling UPnP (Universal Plug and Play) on a router allows devices on your network to set up port forwarding rules for themselves automatically. This simplifies device communication and functions, especially for applications that require open ports, like some games and peer-to-peer programs.

    +

    Here are basic instructions to enable UPnP on most routers:

    +
      +
    1. +

      Log into Your Router: Open a web browser on a computer connected to your network. Enter your router's IP address in the address bar. Common addresses include 192.168.1.1, 192.168.0.1, or 10.0.0.1. If you're unsure of your router's IP, you can check your device's network settings or consult the router's manual. -You'll be prompted for a username and password. If you haven't changed them, the default details are usually admin/admin, admin/password, or some similar combination. Refer to your router's documentation if you're unsure.

    2. Navigate to the UPnP Section: Once logged in, look for a section labeled "UPnP", often found under "Advanced Settings", "WAN", "NAT", or similar categories. The exact path can vary based on the router manufacturer and model.

    3. Enable UPnP: There should be an option to enable or disable UPnP. Make sure it's set to "Enable" or "On". -Save or apply the changes.


    Troubleshooting

    How can I verify that the ports were successfully opened by UPnP?

    Access your dappnode support > ports view and execute an API scan of the ports.

    An alternative is to manually check if the ports have been opened successfully, follow these steps:

    1. Use an online port checker tool, like "YouGetSignal" or "Canyouseeme."
    2. Enter your external IP address and the port number you want to check.
    3. Click "Check." If the port is open and accessible from the outside, the tool will confirm it.

    Alternatively, you can use tools like nmap to scan your own ports from a different network.

    Why can't I connect my DappNode to the router via Wi-Fi?
    Currently, Dappnode doesn't support Wi-Fi connections to a router. Ensure your Dappnode is connected directly to the router using an ethernet cable.
    - - +You'll be prompted for a username and password. If you haven't changed them, the default details are usually admin/admin, admin/password, or some similar combination. Refer to your router's documentation if you're unsure.

    +
  2. +
  3. +

    Navigate to the UPnP Section: Once logged in, look for a section labeled "UPnP", often found under "Advanced Settings", "WAN", "NAT", or similar categories. The exact path can vary based on the router manufacturer and model.

    +
  4. +
  5. +

    Enable UPnP: There should be an option to enable or disable UPnP. Make sure it's set to "Enable" or "On". +Save or apply the changes.

    +
  6. +
+
+

Troubleshooting

+
How can I verify that the ports were successfully opened by UPnP?

Access your dappnode support > ports view and execute an API scan of the ports.

An alternative is to manually check if the ports have been opened successfully, follow these steps:

    +
  1. Use an online port checker tool, like "YouGetSignal" or "Canyouseeme."
  2. +
  3. Enter your external IP address and the port number you want to check.
  4. +
  5. Click "Check." If the port is open and accessible from the outside, the tool will confirm it.
  6. +

Alternatively, you can use tools like nmap to scan your own ports from a different network.

+
Why can't I connect my DappNode to the router via Wi-Fi?

Currently, Dappnode doesn't support Wi-Fi connections to a router. Ensure your Dappnode is connected directly to the router using an ethernet cable.

\ No newline at end of file diff --git a/docs/user/getting-started/next-steps/index.html b/docs/user/getting-started/next-steps/index.html index 685a0a142..1f1c868f1 100644 --- a/docs/user/getting-started/next-steps/index.html +++ b/docs/user/getting-started/next-steps/index.html @@ -1,17 +1,18 @@ - + - -Next Steps | Dappnode - - - + +Next Steps | Dappnode + + + - -
-

Next Steps

Now that your DAppNode is set up and ready to go, it's time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:

🔐 Configure VPN access: Using either Wireguard or OpenVPN, you will be able to connect to your Dappnode from wherever you are in the world. You will be able to access your dappnode outside of the range of the wifi, while on holidays or during your commute!

💰 Start Staking and Earning Rewards: You can start validating Proof-of-Stake networks like Ethereum, Gnosis Chain or LUKSO and earn rewards for securing the network.

🔔 Configure Ethical Metrics: Ethical metrics is a privacy-focused monitoring tool for Dappnode. You will be able to receive alerts related to your Dappnode's performance and health.

- - + +

Next Steps

+

Now that your DAppNode is set up and ready to go, it's time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:

+

🔐 Configure VPN access: Using either Wireguard or OpenVPN, you will be able to connect to your Dappnode from wherever you are in the world. You will be able to access your dappnode outside of the range of the wifi, while on holidays or during your commute!

+

💰 Start Staking and Earning Rewards: You can start validating Proof-of-Stake networks like Ethereum, Gnosis Chain or LUKSO and earn rewards for securing the network.

+

🔔 Configure Ethical Metrics: Ethical metrics is a privacy-focused monitoring tool for Dappnode. You will be able to receive alerts related to your Dappnode's performance and health.

\ No newline at end of file diff --git a/docs/user/getting-started/register/index.html b/docs/user/getting-started/register/index.html index 3cf9a42e4..e499290e5 100644 --- a/docs/user/getting-started/register/index.html +++ b/docs/user/getting-started/register/index.html @@ -1,17 +1,58 @@ - + - -Register | Dappnode - - - + +Register | Dappnode + + + - -
-

Register

1. Register as New User

Start by setting up your new account:

  1. Input your desired Username.
  2. Select a secure password. It should include a combination of characters, numbers, and special symbols for optimal security.
  3. Confirm your password to ensure accuracy.
  4. Click the Register button.

Register

2. Secure Your Recovery Token

Upon successful registration, you'll be provided with a Recovery Token. This token is crucial for:

  • Retrieving your password if forgotten.

  • Regaining account access if needed.

    To safeguard your token:

  • Click the button or link labeled "View Recovery Token".

  • Diligently copy the token and store it in a safe location.

caution

We recommend that you store your token in both digital (encrypted) and physical forms (noted and stored securely). If you lose access to both your password and token, you will lose access to your account.

Recovery Token

3. Logging In

With your account ready and Recovery Token secured:

  1. Proceed to the Login page.
  2. Input your Username and Password.
  3. Press the Login button to dive into your Dappnode account.

Login


Troubleshooting

Want to change your password?
Visit Profile Settings to reset it.
Forgot your password?
Go to the Login page and click on "Forgot your password?". You'll be prompted to enter the recovery token you saved during registration. Once entered, you'll be able to reset your password.
Lost your recovery token?
If you've lost your recovery token, there is still a chance to regain access to the Dappmanager UI. However, you will require accessing via terminal. Once you are in, you can get your recovery token by running the following command:
cat /usr/src/dappnode/DNCORE/admin-recovery-token.txt
- - + +

Register

+

1. Register as New User

+

Start by setting up your new account:

+
    +
  1. Input your desired Username.
  2. +
  3. Select a secure password. It should include a combination of characters, numbers, and special symbols for optimal security.
  4. +
  5. Confirm your password to ensure accuracy.
  6. +
  7. Click the Register button.
  8. +
+

Register

+

2. Secure Your Recovery Token

+

Upon successful registration, you'll be provided with a Recovery Token. This token is crucial for:

+
    +
  • +

    Retrieving your password if forgotten.

    +
  • +
  • +

    Regaining account access if needed.

    +

    To safeguard your token:

    +
  • +
  • +

    Click the button or link labeled "View Recovery Token".

    +
  • +
  • +

    Diligently copy the token and store it in a safe location.

    +
  • +
+
caution

We recommend that you store your token in both digital (encrypted) and physical forms (noted and stored securely). If you lose access to both your password and token, you will lose access to your account.

+

Recovery Token

+

3. Logging In

+

With your account ready and Recovery Token secured:

+
    +
  1. Proceed to the Login page.
  2. +
  3. Input your Username and Password.
  4. +
  5. Press the Login button to dive into your Dappnode account.
  6. +
+

Login

+
+

Troubleshooting

+
Details

Want to change your password? +Visit Profile Settings to reset it.

+
Details

Forgot your password? +Go to the Login page and click on "Forgot your password?". You'll be prompted to enter the recovery token you saved during registration. Once entered, you'll be able to reset your password.

+
Details

Lost your recovery token? +If you've lost your recovery token, there is still a chance to regain access to the Dappmanager UI. However, you will require accessing via terminal. Once you are in, you can get your recovery token by running the following command:

cat /usr/src/dappnode/DNCORE/admin-recovery-token.txt
\ No newline at end of file diff --git a/docs/user/getting-started/setup/index.html b/docs/user/getting-started/setup/index.html index c43aa0227..f4745f105 100644 --- a/docs/user/getting-started/setup/index.html +++ b/docs/user/getting-started/setup/index.html @@ -1,17 +1,49 @@ - + - -Setup | Dappnode - - - + +Setup | Dappnode + + + - -
-

Setup

Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.

setup-1

Choose Repository Source

setup-2

Before you dive in, choose the source from which Dappnode retrieves its data:

  • Remote Node: Connect your Dappnode to an external Ethereum node. This option is lightweight, as you won't need to host the blockchain data on your machine.

  • Full Node: Have your Dappnode host the complete Ethereum blockchain. This ensures maximum decentralization and independence, but it requires more storage and bandwidth.

Why is this important?

Dappnode uses smart contracts to publish the dapps that are accessible in the dappstore. For this reason, Dappnode needs access to an Ethereum node to read the contents of said smart contract. Choosing between a remote and a full node directly impacts how decentralized your setup is.

Decentralization Benefits: By relying less on third-party services, you enhance security, reduce points of failure, and support the Ethereum network's robustness, but it might not work for you if you have limited storage or bandwidth.

Enable/Disable System Auto Updates

Dappnode comes with an auto-update feature. This means it will automatically update itself with new releases, ensuring you always have the latest and most secure version. Activate auto-updates to lessen maintenance and better guard against vulnerabilities.

setup-3

tip

We strongly recommend activating auto-updates to ensure your Dappnode is always up to date with the latest versions.

Enable system notifications

Dappnode can send you notifications about important events, such as your dappnode being offline or high CPU usage. This is a great way to stay on top of your Dappnode's health and performance.

setup-4

Change Host User Password

Beneath the hood, Dappnode operates on a Linux framework, protected by a password, which will be needed to access your Dappnode's terminal To amplify your Dappnode's defense:

  1. Change the default Linux machine password for user dappnode.
  2. Choose a strong, unique password that's not easily guessable.
  3. Remember to store this password in a secure location. If you lose access to this password, you could be locked out of your Dappnode.
caution

Always save and backup your password. This is crucial for ensuring uninterrupted access to your Dappnode.

setup-4

All Set!

Congratulations! Your Dappnode is now configured and ready for use. Dive into the world of decentralized applications and enjoy the self-hosted, decentralized internet experience.

With these steps, your Dappnode should be up and running efficiently. Always refer to the official Dappnode documentation or community for any further queries or support.

Keep your Dappnode up to date

Remember to regularly check for updates and best practices to ensure your Dappnode stays secure and efficient.

setup-5

- - + +

Setup

+

Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.

+

setup-1

+

Choose Repository Source

+

setup-2

+

Before you dive in, choose the source from which Dappnode retrieves its data:

+
    +
  • +

    Remote Node: Connect your Dappnode to an external Ethereum node. This option is lightweight, as you won't need to host the blockchain data on your machine.

    +
  • +
  • +

    Full Node: Have your Dappnode host the complete Ethereum blockchain. This ensures maximum decentralization and independence, but it requires more storage and bandwidth.

    +
  • +
+
Why is this important?

Dappnode uses smart contracts to publish the dapps that are accessible in the dappstore. For this reason, Dappnode needs access to an Ethereum node to read the contents of said smart contract. Choosing between a remote and a full node directly impacts how decentralized your setup is.

Decentralization Benefits: By relying less on third-party services, you enhance security, reduce points of failure, and support the Ethereum network's robustness, but it might not work for you if you have limited storage or bandwidth.

+

Enable/Disable System Auto Updates

+

Dappnode comes with an auto-update feature. This means it will automatically update itself with new releases, ensuring you always have the latest and most secure version. Activate auto-updates to lessen maintenance and better guard against vulnerabilities.

+

setup-3

+
tip

We strongly recommend activating auto-updates to ensure your Dappnode is always up to date with the latest versions.

+

Enable system notifications

+

Dappnode can send you notifications about important events, such as your dappnode being offline or high CPU usage. This is a great way to stay on top of your Dappnode's health and performance.

+

setup-4

+

Change Host User Password

+

Beneath the hood, Dappnode operates on a Linux framework, protected by a password, which will be needed to access your Dappnode's terminal To amplify your Dappnode's defense:

+
    +
  1. Change the default Linux machine password for user dappnode.
  2. +
  3. Choose a strong, unique password that's not easily guessable.
  4. +
  5. Remember to store this password in a secure location. If you lose access to this password, you could be locked out of your Dappnode.
  6. +
+
caution

Always save and backup your password. This is crucial for ensuring uninterrupted access to your Dappnode.

+

setup-4

+

All Set!

+

Congratulations! Your Dappnode is now configured and ready for use. Dive into the world of decentralized applications and enjoy the self-hosted, decentralized internet experience.

+

With these steps, your Dappnode should be up and running efficiently. Always refer to the official Dappnode documentation or community for any further queries or support.

+
Keep your Dappnode up to date

Remember to regularly check for updates and best practices to ensure your Dappnode stays secure and efficient.

+

setup-5

\ No newline at end of file diff --git a/docs/user/hardware/maintenance/index.html b/docs/user/hardware/maintenance/index.html index a844df20d..4593d5f07 100644 --- a/docs/user/hardware/maintenance/index.html +++ b/docs/user/hardware/maintenance/index.html @@ -1,17 +1,26 @@ - + - -Maintenance | Dappnode - - - + +Maintenance | Dappnode + + + - -
-

Maintenance

This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they're always welcome in our Discord server.

info

💡 Keep in mind these have different levels of difficulty, and if you're hesitant about trying them you should find a professional to give you a hand. Hardware is delicate and if mishandled it can cause permanent damage to your Dappnode, so proceed with caution.

1. Air Flow

One of the key elements to keep your Dappnode's performance optimal is where you place it. There's this myth about air conditioning or cool air being able to lower your devices' temperatures, however constant air flow is much more important than the temperature of the air itself. We recommend picking a place for your Dappnode that will favor this, and where the heat it produces won't stay in the same room and raise the atmosphere temperature. An open room with windows is great for this, so you should avoid closets or small storage rooms. If your Dappnode is still struggling to keep its temperature low, try removing the upper lid. It won't look as pretty, but it'll get the job done!

2. Dust cleaning

Dust is the enemy of electronics. It can cause overheating and short circuits, so it's important to keep your Dappnode clean. The best way to do this is by using a can of compressed air (also called air dusters), which you can find in any hardware store.

These cans are very helpful to get your Dappnode's insides clean. You can do this by carefully oppening the bottom metal lid. Loosen its four screws and be specially careful when lifting it, as there's a SATA ribbon cable attached to the NUC's board and the metal lid that can be damaged if handled roughly.

For diving into the actual cleaning of your Dappnode, try to be in an outside location when performing this dust cleaning process. Keep your Dappnode safe from humidity or extreme direct temperatures. Carefuly place the can of duster in a vertical position for starting the cleaning process. Always point the airstream somewhere other than your device when starting to use it, as these release liquid for a brief period of time sometimes. After you've made sure the duster is working as expected, start blowing at the smaller spaces in the board and gradually moving to the more general area of your hardware without getting the tip of the duster to close to the circuits. Make sure the fans don't have big chunks of dust that prevent them from working properly.

When done, put the bottom metal lid back on and screw it back without leaving it too tight.

3. Thermal Paste Change

Your CPU has a heatsink right above it that helps dissipate heat. To facilitate this transfer of heat effectively, thermal paste is applied between the CPU's top plate and the heatsink. Over time, the thermal paste can degrade or dry out, leading to reduced thermal conductivity and potentially higher operating temperatures for the CPU.

To replace the thermal paste, start by powering down your dappnode, removing the heatsink, and cleaning both the CPU surface and the heatsink thoroughly with rubbing alcohol. Then, apply a small amount of fresh thermal paste onto the center of the CPU (Be careful not to use too much, as excess paste can lead to inefficient heat transfer), reattach the heatsink carefully, and ensure all connections are secure before powering it back on. Monitoring temperatures post-replacement ensures optimal performance and cooling efficiency. You can learn how to monitor it in Temperature section.

- - + +

Maintenance

+

This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they're always welcome in our Discord server.

+
info

💡 Keep in mind these have different levels of difficulty, and if you're hesitant about trying them you should find a professional to give you a hand. Hardware is delicate and if mishandled it can cause permanent damage to your Dappnode, so proceed with caution.

+

1. Air Flow

+

One of the key elements to keep your Dappnode's performance optimal is where you place it. There's this myth about air conditioning or cool air being able to lower your devices' temperatures, however constant air flow is much more important than the temperature of the air itself. We recommend picking a place for your Dappnode that will favor this, and where the heat it produces won't stay in the same room and raise the atmosphere temperature. An open room with windows is great for this, so you should avoid closets or small storage rooms. If your Dappnode is still struggling to keep its temperature low, try removing the upper lid. It won't look as pretty, but it'll get the job done!

+

2. Dust cleaning

+

Dust is the enemy of electronics. It can cause overheating and short circuits, so it's important to keep your Dappnode clean. The best way to do this is by using a can of compressed air (also called air dusters), which you can find in any hardware store.

+

These cans are very helpful to get your Dappnode's insides clean. You can do this by carefully oppening the bottom metal lid. Loosen its four screws and be specially careful when lifting it, as there's a SATA ribbon cable attached to the NUC's board and the metal lid that can be damaged if handled roughly.

+

For diving into the actual cleaning of your Dappnode, try to be in an outside location when performing this dust cleaning process. Keep your Dappnode safe from humidity or extreme direct temperatures. Carefuly place the can of duster in a vertical position for starting the cleaning process. Always point the airstream somewhere other than your device when starting to use it, as these release liquid for a brief period of time sometimes. After you've made sure the duster is working as expected, start blowing at the smaller spaces in the board and gradually moving to the more general area of your hardware without getting the tip of the duster to close to the circuits. Make sure the fans don't have big chunks of dust that prevent them from working properly.

+

When done, put the bottom metal lid back on and screw it back without leaving it too tight.

+

3. Thermal Paste Change

+

Your CPU has a heatsink right above it that helps dissipate heat. To facilitate this transfer of heat effectively, thermal paste is applied between the CPU's top plate and the heatsink. Over time, the thermal paste can degrade or dry out, leading to reduced thermal conductivity and potentially higher operating temperatures for the CPU.

+

To replace the thermal paste, start by powering down your dappnode, removing the heatsink, and cleaning both the CPU surface and the heatsink thoroughly with rubbing alcohol. Then, apply a small amount of fresh thermal paste onto the center of the CPU (Be careful not to use too much, as excess paste can lead to inefficient heat transfer), reattach the heatsink carefully, and ensure all connections are secure before powering it back on. Monitoring temperatures post-replacement ensures optimal performance and cooling efficiency. You can learn how to monitor it in Temperature section.

\ No newline at end of file diff --git a/docs/user/hardware/overview/index.html b/docs/user/hardware/overview/index.html index 8de0800af..b6fe06312 100644 --- a/docs/user/hardware/overview/index.html +++ b/docs/user/hardware/overview/index.html @@ -1,17 +1,24 @@ - + - -Hardware | Dappnode - - - + +Hardware | Dappnode + + + - -
-

Hardware

In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.

Here are some topics you can check:

- - + +

Hardware

+

In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.

+

Here are some topics you can check:

+
    +
  • +

    🛠️ Maintenance: Some approaches that may be helpful for your dappnode to perform as expected.

    +
  • +
  • +

    🌡️ Temperature: Instructions for keeping track of your dappnode's temperature.

    +
  • +
\ No newline at end of file diff --git a/docs/user/hardware/temperature/index.html b/docs/user/hardware/temperature/index.html index 2048ee252..9e02bb8aa 100644 --- a/docs/user/hardware/temperature/index.html +++ b/docs/user/hardware/temperature/index.html @@ -1,17 +1,27 @@ - + - -Temperature | Dappnode - - - + +Temperature | Dappnode + + + - -
-

Temperature

Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics 📊 in the main dashboard to do so.

CPU_temp

If you want to configure notifications 🔔 for temperature changes, you can find two options:

  1. In the DMS Dashboard you'll be able to configure Grafana notifications.
  2. You can also set Ethical Metrics up to get email notifications while keeping your privacy.

Some additional tips that will contribute to an optimal temperature are:

  • BIOS Adjustments: if you shut your Dappnode down you can access your NUC's BIOS setup with the F2 key while booting. The UI includes different options that you can check in Intel's documentation and tweak according to your preferences.
  • If you're using an 11th Generation NUC, check its ambient temperature recomendations here.
  • If you're using a 12th Generation NUC, check its ambient temperature recomendations here.
- - + +

Temperature

+

Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics 📊 in the main dashboard to do so.

+

CPU_temp

+

If you want to configure notifications 🔔 for temperature changes, you can find two options:

+
    +
  1. In the DMS Dashboard you'll be able to configure Grafana notifications.
  2. +
  3. You can also set Ethical Metrics up to get email notifications while keeping your privacy.
  4. +
+

Some additional tips that will contribute to an optimal temperature are:

+
    +
  • BIOS Adjustments: if you shut your Dappnode down you can access your NUC's BIOS setup with the F2 key while booting. The UI includes different options that you can check in Intel's documentation and tweak according to your preferences.
  • +
  • If you're using an 11th Generation NUC, check its ambient temperature recomendations here.
  • +
  • If you're using a 12th Generation NUC, check its ambient temperature recomendations here.
  • +
\ No newline at end of file diff --git a/docs/user/install/arm/index.html b/docs/user/install/arm/index.html index 7226b7485..df74edfbb 100644 --- a/docs/user/install/arm/index.html +++ b/docs/user/install/arm/index.html @@ -1,22 +1,54 @@ - + - -Install - ARM | Dappnode - - - + +Install - ARM | Dappnode + + + - -
-

Install - ARM

Hardware Recommendations

  • 8 Gb RAM memory
  • Screen and keyboard (Only for the first installation)
  • Wired connection to the Dappnode

Install Dappnode via Script

Follow the instructions you can find in Script Installation

Add an external SSD

In case you have installed Dappnode in a Raspberry using a SD card and you want to add an external SSD you should mount docker data in it. To do this, follow the next steps:

  • Stop Docker service -systemctl stop docker

  • Create a new mountpoint for docker data. As an example: -mkdir /data

  • Add your partition on the new device to /etc/fstab. You can identify its UUID using the blkid tool. Make sure your device is properly partitioned first. Your line in /etc/fstab should look like this: -UUID=b311b983-bda6-4e9f-835c-266d40d64f07 /data/ ext4 defaults 0 0

  • Mount your SSD drive -mount /data

  • Move docker data to the mountpoint -mv /var/lib/docker/* /data/

  • Edit Docker settings to use the alternative location. Edit /etc/docker/daemon.json as follows:

{
"data-root": "/data"
}
  • Restart docker

systemctl start docker

- - + +

Install - ARM

+

Hardware Recommendations

+
    +
  • 8 Gb RAM memory
  • +
  • Screen and keyboard (Only for the first installation)
  • +
  • Wired connection to the Dappnode
  • +
+

Install Dappnode via Script

+

Follow the instructions you can find in Script Installation

+

Add an external SSD

+

In case you have installed Dappnode in a Raspberry using a SD card and you want to add an external SSD you should mount docker data in it. To do this, follow the next steps:

+
    +
  • +

    Stop Docker service +systemctl stop docker

    +
  • +
  • +

    Create a new mountpoint for docker data. As an example: +mkdir /data

    +
  • +
  • +

    Add your partition on the new device to /etc/fstab. You can identify its UUID using the blkid tool. Make sure your device is properly partitioned first. Your line in /etc/fstab should look like this: +UUID=b311b983-bda6-4e9f-835c-266d40d64f07 /data/ ext4 defaults 0 0

    +
  • +
  • +

    Mount your SSD drive +mount /data

    +
  • +
  • +

    Move docker data to the mountpoint +mv /var/lib/docker/* /data/

    +
  • +
  • +

    Edit Docker settings to use the alternative location. Edit /etc/docker/daemon.json as follows:

    +
  • +
+
{
"data-root": "/data"
}
+
    +
  • Restart docker
  • +
+

systemctl start docker

\ No newline at end of file diff --git a/docs/user/install/dappnode-commands/index.html b/docs/user/install/dappnode-commands/index.html index c02bcaaf7..2f31638e1 100644 --- a/docs/user/install/dappnode-commands/index.html +++ b/docs/user/install/dappnode-commands/index.html @@ -1,17 +1,47 @@ - + - -Dappnode commands | Dappnode - - - + +Dappnode commands | Dappnode + + + - -
-

Dappnode commands

Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.

commands-welcome-message

tip

Go to the Access your Dappnode's terminal section to learn more about how to access the terminal.

Below is a list of available commands in Dappnode:

  • dappnode_help: prints out this message

  • dappnode_wifi: get wifi credentials (SSID and password)

  • dappnode_openvpn: get Open VPN credentials

  • dappnode_wireguard: get Wireguard VPN credentials. Use dappnode_wireguard --help for more info

  • dappnode_connect: check connectivity methods available in Dappnode

  • dappnode_status: get status of dappnode containers

  • dappnode_start: start dappnode containers

  • dappnode_stop: stop dappnode containers

To run a command, enter it in your Dappnode terminal. For example:

dappnode_help
I get the error "command not found"
If you get the error `command not found` when trying to execute a dappnode command, it means that the command is not available in your system. You need to load the dappndoe profile as follows:
source /usr/src/dappnode/DNCORE/.dappnode_profile
- - + +

Dappnode commands

+

Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.

+

commands-welcome-message

+
tip

Go to the Access your Dappnode's terminal section to learn more about how to access the terminal.

+

Below is a list of available commands in Dappnode:

+
    +
  • +

    dappnode_help: prints out this message

    +
  • +
  • +

    dappnode_wifi: get wifi credentials (SSID and password)

    +
  • +
  • +

    dappnode_openvpn: get Open VPN credentials

    +
  • +
  • +

    dappnode_wireguard: get Wireguard VPN credentials. Use dappnode_wireguard --help for more info

    +
  • +
  • +

    dappnode_connect: check connectivity methods available in Dappnode

    +
  • +
  • +

    dappnode_status: get status of dappnode containers

    +
  • +
  • +

    dappnode_start: start dappnode containers

    +
  • +
  • +

    dappnode_stop: stop dappnode containers

    +
  • +
+

To run a command, enter it in your Dappnode terminal. For example:

+
dappnode_help
+
I get the error "command not found"

If you get the error command not found when trying to execute a dappnode command, it means that the command is not available in your system. You need to load the dappndoe profile as follows:

source /usr/src/dappnode/DNCORE/.dappnode_profile
\ No newline at end of file diff --git a/docs/user/install/iso/index.html b/docs/user/install/iso/index.html index 0da8da08d..48de2761b 100644 --- a/docs/user/install/iso/index.html +++ b/docs/user/install/iso/index.html @@ -1,17 +1,58 @@ - + - -ISO Installation | Dappnode - - - + +ISO Installation | Dappnode + + + - -
-

ISO Installation

When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.

Get the ISO

You can get the image downloading directly from Dappnode ISO or if you prefer you can build it from the source.

Attended VS Unattended ISO
  • Attended ISO: An attended ISO installation involves a manual setup process where the user must be present to make choices, answer prompts, and guide the installation through its various stages. It provides more control over the configuration, allowing for customization based on specific needs.

  • Unattended ISO: The unattended ISO installation is an automated process where pre-defined settings are used to install Dappnode without user intervention. This is ideal for straightforward installations where default configurations are preferred. It speeds up the process and ensures consistency in the setup.

Consider your specific requirements and the level of customization you need when deciding between these two installation methods.

Burn the ISO in a USB

Burn the ISO to an USB stick. To do so we recommend using Balena Etcher for the OS with which you will prepare the USB to boot from your server and install Dappnode.

danger

If you trigger the installation in a machine containing data, all existing data will be erased.

Boot from the USB

After burning the ISO to the USB stick:

  1. Insert the USB stick into the machine where you want to install Dappnode.
  2. Reboot the machine.
  3. During the boot process, access the boot menu (the key to press varies depending on the machine manufacturer; commonly used keys include F2, F10, F12, ESC, or DEL).
  4. Select the USB stick as the boot device.

The machine should now boot from the USB, and you'll see the Dappnode installation interface.

info

Make sure that an Ethernet cable is plugged in to your device during the installation process, otherwise it will fail.

Follow the Installation Prompts

  • If you've chosen the Attended ISO, you'll be presented with a series of prompts asking for configuration details and preferences. Follow the on-screen instructions and provide the necessary input to proceed.
  • If you've opted for the Unattended ISO, the installation will proceed automatically, using predefined settings.
Default Credentials

If you're using the Unattended ISO, the default credentials are:

user: dappnode

pass: dappnode.s0

Final Steps

Once the installation is complete:

  1. Remove the USB stick.
  2. Reboot the machine (you might need to do this twice)
  3. On startup, Dappnode should be running. You can check it by executing docker ps in the terminal and some of the Dappnode Commands
  4. Finally, you can begin the post-installation setup and configuration.
info

Remember to keep your Dappnode running 24/7 for optimal performance, especially if you are hosting blockchain nodes or other continuous services.

Congratulations! You've successfully installed Dappnode using the ISO method. For any further assistance or troubleshooting, always refer to the official Dappnode documentation or community support.

- - + +

ISO Installation

+

When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.

+

Get the ISO

+

You can get the image downloading directly from Dappnode ISO or if you prefer you can build it from the source.

+
Attended VS Unattended ISO
    +
  • +

    Attended ISO: An attended ISO installation involves a manual setup process where the user must be present to make choices, answer prompts, and guide the installation through its various stages. It provides more control over the configuration, allowing for customization based on specific needs.

    +
  • +
  • +

    Unattended ISO: The unattended ISO installation is an automated process where pre-defined settings are used to install Dappnode without user intervention. This is ideal for straightforward installations where default configurations are preferred. It speeds up the process and ensures consistency in the setup.

    +
  • +

Consider your specific requirements and the level of customization you need when deciding between these two installation methods.

+

Burn the ISO in a USB

+

Burn the ISO to an USB stick. To do so we recommend using Balena Etcher for the OS with which you will prepare the USB to boot from your server and install Dappnode.

+
danger

If you trigger the installation in a machine containing data, all existing data will be erased.

+

Boot from the USB

+

After burning the ISO to the USB stick:

+
    +
  1. Insert the USB stick into the machine where you want to install Dappnode.
  2. +
  3. Reboot the machine.
  4. +
  5. During the boot process, access the boot menu (the key to press varies depending on the machine manufacturer; commonly used keys include F2, F10, F12, ESC, or DEL).
  6. +
  7. Select the USB stick as the boot device.
  8. +
+

The machine should now boot from the USB, and you'll see the Dappnode installation interface.

+
info

Make sure that an Ethernet cable is plugged in to your device during the installation process, otherwise it will fail.

+

Follow the Installation Prompts

+
    +
  • +

    If you've chosen the Attended ISO, you'll be presented with a series of prompts asking for configuration details and preferences. Follow the on-screen instructions and provide the necessary input to proceed.

    +
  • +
  • +

    If you've opted for the Unattended ISO, the installation will proceed automatically, using predefined settings.

    +
  • +
+
Default Credentials

If you're using the Unattended ISO, the default credentials are:

user: dappnode

pass: dappnode.s0

+

Final Steps

+

Once the installation is complete:

+
    +
  1. Remove the USB stick.
  2. +
  3. Reboot the machine (you might need to do this twice)
  4. +
  5. On startup, Dappnode should be running. You can check it by executing docker ps in the terminal and some of the Dappnode Commands
  6. +
  7. Finally, you can begin the post-installation setup and configuration.
  8. +
+
info

Remember to keep your Dappnode running 24/7 for optimal performance, especially if you are hosting blockchain nodes or other continuous services.

+

Congratulations! You've successfully installed Dappnode using the ISO method. For any further assistance or troubleshooting, always refer to the official Dappnode documentation or community support.

\ No newline at end of file diff --git a/docs/user/install/overview/index.html b/docs/user/install/overview/index.html index a890dfeae..fcf30b5fb 100644 --- a/docs/user/install/overview/index.html +++ b/docs/user/install/overview/index.html @@ -1,17 +1,50 @@ - + - -Installation Overview | Dappnode - - - + +Installation Overview | Dappnode + + + - -
-

Installation Overview

Specifications & Minimum Requirements

Dappnode is a Debian-based OS, which makes it friendly with most available commercial hardware. Depending on what you intend to run in your Dappnode you might need higher specifications, but a great number of available features can be used with the following recommendations:

  • Intel Core i5/i7
  • 32 GB RAM
  • 4 TB NVMe storage

As minimum requirements we recommend:

  • Intel Core i3
  • 16 GB RAM
  • 2 TB NVMe or fast SSD storage

If you don't have enough technical experience to customize your own hardware, remember you can always get a plug n play Dappnode Home in our online shop.

Installation Methods

Installing Dappnode can be achieved through two primary methods:

1. ISO Installation

  • Description: This method involves downloading the Dappnode ISO file and using it to directly install Dappnode on your system.
  • Best for: Most users as it provides a comprehensive setup designed specifically for Dappnode.

2. Script Installation over Debian-based Distribution

  • Description: If you're already running a Debian-based distribution, you can utilize the Dappnode script to facilitate the installation process.
  • Best for: Users who want to install Dappnode on a cloud server, ARM device (where it's the only option), or those who desire a specific Debian-based distro.
note

For ARM-based systems, only the script installation method is available.

Choose the method that best fits your needs and system setup. Make sure to follow the respective installation instructions carefully for a smooth and successful Dappnode deployment.

Continuous Uptime

Dappnode is designed to run 24/7. Many features and functions within Dappnode, especially blockchain nodes, rely on continuous uptime to maintain their state, sync, and functionality. For instance:

  • Blockchain Nodes: If you have a synced blockchain node and you turn off Dappnode, the node will lose its sync. This means when you turn it back on, it'll take time to catch up to the latest state, which can be resource-intensive and time-consuming.

  • Validator Nodes: For users staking on certain blockchain networks, continuous uptime is crucial. Being offline might result in missed opportunities or even penalties.

Considering these aspects, it's recommended to ensure your Dappnode device remains powered on and running at all times.

- - + +

Installation Overview

+

Specifications & Minimum Requirements

+

Dappnode is a Debian-based OS, which makes it friendly with most available commercial hardware. Depending on what you intend to run in your Dappnode you might need higher specifications, but a great number of available features can be used with the following recommendations:

+
    +
  • Intel Core i5/i7
  • +
  • 32 GB RAM
  • +
  • 4 TB NVMe storage
  • +
+

As minimum requirements we recommend:

+
    +
  • Intel Core i3
  • +
  • 16 GB RAM
  • +
  • 2 TB NVMe or fast SSD storage
  • +
+

If you don't have enough technical experience to customize your own hardware, remember you can always get a plug n play Dappnode Home in our online shop.

+

Installation Methods

+

Installing Dappnode can be achieved through two primary methods:

+

1. ISO Installation

+
    +
  • Description: This method involves downloading the Dappnode ISO file and using it to directly install Dappnode on your system.
  • +
  • Best for: Most users as it provides a comprehensive setup designed specifically for Dappnode.
  • +
+

2. Script Installation over Debian-based Distribution

+
    +
  • Description: If you're already running a Debian-based distribution, you can utilize the Dappnode script to facilitate the installation process.
  • +
  • Best for: Users who want to install Dappnode on a cloud server, ARM device (where it's the only option), or those who desire a specific Debian-based distro.
  • +
+
note

For ARM-based systems, only the script installation method is available.

+

Choose the method that best fits your needs and system setup. Make sure to follow the respective installation instructions carefully for a smooth and successful Dappnode deployment.

+
Continuous Uptime

Dappnode is designed to run 24/7. Many features and functions within Dappnode, especially blockchain nodes, rely on continuous uptime to maintain their state, sync, and functionality. For instance:

    +
  • +

    Blockchain Nodes: If you have a synced blockchain node and you turn off Dappnode, the node will lose its sync. This means when you turn it back on, it'll take time to catch up to the latest state, which can be resource-intensive and time-consuming.

    +
  • +
  • +

    Validator Nodes: For users staking on certain blockchain networks, continuous uptime is crucial. Being offline might result in missed opportunities or even penalties.

    +
  • +

Considering these aspects, it's recommended to ensure your Dappnode device remains powered on and running at all times.

\ No newline at end of file diff --git a/docs/user/install/script/index.html b/docs/user/install/script/index.html index 3c139863a..588f6c5c3 100644 --- a/docs/user/install/script/index.html +++ b/docs/user/install/script/index.html @@ -1,17 +1,36 @@ - + - -Script installation | Dappnode - - - + +Script installation | Dappnode + + + - -
-

Script installation

You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.

Prerequisites

Before installing Dappnode, you need to install some prerequisites:

To install all the above prerequisites, execute the command below in the terminal of the machine you want to install Dappnode. If you already have the dependencies installed or you want to install them on your own you can skip this step.

sudo wget -O - https://prerequisites.dappnode.io | sudo bash

Install Dappnode

To install Dappnode, execute the next script:

sudo wget -O - https://installer.dappnode.io | sudo bash

Reboot

To finalize the installation once it has finished completing, reboot your machine (you might need to do this twice):

shutdown -r now

Restore to the latest version

If you are experiencing any problem or just want to make sure you are running the latest Dappnode versions, execute this command in the Dappnode terminal. This will update the core packages to the latest versions without erasing any data from your volumes.

sudo wget -O - https://installer.dappnode.io | sudo UPDATE=true bash

Uninstall

This command will uninstall Dappnode components (but not docker et al.).

wget -qO - https://uninstaller.dappnode.io | sudo bash
- - + +

Script installation

+

You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.

+

Prerequisites

+

Before installing Dappnode, you need to install some prerequisites:

+ +

To install all the above prerequisites, execute the command below in the terminal of the machine you want to install Dappnode. If you already have the dependencies installed or you want to install them on your own you can skip this step.

+
sudo wget -O - https://prerequisites.dappnode.io | sudo bash
+

Install Dappnode

+

To install Dappnode, execute the next script:

+
sudo wget -O - https://installer.dappnode.io | sudo bash
+

Reboot

+

To finalize the installation once it has finished completing, reboot your machine (you might need to do this twice):

+
shutdown -r now
+

Restore to the latest version

+

If you are experiencing any problem or just want to make sure you are running the latest Dappnode versions, execute this command in the Dappnode terminal. This will update the core packages to the latest versions without erasing any data from your volumes.

+
sudo wget -O - https://installer.dappnode.io | sudo UPDATE=true bash
+

Uninstall

+

This command will uninstall Dappnode components (but not docker et al.).

+
wget -qO - https://uninstaller.dappnode.io | sudo bash
\ No newline at end of file diff --git a/docs/user/packages/avalanche/index.html b/docs/user/packages/avalanche/index.html index 8042da785..34a2fbdbd 100644 --- a/docs/user/packages/avalanche/index.html +++ b/docs/user/packages/avalanche/index.html @@ -1,17 +1,20 @@ - + - -Avalanche | Dappnode - - - + +Avalanche | Dappnode + + + - -
-

Avalanche

Avalanche: A Revolutionary Consensus Protocol

Avalanche is an innovative open-source platform designed for launching decentralized finance applications and enterprise blockchain deployments within a single, highly scalable ecosystem. Developers leveraging Avalanche’s capabilities can effortlessly craft robust, secure applications and tailor-made blockchain networks. This platform empowers them to construct intricate rulesets or build atop existing private or public subnets, ultimately driving the creation of reliable and impactful solutions.

AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network

info

A guide to running an Avalanche validator node on Dappnode is coming soon. In the meantime, you can find more information on the Avalanche website.

By running an Avalanche node on Dappnode, you actively participate in the decentralization of the network. Through this engagement, you contribute to the security and reliability of Avalanche’s consensus model.

Engage in AVAX staking to contribute to the security and decentralization of the Avalanche network. Stake your AVAX tokens to become a delegator or validator, and in return, earn rewards for your participation in the Proof of Stake consensus mechanism. With a minimum of 2000 AVAX tokens required to start a validator, AVAX staking presents an opportunity to support the network while earning rewards.

- - + +

Avalanche

+

Avalanche: A Revolutionary Consensus Protocol

+

Avalanche is an innovative open-source platform designed for launching decentralized finance applications and enterprise blockchain deployments within a single, highly scalable ecosystem. Developers leveraging Avalanche’s capabilities can effortlessly craft robust, secure applications and tailor-made blockchain networks. This platform empowers them to construct intricate rulesets or build atop existing private or public subnets, ultimately driving the creation of reliable and impactful solutions.

+

AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network

+
info

A guide to running an Avalanche validator node on Dappnode is coming soon. In the meantime, you can find more information on the Avalanche website.

+

By running an Avalanche node on Dappnode, you actively participate in the decentralization of the network. Through this engagement, you contribute to the security and reliability of Avalanche’s consensus model.

+

Engage in AVAX staking to contribute to the security and decentralization of the Avalanche network. Stake your AVAX tokens to become a delegator or validator, and in return, earn rewards for your participation in the Proof of Stake consensus mechanism. With a minimum of 2000 AVAX tokens required to start a validator, AVAX staking presents an opportunity to support the network while earning rewards.

\ No newline at end of file diff --git a/docs/user/packages/bitcoin/index.html b/docs/user/packages/bitcoin/index.html index 80267a51f..e7ad37a72 100644 --- a/docs/user/packages/bitcoin/index.html +++ b/docs/user/packages/bitcoin/index.html @@ -1,17 +1,20 @@ - + - -Bitcoin | Dappnode - - - + +Bitcoin | Dappnode + + + - -
-

Bitcoin

Exploring Bitcoin: The Pioneer of Cryptocurrency

Bitcoin, the first and most well-known cryptocurrency, is a digital asset that introduced the concept of blockchain technology to the world. Created by an anonymous person or group under the pseudonym Satoshi Nakamoto, Bitcoin revolutionized the financial landscape by offering a decentralized and borderless form of value transfer.

Running a Bitcoin Node on Dappnode and Supporting the Network

Running a Bitcoin node on Dappnode allows you to actively participate in the Bitcoin network’s operations. As a node operator, you help validate transactions, maintain a copy of the blockchain, and contribute to the network’s overall security and resilience. Operating a Bitcoin node not only benefits the network by enhancing its decentralization but also provides you with an opportunity to engage with the technology that powers the cryptocurrency revolution.

Bitcoin’s Role in Decentralization: A Decade of Innovation

Bitcoin’s journey over the past decade has been marked by remarkable advancements and widespread adoption. As the original cryptocurrency, Bitcoin has demonstrated the potential of blockchain technology to disrupt traditional financial systems. Its decentralized nature, limited supply, and transparent ledger have positioned it as a store of value and a medium of exchange. By running a Bitcoin node on Dappnode, you contribute to the continued success and decentralization of the Bitcoin network.

- - + +

Bitcoin

+

Exploring Bitcoin: The Pioneer of Cryptocurrency

+

Bitcoin, the first and most well-known cryptocurrency, is a digital asset that introduced the concept of blockchain technology to the world. Created by an anonymous person or group under the pseudonym Satoshi Nakamoto, Bitcoin revolutionized the financial landscape by offering a decentralized and borderless form of value transfer.

+

Running a Bitcoin Node on Dappnode and Supporting the Network

+

Running a Bitcoin node on Dappnode allows you to actively participate in the Bitcoin network’s operations. As a node operator, you help validate transactions, maintain a copy of the blockchain, and contribute to the network’s overall security and resilience. Operating a Bitcoin node not only benefits the network by enhancing its decentralization but also provides you with an opportunity to engage with the technology that powers the cryptocurrency revolution.

+

Bitcoin’s Role in Decentralization: A Decade of Innovation

+

Bitcoin’s journey over the past decade has been marked by remarkable advancements and widespread adoption. As the original cryptocurrency, Bitcoin has demonstrated the potential of blockchain technology to disrupt traditional financial systems. Its decentralized nature, limited supply, and transparent ledger have positioned it as a store of value and a medium of exchange. By running a Bitcoin node on Dappnode, you contribute to the continued success and decentralization of the Bitcoin network.

\ No newline at end of file diff --git a/docs/user/packages/dms/index.html b/docs/user/packages/dms/index.html index 6210e225b..dd26e3bff 100644 --- a/docs/user/packages/dms/index.html +++ b/docs/user/packages/dms/index.html @@ -1,17 +1,49 @@ - + - -Dappnode Monitoring Service (DMS) | Dappnode - - - + +Dappnode Monitoring Service (DMS) | Dappnode + + + - -
-

Dappnode Monitoring Service (DMS)

As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or "health" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.

How It All Works

DMS acts as a strong monitoring solution, simplifying the complex task of monitoring your packages and system by automatically collecting all available data and visualizing it for you. But how does it achieve this? DMS primarily comprises two key components: Prometheus and Grafana. Let's break it down

  1. Prometheus Integration: DMS seamlessly incorporates Prometheus, a comprehensive monitoring toolkit. Prometheus is responsible of gathering all data coming from other Dappnode packages. This information is the foundation for understanding your package's performance.

  2. Grafana Dashboards: To transform raw data coming from Prometheus into meaningful insights, DMS brings in Grafana, renowned for its exceptional data visualization capabilities. Through customizable dashboards, you gain instant access to both real-time and historical perspectives on how your packages are functioning.

info

💡 While DMS can monitor data from your installed packages on its own, we highly recommend installing the Dappnode Exporter package as well. This package expands DMS's capabilities to monitor critical Dappnode system metrics, such as network traffic, CPU, RAM, and disk usage. Moreover, it unlocks new Grafana dashboards that visualize this data for your convenience. You can easily find the Dappnode Exporter in your DAppStore.

Your Privacy Matters:

At Dappnode, we respect your privacy. Rest assured that all the metrics collected by DMS are stored locally, ensuring your information remains private and secure.

Installing and accessing DMS

Locate DMS in your DAppStore, listed among the Featured packages. The installation process is straightforward, much like any other Dappnode package. After installation, you can access DMS Grafana and explore all its dashboards by visiting http://dms.dappnode.

Monitoring through Dashboards

As explained in the official Grafana documentation, Grafana simplifies data visualization through organized views known as dashboards. In the context of Dappnode, many packages, especially our staker packages, come equipped with pre-built Grafana dashboards that seamlessly integrate into DMS upon installation. These dashboards are designed to provide specific insights into the performance of the corresponding packages. To explore the range of available Grafana dashboards within DMS, follow these simple steps:

  1. Accessing Dashboards: Find the "Dashboards" icon on the left-hand side of the DMS interface and hover your mouse over it. Click on "Browse" to proceed.

    Browse Dashboards

  2. Dashboard Folders: In the dashboard browsing view, you'll see different dashboard folders. Each folder contains one or more dashboards related to specific aspects of your Dappnode environment. For instance, let's click on the "Docker" dashboard provided by the Dappnode Exporter package.

    Dashboard Folders

  3. Exploring a Dashboard: That's it! You are now within the chosen dashboard, such as the "Docker" dashboard. Here, you'll find valuable information about all your installed packages, including relevant metrics and performance indicators.

    Docker Dashboard

As you navigate through these Grafana dashboards, it's worth mentioning that the official Grafana documentation provides a wealth of information about dashboards, visualization techniques, and best practices. Exploring this documentation can greatly enhance your ability to interpret and utilize the data presented in DMS dashboards. Whether you're new to Grafana or seeking advanced tips, the official documentation is a valuable resource for maximizing your monitoring experience.

info

💡 If you're looking for specific dashboards beyond what comes pre-installed, Grafana's dashboard repository makes it easy to search and import dashboards created by the community.

Feel free to check out the different dashboard folders and adjust how things look based on what you like. Grafana offers a bunch of cool features, so have fun exploring and making the dashboards work just right for you!

- - + +

Dappnode Monitoring Service (DMS)

+

As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or "health" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.

+

How It All Works

+

DMS acts as a strong monitoring solution, simplifying the complex task of monitoring your packages and system by automatically collecting all available data and visualizing it for you. But how does it achieve this? DMS primarily comprises two key components: Prometheus and Grafana. Let's break it down

+
    +
  1. +

    Prometheus Integration: DMS seamlessly incorporates Prometheus, a comprehensive monitoring toolkit. Prometheus is responsible of gathering all data coming from other Dappnode packages. This information is the foundation for understanding your package's performance.

    +
  2. +
  3. +

    Grafana Dashboards: To transform raw data coming from Prometheus into meaningful insights, DMS brings in Grafana, renowned for its exceptional data visualization capabilities. Through customizable dashboards, you gain instant access to both real-time and historical perspectives on how your packages are functioning.

    +
  4. +
+
info

💡 While DMS can monitor data from your installed packages on its own, we highly recommend installing the Dappnode Exporter package as well. This package expands DMS's capabilities to monitor critical Dappnode system metrics, such as network traffic, CPU, RAM, and disk usage. Moreover, it unlocks new Grafana dashboards that visualize this data for your convenience. You can easily find the Dappnode Exporter in your DAppStore.

+

Your Privacy Matters:

+

At Dappnode, we respect your privacy. Rest assured that all the metrics collected by DMS are stored locally, ensuring your information remains private and secure.

+

Installing and accessing DMS

+

Locate DMS in your DAppStore, listed among the Featured packages. The installation process is straightforward, much like any other Dappnode package. After installation, you can access DMS Grafana and explore all its dashboards by visiting http://dms.dappnode.

+

Monitoring through Dashboards

+

As explained in the official Grafana documentation, Grafana simplifies data visualization through organized views known as dashboards. In the context of Dappnode, many packages, especially our staker packages, come equipped with pre-built Grafana dashboards that seamlessly integrate into DMS upon installation. These dashboards are designed to provide specific insights into the performance of the corresponding packages. To explore the range of available Grafana dashboards within DMS, follow these simple steps:

+
    +
  1. Accessing Dashboards: Find the "Dashboards" icon on the left-hand side of the DMS interface and hover your mouse over it. Click on "Browse" to proceed.
  2. +
+

Browse Dashboards

+
    +
  1. +

    Dashboard Folders: In the dashboard browsing view, you'll see different dashboard folders. Each folder contains one or more dashboards related to specific aspects of your Dappnode environment. For instance, let's click on the "Docker" dashboard provided by the Dappnode Exporter package.

    +

    Dashboard Folders

    +
  2. +
  3. +

    Exploring a Dashboard: That's it! You are now within the chosen dashboard, such as the "Docker" dashboard. Here, you'll find valuable information about all your installed packages, including relevant metrics and performance indicators.

    +

    Docker Dashboard

    +
  4. +
+

As you navigate through these Grafana dashboards, it's worth mentioning that the official Grafana documentation provides a wealth of information about dashboards, visualization techniques, and best practices. Exploring this documentation can greatly enhance your ability to interpret and utilize the data presented in DMS dashboards. Whether you're new to Grafana or seeking advanced tips, the official documentation is a valuable resource for maximizing your monitoring experience.

+
info

💡 If you're looking for specific dashboards beyond what comes pre-installed, Grafana's dashboard repository makes it easy to search and import dashboards created by the community.

+

Feel free to check out the different dashboard folders and adjust how things look based on what you like. Grafana offers a bunch of cool features, so have fun exploring and making the dashboards work just right for you!

\ No newline at end of file diff --git a/docs/user/packages/ethclassic/index.html b/docs/user/packages/ethclassic/index.html index 304f8ca55..2673da47a 100644 --- a/docs/user/packages/ethclassic/index.html +++ b/docs/user/packages/ethclassic/index.html @@ -1,17 +1,18 @@ - + - -Ethereum Classic | Dappnode - - - + +Ethereum Classic | Dappnode + + + - -
-

Ethereum Classic

Introducing Ethereum Classic: Preserving Blockchain Principles

Ethereum Classic, a steadfast blockchain, emerged from the Ethereum chain split, committed to upholding the unwavering principles of blockchain immutability. Ethereum Classic champions the preservation of transaction history and decentralized governance.

Ethereum Classic on Dappnode: Supporting Decentralization

Step into the Ethereum Classic universe and become a steward of its principles. Ethereum Classic’s commitment to blockchain origins offers a space for decentralized ideals to thrive. Through an Ethereum Classic node on Dappnode, you contribute to the preservation of an ecosystem where code remains law and history remains unaltered.

- - + +

Ethereum Classic

+

Introducing Ethereum Classic: Preserving Blockchain Principles

+

Ethereum Classic, a steadfast blockchain, emerged from the Ethereum chain split, committed to upholding the unwavering principles of blockchain immutability. Ethereum Classic champions the preservation of transaction history and decentralized governance.

+

Ethereum Classic on Dappnode: Supporting Decentralization

+

Step into the Ethereum Classic universe and become a steward of its principles. Ethereum Classic’s commitment to blockchain origins offers a space for decentralized ideals to thrive. Through an Ethereum Classic node on Dappnode, you contribute to the preservation of an ecosystem where code remains law and history remains unaltered.

\ No newline at end of file diff --git a/docs/user/packages/monero/index.html b/docs/user/packages/monero/index.html index 22464094e..b7f639702 100644 --- a/docs/user/packages/monero/index.html +++ b/docs/user/packages/monero/index.html @@ -1,17 +1,18 @@ - + - -Monero | Dappnode - - - + +Monero | Dappnode + + + - -
-

Monero

Introducing Monero: A Privacy-Centric Cryptocurrency

Monero stands as a privacy-focused cryptocurrency with a core focus on anonymity and transaction fungibility. Monero uses innovative cryptographic techniques to obscure transaction details, making it difficult to trace the sender, receiver, and transaction amount.

Monero’s Package on Dappnode

By running a Monero node in Dappnode, you play a crucial role in supporting the decentralized nature of the Monero ecosystem. You actively contribute to the decentralization of the network, playing a role in shaping a financial ecosystem that values privacy and security.

- - + +

Monero

+

Introducing Monero: A Privacy-Centric Cryptocurrency

+

Monero stands as a privacy-focused cryptocurrency with a core focus on anonymity and transaction fungibility. Monero uses innovative cryptographic techniques to obscure transaction details, making it difficult to trace the sender, receiver, and transaction amount.

+

Monero’s Package on Dappnode

+

By running a Monero node in Dappnode, you play a crucial role in supporting the decentralized nature of the Monero ecosystem. You actively contribute to the decentralization of the network, playing a role in shaping a financial ecosystem that values privacy and security.

\ No newline at end of file diff --git a/docs/user/packages/signature/index.html b/docs/user/packages/signature/index.html index b76ee38d5..6c837ff03 100644 --- a/docs/user/packages/signature/index.html +++ b/docs/user/packages/signature/index.html @@ -1,17 +1,23 @@ - + - -Packages' Signature | Dappnode - - - + +Packages' Signature | Dappnode + + + - -
-

Packages' Signature

Dappnode's Packages Signatures

All Dappnode's packages must be on chain, which means that need a digital signature for verification. This cryptographic signature serves as a stamp of authenticity, enabling users to prove the identity of the package's author and ensuring the integrity of its source. Before installing any package into your Dappnode environment, is essential to ensure that it comes from a trusted author. This measure is vital for safeguarding your Dappnode infrastructure against unauthorized access or potential security breaches.

Release trusted keys

By default, our software comes with a set of pre-approved keys that have validation by the Dappnode team to ensure their reliability. However, users have the flexibility to manage these trusted keys according to their preferences. If you want to check the addresses trusted by us, or even add an address trusted by yourself, you can do it in the "System" tab on the side menu, within the "Advanced" module, in the "Release trusted keys" section.

Release trusted keys table

This feature could be particularly useful when users intend to install Dappnode packages sourced from alternative providers or even when developing their own packages. Nevertheless, it is strongly advised to have caution when modifying trusted keys and to only incorporate new addresses after thorough verification of their credibility.

Bypass trusted signature

If a user attempts to install a package whose signature fails to match any of the trusted keys listed in the system, installation will be automatically blocked. However, is it possible to bypass this safeguard by toggling the trusted signature switch during the installation process. This one is only displayed if advanced options dropdown menu is active before the installation.

Trusted signature switch

- - + +

Packages' Signature

+

Dappnode's Packages Signatures

+

All Dappnode's packages must be on chain, which means that need a digital signature for verification. This cryptographic signature serves as a stamp of authenticity, enabling users to prove the identity of the package's author and ensuring the integrity of its source. Before installing any package into your Dappnode environment, is essential to ensure that it comes from a trusted author. This measure is vital for safeguarding your Dappnode infrastructure against unauthorized access or potential security breaches.

+

Release trusted keys

+

By default, our software comes with a set of pre-approved keys that have validation by the Dappnode team to ensure their reliability. However, users have the flexibility to manage these trusted keys according to their preferences. If you want to check the addresses trusted by us, or even add an address trusted by yourself, you can do it in the "System" tab on the side menu, within the "Advanced" module, in the "Release trusted keys" section.

+

Release trusted keys table

+

This feature could be particularly useful when users intend to install Dappnode packages sourced from alternative providers or even when developing their own packages. Nevertheless, it is strongly advised to have caution when modifying trusted keys and to only incorporate new addresses after thorough verification of their credibility.

+

Bypass trusted signature

+

If a user attempts to install a package whose signature fails to match any of the trusted keys listed in the system, installation will be automatically blocked. However, is it possible to bypass this safeguard by toggling the trusted signature switch during the installation process. This one is only displayed if advanced options dropdown menu is active before the installation.

+

Trusted signature switch

\ No newline at end of file diff --git a/docs/user/packages/swarm/index.html b/docs/user/packages/swarm/index.html index 4ac21f124..c3b83c014 100644 --- a/docs/user/packages/swarm/index.html +++ b/docs/user/packages/swarm/index.html @@ -1,17 +1,55 @@ - + - -Guide to Installing Bee Node on Dappnode | Dappnode - - - + +Guide to Installing Bee Node on Dappnode | Dappnode + + + - -
-

Guide to Installing Bee Node on Dappnode

Introduction to Swarm

Swarm is a decentralized data storage and distribution technology. Ready to power the next generation of censorship-resistant, unstoppable, serverless dApps.

Node operators can stake BZZ to participate in the redistribution of funds, allowing Bee node operators to receive BZZ in return for providing storage and bandwidth.

Node operators are rewarded with BZZ tokens, the native ERC-20 token.

Beyond earning rewards, the Bee node serves as your personalized gateway to the Swarm network, offering you interactive access to content and dApps hosted on Swarm. The app enables you to:

  • Securely store (upload and download) files on Swarm's decentralized storage.
  • Share files privately and securely with others.
  • Host and manage HTML websites conveniently.

Introduction to Dappnode

DappNode is a decentralized platform that serves as critical infrastructure for launching and managing decentralized applications (dApps) with an essence of providing users with self-sovereign data management and secure, uncensorable application interfaces.

Node operators on DappNode can gain enhanced control over their participation in various blockchain networks and ensure that their activities, whether it be validating transactions, participating in consensus mechanisms, or supporting network security, are conducted in a seamless, autonomous manner.

The unique DappNode ecosystem ensures:

  • Seamless deployment and management of decentralized applications and nodes.
  • Enhanced user control over data and privacy.
  • Autonomous and secure participation in various blockchain networks.
  • Simplification of running blockchain nodes, reducing technical barriers for participants.

Gnosis Chain

Swarm uses Gnosis Chain, formerly known as xDai, for managing its incentives.

Therefore, the Swarm Bee client necessitates a connection to the Gnosis Chain. As such, we recommend installing Nethermind (direct Dappnode install link) as your RPC endpoint.

Installing a Bee node

Step 1: Navigate to the package installer — Install Swarm(direct Dappnode install link). Click Install to initiate the installation.

Step 2: Setup optional parameters:

  • Swap RPC Endpoint (Gnosis Chain) — if you installed Nethermind and are running your own node, you can leave the default settings. Otherwise, if you use an external RPC endpoint, this is where you should set it.
  • ENS resolver RPC (Ethereum Mainnet) — As bee can resolve ENS (a special type of blockchain name), it requires an Ethereum mainnet RPC endpoint. Install links are available for a variety of clients, or you can use an Infura RPC endpoint, or alternatively leave it blank to disable the ENS resolver.
  • Initial chequebook deposit (xBZZ) — is the amount of xBZZ the bee node must have deposited to its address in order to deploy the chequebook. You have the option to set this to 0 and deposit BZZ into the chequebook later via the UI.
  • Welcome message — some graffiti that you can admire at Swarm Scan or if you happen to be peering through the logs
  • Full node mode — must be set to true or false, in order to stake and participate in storage incentives, and subsequently be rewarded, it should be set to true
  • Storage data mountpoint — for advanced users; recommended to leave at default.

Engage in Storage Incentives by Staking Your BZZ

  1. Import your gift code into Metamask or another web3 wallet on Gnosis chain. Remember, the gift code is a private key that holds 12 BZZ and 0.12xDAI.
  2. Transfer funds to your Node wallet address, which can be found in the logs or at Swarm UI/Account/Wallet.
  3. Visit Account/Staking.
  4. Click on 'Stake', input an amount of 10 BZZ, and then press the 'Stake' button.
- - + +

Guide to Installing Bee Node on Dappnode

+

Introduction to Swarm

+

Swarm is a decentralized data storage and distribution technology. Ready to power the next generation of censorship-resistant, unstoppable, serverless dApps.

+

Node operators can stake BZZ to participate in the redistribution of funds, allowing Bee node operators to receive BZZ in return for providing storage and bandwidth.

+

Node operators are rewarded with BZZ tokens, the native ERC-20 token.

+

Beyond earning rewards, the Bee node serves as your personalized gateway to the Swarm network, offering you interactive access to content and dApps hosted on Swarm. The app enables you to:

+
    +
  • Securely store (upload and download) files on Swarm's decentralized storage.
  • +
  • Share files privately and securely with others.
  • +
  • Host and manage HTML websites conveniently.
  • +
+

Introduction to Dappnode

+

DappNode is a decentralized platform that serves as critical infrastructure for launching and managing decentralized applications (dApps) with an essence of providing users with self-sovereign data management and secure, uncensorable application interfaces.

+

Node operators on DappNode can gain enhanced control over their participation in various blockchain networks and ensure that their activities, whether it be validating transactions, participating in consensus mechanisms, or supporting network security, are conducted in a seamless, autonomous manner.

+

The unique DappNode ecosystem ensures:

+
    +
  • Seamless deployment and management of decentralized applications and nodes.
  • +
  • Enhanced user control over data and privacy.
  • +
  • Autonomous and secure participation in various blockchain networks.
  • +
  • Simplification of running blockchain nodes, reducing technical barriers for participants.
  • +
+

Gnosis Chain

+

Swarm uses Gnosis Chain, formerly known as xDai, for managing its incentives.

+

Therefore, the Swarm Bee client necessitates a connection to the Gnosis Chain. As such, we recommend installing Nethermind (direct Dappnode install link) as your RPC endpoint.

+

Installing a Bee node

+

Step 1: Navigate to the package installer — Install Swarm(direct Dappnode install link). Click Install to initiate the installation.

+

Step 2: Setup optional parameters:

+
    +
  • Swap RPC Endpoint (Gnosis Chain) — if you installed Nethermind and are running your own node, you can leave the default settings. Otherwise, if you use an external RPC endpoint, this is where you should set it.
  • +
  • ENS resolver RPC (Ethereum Mainnet) — As bee can resolve ENS (a special type of blockchain name), it requires an Ethereum mainnet RPC endpoint. Install links are available for a variety of clients, or you can use an Infura RPC endpoint, or alternatively leave it blank to disable the ENS resolver.
  • +
  • Initial chequebook deposit (xBZZ) — is the amount of xBZZ the bee node must have deposited to its address in order to deploy the chequebook. You have the option to set this to 0 and deposit BZZ into the chequebook later via the UI.
  • +
  • Welcome message — some graffiti that you can admire at Swarm Scan or if you happen to be peering through the logs
  • +
  • Full node mode — must be set to true or false, in order to stake and participate in storage incentives, and subsequently be rewarded, it should be set to true
  • +
  • Storage data mountpoint — for advanced users; recommended to leave at default.
  • +
+

Engage in Storage Incentives by Staking Your BZZ

+
    +
  1. Import your gift code into Metamask or another web3 wallet on Gnosis chain. Remember, the gift code is a private key that holds 12 BZZ and 0.12xDAI.
  2. +
  3. Transfer funds to your Node wallet address, which can be found in the logs or at Swarm UI/Account/Wallet.
  4. +
  5. Visit Account/Staking.
  6. +
  7. Click on 'Stake', input an amount of 10 BZZ, and then press the 'Stake' button.
  8. +
\ No newline at end of file diff --git a/docs/user/packages/understanding-dappnode-packages/index.html b/docs/user/packages/understanding-dappnode-packages/index.html index f8ce2974a..172f20e04 100644 --- a/docs/user/packages/understanding-dappnode-packages/index.html +++ b/docs/user/packages/understanding-dappnode-packages/index.html @@ -1,17 +1,54 @@ - + - -Understanding Dappnode Packages | Dappnode - - - + +Understanding Dappnode Packages | Dappnode + + + - -
-

Understanding Dappnode Packages

What are Dappnode packages and what features do they offer?


Introduction

One of Dappnode's top features is to offer a user-friendly interface to interact with different packages that contain clients and other applications. This section will go over the basic features you'll find in any Dappnode package.


Info

  • Version: You'll find both the package's version and its upstream version here.
  • Getting Started: Some of the basic information needed to run the package.
  • URLs: These will offer a number of different options, starting with bundled package UI/Dashboards and related tools such as Launchpads or external documentation.
  • Package Status: Will provide information about the package's status, for example if it's running fine or if it has crashed or in the process of restarting.
  • Pause/Restart Package: Useful for troubleshooting or restarting a stopped package.
  • Remove Volumes: Also known as the "gray trash bin", this option will wipe all of the package's data and start syncing from scratch in the case of clients.
  • Remove Package: This would be the "red trash bin", and clicking it will give you the option to preserve or delete the associated database.

dappnode_packages1


Config

The package's settings will be available under this tab in both a simple and advanced mode. The advanced mode can be accessed by clicking the lower-right corner of the screen when available.

dappnode_packages2


Network

  • Service: Some packages may have multiple services running as part of the same container. This option will allow you to adjust each of their network settings separately.
  • Public port mapping: Need to change your package's port mapping? You can change this setting in this field as well as its protocol between TCP and UDP.
  • HTTPs domain mapping: Do you want to expose your package to the internet? You'll be able to add multiple public domains to your package here. This is a great way to share your node's RPC with friends and family!

dappnode_packages3


Logs

This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top "Service" bar, something common for consensus clients for example, which usually run one service for the beacon-chain and another one for validator. Whenever you request for support in the Dappnode community, keep these handy!

dappnode_packages4


Backup

This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You'll have two very self-explainatory options: "Backup Now" and "Restore Backup".

dappnode_packages5


File Manager

Also handy whenever your package has a database you'll need to access or modify, but without going through a terminal. Download and upload files in an easy way with the File Manager.

dappnode_packages6

- - + +

Understanding Dappnode Packages

+

What are Dappnode packages and what features do they offer?

+
+

Introduction

+

One of Dappnode's top features is to offer a user-friendly interface to interact with different packages that contain clients and other applications. This section will go over the basic features you'll find in any Dappnode package.

+
+

Info

+
    +
  • Version: You'll find both the package's version and its upstream version here.
  • +
  • Getting Started: Some of the basic information needed to run the package.
  • +
  • URLs: These will offer a number of different options, starting with bundled package UI/Dashboards and related tools such as Launchpads or external documentation.
  • +
  • Package Status: Will provide information about the package's status, for example if it's running fine or if it has crashed or in the process of restarting.
  • +
  • Pause/Restart Package: Useful for troubleshooting or restarting a stopped package.
  • +
  • Remove Volumes: Also known as the "gray trash bin", this option will wipe all of the package's data and start syncing from scratch in the case of clients.
  • +
  • Remove Package: This would be the "red trash bin", and clicking it will give you the option to preserve or delete the associated database.
  • +
+

dappnode_packages1

+
+

Config

+

The package's settings will be available under this tab in both a simple and advanced mode. The advanced mode can be accessed by clicking the lower-right corner of the screen when available.

+

dappnode_packages2

+
+

Network

+
    +
  • Service: Some packages may have multiple services running as part of the same container. This option will allow you to adjust each of their network settings separately.
  • +
  • Public port mapping: Need to change your package's port mapping? You can change this setting in this field as well as its protocol between TCP and UDP.
  • +
  • HTTPs domain mapping: Do you want to expose your package to the internet? You'll be able to add multiple public domains to your package here. This is a great way to share your node's RPC with friends and family!
  • +
+

dappnode_packages3

+
+

Logs

+

This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top "Service" bar, something common for consensus clients for example, which usually run one service for the beacon-chain and another one for validator. Whenever you request for support in the Dappnode community, keep these handy!

+

dappnode_packages4

+
+

Backup

+

This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You'll have two very self-explainatory options: "Backup Now" and "Restore Backup".

+

dappnode_packages5

+
+

File Manager

+

Also handy whenever your package has a database you'll need to access or modify, but without going through a terminal. Download and upload files in an easy way with the File Manager.

+

dappnode_packages6

\ No newline at end of file diff --git a/docs/user/repository/ethereum/index.html b/docs/user/repository/ethereum/index.html index a019050e3..6ce574491 100644 --- a/docs/user/repository/ethereum/index.html +++ b/docs/user/repository/ethereum/index.html @@ -1,17 +1,49 @@ - + - -Ethereum repository | Dappnode - - - + +Ethereum repository | Dappnode + + + - -
-

Ethereum repository

Dappnode uses smart contracts to distribute the dappnode packages available in the Dappstore. The smart contracts are deployed in the Ethereum blockchain and the Dappnode client interacts with them to get the list of available packages and to download them. Your dappnode will need a connection to an Ethereum node in order to read the smart contracts and download the packages. There are two ways to establish this connection:

  • Full Node: By running a Full Node, you host the Ethereum blockchain. This ensures maximum control and independence, but requires syncing and maintaining the blockchain's latest state.
  • Remote Node: Using a Remote Node means relying on an external Ethereum node. It's less resource-intensive but demands trust in the node operator.
tip

To configure your dappnode Ethereum repository go to http://my.dappnode/repository/eth

Run your own Ethereum node

When choosing to run your own Ethereum node, you will need to select:

  1. Execution client
  2. Consensus client

Moreover, it is highly recommended to enable these additional options:

  1. Use remote during syncing or errors: If enabled, this will auto-switch from your Local node to the Dappnode Remote node under certain conditions. For instance, if your Ethereum node is syncing or if it's unavailable for some reason. Activating this option ensures uninterrupted access to the Dappnode smart contracts even if there's an issue with your Local node.

  2. Use checkpointsync: By enabling this, your consensus client will utilize a checkpoint to fast-track the syncing of the Ethereum blockchain, making the process much quicker quicker.

caution

Making changes here will also modify selections in the Stakers tab.

ethereum-remote-full

caution

Running your own Ethereum node requires a lot of resources. You will need a powerful machine with a lot of storage and a good internet connection. If you don't have a powerful machine, you can use a remote Ethereum node.

Use a remote Ethereum node

You can use a remote Ethereum node to connect to the Ethereum network. You will need to trust the node operator.

ethereum-remote-node

note

At the moment, we only support Dappnode official Ethereum node. We are working on a way to allow users to add their own remote Ethereum nodes RPC endpoints. See https://github.com/dappnode/DNP_DAPPMANAGER/issues/1245


Troubleshooting

Why did my clients change in the Full Node Repository selection?

At the moment, Dappnode only supports running one Ethereum mainnet node. If you change your selection in the Stakers menu, it will also change in the Repository menu.

- - + +

Ethereum repository

+

Dappnode uses smart contracts to distribute the dappnode packages available in the Dappstore. The smart contracts are deployed in the Ethereum blockchain and the Dappnode client interacts with them to get the list of available packages and to download them. Your dappnode will need a connection to an Ethereum node in order to read the smart contracts and download the packages. There are two ways to establish this connection:

+
    +
  • +

    Full Node: By running a Full Node, you host the Ethereum blockchain. This ensures maximum control and independence, but requires syncing and maintaining the blockchain's latest state.

    +
  • +
  • +

    Remote Node: Using a Remote Node means relying on an external Ethereum node. It's less resource-intensive but demands trust in the node operator.

    +
  • +
+
tip

To configure your dappnode Ethereum repository go to http://my.dappnode/repository/eth

+

Run your own Ethereum node

+

When choosing to run your own Ethereum node, you will need to select:

+
    +
  1. Execution client
  2. +
  3. Consensus client
  4. +
+

Moreover, it is highly recommended to enable these additional options:

+
    +
  1. +

    Use remote during syncing or errors: If enabled, this will auto-switch from your Local node to the Dappnode Remote node under certain conditions. For instance, if your Ethereum node is syncing or if it's unavailable for some reason. Activating this option ensures uninterrupted access to the Dappnode smart contracts even if there's an issue with your Local node.

    +
  2. +
  3. +

    Use checkpointsync: By enabling this, your consensus client will utilize a checkpoint to fast-track the syncing of the Ethereum blockchain, making the process much quicker quicker.

    +
  4. +
+
caution

Making changes here will also modify selections in the Stakers tab.

+

ethereum-remote-full

+
caution

Running your own Ethereum node requires a lot of resources. You will need a powerful machine with a lot of storage and a good internet connection. If you don't have a powerful machine, you can use a remote Ethereum node.

+

Use a remote Ethereum node

+

You can use a remote Ethereum node to connect to the Ethereum network. You will need to trust the node operator.

+

ethereum-remote-node

+
note

At the moment, we only support Dappnode official Ethereum node. We are working on a way to allow users to add their own remote Ethereum nodes RPC endpoints. See https://github.com/dappnode/DNP_DAPPMANAGER/issues/1245

+
+

Troubleshooting

+
Why did my clients change in the Full Node Repository selection?

At the moment, Dappnode only supports running one Ethereum mainnet node. If you change your selection in the Stakers menu, it will also change in the Repository menu.

\ No newline at end of file diff --git a/docs/user/repository/ipfs/index.html b/docs/user/repository/ipfs/index.html index 49a8fb2c4..2332f6727 100644 --- a/docs/user/repository/ipfs/index.html +++ b/docs/user/repository/ipfs/index.html @@ -1,17 +1,75 @@ - + - -IPFS repository | Dappnode - - - + +IPFS repository | Dappnode + + + - -
-

IPFS repository

Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:

  • Run Your Own IPFS Node: By opting for this, you maintain full control, ensuring that you directly access the distributed packages without intermediaries. However, it might require some disk space.
  • Use a Remote Node: This is a convenient option, but it comes with the caveat of needing to trust the remote node operator. It is really useful in case your own IPFS node becomes unreliable or unavailable.
tip

To configure your dappnode IPFS repository go to http://my.dappnode/repository/ipfs

Run your own IPFS node

You can run your own IPFS node to connect to the IPFS network. This is the recommended option for those users who want to have full control over their dappnode. Dappnode comes with an IPFS node preinstalled and configured. You can access the IPFS Web UI while connected to your Dappnode.

ipfs-remote-local

caution

Running your own IPFS node may affect your internet connection. If you don't want to run your own IPFS node, you can use a remote IPFS node. Consider stopping your IPFS node if you are not using it at IPFS Package

Use a remote IPFS node

You can use a remote IPFS node gateway to connect to the IPFS network. You will need to trust the node operator. Dappnode provides an Official IPFS gateway by default, but you can choose any other IPFS gateway.

ipfs-remote-node

IPFS gateways and security

Connecting to IPFS remote gateways could entail security risks. For example, the gateway could attempt to serve malicious content to the user. We mitigate this risk by verifying the content downladed with CID technology.

If the Dappnode IPFS gateway is not available (we make no uptime guarantees and we offer it on a best-effort basis) the user can set another IPFS gateway in the input field as last resort. Check out all the IPFS gateways available


Troubleshooting

I can't see the logos of the packages in the Dappstore/Stakers tab. Why?

This might be related to an issue with IPFS. Try the following solutions:

  1. IPFS Mode:

    • Navigate to the repository.
    • Toggle between local and remote IPFS modes to see which one works.
  2. IPFS Package Status:

    • If your IPFS mode is set to local, ensure that the IPFS package is running.
    • Visit IPFS Package to verify its status and click on "Start" if it is stopped.
    • If it's restarting, consider updating the IPFS package to its latest version. Post update, remove its volumes to address any potential database migration issues.
  3. Gateway Validity:

    • For remote IPFS mode, make sure the gateway URL in the repository is correct.

I'm using local IPFS and encountering issues downloading packages. What should I do?

This could arise from various factors:

  1. Internet Connection:

    • Your connection might be unstable. Consider switching your IPFS node mode to lowpower by accessing IPFS config.
  2. Disk Space:

    • Your local IPFS node might be out of storage.
    • Clear the storage by opting for "Remove volumes" at IPFS package info.
  3. Dappnode Official Gateway as Peer:

    • Ensure that the Dappnode Official Gateway is added as a peer to your local IPFS.
    • You can add it directly by clicking here.

Tip: If these solutions don't resolve the issue, switch to the remote IPFS mode at IPFS repository.

- - + +

IPFS repository

+

Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:

+
    +
  • Run Your Own IPFS Node: By opting for this, you maintain full control, ensuring that you directly access the distributed packages without intermediaries. However, it might require some disk space.
  • +
  • Use a Remote Node: This is a convenient option, but it comes with the caveat of needing to trust the remote node operator. It is really useful in case your own IPFS node becomes unreliable or unavailable.
  • +
+
tip

To configure your dappnode IPFS repository go to http://my.dappnode/repository/ipfs

+

Run your own IPFS node

+

You can run your own IPFS node to connect to the IPFS network. This is the recommended option for those users who want to have full control over their dappnode. Dappnode comes with an IPFS node preinstalled and configured. You can access the IPFS Web UI while connected to your Dappnode.

+

ipfs-remote-local

+
caution

Running your own IPFS node may affect your internet connection. If you don't want to run your own IPFS node, you can use a remote IPFS node. Consider stopping your IPFS node if you are not using it at IPFS Package

+

Use a remote IPFS node

+

You can use a remote IPFS node gateway to connect to the IPFS network. You will need to trust the node operator. Dappnode provides an Official IPFS gateway by default, but you can choose any other IPFS gateway.

+

ipfs-remote-node

+
IPFS gateways and security

Connecting to IPFS remote gateways could entail security risks. For example, the gateway could attempt to serve malicious content to the user. We mitigate this risk by verifying the content downladed with CID technology.

If the Dappnode IPFS gateway is not available (we make no uptime guarantees and we offer it on a best-effort basis) the user can set another IPFS gateway in the input field as last resort. Check out all the IPFS gateways available

+
+

Troubleshooting

+
I can't see the logos of the packages in the Dappstore/Stakers tab. Why?

This might be related to an issue with IPFS. Try the following solutions:

    +
  1. +

    IPFS Mode:

    +
      +
    • Navigate to the repository.
    • +
    • Toggle between local and remote IPFS modes to see which one works.
    • +
    +
  2. +
  3. +

    IPFS Package Status:

    +
      +
    • If your IPFS mode is set to local, ensure that the IPFS package is running.
    • +
    • Visit IPFS Package to verify its status and click on "Start" if it is stopped.
    • +
    • If it's restarting, consider updating the IPFS package to its latest version. Post update, remove its volumes to address any potential database migration issues.
    • +
    +
  4. +
  5. +

    Gateway Validity:

    +
      +
    • For remote IPFS mode, make sure the gateway URL in the repository is correct.
    • +
    +
  6. +

+
I'm using local IPFS and encountering issues downloading packages. What should I do?

This could arise from various factors:

    +
  1. +

    Internet Connection:

    +
      +
    • Your connection might be unstable. Consider switching your IPFS node mode to lowpower by accessing IPFS config.
    • +
    +
  2. +
  3. +

    Disk Space:

    +
      +
    • Your local IPFS node might be out of storage.
    • +
    • Clear the storage by opting for "Remove volumes" at IPFS package info.
    • +
    +
  4. +
  5. +

    Dappnode Official Gateway as Peer:

    +
      +
    • Ensure that the Dappnode Official Gateway is added as a peer to your local IPFS.
    • +
    • You can add it directly by clicking here.
    • +
    +
  6. +

Tip: If these solutions don't resolve the issue, switch to the remote IPFS mode at IPFS repository.

\ No newline at end of file diff --git a/docs/user/rollups/optimism/index.html b/docs/user/rollups/optimism/index.html index 192ec39f0..cf2f8ce34 100644 --- a/docs/user/rollups/optimism/index.html +++ b/docs/user/rollups/optimism/index.html @@ -1,17 +1,36 @@ - + - -Optimism Rollup | Dappnode - - - + +Optimism Rollup | Dappnode + + + - -
-

Optimism Rollup

Optimism is Ethereum's Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.

Optimism Rollup

Setting Up an Optimism Node

Optimism stands out as the inaugural choice in the Rollups suite. Initiating an Optimism node on Dappnode parallels the familiar Stakers Menu, yet with some distinctions:

  • Utilize an op-node client to link with the Optimism Mainnet.
  • Employ op-geth or op-erigon to bridge your op-node to Ethereum's execution layer, echoing the beacon chain/consensus client's role on the mainnet.
  • For archive nodes, op-legacy is essential for transactions predating the Bedrock upgrade.
  • A connection to an Ethereum Mainnet node is required. If your Dappnode already operates one, the Rollups menu will streamline configuration. Otherwise, integrate a public RPC for Ethereum Mainnet connection.

For a deeper dive, consult Optimism’s documentation:

- - + +

Optimism Rollup

+

Optimism is Ethereum's Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.

+

Optimism Rollup

+

Setting Up an Optimism Node

+

Optimism stands out as the inaugural choice in the Rollups suite. Initiating an Optimism node on Dappnode parallels the familiar Stakers Menu, yet with some distinctions:

+
    +
  • Utilize an op-node client to link with the Optimism Mainnet.
  • +
  • Employ op-geth or op-erigon to bridge your op-node to Ethereum's execution layer, echoing the beacon chain/consensus client's role on the mainnet.
  • +
  • For archive nodes, op-legacy is essential for transactions predating the Bedrock upgrade.
  • +
  • A connection to an Ethereum Mainnet node is required. If your Dappnode already operates one, the Rollups menu will streamline configuration. Otherwise, integrate a public RPC for Ethereum Mainnet connection.
  • +
+

For a deeper dive, consult Optimism’s documentation:

+
\ No newline at end of file diff --git a/docs/user/rollups/overview/index.html b/docs/user/rollups/overview/index.html index 158e15c91..77c443c37 100644 --- a/docs/user/rollups/overview/index.html +++ b/docs/user/rollups/overview/index.html @@ -1,17 +1,22 @@ - + - -Ethereum Rollups: An Overview | Dappnode - - - + +Ethereum Rollups: An Overview | Dappnode + + + - -
-

Ethereum Rollups: An Overview

Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.

Currently, we support:

  • 🍀 Optimism: An optimistic Layer 2 solution for Ethereum, enhancing speed and efficiency.

Enable rollups

To enable this feature, you need to switch on the rollups module in the top bar of the Dappnode UI (Dappmanager):

- - + +

Ethereum Rollups: An Overview

+

Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.

+

Currently, we support:

+
    +
  • 🍀 Optimism: An optimistic Layer 2 solution for Ethereum, enhancing speed and efficiency.
  • +
+

Enable rollups

+

To enable this feature, you need to switch on the rollups module in the top bar of the Dappnode UI (Dappmanager):

+

\ No newline at end of file diff --git a/docs/user/staking/ethereum/dvt-technologies/diva/index.html b/docs/user/staking/ethereum/dvt-technologies/diva/index.html index c185eaecc..2cb75b43d 100644 --- a/docs/user/staking/ethereum/dvt-technologies/diva/index.html +++ b/docs/user/staking/ethereum/dvt-technologies/diva/index.html @@ -1,17 +1,41 @@ - + - -Diva package for Dappnode | Dappnode - - - + +Diva package for Dappnode | Dappnode + + + - -
-

Diva package for Dappnode


Introduction

Diva is an Ethereum Liquid Staking protocol powered by Distributed Validator Technology (DVT). It extends Ethereum's Proof of Stake providing new functionality for Stakers and Operators:

  • Liquid Stakers receive divETH, a Liquid Staking Token which generates Ethereum Staking Rewards.
  • Operators run a Distributed Validation node to fulfill staking duties and earn additional Operator Rewards.

This package allows you to run a Diva Operator node, and it is available for the Holesky Testnet. The Ethereum mainnet version of this package is still undergoing testing and will be available in the DAppStore soon.

Requirements

  1. The first thing you'll need to do is set up a fully-synced node. This can be don through the Stakers Menu in Dappnode by selecting:
  • 1 Execution Client (Geth, Besu, Erigon or Nethermind)
  • 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)
  • MEV Boost (optional)
  1. Installing the Diva package for Dappnode. This can be done by visiting the DAppStore in the Dappnode UI. You'll be asked to set two passwords when going through the installation process, as well as your operator's address and Discord handle (for testnet purposes).

Diva config tab

Registering a Dappnode Diva Operator

After successfully installing the Diva package, you'll need to access the package's interface by clicking on UI. This will take you to the Diva app where you'll need to connect your wallet to register your Diva node as an operator. You can register multiple operators using the same wallet.

Diva wizard

info

The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!

Monitoring your Diva nodes

Divascan is a tool developed to monitor Diva nodes and operators. You can enter your operator address to get information on the validators' performances. You can also get more information on the Diva protocol.

- - + +

Diva package for Dappnode

+
+

Introduction

+

Diva is an Ethereum Liquid Staking protocol powered by Distributed Validator Technology (DVT). It extends Ethereum's Proof of Stake providing new functionality for Stakers and Operators:

+
    +
  • Liquid Stakers receive divETH, a Liquid Staking Token which generates Ethereum Staking Rewards.
  • +
  • Operators run a Distributed Validation node to fulfill staking duties and earn additional Operator Rewards.
  • +
+

This package allows you to run a Diva Operator node, and it is available for the Holesky Testnet. The Ethereum mainnet version of this package is still undergoing testing and will be available in the DAppStore soon.

+

Requirements

+
    +
  1. The first thing you'll need to do is set up a fully-synced node. This can be don through the Stakers Menu in Dappnode by selecting:
  2. +
+
    +
  • 1 Execution Client (Geth, Besu, Erigon or Nethermind)
  • +
  • 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)
  • +
  • MEV Boost (optional)
  • +
+
    +
  1. Installing the Diva package for Dappnode. This can be done by visiting the DAppStore in the Dappnode UI. You'll be asked to set two passwords when going through the installation process, as well as your operator's address and Discord handle (for testnet purposes).
  2. +
+

Diva config tab

+

Registering a Dappnode Diva Operator

+

After successfully installing the Diva package, you'll need to access the package's interface by clicking on UI. This will take you to the Diva app where you'll need to connect your wallet to register your Diva node as an operator. You can register multiple operators using the same wallet.

+

Diva wizard

+
info

The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!

+

Monitoring your Diva nodes

+

Divascan is a tool developed to monitor Diva nodes and operators. You can enter your operator address to get information on the validators' performances. You can also get more information on the Diva protocol.

\ No newline at end of file diff --git a/docs/user/staking/ethereum/dvt-technologies/obol-network/index.html b/docs/user/staking/ethereum/dvt-technologies/obol-network/index.html index 74abef992..78cb3e8f7 100644 --- a/docs/user/staking/ethereum/dvt-technologies/obol-network/index.html +++ b/docs/user/staking/ethereum/dvt-technologies/obol-network/index.html @@ -1,18 +1,56 @@ - + - -Obol Distributed Validator package for Dappnode | Dappnode - - - + +Obol Distributed Validator package for Dappnode | Dappnode + + + - -
-

Obol Distributed Validator package for Dappnode


Introduction

The Obol Network package for Dappnode aims to make it seamless for Dappnode users to integrate and benefit from Obol's Distributed Validator Technology (DVT).

A Distributed Validator is one or more logical Ethereum validators being operated across a number of nodes that are all online simultaneously and that all control a subset of the validators' private keys. Each of these nodes need to run an Execution client, a Consensus client, a Distributed Validator client, and a Validator client/Key Manager. -The distributed validator clients in these nodes come to consensus on what should be signed before constructing a signature for the validator that will be accepted by the wider Ethereum network. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage, contributing to a stronger and more resilient network.

The Obol Dappnode package is available for Ethereum Mainnet and the Holesky Testnet.

Requirements

  1. The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting:
    • 1 Execution Client (Geth, Besu, Erigon or Nethermind)
    • 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)
    • MEV Boost (optional)
  2. Install the Obol package from the DAppStore.

First Steps

It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator Cluster with.

You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility. Negligence on behalf of others in your group can put you at risk, however as far as 66% of these nodes are synced the validators will keep performing their duties.

Once all participants have synced nodes, you'll need to install the Obol Dappnode package. After Dappnodes are ready, the next steps will take place at Obol's Distributed Validator Launchpad. There's a launchpad for Ethereum Mainnet and another one for the Holesky Testnet. Start by connecting your wallet and selecting the option that best fits your DV's distribution and setup.

ObolLaunchpad1

Cluster Configuration

For creating a new cluster with a group, all operators must have an operator's address, which will submit the necessary information to the launchpad. The first step in the configuration process will be to select the cluster size and to enter the operator's adresses.

ObolLaunchpad2

In this next step, you'll be required to enter your Charon client's ENR, which is a public key that will give your node a unique ID. This ENR can be obtained after installing the Obol Dappnode package under the Info tab.

danger

The Obol Dappnode package supports up to 5 ENRs. This means that you can participate in 5 different clusters with 5 different ENRs using the same package, however it's important to properly backup the package's database if the generated ENRs are committed to functional clusters.

Next, you'll need to specify the amount of validator keys that this cluster will be generating and how these validators will be splitting the rewards. You can read more about the Obol Splits contract and the different options it offers in Obol's documentation.

ObolLaunchpad3

The last step will require that you perform a signature from your operator's address to generate a cluster invite link. You'll need to share this invite link with the rest of the operators so that they can register their ENRs and set everything up for the Distributed Key Generation (DKG) event.

ObolLaunchpad4

Distributed Key Generation (DKG) Event

After all operators have successfully submitted their ENRs, the Obol launchpad will generate a "Definition File URL" we'll need to load in our Obol Dappnode package's configuration to proceed with the DKG.

ObolLaunchpad5

Copy the URL under the Dappnode tab in the Launchpad, go to your package's configuration section and enter it in the cluster number corresponding to the ENR you submitted in the launchpad. Make sure URL is selected under "Config Mode" and apply the configuration.

ObolLaunchpad6

After all operators have completed this step the DKG ceremony will start automatically and each of the operators' keystores will be stored in the Obol package's database.

danger

Please make sure to create a backup of your Obol package. If you lose your private keys you won't be able to start the DV cluster successfully and may risk your validator deposit becoming unrecoverable. Ensure every operator has their backup secured before activating any validators.

Adding Validators to an Active Cluster

After the DKG has succeeded and all of the operators have backed up their cluster's keys, it's time to move on to the validator's deposits. The launchpad will show you an option to submit a deposit_data.json file.

ObolLaunchpad7

You can get this file if you decompress your Obol package's backup and look for it inside the charon folder corresponding to the cluster number you intend to run. The launchpad will confirm that you have enough balance in your connected wallet to perform the validator deposit and make you go over final checks prior to signing the deposit.

Remember that if you have any questions, you can always drop by the Dappnode Discord server to ask for community support.

- - + +

Obol Distributed Validator package for Dappnode

+
+

Introduction

+

The Obol Network package for Dappnode aims to make it seamless for Dappnode users to integrate and benefit from Obol's Distributed Validator Technology (DVT).

+

A Distributed Validator is one or more logical Ethereum validators being operated across a number of nodes that are all online simultaneously and that all control a subset of the validators' private keys. Each of these nodes need to run an Execution client, a Consensus client, a Distributed Validator client, and a Validator client/Key Manager. +The distributed validator clients in these nodes come to consensus on what should be signed before constructing a signature for the validator that will be accepted by the wider Ethereum network. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage, contributing to a stronger and more resilient network.

+

The Obol Dappnode package is available for Ethereum Mainnet and the Holesky Testnet.

+

Requirements

+
    +
  1. The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting: +
      +
    • 1 Execution Client (Geth, Besu, Erigon or Nethermind)
    • +
    • 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)
    • +
    • MEV Boost (optional)
    • +
    +
  2. +
  3. Install the Obol package from the DAppStore.
  4. +
+

First Steps

+
It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator Cluster with.

You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility. Negligence on behalf of others in your group can put you at risk, however as far as 66% of these nodes are synced the validators will keep performing their duties.

+

Once all participants have synced nodes, you'll need to install the Obol Dappnode package. After Dappnodes are ready, the next steps will take place at Obol's Distributed Validator Launchpad. There's a launchpad for Ethereum Mainnet and another one for the Holesky Testnet. Start by connecting your wallet and selecting the option that best fits your DV's distribution and setup.

+

ObolLaunchpad1

+

Cluster Configuration

+

For creating a new cluster with a group, all operators must have an operator's address, which will submit the necessary information to the launchpad. The first step in the configuration process will be to select the cluster size and to enter the operator's adresses.

+

ObolLaunchpad2

+

In this next step, you'll be required to enter your Charon client's ENR, which is a public key that will give your node a unique ID. This ENR can be obtained after installing the Obol Dappnode package under the Info tab.

+
warning

The Obol Dappnode package supports up to 5 ENRs. This means that you can participate in 5 different clusters with 5 different ENRs using the same package, however it's important to properly backup the package's database if the generated ENRs are committed to functional clusters.

+

Next, you'll need to specify the amount of validator keys that this cluster will be generating and how these validators will be splitting the rewards. You can read more about the Obol Splits contract and the different options it offers in Obol's documentation.

+

ObolLaunchpad3

+

The last step will require that you perform a signature from your operator's address to generate a cluster invite link. You'll need to share this invite link with the rest of the operators so that they can register their ENRs and set everything up for the Distributed Key Generation (DKG) event.

+

ObolLaunchpad4

+

Distributed Key Generation (DKG) Event

+

After all operators have successfully submitted their ENRs, the Obol launchpad will generate a "Definition File URL" we'll need to load in our Obol Dappnode package's configuration to proceed with the DKG.

+

ObolLaunchpad5

+

Copy the URL under the Dappnode tab in the Launchpad, go to your package's configuration section and enter it in the cluster number corresponding to the ENR you submitted in the launchpad. Make sure URL is selected under "Config Mode" and apply the configuration.

+

ObolLaunchpad6

+

After all operators have completed this step the DKG ceremony will start automatically and each of the operators' keystores will be stored in the Obol package's database.

+
danger

Please make sure to create a backup of your Obol package. If you lose your private keys you won't be able to start the DV cluster successfully and may risk your validator deposit becoming unrecoverable. Ensure every operator has their backup secured before activating any validators.

+

Adding Validators to an Active Cluster

+

After the DKG has succeeded and all of the operators have backed up their cluster's keys, it's time to move on to the validator's deposits. The launchpad will show you an option to submit a deposit_data.json file.

+

ObolLaunchpad7

+

You can get this file if you decompress your Obol package's backup and look for it inside the charon folder corresponding to the cluster number you intend to run. The launchpad will confirm that you have enough balance in your connected wallet to perform the validator deposit and make you go over final checks prior to signing the deposit.

+

Remember that if you have any questions, you can always drop by the Dappnode Discord server to ask for community support.

\ No newline at end of file diff --git a/docs/user/staking/ethereum/dvt-technologies/ssv-network/index.html b/docs/user/staking/ethereum/dvt-technologies/ssv-network/index.html index 03168bf93..c31ddc233 100644 --- a/docs/user/staking/ethereum/dvt-technologies/ssv-network/index.html +++ b/docs/user/staking/ethereum/dvt-technologies/ssv-network/index.html @@ -1,24 +1,84 @@ - + - -SSV Distributed Validator package for Dappnode | Dappnode - - - + +SSV Distributed Validator package for Dappnode | Dappnode + + + - -
-

SSV Distributed Validator package for Dappnode


Introduction

SSV is a network of validators that use a decentralized network of operators to run their validators. This package allows you to run an SSV Operator Node. The package is available for Ethereum Mainnet and the Holesky Testnet.

A Distributed Validator is one or more logical 32 ETH validators being operated across a number of nodes that are all online simultaneously and that all control a subset of each validator’s private keys. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage. -The SSV network allows both users and operators to diversify staking risks, optimize performance, and promote decentralization across the Ethereum consensus layer with a wide range of configuration options.

Requirements

  1. The first thing you'll need to do is set up a fully-synced node. This can be don through the Stakers Menu in Dappnode by selecting:
  • 1 Execution Client (Geth, Besu, Erigon or Nethermind)
  • 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)
  • MEV Boost (optional)
  1. Installing the SSV package for Dappnode. This can be done by visiting the DAppStore in the Dappnode UI and installing the SSV (Ethereum Mainnet) or SSV Holesky package.

  2. Plus, you'll need to get the following information:

  • Operator public key: Shown in your SSV package's Info tab after installing it.
  • Operator fee: The fee charged by the operator per each managed validator. You can find more info about this in the SSV documentation. Keep in mind this fee can be changed later on if needed.

Registering a Dappnode SSV Node as an Operator

After successfully installing the SSV package, an operator must register it to the SSV Network in order to be discoverable by validators. You'll be able to do so in the SSV network web app.

info

The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!

  1. Make sure to connect your Web3 wallet with the WebApp, and that the address corresponds with the one you want to manage your Operators with.

  2. If you are connecting for the first time, you should see a screen like the image below. Select Join as Operator. -SSV-Launchpad1

  3. In the following screen, select Register Operator. -SSV-Launchpad2

  4. The next screen will ask you to input the Operator's public key and provide a confirmation of the Operator owner address. As mentioned earlier, this Operator's public key is shown in your SSV package's Info tab after installing it. -Dappnode-SSV1

caution

Please verify once more that the owner address correspond to the wallet address you want to manage your operators with.

Click Next when ready.

  1. In the following screen you'll be asked to set the Operator Fee, which is the fee charged by the operator per each managed validator. You can find more info about this in the SSV documentation. Keep in mind this fee can be changed later on if needed.

Enter a number and click Next when ready. -SSV-Launchpad4

  1. This confirmation screen presents a recap of the information input so far. Double check everything and click Register Operator when ready. This will generate a blockchain transaction you'll need to confirm to complete the Operator registration. -SSV-Launchpad5

  2. Once the transacion goes through your Operator is successfully registered, and stakers could now choose it to operate their validators. -SSV-Launchpad7

danger

In SSV you may or you may not be an operator in the cluster where you'll be validating. Keep this in mind for good security practices when splitting validator keys.

Exposing your DKG service

If you want to run the dkg service, make sure the operator is registered in the SSV network and check the service is not stopped in the SSV Info Tab.

Add your node as a DKG endpoint in the SSV App Operator Config. You must set: http://<your-public-ip>:14515. Make sure your 14515 port is open in your router setup.

info

You can get your public IP bu clicking on the avatar in the upper-right corner of the Dappnode UI.

It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator with.

You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility.

If you have any questions, don't hesitate to drop by the Dappnode Discord server.

- - + +

SSV Distributed Validator package for Dappnode

+
+

Introduction

+

SSV is a network of validators that use a decentralized network of operators to run their validators. This package allows you to run an SSV Operator Node. The package is available for Ethereum Mainnet and the Holesky Testnet.

+

A Distributed Validator is one or more logical 32 ETH validators being operated across a number of nodes that are all online simultaneously and that all control a subset of each validator’s private keys. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage. +The SSV network allows both users and operators to diversify staking risks, optimize performance, and promote decentralization across the Ethereum consensus layer with a wide range of configuration options.

+

Requirements

+
    +
  1. The first thing you'll need to do is set up a fully-synced node. This can be don through the Stakers Menu in Dappnode by selecting:
  2. +
+
    +
  • 1 Execution Client (Geth, Besu, Erigon or Nethermind)
  • +
  • 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus)
  • +
  • MEV Boost (optional)
  • +
+
    +
  1. +

    Installing the SSV package for Dappnode. This can be done by visiting the DAppStore in the Dappnode UI and installing the SSV (Ethereum Mainnet) or SSV Holesky package.

    +
  2. +
  3. +

    Plus, you'll need to get the following information:

    +
  4. +
+
    +
  • Operator public key: Shown in your SSV package's Info tab after installing it.
  • +
  • Operator fee: The fee charged by the operator per each managed validator. You can find more info about this in the SSV documentation. Keep in mind this fee can be changed later on if needed.
  • +
+

Registering a Dappnode SSV Node as an Operator

+

After successfully installing the SSV package, an operator must register it to the SSV Network in order to be discoverable by validators. You'll be able to do so in the SSV network web app.

+
info

The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!

+
    +
  1. +

    Make sure to connect your Web3 wallet with the WebApp, and that the address corresponds with the one you want to manage your Operators with.

    +
  2. +
  3. +

    If you are connecting for the first time, you should see a screen like the image below. Select Join as Operator. +SSV-Launchpad1

    +
  4. +
  5. +

    In the following screen, select Register Operator. +SSV-Launchpad2

    +
  6. +
  7. +

    The next screen will ask you to input the Operator's public key and provide a confirmation of the Operator owner address. As mentioned earlier, this Operator's public key is shown in your SSV package's Info tab after installing it. +Dappnode-SSV1

    +
  8. +
+
caution

Please verify once more that the owner address correspond to the wallet address you want to manage your operators with.

+

Click Next when ready.

+
    +
  1. In the following screen you'll be asked to set the Operator Fee, which is the fee charged by the operator per each managed validator. You can find more info about this in the SSV documentation. Keep in mind this fee can be changed later on if needed.
  2. +
+

Enter a number and click Next when ready. +SSV-Launchpad4

+
    +
  1. +

    This confirmation screen presents a recap of the information input so far. Double check everything and click Register Operator when ready. This will generate a blockchain transaction you'll need to confirm to complete the Operator registration. +SSV-Launchpad5

    +
  2. +
  3. +

    Once the transacion goes through your Operator is successfully registered, and stakers could now choose it to operate their validators. +SSV-Launchpad7

    +
  4. +
+
warning

In SSV you may or you may not be an operator in the cluster where you'll be validating. Keep this in mind for good security practices when splitting validator keys.

+

Exposing your DKG service

+

If you want to run the dkg service, make sure the operator is registered in the SSV network and check the service is not stopped in the SSV Info Tab.

+

Add your node as a DKG endpoint in the SSV App Operator Config. You must set: http://<your-public-ip>:14515. Make sure your 14515 port is open in your router setup.

+
info

You can get your public IP bu clicking on the avatar in the upper-right corner of the Dappnode UI.

+
It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator with.

You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility.

+

If you have any questions, don't hesitate to drop by the Dappnode Discord server.

\ No newline at end of file diff --git a/docs/user/staking/ethereum/lsd-pools/rocketpool/index.html b/docs/user/staking/ethereum/lsd-pools/rocketpool/index.html index fef79fe8d..ce394baa0 100644 --- a/docs/user/staking/ethereum/lsd-pools/rocketpool/index.html +++ b/docs/user/staking/ethereum/lsd-pools/rocketpool/index.html @@ -1,17 +1,71 @@ - + - -Rocketpool | Dappnode - - - + +Rocketpool | Dappnode + + + - -
-

Rocketpool


Rocketpool Overview

Rocketpool is a decentralized Ethereum staking solution that allows users to earn rewards by staking their Ether (ETH). It's designed to be inclusive, allowing those without the full 32 ETH required for an Ethereum validator to be able to participate. Rocketpool achieves this through its innovative "minipool" concept, which facilitates pooled staking among multiple participants.


Package Key Features

  1. Decentralized Staking: The Rocketpool package ensures that staking remains decentralized by using your Dappnode's local Ethereum node, safeguarding the core principles of the Ethereum network. Rocketpool also operates on smart contracts, ensuring that operations are transparent, auditable, and free from centralized control.
  2. Minipools: Users can start a minipool with as little as 16 or 8 ETH, allowing for broader participation in Ethereum's block creation.
  3. Integrated with DappNode: Easy setup, monitoring, and management of Rocketpool directly from your Dappnode interface.

First Steps to Start a Minipool with Rocketpool and Dappnode

  1. Package Installation:

    • In your Dappnode's UI, navigate to the DAppStore.
    • Find the Rocketpool package.
    • Click 'Install'. Once installed, the Rocketpool package should appear in your installed packages list.
  2. Setting up the Environment:

    • Ensure you're running a full, synced Ethereum node (Execution client + Consensus client).
    • If you are not running a full Ethereum node yet, go to the Stakers Menu, select your clients and apply the configuration to start syncronization.
  3. Starting a Minipool:

    • Navigate to the Rocketpool package dashboard.
    • Choose the amount of ETH you wish to stake. Remember, you can start a minipool with as little as 16 or 8 ETH.
    • Follow the on-screen instructions to initialize your minipool.
  4. Funding your Minipool:

    • Send the amount of ETH you’ve chosen to the provided address. Make sure you keep track of this address, as it will be the address of your minipool.
  5. Monitoring and Management:

    • Once your minipool is active, you can monitor its performance, rewards, and other details with Dappnode's DMS.

It's essential to remember that while Rocketpool simplifies the staking process, it's crucial to understand the risks involved. Always make sure to do thorough research and ensure the security of your investments.

- - + +

Rocketpool

+
+

Rocketpool Overview

+

Rocketpool is a decentralized Ethereum staking solution that allows users to earn rewards by staking their Ether (ETH). It's designed to be inclusive, allowing those without the full 32 ETH required for an Ethereum validator to be able to participate. Rocketpool achieves this through its innovative "minipool" concept, which facilitates pooled staking among multiple participants.

+
+

Package Key Features

+
    +
  1. +

    Decentralized Staking: The Rocketpool package ensures that staking remains decentralized by using your Dappnode's local Ethereum node, safeguarding the core principles of the Ethereum network. Rocketpool also operates on smart contracts, ensuring that operations are transparent, auditable, and free from centralized control.

    +
  2. +
  3. +

    Minipools: Users can start a minipool with as little as 16 or 8 ETH, allowing for broader participation in Ethereum's block creation.

    +
  4. +
  5. +

    Integrated with DappNode: Easy setup, monitoring, and management of Rocketpool directly from your Dappnode interface.

    +
  6. +
+
+

First Steps to Start a Minipool with Rocketpool and Dappnode

+
    +
  1. +

    Package Installation:

    +
      +
    • In your Dappnode's UI, navigate to the DAppStore.
    • +
    • Find the Rocketpool package.
    • +
    • Click 'Install'. Once installed, the Rocketpool package should appear in your installed packages list.
    • +
    +
  2. +
  3. +

    Setting up the Environment:

    +
      +
    • Ensure you're running a full, synced Ethereum node (Execution client + Consensus client).
    • +
    • If you are not running a full Ethereum node yet, go to the Stakers Menu, select your clients and apply the configuration to start syncronization.
    • +
    +
  4. +
  5. +

    Starting a Minipool:

    +
      +
    • Navigate to the Rocketpool package dashboard.
    • +
    • Choose the amount of ETH you wish to stake. Remember, you can start a minipool with as little as 16 or 8 ETH.
    • +
    • Follow the on-screen instructions to initialize your minipool.
    • +
    +
  6. +
  7. +

    Funding your Minipool:

    +
      +
    • Send the amount of ETH you’ve chosen to the provided address. Make sure you keep track of this address, as it will be the address of your minipool.
    • +
    +
  8. +
  9. +

    Monitoring and Management:

    +
      +
    • Once your minipool is active, you can monitor its performance, rewards, and other details with Dappnode's DMS.
    • +
    +
  10. +
+
+

It's essential to remember that while Rocketpool simplifies the staking process, it's crucial to understand the risks involved. Always make sure to do thorough research and ensure the security of your investments.

\ No newline at end of file diff --git a/docs/user/staking/ethereum/lsd-pools/stakehouse/index.html b/docs/user/staking/ethereum/lsd-pools/stakehouse/index.html index 8f3ea41fd..d19864b29 100644 --- a/docs/user/staking/ethereum/lsd-pools/stakehouse/index.html +++ b/docs/user/staking/ethereum/lsd-pools/stakehouse/index.html @@ -1,17 +1,49 @@ - + - -Stakehouse | Dappnode - - - + +Stakehouse | Dappnode + + + - -
-

Stakehouse


Stakehouse Overview

Stakehouse’s mission is to bring the benefits of ETH staking to the mainstream user. To do this Blockswap developed a public benefit infrastructure favoring solo stakers. Those who are most important to the Ethereum blockchain now have access to the Stakehouse middle layer which is like ETH staking with superpowers. Not only are solo stakers empowered, but anybody who touches staked ETH or its peripheries can benefit from a protocol that creates multichain ETH without a bridge, doesn’t pool users’ assets, doesn’t collect a commission, doesn’t require a particular node, and doesn’t use an oracle.


Package Key Features

  1. Integration with Web3Signer: When being a node operator, you can import your keystores into Web3Signer and select Stakehouse under the "Staking Protocol" field. Web3Signer takes care of the rest!
  2. Staking Inclusion: Users can run a validator for 4 ETH or provide liquidity with as little as 0.001 ETH, to earn Ethereum consensus rewards. The users of LSD Networks can range from DAOs to node operators to general users who have ETH to stake.

First Steps to become a Node Runner with Stakehouse and Dappnode

  1. Setup your LSD:

  2. Import your keystore file into Web3Signer:

    • When you import your keystore, make sure you select Stakehouse under "Staking protocol". This will automatically set your Fee Recipient address and point it to your LSD.
    • Pay special attention to this, since failing to properly configure the Fee Recipient may incurr in penalties for the Node Runner.

Staking, though lucrative, also comes with inherent risks. Stakehouse simplifies the process but doesn't eliminate the risks. It's essential to conduct thorough research and always prioritize safety.

For further guidance and details, refer to Stakehouse's official documentation, or drop by Dappnode's Discord server for support.

- - + +

Stakehouse

+
+

Stakehouse Overview

+

Stakehouse’s mission is to bring the benefits of ETH staking to the mainstream user. To do this Blockswap developed a public benefit infrastructure favoring solo stakers. Those who are most important to the Ethereum blockchain now have access to the Stakehouse middle layer which is like ETH staking with superpowers. Not only are solo stakers empowered, but anybody who touches staked ETH or its peripheries can benefit from a protocol that creates multichain ETH without a bridge, doesn’t pool users’ assets, doesn’t collect a commission, doesn’t require a particular node, and doesn’t use an oracle.

+
+

Package Key Features

+
    +
  1. +

    Integration with Web3Signer: When being a node operator, you can import your keystores into Web3Signer and select Stakehouse under the "Staking Protocol" field. Web3Signer takes care of the rest!

    +
  2. +
  3. +

    Staking Inclusion: Users can run a validator for 4 ETH or provide liquidity with as little as 0.001 ETH, to earn Ethereum consensus rewards. The users of LSD Networks can range from DAOs to node operators to general users who have ETH to stake.

    +
  4. +
+
+

First Steps to become a Node Runner with Stakehouse and Dappnode

+
    +
  1. +

    Setup your LSD:

    + +
  2. +
  3. +

    Import your keystore file into Web3Signer:

    +
      +
    • When you import your keystore, make sure you select Stakehouse under "Staking protocol". This will automatically set your Fee Recipient address and point it to your LSD.
    • +
    • Pay special attention to this, since failing to properly configure the Fee Recipient may incurr in penalties for the Node Runner.
    • +
    +
  4. +
+
+

Staking, though lucrative, also comes with inherent risks. Stakehouse simplifies the process but doesn't eliminate the risks. It's essential to conduct thorough research and always prioritize safety.

+

For further guidance and details, refer to Stakehouse's official documentation, or drop by Dappnode's Discord server for support.

\ No newline at end of file diff --git a/docs/user/staking/ethereum/lsd-pools/stakewise/index.html b/docs/user/staking/ethereum/lsd-pools/stakewise/index.html index 232d5473e..4db7c6d2d 100644 --- a/docs/user/staking/ethereum/lsd-pools/stakewise/index.html +++ b/docs/user/staking/ethereum/lsd-pools/stakewise/index.html @@ -1,17 +1,82 @@ - + - -StakeWise | Dappnode - - - + +StakeWise | Dappnode + + + - -
-

StakeWise


StakeWise Overview

StakeWise is an LSD network service that allows anyone to benefit from the yields available on the Ethereum Beacon Chain. StakeWise runs secure and stable institutional-grade infrastructure, combined with unique tokenomics, to provide the highest possible staking yields for its users. As a liquid staking platform, users are free to un-stake at any time or utilise their staked ETH capital to earn enhanced yields throughout DeFi. There is no minimum ETH requirement to stake with StakeWise and the platform fees are the lowest seen across the industry.


Package Key Features

  1. Solo and Pooled Staking: StakeWise allows users the flexibility to choose between solo staking and joining a staking pool.
  2. Tokenized Staking Rewards: StakeWise tokenizes staking rewards, which users can trade, providing liquidity and flexibility.
  3. Comprehensive Dashboard: Users have access to a detailed dashboard that displays staking performance, rewards, and other essential metrics.
  4. Transparent Fee Structure: StakeWise prides itself on transparent fees with no hidden charges, ensuring users retain maximum rewards.
  5. Integrated with DappNode: Easy setup, monitoring, and management of StakeWise directly from your DappNode interface.
  6. Active Community Engagement: StakeWise boasts an active community, ensuring users get timely support and updates.

First Steps to Start Staking with StakeWise and Dappnode

  1. Package Installation:

    • Go to the DappNode Admin UI.
    • In the 'Packages' section, search for the StakeWise package.
    • Click 'Install'. Once installed, StakeWise should appear in your installed packages list.
  2. Setting up the Environment:

    • Ensure you have connected your DappNode to the Ethereum network.
    • For best results, secure a stable and fast internet connection for your DappNode.
  3. Beginning the Staking Process:

    • Navigate to the StakeWise dashboard in the DappNode UI.
    • Decide between solo staking or joining a staking pool.
    • Specify the amount of ETH you wish to stake.
    • Follow the on-screen instructions to initiate your staking.
  4. Funding your Staking:

    • Transfer your chosen ETH amount to the provided staking address. Be sure to safely store and remember this address.
  5. Monitoring and Management:

    • With staking active, use the StakeWise dashboard on DappNode to oversee performance, track rewards, and manage other staking aspects.

Staking on Ethereum 2.0, though potentially profitable, isn't without risks. While StakeWise makes the process user-friendly, it's vital to understand all potential implications and prioritize your investments' security.

For more in-depth insights and assistance, consider exploring StakeWise's official documentation and joining the discussions on DappNode's community forums.

- - + +

StakeWise

+
+

StakeWise Overview

+

StakeWise is an LSD network service that allows anyone to benefit from the yields available on the Ethereum Beacon Chain. StakeWise runs secure and stable institutional-grade infrastructure, combined with unique tokenomics, to provide the highest possible staking yields for its users. As a liquid staking platform, users are free to un-stake at any time or utilise their staked ETH capital to earn enhanced yields throughout DeFi. There is no minimum ETH requirement to stake with StakeWise and the platform fees are the lowest seen across the industry.

+
+

Package Key Features

+
    +
  1. +

    Solo and Pooled Staking: StakeWise allows users the flexibility to choose between solo staking and joining a staking pool.

    +
  2. +
  3. +

    Tokenized Staking Rewards: StakeWise tokenizes staking rewards, which users can trade, providing liquidity and flexibility.

    +
  4. +
  5. +

    Comprehensive Dashboard: Users have access to a detailed dashboard that displays staking performance, rewards, and other essential metrics.

    +
  6. +
  7. +

    Transparent Fee Structure: StakeWise prides itself on transparent fees with no hidden charges, ensuring users retain maximum rewards.

    +
  8. +
  9. +

    Integrated with DappNode: Easy setup, monitoring, and management of StakeWise directly from your DappNode interface.

    +
  10. +
  11. +

    Active Community Engagement: StakeWise boasts an active community, ensuring users get timely support and updates.

    +
  12. +
+
+

First Steps to Start Staking with StakeWise and Dappnode

+
    +
  1. +

    Package Installation:

    +
      +
    • Go to the DappNode Admin UI.
    • +
    • In the 'Packages' section, search for the StakeWise package.
    • +
    • Click 'Install'. Once installed, StakeWise should appear in your installed packages list.
    • +
    +
  2. +
  3. +

    Setting up the Environment:

    +
      +
    • Ensure you have connected your DappNode to the Ethereum network.
    • +
    • For best results, secure a stable and fast internet connection for your DappNode.
    • +
    +
  4. +
  5. +

    Beginning the Staking Process:

    +
      +
    • Navigate to the StakeWise dashboard in the DappNode UI.
    • +
    • Decide between solo staking or joining a staking pool.
    • +
    • Specify the amount of ETH you wish to stake.
    • +
    • Follow the on-screen instructions to initiate your staking.
    • +
    +
  6. +
  7. +

    Funding your Staking:

    +
      +
    • Transfer your chosen ETH amount to the provided staking address. Be sure to safely store and remember this address.
    • +
    +
  8. +
  9. +

    Monitoring and Management:

    +
      +
    • With staking active, use the StakeWise dashboard on DappNode to oversee performance, track rewards, and manage other staking aspects.
    • +
    +
  10. +
+
+

Staking on Ethereum 2.0, though potentially profitable, isn't without risks. While StakeWise makes the process user-friendly, it's vital to understand all potential implications and prioritize your investments' security.

+

For more in-depth insights and assistance, consider exploring StakeWise's official documentation and joining the discussions on DappNode's community forums.

\ No newline at end of file diff --git a/docs/user/staking/ethereum/solo/holesky/index.html b/docs/user/staking/ethereum/solo/holesky/index.html index d50a4d972..9bc05a5c8 100644 --- a/docs/user/staking/ethereum/solo/holesky/index.html +++ b/docs/user/staking/ethereum/solo/holesky/index.html @@ -1,17 +1,27 @@ - + - -Holesky Testnet | Dappnode - - - + +Holesky Testnet | Dappnode + + + - -
-

Holesky Testnet

The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.

Dappnode paves an easy pathway for enthusiasts to operate a node on the Holesky testnet, ensuring practical experience without the risks associated with the mainnet.

You can locate the Holesky testnet under the Holesky tab in the Stakers Menu. If you want to run Holesky testnet validators, you'll also need to select Web3Signer Holesky.

Holesky - Stakers Menu

Why Run a Holesky Testnet Node?

  1. Hands-on Experience: Running a validator on the Holesky testnet offers invaluable practical knowledge. It mimics the mainnet processes, providing a comprehensive understanding of node operation.
  2. Risk-free Exploration: As it's a testnet, you're not staking real ETH. This provides an opportunity for experimentation without the financial stakes of the main Ethereum network.
tip

If you're new to Ethereum or wish to familiarize yourself with node operation intricacies, starting with the Holesky testnet is highly recommended. It's the perfect platform for hands-on learning in a risk-free environment.

Holesky Faucet

If you're interested in getting 32 HolETH for running a test validator, you can get it in the Holesky PoW Faucet. Make sure you understand how the faucet works before doing your request, as it will temporarily impact your computer's performance in the claiming process.

- - + +

Holesky Testnet

+

The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.

+

Dappnode paves an easy pathway for enthusiasts to operate a node on the Holesky testnet, ensuring practical experience without the risks associated with the mainnet.

+ +

You can locate the Holesky testnet under the Holesky tab in the Stakers Menu. If you want to run Holesky testnet validators, you'll also need to select Web3Signer Holesky.

+

Holesky - Stakers Menu

+

Why Run a Holesky Testnet Node?

+
    +
  1. Hands-on Experience: Running a validator on the Holesky testnet offers invaluable practical knowledge. It mimics the mainnet processes, providing a comprehensive understanding of node operation.
  2. +
  3. Risk-free Exploration: As it's a testnet, you're not staking real ETH. This provides an opportunity for experimentation without the financial stakes of the main Ethereum network.
  4. +
+
tip

If you're new to Ethereum or wish to familiarize yourself with node operation intricacies, starting with the Holesky testnet is highly recommended. It's the perfect platform for hands-on learning in a risk-free environment.

+

Holesky Faucet

+

If you're interested in getting 32 HolETH for running a test validator, you can get it in the Holesky PoW Faucet. Make sure you understand how the faucet works before doing your request, as it will temporarily impact your computer's performance in the claiming process.

\ No newline at end of file diff --git a/docs/user/staking/ethereum/solo/mainnet/index.html b/docs/user/staking/ethereum/solo/mainnet/index.html index 9dff0989e..24c6d25e3 100644 --- a/docs/user/staking/ethereum/solo/mainnet/index.html +++ b/docs/user/staking/ethereum/solo/mainnet/index.html @@ -1,19 +1,95 @@ - + - -Ethereum mainnet | Dappnode - - - + +Ethereum mainnet | Dappnode + + + - -
-

Ethereum mainnet

Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum's block production by staking ETH.

Dappnode simplifies your journey to becoming a Solo Staker and start earning. You will need to do 3 main tasks, broken down below:

  1. Install the necessary packages on Dappnode
  2. Create validator keys
  3. Deposit ETH into the Ethereum deposit contract

1. Install the necessary packages on Dappnode

Dappnode makes it super simple to install everything you need to run a validator. Via the Stakers UI you will be able to install the following packages:

Stakers

  • Execution Client (Choose one): Geth, Nethermind, Erigon, or Besu.
  • Consensus Client (Choose one): Prysm, Lighthouse, Teku, Nimbus, or Lodestar.
Choosing the right Execution Client

Erigon is an execution client that focuses on retrieving and storing more data than the default options of other clients. This is useful to run historical queries or to use apps that require tracing/archive nodes like Otterscan or Trueblocks. Make sure you have at least 3 TB free in your hard drive to run Erigon.

Checkpoint Sync is your friend for syncing Consensus Clients

Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.

After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.

MEV BOOST

MEV Boost is an extra piece of software not belonging to the core Ethereum stack. It allows your validator to receive blocks that have been created by special "block builders" that try to extract MEV from the network, and receive extra rewards for including them in the chain when it's your turn to propose a block. However, it is very new technology and can be risky to use.

2. Creating the keys for your validator

info

This guide will use the Wagyu keygen tool to generate your validator keys. There are other options like a command-line tool by the Ethereum Foundation, but they are harder to use.

What are all these keys?

🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the chain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them.

🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever.

🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 32 ETH while your validator is active, and all your balance above 0 ETH when you exit the validator set. You need to keep this address safe as it's where your ETH will go, and cannot be changed.

  1. Download the latest release of the Wagyu Key Gen from here.

  2. Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the program. You will be given 2 options, either create a new mnemonic or import an existing mnemonic, and you will be able to choose the network for which you are generating the keys. The GUI is very user friendly and explains all steps along the way.

Wagyu - 1st screen -Wagyu - 2nd screen

You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place.

To ensure that you have copied it somewhere, it will ask you to type it again.

Wagyu - 3rd screen

Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent.

Wagyu - 4th screen

Select a folder where to save the keys

Wagyu - 5th screen

Wait for the keys to be generated

Wagyu - 6th screen

And you are done! You will find your keys in the folder you selected.

Wagyu - 7th screen

You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page.

tip

💡 Want to learn more about Ethereum keys and key generation?💡Learn more

Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to the Web3signer that you installed during step 1.

Return to the Dappnode UI and navigate to the Stakers > Ethereum menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page.

Then click on the Import Keystores button on the lower part of the Web3Signer UI.

Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores.

You are now ready to fund these validator accounts and start validating!

3: Deposit ETH into the Ethereum deposit contract

The final step is to fund your validator with the 32 ETH necessary to register as a validator and start receiving validation work!

To do this, you will need to send 32 ETH to the Ethereum deposit contract. We will be using the official Ethereum launchpad for this.

Navigate to the launchpad

Read all the advisories... they contain important information that will help you understand the whole process!

Launchpad 1

Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections:

Launchpad 2

We continue until the "Upload Deposit Data" section.

Launchpad 3

Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called deposit_data-*.json

The moment to do the deposit is here! Connect your wallet (yes, the one that has the 32 ETH!).

Launchpad 4

And follow the steps to send the 32 ETH to the deposit contract!

Launchpad 5

danger

You will be prompted to review the deposit address in the next step. PLEASE DO SO! MAKE SURE YOU ARE SENDING THE 32 ETH TO THE RIGHT DEPOSIT ADDRESS!

After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the beaconcha.in explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the Dappnode Web3signer UI, where you uploaded the keystores.

[PENDING SCREENSHOT]

Additional Opportunities: MEV Boost

Considering MEV Boost? It allows your validator node to propose different relays when it's its turn. However, before diving in, a thorough understanding of the relays and any local regulations is paramount.

Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.

Withdrawing my ETH

Once you want to finish your staking journey, you will need to withdraw your ETH from the Beacon Chain. This process consists of exiting the validator from the Dappnode UI.

Ethereum withdrawals are state changes in the execution layer

This means that once you reach the end of the Beacon Chain's exit queue, your 32 ETH will show up in your withdrawal address as a state change in the blockchain, and not as a deposit. You can find more info here.

Opening your Web3Signer UI.

Navigate to the Stakers > Ethereum menu and click on the Upload Keystores button on the Web3Signer card. -Once you are in the Web3Signer UI, select the validators you want to exit and click on the Exit Validator button on the top right part of the UI.

Ethereum Withdrawals

Follow the instructions and type "I want to exit", followed by Exit.

Now the message to exit will be broadcasted to the network.

Withdrawal queue

Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the Beacon Chain Explorer. Please be patient as the Beacon Chain exit queue can get long and wait times might take up to several weeks.

Voilà! Your ETH will appear on your withdrawal address!

- - + +

Ethereum mainnet

+

Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum's block production by staking ETH.

+

Dappnode simplifies your journey to becoming a Solo Staker and start earning. You will need to do 3 main tasks, broken down below:

+
    +
  1. Install the necessary packages on Dappnode
  2. +
  3. Create validator keys
  4. +
  5. Deposit ETH into the Ethereum deposit contract
  6. +
+

1. Install the necessary packages on Dappnode

+

Dappnode makes it super simple to install everything you need to run a validator. Via the Stakers UI you will be able to install the following packages:

+

Stakers

+
    +
  • Execution Client (Choose one): Geth, Nethermind, Erigon, or Besu.
  • +
  • Consensus Client (Choose one): Prysm, Lighthouse, Teku, Nimbus, or Lodestar.
  • +
+
Choosing the right Execution Client

Erigon is an execution client that focuses on retrieving and storing more data than the default options of other clients. This is useful to run historical queries or to use apps that require tracing/archive nodes like Otterscan or Trueblocks. Make sure you have at least 3 TB free in your hard drive to run Erigon.

+
Checkpoint Sync is your friend for syncing Consensus Clients

Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.

+

After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.

+
MEV BOOST

MEV Boost is an extra piece of software not belonging to the core Ethereum stack. It allows your validator to receive blocks that have been created by special "block builders" that try to extract MEV from the network, and receive extra rewards for including them in the chain when it's your turn to propose a block. However, it is very new technology and can be risky to use.

+

2. Creating the keys for your validator

+
info

This guide will use the Wagyu keygen tool to generate your validator keys. There are other options like a command-line tool by the Ethereum Foundation, but they are harder to use.

+
What are all these keys?

🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the chain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them.

🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever.

🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 32 ETH while your validator is active, and all your balance above 0 ETH when you exit the validator set. You need to keep this address safe as it's where your ETH will go, and cannot be changed.

+
    +
  1. +

    Download the latest release of the Wagyu Key Gen from here.

    +
  2. +
  3. +

    Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the program. You will be given 2 options, either create a new mnemonic or import an existing mnemonic, and you will be able to choose the network for which you are generating the keys. The GUI is very user friendly and explains all steps along the way.

    +
  4. +
+

Wagyu - 1st screen +Wagyu - 2nd screen

+

You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place.

+

To ensure that you have copied it somewhere, it will ask you to type it again.

+

Wagyu - 3rd screen

+

Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent.

+

Wagyu - 4th screen

+

Select a folder where to save the keys

+

Wagyu - 5th screen

+

Wait for the keys to be generated

+

Wagyu - 6th screen

+

And you are done! You will find your keys in the folder you selected.

+

Wagyu - 7th screen

+

You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page.

+
tip

💡 *Want to learn more about Ethereum keys and key generation?*💡Learn more

+

Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to the Web3signer that you installed during step 1.

+

Return to the Dappnode UI and navigate to the Stakers > Ethereum menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page.

+

Then click on the Import Keystores button on the lower part of the Web3Signer UI.

+

Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores.

+

You are now ready to fund these validator accounts and start validating!

+

3: Deposit ETH into the Ethereum deposit contract

+

The final step is to fund your validator with the 32 ETH necessary to register as a validator and start receiving validation work!

+

To do this, you will need to send 32 ETH to the Ethereum deposit contract. We will be using the official Ethereum launchpad for this.

+

Navigate to the launchpad

+

Read all the advisories... they contain important information that will help you understand the whole process!

+

Launchpad 1

+

Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections:

+

Launchpad 2

+

We continue until the "Upload Deposit Data" section.

+

Launchpad 3

+

Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called deposit_data-*.json

+

The moment to do the deposit is here! Connect your wallet (yes, the one that has the 32 ETH!).

+

Launchpad 4

+

And follow the steps to send the 32 ETH to the deposit contract!

+

Launchpad 5

+
warning

You will be prompted to review the deposit address in the next step. PLEASE DO SO! MAKE SURE YOU ARE SENDING THE 32 ETH TO THE RIGHT DEPOSIT ADDRESS!

+

After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the beaconcha.in explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the Dappnode Web3signer UI, where you uploaded the keystores.

+

[PENDING SCREENSHOT]

+

Additional Opportunities: MEV Boost

+

Considering MEV Boost? It allows your validator node to propose different relays when it's its turn. However, before diving in, a thorough understanding of the relays and any local regulations is paramount.

+

Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.

+

Withdrawing my ETH

+

Once you want to finish your staking journey, you will need to withdraw your ETH from the Beacon Chain. This process consists of exiting the validator from the Dappnode UI.

+
Ethereum withdrawals are state changes in the execution layer

This means that once you reach the end of the Beacon Chain's exit queue, your 32 ETH will show up in your withdrawal address as a state change in the blockchain, and not as a deposit. You can find more info here.

+

Opening your Web3Signer UI.

+

Navigate to the Stakers > Ethereum menu and click on the Upload Keystores button on the Web3Signer card. +Once you are in the Web3Signer UI, select the validators you want to exit and click on the Exit Validator button on the top right part of the UI.

+

Ethereum Withdrawals

+

Follow the instructions and type "I want to exit", followed by Exit.

+

Now the message to exit will be broadcasted to the network.

+
Withdrawal queue

Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the Beacon Chain Explorer. Please be patient as the Beacon Chain exit queue can get long and wait times might take up to several weeks.

+

Voilà! Your ETH will appear on your withdrawal address!

\ No newline at end of file diff --git a/docs/user/staking/gnosis-chain/solo/index.html b/docs/user/staking/gnosis-chain/solo/index.html index 11a47ad2c..09ef91c90 100644 --- a/docs/user/staking/gnosis-chain/solo/index.html +++ b/docs/user/staking/gnosis-chain/solo/index.html @@ -1,22 +1,118 @@ - + - -Gnosis Chain | Dappnode - - - + +Gnosis Chain | Dappnode + + + - -
-

Gnosis Chain

Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It's operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it's a testament to its popularity and accessibility.

Joining the Gnosis Chain as a Validator

Staking on the Gnosis Chain is both easy and economical. All it takes is 1 GNO to kickstart your journey as a Gnosis Chain validator. This low barrier to entry ensures that anyone, regardless of their financial position, can participate actively in the network as a block proposer. You will need to do 3 main tasks, broken down below:

  1. Install the necessary packages on Dappnode
  2. Create validator keys for Gnosis Chain
  3. Deposit GNO into the Gnosis Beacon Chain deposit contract

1. Install the necessary packages on Dappnode

Similar to Ethereum mainnet, Dappnode makes it very easy to set up you Gnosis Chain validator. Here's what the Stakers UI looks like for Gnosis Chain:

Stakers

  • Execution Client (Choose one):
    • Nethermind Xdai (Available now)
    • Gnosis Erigon (Coming soon!)
  • Consensus Client (Choose one):
    • Lighthouse Gnosis
    • Teku Gnosis
    • Lodestar Gnosis
  • Web3Signer Gnosis
Checkpoint Sync is your friend for syncing Consensus Clients

Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.

After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.

2. Creating validator keys for Gnosis Chain

info

This guide will use the Gnosis Wagyu keygen tool to generate your validator keys. This is a fork of the Wagyu Keygen tool for Ethereum mainnet.

What are all these keys?

🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the Gnosis Chain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them.

🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever.

🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 1 GNO while your validator is active, and all your balance above 0 GNO when you exit the validator set. You need to keep this address safe as it's where your GNO will go, and cannot be changed.

1) Download the latest release of the Gnosis Wagyu Key Gen from here.

2) Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the Gnosis Wagyu keygen tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way.

Gnosis Wagyu - 1st screen

You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place.

To ensure that you have copied it somewhere, it will ask you to type it again.

Gnosis Wagyu - 2nd screen

Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent.

Gnosis Wagyu - 3rd screen

Select a folder where to save the keys.

Gnosis Wagyu - 4th screen

Wait for the keys to be generated.

Gnosis Wagyu - 5th screen

And you are done! You will find your keys in the folder you selected.

Gnosis Wagyu - 6th screen

You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page.

tip

💡 Want to learn more about Ethereum keys and key generation?💡Learn more

Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer Gnosis, the package that you installed during step 1.

Return to the Dappnode UI and navigate to the Stakers > Gnosis Chain menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page.

Then click on the Import Keystores button on the lower part of the Web3Signer Gnosis UI.

Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores.

You are now ready to fund these validator accounts and start validating!

3: Deposit GNO into the Gnosis Chain deposit contract

The final step is to fund your validator with 1 GNO necessary to register as a validator and start receiving validation work!

To do this, you will need to send 1 GNO to the Gnosis Chain deposit contract.

Navigate to the Gnosis Chain deposit launchpad

Gnosis Launchpad 1

Under the Deposit tab, you'll find a box where you can import the deposit_data.json file you generated in Step 2. You can find it in the same folder you chose when generating the keys.

Gnosis Launchpad 2

The app will validate the json file and list the number of validator deposits you are making and the required GNO to deposit. Click Deposit to continue.

Gnosis Launchpad 3

Check that you understand the risks and ensure you are interacting with the correct contract before proceeding.

Gnosis Launchpad 4 -Gnosis Launchpad 5

The moment to do the deposit is here! Connect your wallet with the GNO's you'll be depositing, and follow the steps to send the GNOs to the deposit contract!

danger

Please review the deposit address in the next step! MAKE SURE YOU ARE SENDING YOUR GNO FUNDS TO THE RIGHT DEPOSIT ADDRESS!

Gnosis Launchpad 6 -Gnosis Launchpad 7

After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the Gnosis Beacon Chain Explorer, which is a fork of the Ethereum Beaconcha.in explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the upper, right corner of the Dappnode Web3signer Gnosis UI, where you uploaded the keystores.

Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.

Withdrawing my GNO

Once you want to finish your staking journey, you will need to withdraw your GNO from the Gnosis Chain. This is a 2 step process of exiting the validator from the Dappnode UI and claiming the GNO from the deposit contract.

Gnosis Chain withdrawals ≠ Ethereum withdrawals

Because the native token of Gnosis Chain is xDAI (you pay fees in it), but the staking token is GNO, withdrawals work differntly than in the Ethereum chain and do not happen automatically. You must claim your withdrawn tokens from the Deposit Contract. More info here.

1. Exit the validator from the Dappnode UI

danger

Make sure that your validator have a 0x01 type withdrawal address before exiting your validator or you will lose your funds. In the consensus explorer, if your withdrawal address shows as an address that starts with a 0x00 it means that your withdrawal address needs to be upgraded to a 0x01, please refer to the guide in the Gnosis Chain documentation. If your validator already shows a 0x01 address, you DON'T need to follow these steps.

Gnosis Withdrawals

Navigate to the Stakers > Gnosis Chain menu and click on the Upload Keystores button on the Web3Signer card. + +

Gnosis Chain

+

Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It's operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it's a testament to its popularity and accessibility.

+

Joining the Gnosis Chain as a Validator

+

Staking on the Gnosis Chain is both easy and economical. All it takes is 1 GNO to kickstart your journey as a Gnosis Chain validator. This low barrier to entry ensures that anyone, regardless of their financial position, can participate actively in the network as a block proposer. You will need to do 3 main tasks, broken down below:

+
    +
  1. Install the necessary packages on Dappnode
  2. +
  3. Create validator keys for Gnosis Chain
  4. +
  5. Deposit GNO into the Gnosis Beacon Chain deposit contract
  6. +
+

1. Install the necessary packages on Dappnode

+

Similar to Ethereum mainnet, Dappnode makes it very easy to set up you Gnosis Chain validator. Here's what the Stakers UI looks like for Gnosis Chain:

+

Stakers

+
    +
  • Execution Client (Choose one): +
      +
    • Nethermind Xdai (Available now)
    • +
    • Gnosis Erigon (Coming soon!)
    • +
    +
  • +
  • Consensus Client (Choose one): +
      +
    • Lighthouse Gnosis
    • +
    • Teku Gnosis
    • +
    • Lodestar Gnosis
    • +
    +
  • +
  • Web3Signer Gnosis
  • +
+
Checkpoint Sync is your friend for syncing Consensus Clients

Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.

+

After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.

+

2. Creating validator keys for Gnosis Chain

+
info

This guide will use the Gnosis Wagyu keygen tool to generate your validator keys. This is a fork of the Wagyu Keygen tool for Ethereum mainnet.

+
What are all these keys?

🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the Gnosis Chain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them.

🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever.

🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 1 GNO while your validator is active, and all your balance above 0 GNO when you exit the validator set. You need to keep this address safe as it's where your GNO will go, and cannot be changed.

+
    +
  1. +

    Download the latest release of the Gnosis Wagyu Key Gen from here.

    +
  2. +
  3. +

    Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the Gnosis Wagyu keygen tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way.

    +
  4. +
+

Gnosis Wagyu - 1st screen

+

You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place.

+

To ensure that you have copied it somewhere, it will ask you to type it again.

+

Gnosis Wagyu - 2nd screen

+

Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent.

+

Gnosis Wagyu - 3rd screen

+

Select a folder where to save the keys.

+

Gnosis Wagyu - 4th screen

+

Wait for the keys to be generated.

+

Gnosis Wagyu - 5th screen

+

And you are done! You will find your keys in the folder you selected.

+

Gnosis Wagyu - 6th screen

+

You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page.

+
tip

💡 *Want to learn more about Ethereum keys and key generation?*💡Learn more

+

Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer Gnosis, the package that you installed during step 1.

+

Return to the Dappnode UI and navigate to the Stakers > Gnosis Chain menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page.

+

Then click on the Import Keystores button on the lower part of the Web3Signer Gnosis UI.

+

Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores.

+

You are now ready to fund these validator accounts and start validating!

+

3: Deposit GNO into the Gnosis Chain deposit contract

+

The final step is to fund your validator with 1 GNO necessary to register as a validator and start receiving validation work!

+

To do this, you will need to send 1 GNO to the Gnosis Chain deposit contract.

+

Navigate to the Gnosis Chain deposit launchpad

+

Gnosis Launchpad 1

+

Under the Deposit tab, you'll find a box where you can import the deposit_data.json file you generated in Step 2. You can find it in the same folder you chose when generating the keys.

+

Gnosis Launchpad 2

+

The app will validate the json file and list the number of validator deposits you are making and the required GNO to deposit. Click Deposit to continue.

+

Gnosis Launchpad 3

+

Check that you understand the risks and ensure you are interacting with the correct contract before proceeding.

+

Gnosis Launchpad 4 +Gnosis Launchpad 5

+

The moment to do the deposit is here! Connect your wallet with the GNO's you'll be depositing, and follow the steps to send the GNOs to the deposit contract!

+
warning

Please review the deposit address in the next step! MAKE SURE YOU ARE SENDING YOUR GNO FUNDS TO THE RIGHT DEPOSIT ADDRESS!

+

Gnosis Launchpad 6 +Gnosis Launchpad 7

+

After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the Gnosis Beacon Chain Explorer, which is a fork of the Ethereum Beaconcha.in explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the upper, right corner of the Dappnode Web3signer Gnosis UI, where you uploaded the keystores.

+

Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.

+

Withdrawing my GNO

+

Once you want to finish your staking journey, you will need to withdraw your GNO from the Gnosis Chain. This is a 2 step process of exiting the validator from the Dappnode UI and claiming the GNO from the deposit contract.

+
Gnosis Chain withdrawals ≠ Ethereum withdrawals

Because the native token of Gnosis Chain is xDAI (you pay fees in it), but the staking token is GNO, withdrawals work differntly than in the Ethereum chain and do not happen automatically. You must claim your withdrawn tokens from the Deposit Contract. More info here.

+

1. Exit the validator from the Dappnode UI

+
warning

Make sure that your validator have a 0x01 type withdrawal address before exiting your validator or you will lose your funds. In the consensus explorer, if your withdrawal address shows as an address that starts with a 0x00 it means that your withdrawal address needs to be upgraded to a 0x01, please refer to the guide in the Gnosis Chain documentation. If your validator already shows a 0x01 address, you DON'T need to follow these steps.

+

Gnosis Withdrawals

+

Navigate to the Stakers > Gnosis Chain menu and click on the Upload Keystores button on the Web3Signer card. Once you are in the Web3Signer UI, select the validators you want to exit and click on the Exit Validator button on the top right part of the UI. -Follow the instructions and type "I want to exit", followed by Exit.

Now the message to exit will be broadcasted to the network.

Withdrawal queue

Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the Gnosis Beacon Chain Explorer. -Even then, you will need to claim your GNO from the deposit contract as per the next step.

2. Claim your GNO from the deposit contract

As soon as your withdrawal has been processed by the Beacon Chain, you will be able to claim your GNO from the deposit contract. You can claim from any of your wallets that hold xDAI to pay gas fees.

  1. Go to the Gnosis Chain Deposit Contract page in Gnosisscan.io and navigate to the Write as Proxy tab,

  2. Connect your wallet with the Connect to Web3 button and then locate the 3. claimWithdrawal function.

  3. Type your withdrawal address in the field and click Write. A transaction should trigger on your wallet. Approve it and wait for it to be included in a block.

Claiming from the Smart Contract

Voilà! Your GNO will appear on your withdrawal address!

- - +Follow the instructions and type "I want to exit", followed by Exit.

+

Now the message to exit will be broadcasted to the network.

+
Withdrawal queue

Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the Gnosis Beacon Chain Explorer. +Even then, you will need to claim your GNO from the deposit contract as per the next step.

+

2. Claim your GNO from the deposit contract

+

As soon as your withdrawal has been processed by the Beacon Chain, you will be able to claim your GNO from the deposit contract. You can claim from any of your wallets that hold xDAI to pay gas fees.

+
    +
  1. +

    Go to the Gnosis Chain Deposit Contract page in Gnosisscan.io and navigate to the Write as Proxy tab,

    +
  2. +
  3. +

    Connect your wallet with the Connect to Web3 button and then locate the 3. claimWithdrawal function.

    +
  4. +
  5. +

    Type your withdrawal address in the field and click Write. A transaction should trigger on your wallet. Approve it and wait for it to be included in a block.

    +
  6. +
+

Claiming from the Smart Contract

+

Voilà! Your GNO will appear on your withdrawal address!

\ No newline at end of file diff --git a/docs/user/staking/lukso/solo/index.html b/docs/user/staking/lukso/solo/index.html index 2b17a0c6d..a266afa5b 100644 --- a/docs/user/staking/lukso/solo/index.html +++ b/docs/user/staking/lukso/solo/index.html @@ -1,24 +1,100 @@ - + - -LUKSO | Dappnode - - - + +LUKSO | Dappnode + + + - -
-

LUKSO

LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That's LUKSO for you!

What Makes LUKSO Special?

Universal Profiles (UPs), supported by the ERC-725 standard, are LUKSO's magic trick. They act like digital passports in the LUKSO universe, ensuring that every creation and transaction carries the unique signature of its creator.

Joining LUKSO as a validator

LUKSO shares more than just roots with Ethereum. It uses the same trusted tools to run its network. Some of the main Ethereum clients are also compatible with LUKSO. For becoming a validator in LUKSO, you'll need to:

  1. Install the necessary LUKSO packages on Dappnode.
  2. Create validator keys for LUKSO.
  3. Deposit LYX into the LUKSO Consensus Chain deposit contract.

1. Install the necessary LUKSO packages on Dappnode.

Similar to Ethereum mainnet, Dappnode makes it very easy to set up your LUKSO validator. Here's what the Stakers UI looks like for LUKSO:

Stakers

  • Execution Clients (Choose one):
    • Lukso Geth
    • Lukso Erigon (Coming soon to Dappnode)
  • Consensus Clients (Choose one):
    • Prysm Lukso
    • Teku Lukso --Web3Signer LUKSO
Checkpoint Sync is your friend for syncing Consensus Clients

Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.

After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.

2. Creating validator keys for LUKSO

info

This guide will use the LUKSO Wagyu Keygen Tool to generate your validator keys. This is a fork of the Wagyu Keygen tool for Ethereum mainnet.

What are all these keys?

🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the LUKSO blockchain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them.

🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals are already activated in LUKSO (Shapella upgrade), as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever.

🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 32 LYX while your validator is active, and all your balance above 32 LYX when you exit the validator set. You need to keep this address safe as it's where your LYX will go, and cannot be changed.

  1. Download the latest release of the LUKSO Wagyu Keygen Tool from here.

  2. Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the LUKSO Wagyu Keygen Tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way.

LUKSO Wagyu - 1st screen

You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place.

To ensure that you have copied it somewhere, it will ask you to type it again.

LUKSO Wagyu - 2nd screen

Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent.

LUKSO Wagyu - 3rd screen

Select a folder where to save the keys.

LUKSO Wagyu - 4th screen

Wait for the keys to be generated.

LUKSO Wagyu - 5th screen

And you are done! You will find your keys in the folder you selected.

LUKSO Wagyu - 6th screen

You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page.

tip

💡 Want to learn more about Ethereum keys and key generation?💡Learn more

Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer LUKSO, the package that you installed during step 1.

Return to the Dappnode UI and navigate to the Stakers > LUKSO menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page.

Then click on the Import Keystores button on the lower part of the Web3Signer LUKSO UI.

Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores.

You are now ready to fund these validator accounts and start validating in LUKSO!

3: Deposit LYX into the LUKSO deposit contract

The final step is to fund your validator with the 32 LYX necessary to register as a validator and start receiving validation work!

To do this, you will need to send 32 LYX to the LUKSO deposit contract. We will be using the official LUKSO launchpad for this.

Navigate to the LUKSO launchpad

Read all the advisories... they contain important information that will help you understand the whole process!

LUKSO Launchpad 1

Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections:

LUKSO Launchpad 2

We continue until the "Upload Deposit Data" section.

LUKSO Launchpad 3

Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called deposit_data-*.json

The moment to do the deposit is here! Connect your wallet with the 32 LYX and make sure you're in the LUKSO network.

LUKSO Launchpad 4

And follow the steps to send the 32 LYX to the deposit contract!

danger

Please review your deposit address! MAKE SURE YOU ARE SENDING THE 32 LYX TO THE RIGHT DEPOSIT ADDRESS!

After the deposit is done, you will be able to check the progress of your deposit by searching for your validator key in the LUKSO Consensus Explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the upper, right corner of the Dappnode Web3signer LUKSO UI, where you uploaded the keystores

LUKSO Web3Signer

3. Adding a Withdrawal Address to your LUKSO validator

info

This step is only necessary if your validator doesn't have a withdrawal address configured. In the consensus explorer, it shows as an address that starts with a 0x00 and needs to be upgraded to a 0x01. If your validator already shows a 0x01 address, you DON'T need to follow these steps.

Step 1: Open the LUKSO Wagyu Keygen tool and click "Use existing recovery phrase", then you'll need to select "Generate your BLS to Execution change" option. Type in your seed phrase and follow the steps to generate a JSON file you'll need in step 3. Make sure you are offline during this step!

Step 2: You'll have to locate your LUKSO consensus client's container IP. If you're using Prysm, you can find it here under the service box in the upper part, and if you're using Teku, you'll be able to find it here in the same location.

Step 3: Open a terminal window where you'll need to input: -curl -X 'POST' \ - '<node-url>/eth/v1/beacon/pool/bls_to_execution_changes' \ - -H 'accept: */*' \ - -H 'Content-Type: application/json' \ - -d '<post-request-content>' -Where <node-url> is your LUKSO consensus client's container IP, and <post-request-content> the JSON file you generated in step 1.

Step 4: After successfully broadcasting the message, check your validator in the LUKSO Consensus Explorer, where you should now be able to see a 0x01 withdrawal address.

Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.

- - + +

LUKSO

+

LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That's LUKSO for you!

+

What Makes LUKSO Special?

+

Universal Profiles (UPs), supported by the ERC-725 standard, are LUKSO's magic trick. They act like digital passports in the LUKSO universe, ensuring that every creation and transaction carries the unique signature of its creator.

+

Joining LUKSO as a validator

+

LUKSO shares more than just roots with Ethereum. It uses the same trusted tools to run its network. Some of the main Ethereum clients are also compatible with LUKSO. For becoming a validator in LUKSO, you'll need to:

+
    +
  1. Install the necessary LUKSO packages on Dappnode.
  2. +
  3. Create validator keys for LUKSO.
  4. +
  5. Deposit LYX into the LUKSO Consensus Chain deposit contract.
  6. +
+

1. Install the necessary LUKSO packages on Dappnode.

+

Similar to Ethereum mainnet, Dappnode makes it very easy to set up your LUKSO validator. Here's what the Stakers UI looks like for LUKSO:

+

Stakers

+
    +
  • Execution Clients (Choose one): +
      +
    • Lukso Geth
    • +
    • Lukso Erigon (Coming soon to Dappnode)
    • +
    +
  • +
  • Consensus Clients (Choose one): +
      +
    • Prysm Lukso
    • +
    • Teku Lukso +-Web3Signer LUKSO
    • +
    +
  • +
+
Checkpoint Sync is your friend for syncing Consensus Clients

Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of "checkpoint sync". Make sure to toggle the "use checksync" option when installing your consensus client, and you can change at any point from one to another with barely any downtime.

+

After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.

+

2. Creating validator keys for LUKSO

+
info

This guide will use the LUKSO Wagyu Keygen Tool to generate your validator keys. This is a fork of the Wagyu Keygen tool for Ethereum mainnet.

+
What are all these keys?

🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the LUKSO blockchain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them.

🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals are already activated in LUKSO (Shapella upgrade), as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever.

🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 32 LYX while your validator is active, and all your balance above 32 LYX when you exit the validator set. You need to keep this address safe as it's where your LYX will go, and cannot be changed.

+
    +
  1. +

    Download the latest release of the LUKSO Wagyu Keygen Tool from here.

    +
  2. +
  3. +

    Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the LUKSO Wagyu Keygen Tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way.

    +
  4. +
+

LUKSO Wagyu - 1st screen

+

You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place.

+

To ensure that you have copied it somewhere, it will ask you to type it again.

+

LUKSO Wagyu - 2nd screen

+

Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent.

+

LUKSO Wagyu - 3rd screen

+

Select a folder where to save the keys.

+

LUKSO Wagyu - 4th screen

+

Wait for the keys to be generated.

+

LUKSO Wagyu - 5th screen

+

And you are done! You will find your keys in the folder you selected.

+

LUKSO Wagyu - 6th screen

+

You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page.

+
tip

💡 *Want to learn more about Ethereum keys and key generation?*💡Learn more

+

Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer LUKSO, the package that you installed during step 1.

+

Return to the Dappnode UI and navigate to the Stakers > LUKSO menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page.

+

Then click on the Import Keystores button on the lower part of the Web3Signer LUKSO UI.

+

Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores.

+

You are now ready to fund these validator accounts and start validating in LUKSO!

+

3: Deposit LYX into the LUKSO deposit contract

+

The final step is to fund your validator with the 32 LYX necessary to register as a validator and start receiving validation work!

+

To do this, you will need to send 32 LYX to the LUKSO deposit contract. We will be using the official LUKSO launchpad for this.

+

Navigate to the LUKSO launchpad

+

Read all the advisories... they contain important information that will help you understand the whole process!

+

LUKSO Launchpad 1

+

Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections:

+

LUKSO Launchpad 2

+

We continue until the "Upload Deposit Data" section.

+

LUKSO Launchpad 3

+

Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called deposit_data-*.json

+

The moment to do the deposit is here! Connect your wallet with the 32 LYX and make sure you're in the LUKSO network.

+

LUKSO Launchpad 4

+

And follow the steps to send the 32 LYX to the deposit contract!

+
warning

Please review your deposit address! MAKE SURE YOU ARE SENDING THE 32 LYX TO THE RIGHT DEPOSIT ADDRESS!

+

After the deposit is done, you will be able to check the progress of your deposit by searching for your validator key in the LUKSO Consensus Explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the upper, right corner of the Dappnode Web3signer LUKSO UI, where you uploaded the keystores

+

LUKSO Web3Signer

+

3. Adding a Withdrawal Address to your LUKSO validator

+
info

This step is only necessary if your validator doesn't have a withdrawal address configured. In the consensus explorer, it shows as an address that starts with a 0x00 and needs to be upgraded to a 0x01. If your validator already shows a 0x01 address, you DON'T need to follow these steps.

+

Step 1: Open the LUKSO Wagyu Keygen tool and click "Use existing recovery phrase", then you'll need to select "Generate your BLS to Execution change" option. Type in your seed phrase and follow the steps to generate a JSON file you'll need in step 3. Make sure you are offline during this step!

+

Step 2: You'll have to locate your LUKSO consensus client's container IP. If you're using Prysm, you can find it here under the service box in the upper part, and if you're using Teku, you'll be able to find it here in the same location.

+

Step 3: Open a terminal window where you'll need to input: +curl -X 'POST' \ '<node-url>/eth/v1/beacon/pool/bls_to_execution_changes' \ -H 'accept: */*' \ -H 'Content-Type: application/json' \ -d '<post-request-content>' +Where <node-url> is your LUKSO consensus client's container IP, and <post-request-content> the JSON file you generated in step 1.

+

Step 4: After successfully broadcasting the message, check your validator in the LUKSO Consensus Explorer, where you should now be able to see a 0x01 withdrawal address.

+

Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.

\ No newline at end of file diff --git a/docs/user/staking/overview/index.html b/docs/user/staking/overview/index.html index f63973eb4..4b6e568cb 100644 --- a/docs/user/staking/overview/index.html +++ b/docs/user/staking/overview/index.html @@ -1,17 +1,39 @@ - + - -Earn with Staking in Dappnode | Dappnode - - - + +Earn with Staking in Dappnode | Dappnode + + + - -
-

Earn with Staking in Dappnode

Decentralize Proof-of-Stake chains and earn

Dappnode makes it extremely simple to stake and validate Proof-of-Stake chains such as Ethereum, Gnosis Chain and LUKSO. Not only do you contribute to the network's security, but you also earn handsome rewards.

Dappnode offers you the best UX, through our Stakers UI, with which you can run a validator node in a few simple steps and without ever needing command line or technical knowledge.

The Stakers UI

You can run all the infrastructure for Ethereum, Gnosis Chain and LUKSO in 4 steps through the Stakers UI:

Apart from installing the nodes, you will need to generate the keys for the validator and deposit (or "stake"!) your crypto. Please refer to each section for Ethereum, Gnosis Chain and LUKSO for step-by-step guides.

Can I stake without 32 ETH?

Yes! Thanks to LSDs AND DVT tech, you don't need 32 ETH to stake. Or you can stake in Gnosis Chain or LUKSO, which have more affordable cost for a solo validator.

For more information on LSDs and DVT and how you can stake Ethereum without 32 ETH, please check their dedicated pages on the side menu under Ethereum > LSD Pools or Ethereum > DVT.

What is Staking?

Staking is the act of allocating a portion of your cryptocurrency holdings as collateral to participate in:

  1. Validating Blocks: Confirming transaction records and adding them to the blockchain.
  2. Securing the Chain: Ensuring the network remains resistant to malicious intentions.
  3. Earning Rewards: As a validator, you get paid for your services in the form of more cryptocurrency.

Why Stake with Dappnode?

Simplicity is our mantra! We've streamlined the staking process, so all you need to do is:

  • Select your desired blockchain.
  • Dive into our comprehensive documentation for step-by-step guidance.
  • Begin your staking journey.

Happy Staking!

- - + +

Earn with Staking in Dappnode

+

Decentralize Proof-of-Stake chains and earn

+

Dappnode makes it extremely simple to stake and validate Proof-of-Stake chains such as Ethereum, Gnosis Chain and LUKSO. Not only do you contribute to the network's security, but you also earn handsome rewards.

+

Dappnode offers you the best UX, through our Stakers UI, with which you can run a validator node in a few simple steps and without ever needing command line or technical knowledge.

+

The Stakers UI

+

You can run all the infrastructure for Ethereum, Gnosis Chain and LUKSO in 4 steps through the Stakers UI:

+

+

Apart from installing the nodes, you will need to generate the keys for the validator and deposit (or "stake"!) your crypto. Please refer to each section for Ethereum, Gnosis Chain and LUKSO for step-by-step guides.

+

Can I stake without 32 ETH?

+

Yes! Thanks to LSDs AND DVT tech, you don't need 32 ETH to stake. Or you can stake in Gnosis Chain or LUKSO, which have more affordable cost for a solo validator.

+

For more information on LSDs and DVT and how you can stake Ethereum without 32 ETH, please check their dedicated pages on the side menu under Ethereum > LSD Pools or Ethereum > DVT.

+

What is Staking?

+

Staking is the act of allocating a portion of your cryptocurrency holdings as collateral to participate in:

+
    +
  1. Validating Blocks: Confirming transaction records and adding them to the blockchain.
  2. +
  3. Securing the Chain: Ensuring the network remains resistant to malicious intentions.
  4. +
  5. Earning Rewards: As a validator, you get paid for your services in the form of more cryptocurrency.
  6. +
+

Why Stake with Dappnode?

+

Simplicity is our mantra! We've streamlined the staking process, so all you need to do is:

+
    +
  • Select your desired blockchain.
  • +
  • Dive into our comprehensive documentation for step-by-step guidance.
  • +
  • Begin your staking journey.
  • +
+

Happy Staking!

\ No newline at end of file diff --git a/docs/user/videos-and-tutorials/crash-course/index.html b/docs/user/videos-and-tutorials/crash-course/index.html index 9956bcfe1..519653be8 100644 --- a/docs/user/videos-and-tutorials/crash-course/index.html +++ b/docs/user/videos-and-tutorials/crash-course/index.html @@ -1,17 +1,28 @@ - + - -Crash Course | Dappnode - - - + +Crash Course | Dappnode + + + - -
-

Crash Course

info

Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!

Every now and then we get together in our Dappnode Discord Community to offer live workshops on how to achieve different features and tricks with your Dappnode. These sessions are uploaded to our YouTube channel, so you can watch them at your own pace. Here are a few past editions you might find interesting!

1. How to set up Dappnode from scratch using your own hardware

2. How to set up a validator

3. How to setup Stakehouse node operator

4. How to withdraw your staked ETH

5. How to subscribe your validator to Smooth 😎

6. How to earn rewards with your Dappnode without investing

- - + +

Crash Course

+
info

Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!

+

Every now and then we get together in our Dappnode Discord Community to offer live workshops on how to achieve different features and tricks with your Dappnode. These sessions are uploaded to our YouTube channel, so you can watch them at your own pace. Here are a few past editions you might find interesting!

+

1. How to set up Dappnode from scratch using your own hardware

+
+

2. How to set up a validator

+
+

3. How to setup Stakehouse node operator

+
+

4. How to withdraw your staked ETH

+
+

5. How to subscribe your validator to Smooth 😎

+
+

6. How to earn rewards with your Dappnode without investing

+
\ No newline at end of file diff --git a/docs/user/videos-and-tutorials/driving-school/configuration/index.html b/docs/user/videos-and-tutorials/driving-school/configuration/index.html index 7cf76bf54..efcc01ccd 100644 --- a/docs/user/videos-and-tutorials/driving-school/configuration/index.html +++ b/docs/user/videos-and-tutorials/driving-school/configuration/index.html @@ -1,17 +1,27 @@ - + - -2. Configuring your Dappnode | Dappnode - - - + +2. Configuring your Dappnode | Dappnode + + + - -
-

2. Configuring your Dappnode

info

We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.

Once you have your Dappnode up and running, you can start configuring it to suit your needs. Here are some videos to help you with that:

🧬 2.1 Repositories

Your Dappnode uses two technologies in order to stay decentralized and permissionless. In this video we'll go through Ethereum and IPFS and how do they work in Dappnode.



🧮 2.2 Dappnode Monitoring Service (DMS)

This video is about Dappnode Monitoring Service, a tool that will make it easy to monitor your Dappnode's health and activity.

🌡 2.3 Ethical Metrics

Ethical Metrics is Dappnode's private solution to notify you through Email and Telegram when there's unexpected behavior in your Dappnode.

- - + +

2. Configuring your Dappnode

+
info

We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.

+

Once you have your Dappnode up and running, you can start configuring it to suit your needs. Here are some videos to help you with that:

+

🧬 2.1 Repositories

+

Your Dappnode uses two technologies in order to stay decentralized and permissionless. In this video we'll go through Ethereum and IPFS and how do they work in Dappnode.

+
+
+
+

🧮 2.2 Dappnode Monitoring Service (DMS)

+

This video is about Dappnode Monitoring Service, a tool that will make it easy to monitor your Dappnode's health and activity.

+
+

🌡 2.3 Ethical Metrics

+

Ethical Metrics is Dappnode's private solution to notify you through Email and Telegram when there's unexpected behavior in your Dappnode.

+
\ No newline at end of file diff --git a/docs/user/videos-and-tutorials/driving-school/initial-setup/index.html b/docs/user/videos-and-tutorials/driving-school/initial-setup/index.html index 9eb750881..e8ed10f4c 100644 --- a/docs/user/videos-and-tutorials/driving-school/initial-setup/index.html +++ b/docs/user/videos-and-tutorials/driving-school/initial-setup/index.html @@ -1,17 +1,38 @@ - + - -1. Initial Dappnode Setup | Dappnode - - - + +1. Initial Dappnode Setup | Dappnode + + + - -
-

1. Initial Dappnode Setup

Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered.

🖥️ 1.1 Booting from the Dappnode ISO

The first step you will need to take when your hardware is ready for installing Dappnode. If you have experience installing Linux you'll know what this is about, but if you don't there's nothing to worry about, as most of the process is automated.


🌐 1.2 Accessing the Dappnode User Interface or Dashboard

The most common way to interact with your dappnode is through a web browser in another computer. This means that Dappnode works as a server, and doesn't have a traditional graphic interface as regular personal computers do, so if you're sitting in front of a login prompt wondering what's next you're doing great so far!


🔒 1.3 Setting up Dappnode Security

Now that you're inside your Dappnode we gotta make sure no unauthorized users have access! There are four kinds of security credentials in Dappnode and we'll go through each one of them in this video.


🔗 1.4 Configuring your Dappnode VPN

The best way to remotely and safely access your Dappnode is through VPN. Discover the options that Dappnode has to offer for VPNs in this Dappnode Driving School lesson!


🔄 1.5 Syncing your clients/An overview on node running

This is what you came here for! Let's start syncing your clients to get your nodes up and running. Whether you want them for better privacy while exploring web3 or because you're interested in validating, syncing your node is a must in your Dappnode journey.


💾 1.6 Understanding your Dappnode's Hardware

Now that everything is working as expected, here's some information on what keeps Dappnode running the way it's meant to. This video is also great if you're looking into putting your own hardware together, since it goes through the minimum requirements to run Dappnode.

- - + +

1. Initial Dappnode Setup

+

Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered.

+

🖥️ 1.1 Booting from the Dappnode ISO

+

The first step you will need to take when your hardware is ready for installing Dappnode. If you have experience installing Linux you'll know what this is about, but if you don't there's nothing to worry about, as most of the process is automated.

+
+
+

🌐 1.2 Accessing the Dappnode User Interface or Dashboard

+

The most common way to interact with your dappnode is through a web browser in another computer. This means that Dappnode works as a server, and doesn't have a traditional graphic interface as regular personal computers do, so if you're sitting in front of a login prompt wondering what's next you're doing great so far!

+
+
+

🔒 1.3 Setting up Dappnode Security

+

Now that you're inside your Dappnode we gotta make sure no unauthorized users have access! There are four kinds of security credentials in Dappnode and we'll go through each one of them in this video.

+
+
+

🔗 1.4 Configuring your Dappnode VPN

+

The best way to remotely and safely access your Dappnode is through VPN. Discover the options that Dappnode has to offer for VPNs in this Dappnode Driving School lesson!

+
+
+

🔄 1.5 Syncing your clients/An overview on node running

+

This is what you came here for! Let's start syncing your clients to get your nodes up and running. Whether you want them for better privacy while exploring web3 or because you're interested in validating, syncing your node is a must in your Dappnode journey.

+
+
+

💾 1.6 Understanding your Dappnode's Hardware

+

Now that everything is working as expected, here's some information on what keeps Dappnode running the way it's meant to. This video is also great if you're looking into putting your own hardware together, since it goes through the minimum requirements to run Dappnode.

+
\ No newline at end of file diff --git a/docs/user/videos-and-tutorials/guides/connect-node/index.html b/docs/user/videos-and-tutorials/guides/connect-node/index.html index 3e63d45a4..70e1960d4 100644 --- a/docs/user/videos-and-tutorials/guides/connect-node/index.html +++ b/docs/user/videos-and-tutorials/guides/connect-node/index.html @@ -1,17 +1,66 @@ - + - -How to Connect to My Blockchain Node | Dappnode - - - + +How to Connect to My Blockchain Node | Dappnode + + + - -
-

How to Connect to My Blockchain Node

When you've set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you've selected. Below is a guide on how to do this:

Ethereum Mainnet Node

If you've selected an Ethereum mainnet node in Repository > Ethereum or Stakers > Ethereum, here's how to connect:

  1. The Execution client you have selected will expose its RPC at:
http://fullnode.dappnode:8545
  1. Do note that this domain is only accessible when you're connected to Dappnode either via WiFi or VPN.

  2. If you intend to use the RPC externally (i.e., without needing to connect to Dappnode), you'll need to refer to our tutorial on How to expose an RPC externally.

Other Nodes in Stakers tab

For blockchain nodes other than Ethereum mainnet:

  1. Identify the specific network for your node, e.g., lukso, gnosis, or prater.

  2. The endpoint for these nodes will be:

http://<network>.fullnode.dappnode:8545

Replace <network> with your specific blockchain network name.

  1. Ensure that the node is correctly set in Stakers > <network>.

Connecting to Metamask

To connect your node to Metamask:

  1. You will need to provide the Chain ID of the blockchain you're connecting to.

  2. Chain IDs for various blockchains can be found at Chainlist.

  3. In Metamask, navigate to Settings > Networks > Add Network. Input the RPC URL (http://<network>.fullnode.dappnode:8545) and the Chain ID from Chainlist.

Important Reminders

  • Your node needs to be fully synced to function correctly. This ensures that the latest state of the blockchain and its transactions are available for your applications.

  • Always ensure the safety and privacy of your Dappnode by not unnecessarily exposing ports or services that might be targets for malicious actors.

- - + +

How to Connect to My Blockchain Node

+

When you've set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you've selected. Below is a guide on how to do this:

+

Ethereum Mainnet Node

+

If you've selected an Ethereum mainnet node in Repository > Ethereum or Stakers > Ethereum, here's how to connect:

+
    +
  1. The Execution client you have selected will expose its RPC at:
  2. +
+
http://fullnode.dappnode:8545
+
    +
  1. +

    Do note that this domain is only accessible when you're connected to Dappnode either via WiFi or VPN.

    +
  2. +
  3. +

    If you intend to use the RPC externally (i.e., without needing to connect to Dappnode), you'll need to refer to our tutorial on How to expose an RPC externally.

    +
  4. +
+

Other Nodes in Stakers tab

+

For blockchain nodes other than Ethereum mainnet:

+
    +
  1. +

    Identify the specific network for your node, e.g., lukso, gnosis, or prater.

    +
  2. +
  3. +

    The endpoint for these nodes will be:

    +
  4. +
+
http://<network>.fullnode.dappnode:8545
+

Replace <network> with your specific blockchain network name.

+
    +
  1. Ensure that the node is correctly set in Stakers > <network>.
  2. +
+

Connecting to Metamask

+

To connect your node to Metamask:

+
    +
  1. +

    You will need to provide the Chain ID of the blockchain you're connecting to.

    +
  2. +
  3. +

    Chain IDs for various blockchains can be found at Chainlist.

    +
  4. +
  5. +

    In Metamask, navigate to Settings > Networks > Add Network. Input the RPC URL (http://<network>.fullnode.dappnode:8545) and the Chain ID from Chainlist.

    +
  6. +
+

Important Reminders

+
    +
  • +

    Your node needs to be fully synced to function correctly. This ensures that the latest state of the blockchain and its transactions are available for your applications.

    +
  • +
  • +

    Always ensure the safety and privacy of your Dappnode by not unnecessarily exposing ports or services that might be targets for malicious actors.

    +
  • +
\ No newline at end of file diff --git a/docs/user/videos-and-tutorials/overview/index.html b/docs/user/videos-and-tutorials/overview/index.html index f8671a4e7..20ace2d17 100644 --- a/docs/user/videos-and-tutorials/overview/index.html +++ b/docs/user/videos-and-tutorials/overview/index.html @@ -1,17 +1,31 @@ - + - -Videos and Tutorials | Dappnode - - - + +Videos and Tutorials | Dappnode + + + - -
-

Videos and Tutorials

Welcome to the Videos and Tutorials section! Here, you'll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you're a beginner or an advanced user, there's something here for everyone.

Tutorial docs

In this section, you will find comprehensive written guides that provide step-by-step instructions on various topics related to Dappnode. These documents are a valuable resource for anyone looking to deepen their understanding and enhance their Dappnode experience.

🔗 How to connect a wallet to my node

Dappnode Driving School

The Dappnode Driving School is a set of video tutorials that will help you understand the basics about setting up your Dappnode for the first time. These videos are made for newcommers and non-technical users, but if you have questions don't hesitate to drop by our Dappnode Discord Community, where the community will be happy to provide as much help as you need.

I. Initial Dappnode Setup

🖥️ Booting from the Dappnode ISO

🌐 Accessing the Dappnode User Interface (UI)/Dashboard

🔒 Setting up Dappnode Security

🔗 Configuring your Dappnode VPN

🔄 Syncing your clients/An overview on node running

💾 Understanding your Dappnode's Hardware

II. Configuring your Dappnode

🛠️ Coming soon...

III. Dappnode Troubleshooting

🔧 Coming soon...

- - + +

Videos and Tutorials

+

Welcome to the Videos and Tutorials section! Here, you'll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you're a beginner or an advanced user, there's something here for everyone.

+

Tutorial docs

+

In this section, you will find comprehensive written guides that provide step-by-step instructions on various topics related to Dappnode. These documents are a valuable resource for anyone looking to deepen their understanding and enhance their Dappnode experience.

+

🔗 How to connect a wallet to my node

+

Dappnode Driving School

+

The Dappnode Driving School is a set of video tutorials that will help you understand the basics about setting up your Dappnode for the first time. These videos are made for newcommers and non-technical users, but if you have questions don't hesitate to drop by our Dappnode Discord Community, where the community will be happy to provide as much help as you need.

+

I. Initial Dappnode Setup

+

🖥️ Booting from the Dappnode ISO

+

🌐 Accessing the Dappnode User Interface (UI)/Dashboard

+

🔒 Setting up Dappnode Security

+

🔗 Configuring your Dappnode VPN

+

🔄 Syncing your clients/An overview on node running

+

💾 Understanding your Dappnode's Hardware

+

II. Configuring your Dappnode

+

🛠️ Coming soon...

+

III. Dappnode Troubleshooting

+

🔧 Coming soon...

\ No newline at end of file diff --git a/index.html b/index.html index 9e673b08e..e5fd6df7a 100644 --- a/index.html +++ b/index.html @@ -1,17 +1,14 @@ - + - -Hello from Dappnode | Dappnode - - - + +Hello from Dappnode | Dappnode + + + - -
-

Dappnode

Simplifying decentralization

Getting started

Getting started

Kickstart your blockchain journey with Dappnode. Our straightforward setup guides you to deploy and manage your decentralized applications easily. No more technical jargon, just a seamless blockchain experience. With Dappnode, diving into decentralization has never been simpler. Start now!

Solo staking

Solo staking

Experience the future of Ethereum with Dappnode. Simplify your solo staking journey with our user-friendly platform, empowering you to run your own Ethereum 2.0 validator node with ease and security. With Dappnode, you're in control. Stake smarter, stake with Dappnode.

Driving School

Driving School

Dappnode Driving School is a collection of tutorial videos that provide all the tools you need for a successful Dappnode journey. From initial installation to advanced VPN setups, exploring hardware essentials, and expanding functionalities, each video offers step-by-step instructions tailored for both beginners and seasoned users.

Rocketpool

Rocketpool

How Rocket Pool Works. Unlike solo stakers, who are required to put 32 ETH up for deposit to create a new validator, Rocket Pool nodes only need to deposit 8/16 ETH per validator. This will be coupled with 16 ETH from the staking pool (which stakers deposited in exchange for rETH) to create a new Ethereum validator. This new validator is called a minipool.

Ethical metrics

Ethical metrics

Ethical metrics is privacy-ensured solution for monitoring your Dappnode. This service alerts you about your Dappnode's status, using Tor hidden services to maintain the privacy of your IP address. Setting up is straightforward, requiring only an email address to receive alerts.

Smooth

Smooth is a opt-in feature that enables solo stakers to earn higher MEV rewards. Joining Smooth is easier than ever with Dappnode. Simply set your Fee Recipient Address to Smooth and claim your rewards after proposing a slot!

- - + +

Dappnode

Simplifying decentralization

Getting started

Getting started

Kickstart your blockchain journey with Dappnode. Our straightforward setup guides you to deploy and manage your decentralized applications easily. No more technical jargon, just a seamless blockchain experience. With Dappnode, diving into decentralization has never been simpler. Start now!

Solo staking

Solo staking

Experience the future of Ethereum with Dappnode. Simplify your solo staking journey with our user-friendly platform, empowering you to run your own Ethereum 2.0 validator node with ease and security. With Dappnode, you're in control. Stake smarter, stake with Dappnode.

Driving School

Driving School

Dappnode Driving School is a collection of tutorial videos that provide all the tools you need for a successful Dappnode journey. From initial installation to advanced VPN setups, exploring hardware essentials, and expanding functionalities, each video offers step-by-step instructions tailored for both beginners and seasoned users.

Rocketpool

Rocketpool

How Rocket Pool Works. Unlike solo stakers, who are required to put 32 ETH up for deposit to create a new validator, Rocket Pool nodes only need to deposit 8/16 ETH per validator. This will be coupled with 16 ETH from the staking pool (which stakers deposited in exchange for rETH) to create a new Ethereum validator. This new validator is called a minipool.

Ethical metrics

Ethical metrics

Ethical metrics is privacy-ensured solution for monitoring your Dappnode. This service alerts you about your Dappnode's status, using Tor hidden services to maintain the privacy of your IP address. Setting up is straightforward, requiring only an email address to receive alerts.

Smooth

Smooth is a opt-in feature that enables solo stakers to earn higher MEV rewards. Joining Smooth is easier than ever with Dappnode. Simply set your Fee Recipient Address to Smooth and claim your rewards after proposing a slot!

\ No newline at end of file diff --git a/search-index-default.json b/search-index-default.json deleted file mode 100644 index 74b293fe4..000000000 --- a/search-index-default.json +++ /dev/null @@ -1 +0,0 @@ -{"documents":[{"id":1,"pageTitle":"First Blog Post","sectionTitle":"First Blog Post","sectionRoute":"/blog/first-blog-post","type":"blog"},{"id":2,"pageTitle":"Long Blog Post","sectionTitle":"Long Blog Post","sectionRoute":"/blog/long-blog-post","type":"blog"},{"id":3,"pageTitle":"MDX Blog Post","sectionTitle":"MDX Blog Post","sectionRoute":"/blog/mdx-blog-post","type":"blog"},{"id":4,"pageTitle":"Welcome","sectionTitle":"Welcome","sectionRoute":"/blog/welcome","type":"blog"}],"index":{"version":"2.3.9","fields":["title","content","tags"],"fieldVectors":[["title/1",[0,1.113,1,0.192,2,0.192]],["content/1",[3,1.234,4,1.318,5,1.234,6,1.234,7,1.234,8,1.036,9,1.036,10,1.036,11,1.036,12,1.036,13,1.036,14,1.036,15,1.036,16,1.036,17,1.036,18,1.036,19,1.036,20,1.036]],["tags/1",[21,1.204,22,0.208]],["title/2",[1,0.192,2,0.192,23,0.641]],["content/2",[1,0.177,2,0.177,3,1.388,4,1.43,5,1.388,6,1.388,7,1.388,8,1.273,9,1.273,10,1.273,11,1.273,12,1.273,13,1.273,14,1.273,15,1.273,16,1.273,17,1.273,18,1.273,19,1.273,20,1.273,23,0.366,24,0.635,25,0.635,26,0.188,27,0.59,28,0.635,29,0.635,30,0.635,31,0.635,32,0.635,33,0.635]],["tags/2",[22,0.208,34,0.693]],["title/3",[1,0.192,2,0.192,35,0.641]],["content/3",[1,0.371,2,0.371,22,0.312,26,0.536,27,1.041,35,1.041,36,1.041,37,1.041,38,1.041,39,1.041,40,1.808,41,1.041,42,1.808,43,1.808,44,1.808,45,1.808,46,1.808,47,1.808,48,1.808,49,1.808,50,1.808]],["tags/3",[22,0.261]],["title/4",[51,1.596]],["content/4",[1,0.427,2,0.371,22,0.339,26,0.463,36,0.9,37,0.9,38,0.9,39,0.9,41,0.9,52,1.563,53,1.563,54,1.563,55,1.563,56,1.966,57,1.966,58,1.563,59,1.563,60,1.563,61,1.563,62,1.563,63,1.563,64,1.563,65,1.966,66,1.966,67,1.966,68,1.563,69,1.563,70,1.563,71,1.563,72,1.563,73,1.563,74,1.563,75,1.563,76,1.563,77,1.563,78,1.563,79,1.563,80,1.563]],["tags/4",[22,0.172,34,0.575,81,1]]],"invertedIndex":[["",{"_index":27,"title":{},"content":{"2":{},"3":{}},"tags":{}}],["05",{"_index":66,"title":{},"content":{"4":{}},"tags":{}}],["2019",{"_index":65,"title":{},"content":{"4":{}},"tags":{}}],["30",{"_index":67,"title":{},"content":{"4":{}},"tags":{}}],["ad",{"_index":60,"title":{},"content":{"4":{}},"tags":{}}],["add",{"_index":54,"title":{},"content":{"4":{}},"tags":{}}],["adipisc",{"_index":9,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["alert('button",{"_index":47,"title":{},"content":{"3":{}},"tags":{}}],["aliquam",{"_index":19,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["amet",{"_index":7,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["author",{"_index":59,"title":{},"content":{"4":{}},"tags":{}}],["authors.yml",{"_index":61,"title":{},"content":{"4":{}},"tags":{}}],["blog",{"_index":1,"title":{"1":{},"2":{},"3":{}},"content":{"2":{},"3":{},"4":{}},"tags":{}}],["button",{"_index":45,"title":{},"content":{"3":{}},"tags":{}}],["click",{"_index":50,"title":{},"content":{"3":{}},"tags":{}}],["clicked!')}>click",{"_index":48,"title":{},"content":{"3":{}},"tags":{}}],["co",{"_index":71,"title":{},"content":{"4":{}},"tags":{}}],["comment",{"_index":29,"title":{},"content":{"2":{}},"tags":{}}],["config",{"_index":80,"title":{},"content":{"4":{}},"tags":{}}],["consectetur",{"_index":8,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["consequat",{"_index":20,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["conveni",{"_index":70,"title":{},"content":{"4":{}},"tags":{}}],["creat",{"_index":43,"title":{},"content":{"3":{}},"tags":{}}],["date",{"_index":62,"title":{},"content":{"4":{}},"tags":{}}],["delet",{"_index":78,"title":{},"content":{"4":{}},"tags":{}}],["dignissim",{"_index":13,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["directori",{"_index":57,"title":{},"content":{"4":{}},"tags":{}}],["docusauru",{"_index":22,"title":{},"content":{"3":{},"4":{}},"tags":{"1":{},"2":{},"3":{},"4":{}}}],["dolor",{"_index":5,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["don't",{"_index":76,"title":{},"content":{"4":{}},"tags":{}}],["elementum",{"_index":12,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["elit",{"_index":10,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["ero",{"_index":18,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["extract",{"_index":63,"title":{},"content":{"4":{}},"tags":{}}],["facebook",{"_index":81,"title":{},"content":{},"tags":{"4":{}}}],["fals",{"_index":79,"title":{},"content":{"4":{}},"tags":{}}],["featur",{"_index":38,"title":{},"content":{"3":{},"4":{}},"tags":{}}],["file",{"_index":55,"title":{},"content":{"4":{}},"tags":{}}],["filenam",{"_index":64,"title":{},"content":{"4":{}},"tags":{}}],["first",{"_index":0,"title":{"1":{}},"content":{},"tags":{}}],["folder",{"_index":56,"title":{},"content":{"4":{}},"tags":{}}],["fusc",{"_index":15,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["hello",{"_index":34,"title":{},"content":{},"tags":{"2":{},"4":{}}}],["hola",{"_index":21,"title":{},"content":{},"tags":{"1":{}}}],["imag",{"_index":73,"title":{},"content":{"4":{}},"tags":{}}],["interact",{"_index":44,"title":{},"content":{"3":{}},"tags":{}}],["ipsum",{"_index":4,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["limit",{"_index":30,"title":{},"content":{"2":{}},"tags":{}}],["list",{"_index":32,"title":{},"content":{"2":{}},"tags":{}}],["locat",{"_index":72,"title":{},"content":{"4":{}},"tags":{}}],["long",{"_index":23,"title":{"2":{}},"content":{"2":{}},"tags":{}}],["lorem",{"_index":3,"title":{},"content":{"1":{},"2":{}},"tags":{}}],["markdown",{"_index":37,"title":{},"content":{"3":{},"4":{}},"tags":{}}],["mdx",{"_index":35,"title":{"3":{}},"content":{"3":{}},"tags":{}}],["me!.fullnode.dappnode:8545",{"_index":2702,"title":{},"content":{"359":{},"360":{}},"tags":{}}],["http://:14515",{"_index":2511,"title":{},"content":{"283":{}},"tags":{}}],["ipf",{"_index":521,"title":{"265":{},"266":{},"267":{}},"content":{"22":{},"37":{},"38":{},"40":{},"71":{},"72":{},"78":{},"169":{},"180":{},"265":{},"266":{},"267":{},"268":{},"335":{}},"tags":{}}],["ipfs.dnp.dappnode.eth",{"_index":659,"title":{},"content":{"72":{},"74":{}},"tags":{}}],["ipfs/qmwwmb3xhuch6jncf6m6eqza4mw9phhtg7rqafhdr2ofi8",{"_index":864,"title":{},"content":{"83":{}},"tags":{}}],["ipfs/qmyjtig7vjq6xsnujqqjvj7qamccawtrgndahsifofre7o",{"_index":867,"title":{},"content":{"83":{}},"tags":{}}],["ipfs/zdj7wweq43g6jjvlwqwzpyhuamq6uywrjkbxfad11ve2lhhq7",{"_index":869,"title":{},"content":{"83":{}},"tags":{}}],["iphone/ipadgo",{"_index":1516,"title":{},"content":{"135":{}},"tags":{}}],["iphone/ipadlaunch",{"_index":1579,"title":{},"content":{"146":{}},"tags":{}}],["ipsum",{"_index":385,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["ipv4",{"_index":1974,"title":{},"content":{"180":{}},"tags":{}}],["irur",{"_index":418,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["ish",{"_index":1119,"title":{},"content":{"38":{}},"tags":{}}],["isn't",{"_index":1907,"title":{},"content":{"176":{},"180":{},"296":{}},"tags":{}}],["iso",{"_index":2188,"title":{"219":{},"220":{},"221":{},"228":{},"345":{}},"content":{"219":{},"220":{},"221":{},"222":{},"223":{},"224":{},"228":{},"344":{},"354":{}},"tags":{}}],["isp",{"_index":1973,"title":{},"content":{"180":{}},"tags":{}}],["issu",{"_index":11,"title":{},"content":{"19":{},"25":{},"96":{},"100":{},"117":{},"132":{},"159":{},"163":{},"166":{},"176":{},"180":{},"187":{},"236":{},"262":{},"268":{}},"tags":{}}],["it'",{"_index":1420,"title":{},"content":{"116":{},"117":{},"119":{},"129":{},"132":{},"139":{},"143":{},"159":{},"172":{},"174":{},"178":{},"193":{},"197":{},"211":{},"229":{},"244":{},"260":{},"261":{},"262":{},"268":{},"283":{},"290":{},"292":{},"296":{},"300":{},"304":{},"305":{},"307":{},"310":{},"312":{},"315":{},"318":{},"321":{},"322":{},"324":{},"326":{},"350":{},"366":{}},"tags":{}}],["it'll",{"_index":1923,"title":{},"content":{"176":{},"210":{},"229":{}},"tags":{}}],["it?unsubscrib",{"_index":1332,"title":{},"content":{"107":{}},"tags":{}}],["item",{"_index":878,"title":{},"content":{"60":{},"68":{},"86":{},"87":{},"90":{},"92":{},"93":{},"95":{},"96":{},"97":{}},"tags":{}}],["iter",{"_index":1658,"title":{},"content":{"158":{}},"tags":{}}],["itself",{"_index":1736,"title":{},"content":{"162":{},"176":{},"200":{},"210":{},"295":{}},"tags":{}}],["it’",{"_index":1983,"title":{},"content":{"180":{}},"tags":{}}],["jan",{"_index":337,"title":{},"content":{"14":{}},"tags":{}}],["job",{"_index":502,"title":{},"content":{"22":{},"24":{},"210":{}},"tags":{}}],["john",{"_index":1900,"title":{},"content":{"175":{}},"tags":{}}],["johndoe@gmail.com",{"_index":1904,"title":{},"content":{"175":{}},"tags":{}}],["join",{"_index":472,"title":{"42":{},"313":{},"364":{}},"content":{"19":{},"41":{},"42":{},"282":{},"295":{},"296":{}},"tags":{}}],["journey",{"_index":1778,"title":{},"content":{"189":{},"240":{},"313":{},"316":{},"317":{},"320":{},"324":{},"325":{},"343":{},"349":{},"368":{}},"tags":{}}],["json",{"_index":757,"title":{},"content":{"57":{},"72":{},"80":{},"93":{},"316":{},"323":{},"367":{},"368":{}},"tags":{}}],["jsonschema",{"_index":1050,"title":{},"content":{"70":{}},"tags":{}}],["jul",{"_index":181,"title":{},"content":{"6":{},"14":{}},"tags":{}}],["juli",{"_index":313,"title":{},"content":{"14":{}},"tags":{}}],["jump",{"_index":899,"title":{},"content":{"90":{},"128":{}},"tags":{}}],["keep",{"_index":37,"title":{},"content":{"28":{},"103":{},"110":{},"172":{},"176":{},"203":{},"209":{},"210":{},"211":{},"213":{},"224":{},"236":{},"260":{},"269":{},"281":{},"282":{},"287":{},"292":{},"304":{},"315":{},"316":{},"322":{},"324":{},"350":{},"366":{},"368":{}},"tags":{}}],["kernel",{"_index":1829,"title":{},"content":{"169":{}},"tags":{}}],["key",{"_index":860,"title":{"256":{},"291":{},"295":{},"299":{},"306":{},"315":{},"322":{},"366":{}},"content":{"83":{},"87":{},"123":{},"148":{},"172":{},"186":{},"187":{},"210":{},"213":{},"222":{},"242":{},"256":{},"257":{},"276":{},"280":{},"281":{},"282":{},"300":{},"302":{},"305":{},"306":{},"307":{},"313":{},"315":{},"316":{},"320":{},"322":{},"323":{},"340":{},"364":{},"366":{},"367":{}},"tags":{}}],["keyboard",{"_index":1489,"title":{},"content":{"124":{},"193":{},"215":{}},"tags":{}}],["keygen",{"_index":1944,"title":{},"content":{"180":{},"315":{},"322":{},"366":{},"368":{}},"tags":{}}],["keystor",{"_index":702,"title":{},"content":{"72":{},"87":{},"180":{},"260":{},"299":{},"300":{},"306":{},"315":{},"316":{},"318":{},"322":{},"323":{},"326":{},"366":{},"367":{}},"tags":{}}],["keyword",{"_index":771,"title":{"97":{}},"content":{"72":{},"73":{},"97":{}},"tags":{}}],["kick",{"_index":60,"title":{},"content":{"28":{}},"tags":{}}],["kickstart",{"_index":2632,"title":{},"content":{"313":{}},"tags":{}}],["kind",{"_index":2408,"title":{},"content":{"260":{},"347":{}},"tags":{}}],["know",{"_index":1396,"title":{},"content":{"114":{},"129":{},"164":{},"167":{},"172":{},"345":{}},"tags":{}}],["knowledg",{"_index":2570,"title":{},"content":{"310":{},"339":{}},"tags":{}}],["known",{"_index":707,"title":{},"content":{"72":{},"79":{},"80":{},"86":{},"88":{},"96":{},"130":{},"138":{},"238":{},"244":{},"260":{},"274":{}},"tags":{}}],["label",{"_index":1601,"title":{},"content":{"164":{},"178":{},"206":{}},"tags":{}}],["labor",{"_index":397,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["labori",{"_index":409,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["laborum",{"_index":442,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["lack",{"_index":1629,"title":{},"content":{"151":{}},"tags":{}}],["land",{"_index":960,"title":{},"content":{"98":{}},"tags":{}}],["landscap",{"_index":2267,"title":{},"content":{"238":{}},"tags":{}}],["laptop",{"_index":1555,"title":{},"content":{"141":{},"193":{}},"tags":{}}],["larg",{"_index":1665,"title":{},"content":{"159":{},"186":{}},"tags":{}}],["last",{"_index":738,"title":{},"content":{"50":{},"72":{},"90":{},"107":{},"114":{},"168":{},"267":{},"305":{}},"tags":{}}],["later",{"_index":1273,"title":{},"content":{"54":{},"147":{},"275":{},"281":{},"282":{}},"tags":{}}],["latest",{"_index":504,"title":{"234":{}},"content":{"22":{},"24":{},"50":{},"72":{},"83":{},"200":{},"229":{},"234":{},"261":{},"268":{},"315":{},"322":{},"361":{},"366":{}},"tags":{}}],["launch",{"_index":107,"title":{"186":{}},"content":{"6":{},"30":{},"145":{},"146":{},"159":{},"161":{},"162":{},"181":{},"184":{},"185":{},"186":{},"187":{},"249":{},"273":{}},"tags":{}}],["launchpad",{"_index":2394,"title":{},"content":{"260":{},"304":{},"305":{},"306":{},"307":{},"316":{},"323":{},"367":{}},"tags":{}}],["law",{"_index":2335,"title":{},"content":{"247":{}},"tags":{}}],["layer",{"_index":1341,"title":{},"content":{"107":{},"269":{},"277":{},"278":{},"280":{},"298":{},"315":{},"322":{},"325":{},"366":{}},"tags":{}}],["lead",{"_index":1463,"title":{},"content":{"121":{},"132":{},"159":{},"173":{},"212":{}},"tags":{}}],["leak",{"_index":1860,"title":{},"content":{"172":{},"315":{},"322":{},"366":{}},"tags":{}}],["learn",{"_index":114,"title":{},"content":{"30":{},"41":{},"105":{},"138":{},"139":{},"212":{},"218":{},"310":{},"315":{},"322":{},"327":{},"366":{}},"tags":{}}],["leav",{"_index":718,"title":{},"content":{"72":{},"89":{},"211":{},"275":{}},"tags":{}}],["ledger",{"_index":2279,"title":{},"content":{"240":{}},"tags":{}}],["left",{"_index":1522,"title":{},"content":{"135":{},"164":{},"244":{}},"tags":{}}],["legaci",{"_index":2444,"title":{},"content":{"278":{}},"tags":{}}],["length",{"_index":891,"title":{},"content":{"87":{},"90":{},"93":{},"94":{},"95":{},"97":{},"99":{},"101":{}},"tags":{}}],["less",{"_index":1168,"title":{},"content":{"43":{},"138":{},"153":{},"199":{},"261":{}},"tags":{}}],["lessen",{"_index":2055,"title":{},"content":{"200":{}},"tags":{}}],["lesson",{"_index":2696,"title":{},"content":{"348":{}},"tags":{}}],["let'",{"_index":1298,"title":{},"content":{"50":{},"242":{},"244":{},"349":{}},"tags":{}}],["level",{"_index":1164,"title":{},"content":{"42":{},"132":{},"143":{},"209":{},"220":{}},"tags":{}}],["leverag",{"_index":624,"title":{},"content":{"34":{},"148":{},"153":{},"158":{},"249":{},"265":{},"277":{}},"tags":{}}],["li",{"_index":559,"title":{},"content":{"31":{}},"tags":{}}],["librari",{"_index":830,"title":{},"content":{"79":{}},"tags":{}}],["licens",{"_index":788,"title":{"101":{}},"content":{"72":{},"73":{},"101":{}},"tags":{}}],["lid",{"_index":2092,"title":{},"content":{"210":{},"211":{}},"tags":{}}],["lido",{"_index":1210,"title":{},"content":{"45":{}},"tags":{}}],["lifecycl",{"_index":897,"title":{},"content":{"89":{}},"tags":{}}],["lifetim",{"_index":1636,"title":{},"content":{"153":{}},"tags":{}}],["lift",{"_index":2107,"title":{},"content":{"211":{}},"tags":{}}],["lighhous",{"_index":2463,"title":{},"content":{"281":{},"286":{},"303":{}},"tags":{}}],["lighthous",{"_index":1938,"title":{},"content":{"180":{},"321":{}},"tags":{}}],["lightn",{"_index":944,"title":{},"content":{"96":{}},"tags":{}}],["lightweight",{"_index":890,"title":{},"content":{"87":{},"199":{}},"tags":{}}],["limit",{"_index":1425,"title":{"119":{}},"content":{"117":{},"119":{},"129":{},"148":{},"151":{},"172":{},"180":{},"199":{},"240":{}},"tags":{}}],["line",{"_index":1130,"title":{"40":{}},"content":{"40":{},"121":{},"217":{},"218":{},"322":{},"339":{}},"tags":{}}],["linear",{"_index":351,"title":{},"content":{"14":{},"72":{},"92":{}},"tags":{}}],["link",{"_index":773,"title":{"98":{}},"content":{"72":{},"73":{},"78":{},"88":{},"91":{},"98":{},"132":{},"133":{},"143":{},"159":{},"167":{},"174":{},"175":{},"176":{},"186":{},"187":{},"206":{},"274":{},"275":{},"278":{},"305":{},"315":{},"316":{},"322":{},"323":{},"366":{},"367":{}},"tags":{}}],["linux",{"_index":2060,"title":{},"content":{"202":{},"345":{}},"tags":{}}],["linux/amd64",{"_index":699,"title":{},"content":{"72":{},"86":{}},"tags":{}}],["linux/arm64",{"_index":700,"title":{},"content":{"72":{},"86":{}},"tags":{}}],["linuxcr",{"_index":1580,"title":{},"content":{"146":{}},"tags":{}}],["linuxopen",{"_index":1529,"title":{},"content":{"135":{}},"tags":{}}],["liquid",{"_index":65,"title":{"6":{},"7":{},"9":{}},"content":{"6":{},"9":{},"14":{},"28":{},"211":{},"285":{},"294":{},"295":{},"299":{}},"tags":{}}],["list",{"_index":1048,"title":{},"content":{"68":{},"104":{},"111":{},"126":{},"132":{},"143":{},"146":{},"176":{},"218":{},"243":{},"257":{},"261":{},"292":{},"296":{},"316":{},"351":{}},"tags":{}}],["listen",{"_index":925,"title":{},"content":{"93":{},"159":{}},"tags":{}}],["littl",{"_index":2517,"title":{},"content":{"291":{},"292":{},"299":{}},"tags":{}}],["live",{"_index":2678,"title":{},"content":{"327":{}},"tags":{}}],["lm",{"_index":180,"title":{},"content":{"6":{},"10":{}},"tags":{}}],["load",{"_index":1835,"title":{},"content":{"170":{},"218":{},"306":{}},"tags":{}}],["local",{"_index":962,"title":{"116":{},"117":{},"118":{},"140":{}},"content":{"40":{},"98":{},"116":{},"117":{},"119":{},"123":{},"129":{},"140":{},"143":{},"154":{},"158":{},"169":{},"180":{},"242":{},"260":{},"262":{},"268":{},"291":{},"324":{}},"tags":{}}],["local/remot",{"_index":1951,"title":{},"content":{"180":{}},"tags":{}}],["localhost:5002",{"_index":1085,"title":{},"content":{"37":{}},"tags":{}}],["localhost:8545",{"_index":1113,"title":{},"content":{"38":{}},"tags":{}}],["locat",{"_index":1548,"title":{},"content":{"140":{},"143":{},"154":{},"162":{},"176":{},"180":{},"186":{},"187":{},"202":{},"206":{},"211":{},"217":{},"243":{},"309":{},"319":{},"368":{}},"tags":{}}],["lock",{"_index":2065,"title":{},"content":{"202":{}},"tags":{}}],["lodestar",{"_index":1941,"title":{},"content":{"180":{},"281":{},"286":{},"303":{},"314":{},"321":{}},"tags":{}}],["log",{"_index":647,"title":{"111":{},"126":{},"207":{}},"content":{"34":{},"55":{},"102":{},"104":{},"111":{},"118":{},"120":{},"126":{},"127":{},"178":{},"180":{},"183":{},"260":{},"275":{},"276":{},"314":{},"321":{},"365":{}},"tags":{}}],["log_verbos",{"_index":593,"title":{},"content":{"33":{}},"tags":{}}],["logic",{"_index":2468,"title":{},"content":{"280":{},"302":{}},"tags":{}}],["login",{"_index":1892,"title":{},"content":{"174":{},"207":{},"208":{},"346":{}},"tags":{}}],["logo",{"_index":2429,"title":{},"content":{"268":{}},"tags":{}}],["long",{"_index":368,"title":{},"content":{"14":{},"67":{},"87":{},"103":{},"110":{},"115":{},"153":{},"176":{},"180":{},"314":{},"321":{},"326":{},"365":{}},"tags":{}}],["longer",{"_index":360,"title":{},"content":{"14":{},"50":{},"112":{},"115":{},"122":{},"176":{},"180":{}},"tags":{}}],["look",{"_index":564,"title":{},"content":{"32":{},"33":{},"50":{},"178":{},"180":{},"194":{},"210":{},"217":{},"244":{},"260":{},"307":{},"314":{},"350":{},"352":{},"365":{}},"tags":{}}],["loosen",{"_index":2104,"title":{},"content":{"211":{}},"tags":{}}],["lorem",{"_index":384,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["lose",{"_index":728,"title":{},"content":{"72":{},"89":{},"107":{},"125":{},"186":{},"202":{},"206":{},"229":{},"306":{},"315":{},"318":{},"322":{},"366":{}},"tags":{}}],["lost",{"_index":716,"title":{},"content":{"72":{},"89":{},"107":{},"125":{},"173":{},"176":{},"208":{}},"tags":{}}],["lot",{"_index":1212,"title":{},"content":{"45":{},"262":{}},"tags":{}}],["lotteri",{"_index":1190,"title":{"45":{}},"content":{"45":{}},"tags":{}}],["low",{"_index":1194,"title":{},"content":{"45":{},"128":{},"210":{},"313":{}},"tags":{}}],["lower",{"_index":2080,"title":{},"content":{"210":{},"260":{},"277":{},"315":{},"322":{},"366":{}},"tags":{}}],["lowest",{"_index":2553,"title":{},"content":{"294":{}},"tags":{}}],["lowpow",{"_index":2432,"title":{},"content":{"268":{}},"tags":{}}],["lp",{"_index":217,"title":{"8":{}},"content":{"8":{}},"tags":{}}],["lsd",{"_index":2535,"title":{},"content":{"294":{},"299":{},"300":{},"341":{}},"tags":{}}],["luck",{"_index":1162,"title":{"43":{}},"content":{"42":{},"43":{},"45":{}},"tags":{}}],["lucki",{"_index":1171,"title":{},"content":{"43":{}},"tags":{}}],["lucr",{"_index":2538,"title":{},"content":{"300":{}},"tags":{}}],["lukso",{"_index":1684,"title":{"362":{},"363":{},"364":{},"365":{},"366":{},"367":{},"368":{}},"content":{"159":{},"197":{},"339":{},"340":{},"341":{},"359":{},"362":{},"363":{},"364":{},"365":{},"366":{},"367":{},"368":{}},"tags":{}}],["lukso'",{"_index":2651,"title":{},"content":{"363":{}},"tags":{}}],["lyx",{"_index":2655,"title":{"367":{}},"content":{"364":{},"366":{},"367":{}},"tags":{}}],["machin",{"_index":1295,"title":{"50":{},"51":{}},"content":{"50":{},"51":{},"124":{},"129":{},"134":{},"140":{},"144":{},"147":{},"149":{},"150":{},"153":{},"159":{},"161":{},"162":{},"168":{},"186":{},"190":{},"192":{},"199":{},"202":{},"219":{},"221":{},"222":{},"224":{},"231":{},"233":{},"236":{},"262":{}},"tags":{}}],["maco",{"_index":1519,"title":{},"content":{"135":{}},"tags":{}}],["macosin",{"_index":1590,"title":{},"content":{"146":{}},"tags":{}}],["macoslaunch",{"_index":1517,"title":{},"content":{"135":{}},"tags":{}}],["made",{"_index":358,"title":{},"content":{"14":{},"129":{},"211":{},"249":{},"353":{}},"tags":{}}],["magic",{"_index":2590,"title":{},"content":{"314":{},"321":{},"363":{},"365":{}},"tags":{}}],["magna",{"_index":399,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["main",{"_index":525,"title":{"23":{},"35":{}},"content":{"24":{},"46":{},"53":{},"81":{},"94":{},"96":{},"105":{},"129":{},"147":{},"152":{},"162":{},"165":{},"213":{},"269":{},"277":{},"310":{},"313":{},"320":{},"364":{}},"tags":{}}],["main.yml",{"_index":526,"title":{"23":{}},"content":{"24":{}},"tags":{}}],["mainli",{"_index":1458,"title":{},"content":{"129":{}},"tags":{}}],["mainnet",{"_index":24,"title":{"8":{},"320":{},"358":{}},"content":{"6":{},"9":{},"12":{},"14":{},"27":{},"28":{},"39":{},"47":{},"72":{},"93":{},"159":{},"264":{},"275":{},"278":{},"280":{},"281":{},"285":{},"302":{},"304":{},"308":{},"310":{},"314":{},"315":{},"358":{},"359":{},"365":{},"366":{}},"tags":{}}],["mainservic",{"_index":688,"title":{"81":{}},"content":{"72":{},"73":{}},"tags":{}}],["mainstream",{"_index":2524,"title":{},"content":{"298":{}},"tags":{}}],["maintain",{"_index":1716,"title":{},"content":{"159":{},"167":{},"229":{},"239":{},"261":{},"265":{}},"tags":{}}],["mainten",{"_index":2056,"title":{"209":{}},"content":{"200":{},"236":{}},"tags":{}}],["major",{"_index":734,"title":{},"content":{"38":{},"45":{},"72":{},"90":{},"108":{},"140":{}},"tags":{}}],["make",{"_index":56,"title":{"114":{},"363":{}},"content":{"5":{},"28":{},"39":{},"57":{},"110":{},"112":{},"114":{},"147":{},"148":{},"157":{},"176":{},"177":{},"178":{},"180":{},"211":{},"217":{},"220":{},"222":{},"226":{},"229":{},"234":{},"244":{},"252":{},"262":{},"267":{},"268":{},"282":{},"283":{},"287":{},"292":{},"296":{},"300":{},"302":{},"306":{},"307":{},"311":{},"314":{},"315":{},"316":{},"318":{},"321":{},"322":{},"323":{},"324":{},"336":{},"339":{},"347":{},"365":{},"366":{},"367":{},"368":{}},"tags":{}}],["malici",{"_index":1394,"title":{},"content":{"114":{},"267":{},"342":{},"361":{}},"tags":{}}],["manag",{"_index":139,"title":{},"content":{"5":{},"17":{},"20":{},"38":{},"39":{},"40":{},"96":{},"102":{},"104":{},"120":{},"121":{},"136":{},"146":{},"159":{},"172":{},"218":{},"241":{},"256":{},"260":{},"272":{},"273":{},"274":{},"281":{},"282":{},"287":{},"291":{},"292":{},"295":{},"296":{},"302":{}},"tags":{}}],["mandatori",{"_index":622,"title":{},"content":{"34":{},"159":{}},"tags":{}}],["mani",{"_index":1733,"title":{},"content":{"162":{},"180":{},"229":{},"244":{},"315":{},"322":{},"366":{}},"tags":{}}],["manifest",{"_index":649,"title":{"71":{}},"content":{"38":{},"40":{},"71":{}},"tags":{}}],["manifest/issues/new",{"_index":935,"title":{},"content":{"96":{}},"tags":{}}],["manner",{"_index":2374,"title":{},"content":{"273":{}},"tags":{}}],["mantra",{"_index":2672,"title":{},"content":{"343":{}},"tags":{}}],["manual",{"_index":1314,"title":{"109":{}},"content":{"50":{},"109":{},"110":{},"112":{},"120":{},"161":{},"174":{},"176":{},"178":{},"179":{},"220":{}},"tags":{}}],["manualsubscript",{"_index":1313,"title":{},"content":{"50":{}},"tags":{}}],["manufactur",{"_index":2022,"title":{},"content":{"178":{},"222":{}},"tags":{}}],["map",{"_index":846,"title":{},"content":{"56":{},"62":{},"81":{},"82":{},"260":{}},"tags":{}}],["mark",{"_index":2273,"title":{},"content":{"240":{}},"tags":{}}],["markdown",{"_index":819,"title":{},"content":{"57":{},"58":{},"64":{},"77":{},"78":{},"88":{},"91":{}},"tags":{}}],["marketplac",{"_index":1746,"title":{"182":{}},"content":{"182":{},"183":{}},"tags":{}}],["master",{"_index":501,"title":{},"content":{"22":{},"24":{}},"tags":{}}],["match",{"_index":2361,"title":{},"content":{"257":{}},"tags":{}}],["matter",{"_index":1186,"title":{},"content":{"44":{},"241":{},"242":{}},"tags":{}}],["max_peer",{"_index":596,"title":{},"content":{"33":{}},"tags":{}}],["maxim",{"_index":1149,"title":{},"content":{"41":{},"42":{},"43":{},"244":{}},"tags":{}}],["maximum",{"_index":932,"title":{},"content":{"96":{},"199":{},"261":{},"295":{}},"tags":{}}],["mean",{"_index":353,"title":{},"content":{"14":{},"48":{},"54":{},"112":{},"115":{},"140":{},"159":{},"162":{},"180":{},"200":{},"218":{},"229":{},"241":{},"255":{},"261":{},"283":{},"304":{},"305":{},"318":{},"325":{},"346":{}},"tags":{}}],["meaning",{"_index":2294,"title":{},"content":{"242":{}},"tags":{}}],["meant",{"_index":1450,"title":{},"content":{"129":{},"350":{}},"tags":{}}],["meantim",{"_index":2256,"title":{},"content":{"250":{}},"tags":{}}],["measur",{"_index":1443,"title":{},"content":{"119":{},"176":{},"255":{}},"tags":{}}],["mechan",{"_index":146,"title":{},"content":{"5":{},"108":{},"250":{},"273":{}},"tags":{}}],["median",{"_index":1197,"title":{},"content":{"45":{}},"tags":{}}],["medium",{"_index":112,"title":{},"content":{"30":{},"240":{}},"tags":{}}],["meet",{"_index":1615,"title":{},"content":{"147":{},"155":{},"159":{},"362":{}},"tags":{}}],["member",{"_index":43,"title":{},"content":{"5":{},"13":{},"28":{},"29":{},"43":{},"103":{},"114":{}},"tags":{}}],["membership",{"_index":30,"title":{"28":{}},"content":{},"tags":{}}],["memori",{"_index":1738,"title":{},"content":{"162":{},"168":{},"170":{},"215":{}},"tags":{}}],["mention",{"_index":1245,"title":{},"content":{"48":{},"159":{},"187":{},"244":{},"282":{}},"tags":{}}],["menu",{"_index":1018,"title":{},"content":{"62":{},"68":{},"119":{},"135":{},"164":{},"180":{},"222":{},"256":{},"257":{},"264":{},"278":{},"281":{},"286":{},"292":{},"303":{},"309":{},"315":{},"318":{},"322":{},"326":{},"341":{},"366":{}},"tags":{}}],["mere",{"_index":79,"title":{},"content":{"28":{}},"tags":{}}],["merkl",{"_index":1239,"title":{},"content":{"47":{},"48":{}},"tags":{}}],["messag",{"_index":733,"title":{},"content":{"66":{},"72":{},"90":{},"91":{},"159":{},"187":{},"218":{},"275":{},"315":{},"318":{},"322":{},"326":{},"366":{},"368":{}},"tags":{}}],["met",{"_index":870,"title":{},"content":{"84":{}},"tags":{}}],["metadata",{"_index":655,"title":{},"content":{"71":{}},"tags":{}}],["metal",{"_index":2103,"title":{},"content":{"211":{}},"tags":{}}],["metamask",{"_index":2389,"title":{"360":{}},"content":{"276":{},"360":{}},"tags":{}}],["method",{"_index":1419,"title":{"227":{}},"content":{"116":{},"118":{},"121":{},"129":{},"132":{},"136":{},"143":{},"176":{},"196":{},"218":{},"220":{},"224":{},"227":{},"228":{},"229":{}},"tags":{}}],["metric",{"_index":946,"title":{"167":{},"168":{},"169":{},"170":{},"171":{},"173":{},"337":{}},"content":{"96":{},"167":{},"168":{},"169":{},"170":{},"171":{},"172":{},"173":{},"175":{},"176":{},"197":{},"213":{},"242":{},"244":{},"295":{},"337":{}},"tags":{}}],["metrics.dappnode.io/unregist",{"_index":1926,"title":{},"content":{"176":{}},"tags":{}}],["mev",{"_index":1147,"title":{"41":{},"45":{},"324":{}},"content":{"41":{},"42":{},"45":{},"107":{},"112":{},"180":{},"281":{},"286":{},"303":{},"321":{},"324":{}},"tags":{}}],["michael",{"_index":766,"title":{},"content":{"72":{},"95":{}},"tags":{}}],["middl",{"_index":2526,"title":{},"content":{"298":{}},"tags":{}}],["migrat",{"_index":739,"title":{},"content":{"72":{},"90":{},"180":{},"268":{}},"tags":{}}],["million",{"_index":189,"title":{},"content":{"6":{}},"tags":{}}],["mimic",{"_index":2571,"title":{},"content":{"310":{}},"tags":{}}],["min_sync_p",{"_index":595,"title":{},"content":{"33":{}},"tags":{}}],["mind",{"_index":1922,"title":{},"content":{"176":{},"209":{},"281":{},"282":{},"362":{}},"tags":{}}],["mine",{"_index":179,"title":{"6":{},"9":{}},"content":{"6":{},"9":{}},"tags":{}}],["minim",{"_index":403,"title":{},"content":{"15":{},"16":{},"107":{},"125":{},"156":{}},"tags":{}}],["minimum",{"_index":871,"title":{"226":{}},"content":{"84":{},"87":{},"90":{},"93":{},"94":{},"95":{},"97":{},"99":{},"101":{},"159":{},"180":{},"226":{},"250":{},"294":{},"350":{}},"tags":{}}],["minimumdappnodevers",{"_index":697,"title":{},"content":{"72":{},"84":{}},"tags":{}}],["minipool",{"_index":2515,"title":{"292":{}},"content":{"290":{},"291":{},"292":{}},"tags":{}}],["minor",{"_index":1105,"title":{},"content":{"38":{}},"tags":{}}],["minu",{"_index":1350,"title":{},"content":{"108":{}},"tags":{}}],["minut",{"_index":719,"title":{},"content":{"72":{},"89":{},"112":{},"114":{},"115":{},"159":{},"175":{},"180":{},"187":{},"194":{},"315":{},"322":{},"366":{}},"tags":{}}],["misguid",{"_index":1462,"title":{},"content":{"121":{}},"tags":{}}],["mishandl",{"_index":2075,"title":{},"content":{"209":{}},"tags":{}}],["miss",{"_index":1176,"title":{"44":{}},"content":{"50":{},"51":{},"170":{},"173":{},"229":{}},"tags":{}}],["mission",{"_index":28,"title":{"28":{}},"content":{"5":{},"28":{},"298":{}},"tags":{}}],["mitig",{"_index":2423,"title":{},"content":{"267":{}},"tags":{}}],["mkdir",{"_index":2163,"title":{},"content":{"217":{}},"tags":{}}],["mnemon",{"_index":2598,"title":{},"content":{"315":{},"322":{},"366":{}},"tags":{}}],["mobil",{"_index":1556,"title":{},"content":{"141":{},"143":{},"193":{}},"tags":{}}],["mode",{"_index":1002,"title":{},"content":{"58":{},"70":{},"169":{},"260":{},"268":{},"275":{},"306":{}},"tags":{}}],["model",{"_index":1743,"title":{},"content":{"162":{},"178":{},"250":{}},"tags":{}}],["modern",{"_index":1552,"title":{},"content":{"141":{}},"tags":{}}],["modif",{"_index":1761,"title":{},"content":{"186":{}},"tags":{}}],["modifi",{"_index":612,"title":{},"content":{"34":{},"82":{},"186":{},"187":{},"256":{},"260":{},"262":{}},"tags":{}}],["modul",{"_index":2355,"title":{},"content":{"256":{},"270":{}},"tags":{}}],["mollit",{"_index":438,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["moment",{"_index":1336,"title":{},"content":{"107":{},"263":{},"264":{},"316":{},"323":{},"367":{}},"tags":{}}],["monero",{"_index":841,"title":{"251":{},"252":{}},"content":{"80":{},"96":{},"252":{},"253":{}},"tags":{}}],["monero’",{"_index":2346,"title":{"253":{}},"content":{},"tags":{}}],["monitor",{"_index":945,"title":{"241":{},"244":{},"288":{},"336":{}},"content":{"50":{},"96":{},"124":{},"159":{},"167":{},"171":{},"172":{},"176":{},"193":{},"197":{},"212":{},"241":{},"242":{},"244":{},"288":{},"291":{},"292":{},"295":{},"296":{},"336":{}},"tags":{}}],["month",{"_index":193,"title":{},"content":{"6":{},"14":{},"162":{}},"tags":{}}],["monthli",{"_index":1638,"title":{},"content":{"153":{}},"tags":{}}],["monument",{"_index":2578,"title":{},"content":{"320":{}},"tags":{}}],["more",{"_index":115,"title":{"166":{}},"content":{"5":{},"14":{},"30":{},"33":{},"36":{},"37":{},"38":{},"40":{},"43":{},"47":{},"58":{},"64":{},"78":{},"105":{},"112":{},"114":{},"129":{},"138":{},"139":{},"147":{},"151":{},"154":{},"159":{},"166":{},"172":{},"183":{},"186":{},"187":{},"199":{},"210":{},"211":{},"218":{},"220":{},"244":{},"250":{},"280":{},"281":{},"282":{},"288":{},"296":{},"302":{},"305":{},"315":{},"317":{},"321":{},"322":{},"325":{},"327":{},"341":{},"342":{},"364":{},"366":{}},"tags":{}}],["moreov",{"_index":2305,"title":{},"content":{"242":{},"262":{}},"tags":{}}],["mortem",{"_index":17,"title":{},"content":{"25":{}},"tags":{}}],["mount",{"_index":2161,"title":{},"content":{"217":{}},"tags":{}}],["mountpoint",{"_index":1009,"title":{},"content":{"62":{},"217":{},"275":{}},"tags":{}}],["mous",{"_index":1998,"title":{},"content":{"193":{},"244":{}},"tags":{}}],["move",{"_index":2119,"title":{},"content":{"211":{},"217":{},"307":{}},"tags":{}}],["mozilla",{"_index":910,"title":{},"content":{"92":{}},"tags":{}}],["much",{"_index":980,"title":{},"content":{"43":{},"44":{},"45":{},"57":{},"105":{},"152":{},"153":{},"154":{},"159":{},"210":{},"212":{},"243":{},"262":{},"353":{}},"tags":{}}],["multi",{"_index":843,"title":{},"content":{"62":{},"81":{}},"tags":{}}],["multichain",{"_index":2531,"title":{},"content":{"298":{}},"tags":{}}],["multilin",{"_index":991,"title":{},"content":{"58":{},"64":{}},"tags":{}}],["multipl",{"_index":605,"title":{},"content":{"33":{},"49":{},"55":{},"62":{},"86":{},"132":{},"260":{},"287":{},"290":{}},"tags":{}}],["mv",{"_index":2174,"title":{},"content":{"217":{}},"tags":{}}],["my.dappnod",{"_index":1449,"title":{},"content":{"129":{}},"tags":{}}],["myth",{"_index":2078,"title":{},"content":{"210":{}},"tags":{}}],["n",{"_index":1074,"title":{},"content":{"36":{},"38":{},"226":{}},"tags":{}}],["n\\nwith",{"_index":674,"title":{},"content":{"72":{},"78":{}},"tags":{}}],["nakamoto",{"_index":2265,"title":{},"content":{"238":{}},"tags":{}}],["name",{"_index":494,"title":{"74":{}},"content":{"22":{},"24":{},"58":{},"62":{},"65":{},"72":{},"73":{},"74":{},"87":{},"93":{},"94":{},"95":{},"98":{},"132":{},"143":{},"146":{},"165":{},"185":{},"186":{},"194":{},"275":{},"359":{}},"tags":{}}],["namedvolumemountpoint",{"_index":1006,"title":{},"content":{"62":{}},"tags":{}}],["nano",{"_index":1581,"title":{},"content":{"146":{}},"tags":{}}],["nat",{"_index":2021,"title":{},"content":{"178":{}},"tags":{}}],["nativ",{"_index":2368,"title":{},"content":{"272":{},"317":{}},"tags":{}}],["natur",{"_index":933,"title":{},"content":{"45":{},"96":{},"240":{},"253":{}},"tags":{}}],["navig",{"_index":455,"title":{"182":{},"189":{},"309":{}},"content":{"17":{},"41":{},"119":{},"132":{},"133":{},"135":{},"143":{},"164":{},"174":{},"175":{},"176":{},"178":{},"183":{},"195":{},"244":{},"268":{},"275":{},"292":{},"296":{},"315":{},"316":{},"318":{},"319":{},"322":{},"323":{},"326":{},"360":{},"366":{},"367":{}},"tags":{}}],["nd",{"_index":1108,"title":{},"content":{"38":{}},"tags":{}}],["nearli",{"_index":1779,"title":{},"content":{"166":{}},"tags":{}}],["necessari",{"_index":650,"title":{"314":{},"321":{},"365":{}},"content":{"36":{},"71":{},"84":{},"159":{},"175":{},"185":{},"186":{},"223":{},"305":{},"313":{},"316":{},"320":{},"323":{},"364":{},"367":{},"368":{}},"tags":{}}],["necessit",{"_index":2377,"title":{},"content":{"274":{}},"tags":{}}],["need",{"_index":55,"title":{},"content":{"28":{},"29":{},"34":{},"38":{},"55":{},"102":{},"107":{},"119":{},"120":{},"129":{},"132":{},"136":{},"140":{},"141":{},"143":{},"147":{},"149":{},"151":{},"155":{},"158":{},"159":{},"162":{},"163":{},"167":{},"173":{},"180":{},"185":{},"186":{},"193":{},"199":{},"202":{},"206":{},"218":{},"220":{},"224":{},"226":{},"229":{},"231":{},"233":{},"255":{},"260":{},"261":{},"262":{},"263":{},"265":{},"267":{},"270":{},"281":{},"282":{},"283":{},"286":{},"287":{},"302":{},"303":{},"304":{},"305":{},"306":{},"309":{},"313":{},"315":{},"316":{},"317":{},"318":{},"320":{},"321":{},"322":{},"323":{},"325":{},"334":{},"339":{},"340":{},"341":{},"343":{},"345":{},"353":{},"358":{},"360":{},"361":{},"364":{},"366":{},"367":{},"368":{}},"tags":{}}],["need?assum",{"_index":1954,"title":{},"content":{"180":{}},"tags":{}}],["need?th",{"_index":1674,"title":{},"content":{"159":{}},"tags":{}}],["needed?set",{"_index":1691,"title":{},"content":{"159":{}},"tags":{}}],["neglig",{"_index":2481,"title":{},"content":{"304":{}},"tags":{}}],["nethermind",{"_index":1934,"title":{},"content":{"180":{},"274":{},"275":{},"281":{},"286":{},"303":{},"321":{}},"tags":{}}],["network",{"_index":363,"title":{"239":{},"250":{}},"content":{"14":{},"41":{},"44":{},"96":{},"116":{},"117":{},"118":{},"119":{},"122":{},"123":{},"129":{},"136":{},"139":{},"140":{},"143":{},"154":{},"156":{},"159":{},"160":{},"164":{},"165":{},"170":{},"172":{},"175":{},"178":{},"179":{},"180":{},"186":{},"194":{},"197":{},"229":{},"239":{},"240":{},"241":{},"242":{},"249":{},"250":{},"253":{},"260":{},"263":{},"265":{},"266":{},"267":{},"269":{},"272":{},"273":{},"280":{},"282":{},"283":{},"291":{},"294":{},"296":{},"299":{},"302":{},"310":{},"313":{},"318":{},"321":{},"322":{},"326":{},"342":{},"359":{},"360":{},"364":{},"367":{}},"tags":{}}],["network'",{"_index":2053,"title":{},"content":{"199":{},"339":{}},"tags":{}}],["network=prat",{"_index":645,"title":{},"content":{"34":{}},"tags":{}}],["network’",{"_index":2269,"title":{},"content":{"239":{}},"tags":{}}],["never",{"_index":1309,"title":{},"content":{"50":{},"153":{}},"tags":{}}],["nevertheless",{"_index":2357,"title":{},"content":{"256":{},"315":{},"322":{},"366":{}},"tags":{}}],["new",{"_index":212,"title":{"205":{}},"content":{"6":{},"17":{},"21":{},"34":{},"36":{},"37":{},"38":{},"39":{},"40":{},"72":{},"78":{},"87":{},"96":{},"118":{},"132":{},"135":{},"143":{},"149":{},"165":{},"185":{},"186":{},"187":{},"196":{},"200":{},"205":{},"217":{},"242":{},"244":{},"256":{},"285":{},"305":{},"310":{},"315":{},"321":{},"322":{},"366":{}},"tags":{}}],["newbot",{"_index":1748,"title":{},"content":{"185":{}},"tags":{}}],["newcomm",{"_index":2711,"title":{},"content":{"353":{}},"tags":{}}],["newer",{"_index":1539,"title":{},"content":{"138":{}},"tags":{}}],["newest",{"_index":1794,"title":{},"content":{"167":{},"172":{}},"tags":{}}],["next",{"_index":1020,"title":{"197":{}},"content":{"40":{},"42":{},"50":{},"62":{},"102":{},"109":{},"113":{},"120":{},"134":{},"144":{},"186":{},"187":{},"197":{},"217":{},"232":{},"272":{},"282":{},"304":{},"305":{},"316":{},"318":{},"323":{},"346":{},"362":{},"367":{}},"tags":{}}],["nft",{"_index":1182,"title":{},"content":{"44":{}},"tags":{}}],["nfura",{"_index":1114,"title":{},"content":{"38":{}},"tags":{}}],["nicer",{"_index":1045,"title":{},"content":{"66":{}},"tags":{}}],["nimbu",{"_index":1940,"title":{},"content":{"180":{},"281":{},"286":{},"303":{},"321":{}},"tags":{}}],["nisi",{"_index":410,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["nmap",{"_index":2027,"title":{},"content":{"179":{}},"tags":{}}],["nobodi",{"_index":1879,"title":{},"content":{"172":{},"315":{},"322":{},"366":{}},"tags":{}}],["node",{"_index":19,"title":{"11":{},"12":{},"239":{},"262":{},"263":{},"266":{},"267":{},"271":{},"275":{},"278":{},"282":{},"288":{},"300":{},"310":{},"330":{},"349":{},"357":{},"358":{},"359":{}},"content":{"5":{},"6":{},"9":{},"10":{},"12":{},"13":{},"14":{},"25":{},"27":{},"28":{},"29":{},"72":{},"76":{},"78":{},"80":{},"96":{},"151":{},"154":{},"156":{},"159":{},"168":{},"180":{},"199":{},"213":{},"224":{},"229":{},"239":{},"240":{},"247":{},"250":{},"253":{},"261":{},"262":{},"263":{},"264":{},"265":{},"266":{},"267":{},"268":{},"272":{},"273":{},"275":{},"276":{},"278":{},"280":{},"281":{},"283":{},"285":{},"286":{},"287":{},"288":{},"291":{},"292":{},"298":{},"299":{},"300":{},"302":{},"303":{},"304":{},"305":{},"308":{},"310":{},"321":{},"324":{},"339":{},"340":{},"344":{},"349":{},"352":{},"354":{},"357":{},"358":{},"359":{},"360":{},"361":{},"368":{}},"tags":{}}],["node'",{"_index":2403,"title":{},"content":{"260":{}},"tags":{}}],["node/eth",{"_index":199,"title":{},"content":{"6":{},"7":{}},"tags":{}}],["node_cpu_seconds_tot",{"_index":1796,"title":{},"content":{"168":{}},"tags":{}}],["node_disk_io_time_seconds_tot",{"_index":1806,"title":{},"content":{"168":{}},"tags":{}}],["node_disk_reads_completed_tot",{"_index":1808,"title":{},"content":{"168":{}},"tags":{}}],["node_disk_writes_completed_tot",{"_index":1809,"title":{},"content":{"168":{}},"tags":{}}],["node_filesystem_free_byt",{"_index":1813,"title":{},"content":{"168":{}},"tags":{}}],["node_filesystem_size_byt",{"_index":1812,"title":{},"content":{"168":{}},"tags":{}}],["node_memory_buffers_byt",{"_index":1803,"title":{},"content":{"168":{}},"tags":{}}],["node_memory_cached_byt",{"_index":1805,"title":{},"content":{"168":{}},"tags":{}}],["node_memory_memfree_byt",{"_index":1802,"title":{},"content":{"168":{}},"tags":{}}],["node_memory_memtotal_byt",{"_index":1801,"title":{},"content":{"168":{}},"tags":{}}],["nodedrop",{"_index":275,"title":{"13":{},"15":{}},"content":{"13":{},"14":{}},"tags":{}}],["nodestak",{"_index":382,"title":{},"content":{"14":{}},"tags":{}}],["nodestream",{"_index":303,"title":{"14":{},"16":{}},"content":{"14":{}},"tags":{}}],["nomin",{"_index":121,"title":{},"content":{"30":{}},"tags":{}}],["non",{"_index":432,"title":{},"content":{"15":{},"16":{},"48":{},"87":{},"353":{}},"tags":{}}],["normal",{"_index":1000,"title":{},"content":{"58":{},"68":{},"115":{}},"tags":{}}],["nostrud",{"_index":406,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["notabl",{"_index":608,"title":{"34":{}},"content":{},"tags":{}}],["note",{"_index":630,"title":{},"content":{"34":{},"50":{},"87":{},"122":{},"136":{},"167":{},"170":{},"171":{},"190":{},"206":{},"229":{},"263":{},"358":{}},"tags":{}}],["noth",{"_index":2688,"title":{},"content":{"345":{}},"tags":{}}],["notic",{"_index":1145,"title":{},"content":{"40":{},"236":{}},"tags":{}}],["notif",{"_index":1861,"title":{"174":{},"175":{},"201":{}},"content":{"172":{},"173":{},"174":{},"175":{},"176":{},"201":{},"213":{}},"tags":{}}],["notifi",{"_index":1856,"title":{},"content":{"172":{},"337":{}},"tags":{}}],["notification?ther",{"_index":1914,"title":{},"content":{"176":{}},"tags":{}}],["notsubscrib",{"_index":1302,"title":{},"content":{"50":{}},"tags":{}}],["novel",{"_index":87,"title":{},"content":{"29":{}},"tags":{}}],["now",{"_index":1222,"title":{},"content":{"45":{},"120":{},"133":{},"147":{},"180":{},"197":{},"203":{},"222":{},"233":{},"244":{},"260":{},"282":{},"298":{},"314":{},"315":{},"318":{},"322":{},"326":{},"327":{},"347":{},"350":{},"366":{},"368":{}},"tags":{}}],["npm",{"_index":840,"title":{},"content":{"80":{}},"tags":{}}],["npmjs.com/package/timestr",{"_index":1092,"title":{},"content":{"37":{},"38":{}},"tags":{}}],["npx",{"_index":507,"title":{},"content":{"22":{},"24":{},"36":{},"37":{},"38":{}},"tags":{}}],["nuc",{"_index":2152,"title":{},"content":{"213":{}},"tags":{}}],["nuc'",{"_index":2110,"title":{},"content":{"211":{},"213":{}},"tags":{}}],["nulla",{"_index":426,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["number",{"_index":921,"title":{},"content":{"36":{},"37":{},"38":{},"40":{},"45":{},"93":{},"170":{},"174":{},"179":{},"180":{},"205":{},"226":{},"260":{},"280":{},"282":{},"302":{},"306":{},"307":{},"316":{}},"tags":{}}],["numer",{"_index":853,"title":{},"content":{"82":{},"148":{}},"tags":{}}],["nurtur",{"_index":2628,"title":{},"content":{"312":{}},"tags":{}}],["nutshel",{"_index":1873,"title":{},"content":{"172":{}},"tags":{}}],["nvme",{"_index":1958,"title":{},"content":{"180":{},"226":{}},"tags":{}}],["o",{"_index":1143,"title":{},"content":{"40":{},"231":{},"232":{},"234":{}},"tags":{}}],["object",{"_index":795,"title":{},"content":{"60":{},"70":{},"73":{},"83":{},"84":{},"85":{},"87":{},"89":{},"90":{},"91":{},"92":{},"93":{},"98":{},"99":{},"100":{}},"tags":{}}],["obligatori",{"_index":1376,"title":{},"content":{"112":{}},"tags":{}}],["obol",{"_index":2466,"title":{"301":{}},"content":{"302":{},"303":{},"304":{},"305":{},"306":{},"307":{}},"tags":{}}],["obol'",{"_index":2467,"title":{},"content":{"302":{},"304":{},"305":{}},"tags":{}}],["obscur",{"_index":2342,"title":{},"content":{"252":{}},"tags":{}}],["obtain",{"_index":1498,"title":{},"content":{"132":{},"133":{},"134":{},"135":{},"143":{},"144":{},"145":{},"146":{},"156":{},"159":{},"187":{},"188":{},"305":{}},"tags":{}}],["occaecat",{"_index":430,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["occur",{"_index":1848,"title":{},"content":{"170":{},"172":{}},"tags":{}}],["oct",{"_index":341,"title":{},"content":{"14":{}},"tags":{}}],["odd",{"_index":1976,"title":{},"content":{"180":{}},"tags":{}}],["off",{"_index":2455,"title":{},"content":{"269":{}},"tags":{}}],["offchain",{"_index":1246,"title":{},"content":{"48":{}},"tags":{}}],["offer",{"_index":943,"title":{"259":{}},"content":{"42":{},"96":{},"136":{},"141":{},"148":{},"155":{},"160":{},"167":{},"172":{},"177":{},"186":{},"238":{},"244":{},"247":{},"260":{},"267":{},"272":{},"305":{},"310":{},"327":{},"339":{},"348":{}},"tags":{}}],["offic",{"_index":1568,"title":{},"content":{"143":{}},"tags":{}}],["offici",{"_index":2006,"title":{},"content":{"190":{},"203":{},"224":{},"244":{},"263":{},"267":{},"268":{},"296":{},"300":{},"323":{},"367":{}},"tags":{}}],["officia",{"_index":436,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["offlin",{"_index":1857,"title":{},"content":{"172":{},"201":{},"229":{},"368":{}},"tags":{}}],["ok",{"_index":1997,"title":{},"content":{"180":{}},"tags":{}}],["old",{"_index":888,"title":{},"content":{"87":{}},"tags":{}}],["omit",{"_index":646,"title":{},"content":{"34":{}},"tags":{}}],["on",{"_index":828,"title":{},"content":{"45":{},"47":{},"49":{},"52":{},"62":{},"79":{},"80":{},"81":{},"86":{},"96":{},"102":{},"112":{},"114":{},"120":{},"124":{},"125":{},"129":{},"134":{},"140":{},"144":{},"167":{},"172":{},"180":{},"186":{},"210":{},"244":{},"257":{},"260":{},"264":{},"268":{},"278":{},"280":{},"282":{},"302":{},"304":{},"314":{},"321":{},"323":{},"347":{},"365":{}},"tags":{}}],["onboard",{"_index":1477,"title":{},"content":{"122":{},"124":{}},"tags":{}}],["onc",{"_index":1036,"title":{},"content":{"48":{},"55":{},"62":{},"103":{},"104":{},"112":{},"114":{},"127":{},"128":{},"134":{},"135":{},"143":{},"145":{},"146":{},"165":{},"176":{},"178":{},"180":{},"186":{},"187":{},"188":{},"189":{},"208":{},"224":{},"233":{},"282":{},"292":{},"296":{},"304":{},"314":{},"317":{},"318":{},"321":{},"325":{},"326":{},"334":{},"365":{}},"tags":{}}],["onchain",{"_index":1232,"title":{},"content":{"46":{},"47":{}},"tags":{}}],["one):lighthous",{"_index":2634,"title":{},"content":{"314":{}},"tags":{}}],["one):lukso",{"_index":2656,"title":{},"content":{"365":{}},"tags":{}}],["one):nethermind",{"_index":2633,"title":{},"content":{"314":{}},"tags":{}}],["one):prysm",{"_index":2657,"title":{},"content":{"365":{}},"tags":{}}],["oninstal",{"_index":710,"title":{},"content":{"72":{},"89":{}},"tags":{}}],["onion:9090",{"_index":1930,"title":{},"content":{"176":{}},"tags":{}}],["onlin",{"_index":2023,"title":{},"content":{"179":{},"226":{},"280":{},"302":{},"315":{},"322":{},"366":{}},"tags":{}}],["onremov",{"_index":730,"title":{},"content":{"72":{},"89":{}},"tags":{}}],["onreset",{"_index":723,"title":{},"content":{"72":{},"89":{}},"tags":{}}],["onto",{"_index":2136,"title":{},"content":{"212":{}},"tags":{}}],["onupd",{"_index":713,"title":{},"content":{"72":{},"89":{}},"tags":{}}],["op",{"_index":2439,"title":{},"content":{"278":{}},"tags":{}}],["open",{"_index":474,"title":{"326":{}},"content":{"19":{},"46":{},"72":{},"89":{},"96":{},"118":{},"122":{},"133":{},"135":{},"159":{},"164":{},"166":{},"174":{},"178":{},"179":{},"180":{},"187":{},"189":{},"195":{},"210":{},"218":{},"249":{},"283":{},"315":{},"320":{},"322":{},"366":{},"368":{}},"tags":{}}],["openvpn",{"_index":735,"title":{"130":{},"131":{},"133":{},"134":{},"135":{},"139":{}},"content":{"72":{},"90":{},"129":{},"130":{},"132":{},"133":{},"134":{},"135":{},"136":{},"139":{},"146":{},"197":{}},"tags":{}}],["oper",{"_index":135,"title":{"282":{},"287":{},"330":{}},"content":{"5":{},"45":{},"114":{},"129":{},"135":{},"159":{},"162":{},"163":{},"169":{},"172":{},"177":{},"188":{},"202":{},"212":{},"219":{},"230":{},"239":{},"261":{},"263":{},"265":{},"267":{},"272":{},"273":{},"278":{},"280":{},"281":{},"282":{},"283":{},"285":{},"287":{},"288":{},"291":{},"299":{},"300":{},"302":{},"304":{},"305":{},"306":{},"307":{},"308":{},"310":{},"312":{}},"tags":{}}],["operator'",{"_index":2464,"title":{},"content":{"282":{},"286":{},"305":{}},"tags":{}}],["oppen",{"_index":2101,"title":{},"content":{"211":{}},"tags":{}}],["opportun",{"_index":44,"title":{"324":{}},"content":{"28":{},"42":{},"157":{},"229":{},"239":{},"250":{},"310":{},"320":{}},"tags":{}}],["opt",{"_index":1365,"title":{},"content":{"109":{},"223":{},"265":{},"268":{}},"tags":{}}],["opt/teku/bin/teku",{"_index":644,"title":{},"content":{"34":{}},"tags":{}}],["optim",{"_index":1704,"title":{"277":{},"278":{}},"content":{"159":{},"177":{},"180":{},"186":{},"205":{},"210":{},"212":{},"213":{},"224":{},"269":{},"277":{},"278":{},"280":{}},"tags":{}}],["optimism’",{"_index":2449,"title":{},"content":{"278":{}},"tags":{}}],["optimist",{"_index":2435,"title":{},"content":{"269":{},"277":{}},"tags":{}}],["option",{"_index":793,"title":{"40":{},"185":{}},"content":{"36":{},"37":{},"38":{},"40":{},"60":{},"62":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"73":{},"76":{},"77":{},"78":{},"80":{},"81":{},"82":{},"83":{},"84":{},"85":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"93":{},"94":{},"95":{},"96":{},"97":{},"98":{},"99":{},"100":{},"120":{},"132":{},"143":{},"146":{},"148":{},"156":{},"159":{},"160":{},"165":{},"173":{},"178":{},"180":{},"184":{},"186":{},"187":{},"199":{},"213":{},"229":{},"257":{},"260":{},"262":{},"265":{},"266":{},"275":{},"280":{},"281":{},"286":{},"303":{},"304":{},"305":{},"307":{},"314":{},"315":{},"321":{},"322":{},"348":{},"365":{},"366":{},"368":{}},"tags":{}}],["oracl",{"_index":1226,"title":{"48":{}},"content":{"46":{},"47":{},"48":{},"50":{},"105":{},"108":{},"114":{},"298":{}},"tags":{}}],["order",{"_index":376,"title":{},"content":{"14":{},"72":{},"89":{},"128":{},"147":{},"172":{},"173":{},"175":{},"209":{},"261":{},"275":{},"282":{},"335":{}},"tags":{}}],["organ",{"_index":125,"title":{},"content":{"5":{},"96":{},"244":{}},"tags":{}}],["origin",{"_index":2276,"title":{},"content":{"240":{},"247":{}},"tags":{}}],["os",{"_index":1752,"title":{},"content":{"186":{},"188":{},"221":{},"226":{}},"tags":{}}],["other",{"_index":1382,"title":{},"content":{"112":{},"272":{},"304":{}},"tags":{}}],["otherwis",{"_index":2208,"title":{},"content":{"222":{},"275":{},"278":{}},"tags":{}}],["otterscan",{"_index":2586,"title":{},"content":{"321":{}},"tags":{}}],["out",{"_index":318,"title":{},"content":{"14":{},"41":{},"115":{},"118":{},"170":{},"173":{},"197":{},"202":{},"212":{},"218":{},"244":{},"260":{},"267":{},"268":{},"278":{},"327":{},"351":{}},"tags":{}}],["outag",{"_index":1653,"title":{},"content":{"156":{},"280":{},"302":{}},"tags":{}}],["outdat",{"_index":5,"title":{},"content":{"25":{},"115":{}},"tags":{}}],["outlet",{"_index":2008,"title":{},"content":{"177":{}},"tags":{}}],["output",{"_index":1066,"title":{},"content":{"36":{},"37":{},"38":{},"40":{},"187":{}},"tags":{}}],["outsid",{"_index":1456,"title":{},"content":{"123":{},"129":{},"143":{},"179":{},"197":{},"211":{}},"tags":{}}],["over",{"_index":1169,"title":{"229":{}},"content":{"43":{},"50":{},"102":{},"120":{},"129":{},"148":{},"159":{},"212":{},"219":{},"220":{},"240":{},"244":{},"260":{},"266":{},"273":{},"307":{},"312":{}},"tags":{}}],["overal",{"_index":1701,"title":{},"content":{"159":{},"162":{},"170":{},"239":{}},"tags":{}}],["overcom",{"_index":1864,"title":{},"content":{"172":{}},"tags":{}}],["overh",{"_index":2096,"title":{},"content":{"211":{}},"tags":{}}],["overlay",{"_index":1870,"title":{},"content":{"172":{}},"tags":{}}],["overrid",{"_index":1087,"title":{},"content":{"37":{},"38":{}},"tags":{}}],["overse",{"_index":2558,"title":{},"content":{"296":{}},"tags":{}}],["overview",{"_index":673,"title":{"50":{},"225":{},"269":{},"290":{},"294":{},"298":{},"349":{}},"content":{"72":{},"78":{},"167":{},"354":{}},"tags":{}}],["overwrit",{"_index":1077,"title":{},"content":{"36":{}},"tags":{}}],["overwritt",{"_index":1106,"title":{},"content":{"38":{}},"tags":{}}],["ovpn",{"_index":1510,"title":{},"content":{"133":{},"135":{}},"tags":{}}],["own",{"_index":1346,"title":{},"content":{"108":{}},"tags":{}}],["owner",{"_index":2506,"title":{},"content":{"282":{}},"tags":{}}],["p",{"_index":1082,"title":{},"content":{"37":{},"38":{}},"tags":{}}],["p2p_port",{"_index":588,"title":{},"content":{"33":{}},"tags":{}}],["pace",{"_index":2682,"title":{},"content":{"327":{}},"tags":{}}],["pack",{"_index":1139,"title":{},"content":{"40":{}},"tags":{}}],["packag",{"_index":450,"title":{"20":{},"71":{},"253":{},"254":{},"255":{},"258":{},"259":{},"279":{},"284":{},"291":{},"295":{},"299":{},"301":{},"314":{},"321":{},"365":{}},"content":{"17":{},"20":{},"23":{},"31":{},"34":{},"35":{},"37":{},"38":{},"39":{},"40":{},"56":{},"57":{},"62":{},"71":{},"72":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"83":{},"84":{},"86":{},"87":{},"89":{},"90":{},"92":{},"94":{},"95":{},"96":{},"97":{},"98":{},"112":{},"167":{},"168":{},"169":{},"170":{},"172":{},"176":{},"180":{},"234":{},"241":{},"242":{},"243":{},"244":{},"255":{},"256":{},"257":{},"260":{},"261":{},"265":{},"266":{},"268":{},"275":{},"280":{},"281":{},"282":{},"285":{},"286":{},"287":{},"291":{},"292":{},"296":{},"302":{},"303":{},"304":{},"305":{},"306":{},"313":{},"315":{},"320":{},"321":{},"322":{},"364":{},"366":{}},"tags":{}}],["package'",{"_index":861,"title":{},"content":{"62":{},"83":{},"85":{},"89":{},"99":{},"101":{},"180":{},"242":{},"255":{},"260":{},"281":{},"282":{},"287":{},"305":{},"306":{},"307":{}},"tags":{}}],["package.png",{"_index":984,"title":{},"content":{"57":{}},"tags":{}}],["package.public.dappnode.eth",{"_index":983,"title":{},"content":{"57":{}},"tags":{}}],["package/repo",{"_index":1125,"title":{},"content":{"39":{}},"tags":{}}],["packages/react",{"_index":784,"title":{},"content":{"72":{},"99":{}},"tags":{}}],["page",{"_index":1052,"title":{},"content":{"35":{},"133":{},"162":{},"172":{},"184":{},"207":{},"208":{},"315":{},"319":{},"322":{},"341":{},"366":{}},"tags":{}}],["page](https://ipfs.io/#whi",{"_index":671,"title":{},"content":{"72":{},"78":{}},"tags":{}}],["paid",{"_index":2671,"title":{},"content":{"342":{}},"tags":{}}],["pair",{"_index":1754,"title":{},"content":{"186":{},"187":{}},"tags":{}}],["panel",{"_index":1448,"title":{},"content":{"129":{}},"tags":{}}],["paper",{"_index":2606,"title":{},"content":{"315":{},"322":{},"366":{}},"tags":{}}],["par",{"_index":1223,"title":{},"content":{"45":{}},"tags":{}}],["parallel",{"_index":2438,"title":{},"content":{"278":{}},"tags":{}}],["paramet",{"_index":2379,"title":{},"content":{"275":{}},"tags":{}}],["paramount",{"_index":2618,"title":{},"content":{"324":{}},"tags":{}}],["pariatur",{"_index":427,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["pars",{"_index":855,"title":{},"content":{"61":{},"82":{}},"tags":{}}],["part",{"_index":380,"title":{},"content":{"14":{},"79":{},"213":{},"260":{},"315":{},"318":{},"322":{},"326":{},"366":{},"368":{}},"tags":{}}],["parti",{"_index":2051,"title":{},"content":{"199":{}},"tags":{}}],["particip",{"_index":96,"title":{"156":{}},"content":{"14":{},"29":{},"45":{},"51":{},"53":{},"96":{},"103":{},"107":{},"108":{},"110":{},"156":{},"239":{},"250":{},"272":{},"273":{},"275":{},"283":{},"290":{},"291":{},"304":{},"305":{},"313":{},"320":{},"342":{}},"tags":{}}],["particular",{"_index":1877,"title":{},"content":{"172":{},"298":{}},"tags":{}}],["particularli",{"_index":2356,"title":{},"content":{"256":{}},"tags":{}}],["partit",{"_index":2164,"title":{},"content":{"217":{}},"tags":{}}],["pass",{"_index":852,"title":{},"content":{"82":{},"223":{}},"tags":{}}],["passphras",{"_index":1042,"title":{},"content":{"65":{}},"tags":{}}],["passport",{"_index":2653,"title":{},"content":{"363":{}},"tags":{}}],["password",{"_index":711,"title":{"202":{}},"content":{"65":{},"72":{},"87":{},"89":{},"119":{},"122":{},"123":{},"124":{},"133":{},"143":{},"164":{},"165":{},"178":{},"194":{},"196":{},"202":{},"205":{},"206":{},"207":{},"208":{},"218":{},"286":{},"315":{},"322":{},"366":{}},"tags":{}}],["password:whil",{"_index":2002,"title":{},"content":{"196":{}},"tags":{}}],["password?go",{"_index":2044,"title":{},"content":{"208":{}},"tags":{}}],["password?to",{"_index":2001,"title":{},"content":{"196":{}},"tags":{}}],["password?visit",{"_index":2042,"title":{},"content":{"208":{}},"tags":{}}],["past",{"_index":1508,"title":{"212":{}},"content":{"133":{},"143":{},"146":{},"174":{},"212":{},"240":{},"327":{}},"tags":{}}],["pat",{"_index":1101,"title":{},"content":{"38":{}},"tags":{}}],["patch",{"_index":539,"title":{},"content":{"24":{},"38":{}},"tags":{}}],["path",{"_index":533,"title":{"190":{}},"content":{"24":{},"62":{},"72":{},"87":{},"178":{},"190":{}},"tags":{}}],["pathway",{"_index":2567,"title":{},"content":{"308":{}},"tags":{}}],["patienc",{"_index":2593,"title":{},"content":{"314":{},"321":{},"365":{}},"tags":{}}],["patient",{"_index":2624,"title":{},"content":{"326":{}},"tags":{}}],["pattern",{"_index":993,"title":{"66":{}},"content":{"58":{},"60":{},"62":{},"66":{},"67":{}},"tags":{}}],["patternerrormessag",{"_index":998,"title":{"67":{}},"content":{"58":{},"60":{},"66":{},"67":{}},"tags":{}}],["pause/restart",{"_index":2396,"title":{},"content":{"260":{}},"tags":{}}],["pave",{"_index":2566,"title":{},"content":{"308":{}},"tags":{}}],["pay",{"_index":1742,"title":{},"content":{"162":{},"176":{},"300":{},"317":{},"319":{}},"tags":{}}],["payment",{"_index":947,"title":{},"content":{"96":{},"114":{}},"tags":{}}],["payout",{"_index":988,"title":{},"content":{"58":{},"63":{},"64":{}},"tags":{}}],["payout_address",{"_index":986,"title":{},"content":{"58":{},"62":{}},"tags":{}}],["payoutaddress",{"_index":985,"title":{},"content":{"58":{},"61":{}},"tags":{}}],["peak",{"_index":1184,"title":{},"content":{"44":{}},"tags":{}}],["peek",{"_index":1845,"title":{},"content":{"170":{}},"tags":{}}],["peer",{"_index":1703,"title":{},"content":{"159":{},"170":{},"178":{},"268":{},"275":{}},"tags":{}}],["penalti",{"_index":1300,"title":{},"content":{"50":{},"229":{},"300":{}},"tags":{}}],["pend",{"_index":1271,"title":{},"content":{"50":{},"54":{},"107":{},"108":{},"125":{},"128":{},"323":{}},"tags":{}}],["peopl",{"_index":459,"title":{},"content":{"17":{},"283":{},"304":{}},"tags":{}}],["per",{"_index":229,"title":{},"content":{"10":{},"22":{},"43":{},"44":{},"96":{},"162":{},"281":{},"282":{},"318":{}},"tags":{}}],["percentag",{"_index":228,"title":{},"content":{"10":{},"14":{}},"tags":{}}],["perfect",{"_index":1671,"title":{},"content":{"159":{},"310":{}},"tags":{}}],["perform",{"_index":1553,"title":{},"content":{"141":{},"150":{},"159":{},"170":{},"172":{},"177":{},"180":{},"186":{},"197":{},"201":{},"210":{},"211":{},"212":{},"219":{},"224":{},"236":{},"241":{},"242":{},"244":{},"280":{},"288":{},"292":{},"295":{},"296":{},"304":{},"305":{},"307":{},"311":{}},"tags":{}}],["period",{"_index":308,"title":{},"content":{"14":{},"44":{},"153":{},"211":{}},"tags":{}}],["peripheri",{"_index":2530,"title":{},"content":{"298":{}},"tags":{}}],["perman",{"_index":2076,"title":{},"content":{"209":{}},"tags":{}}],["permiss",{"_index":832,"title":{},"content":{"79":{},"187":{},"282":{},"287":{}},"tags":{}}],["permissionless",{"_index":2684,"title":{},"content":{"335":{}},"tags":{}}],["person",{"_index":2262,"title":{},"content":{"238":{},"272":{},"346":{}},"tags":{}}],["perspect",{"_index":2302,"title":{},"content":{"242":{}},"tags":{}}],["phone'",{"_index":1999,"title":{},"content":{"193":{}},"tags":{}}],["phrase",{"_index":2599,"title":{},"content":{"315":{},"322":{},"366":{},"368":{}},"tags":{}}],["physic",{"_index":1488,"title":{"124":{},"152":{}},"content":{"147":{},"148":{},"149":{},"150":{},"151":{},"152":{},"153":{},"206":{}},"tags":{}}],["pick",{"_index":2082,"title":{},"content":{"210":{}},"tags":{}}],["piec",{"_index":88,"title":{},"content":{"29":{},"321":{}},"tags":{}}],["pin",{"_index":522,"title":{},"content":{"22":{}},"tags":{}}],["pinata",{"_index":524,"title":{},"content":{"22":{}},"tags":{}}],["pinata_api_key",{"_index":512,"title":{},"content":{"22":{}},"tags":{}}],["pinata_secret_api_key",{"_index":514,"title":{},"content":{"22":{}},"tags":{}}],["pioneer",{"_index":2260,"title":{"238":{}},"content":{},"tags":{}}],["place",{"_index":1362,"title":{},"content":{"104":{},"152":{},"210":{},"211":{},"283":{},"304":{},"315":{},"322":{},"366":{}},"tags":{}}],["plain",{"_index":957,"title":{},"content":{"98":{}},"tags":{}}],["plaintext",{"_index":1560,"title":{},"content":{"143":{}},"tags":{}}],["plan",{"_index":13,"title":{},"content":{"25":{},"102":{},"120":{},"153":{},"159":{},"162":{},"185":{},"186":{}},"tags":{}}],["plate",{"_index":2127,"title":{},"content":{"212":{}},"tags":{}}],["platform",{"_index":177,"title":{},"content":{"5":{},"145":{},"160":{},"249":{},"273":{},"294":{},"310":{},"320":{}},"tags":{}}],["play",{"_index":1058,"title":{},"content":{"35":{},"43":{},"177":{},"178":{},"226":{},"253":{}},"tags":{}}],["pleas",{"_index":14,"title":{},"content":{"18":{},"25":{},"72":{},"90":{},"96":{},"102":{},"112":{},"120":{},"143":{},"163":{},"172":{},"176":{},"177":{},"180":{},"282":{},"306":{},"316":{},"318":{},"323":{},"326":{},"340":{},"341":{},"367":{}},"tags":{}}],["plu",{"_index":2503,"title":{},"content":{"281":{}},"tags":{}}],["plug",{"_index":1491,"title":{},"content":{"124":{},"177":{},"178":{},"193":{},"222":{},"226":{}},"tags":{}}],["plugin",{"_index":877,"title":{},"content":{"86":{}},"tags":{}}],["po",{"_index":2580,"title":{},"content":{"320":{}},"tags":{}}],["point",{"_index":1359,"title":{},"content":{"103":{},"110":{},"199":{},"211":{},"300":{},"314":{},"321":{},"365":{}},"tags":{}}],["pois",{"_index":116,"title":{},"content":{"30":{}},"tags":{}}],["pool",{"_index":67,"title":{"7":{},"41":{}},"content":{"6":{},"7":{},"14":{},"28":{},"41":{},"42":{},"43":{},"45":{},"46":{},"47":{},"48":{},"50":{},"51":{},"53":{},"54":{},"108":{},"114":{},"290":{},"295":{},"296":{},"298":{},"341":{}},"tags":{}}],["pop",{"_index":902,"title":{},"content":{"91":{}},"tags":{}}],["popular",{"_index":1793,"title":{},"content":{"167":{},"312":{}},"tags":{}}],["port",{"_index":585,"title":{},"content":{"33":{},"56":{},"62":{},"72":{},"80":{},"82":{},"93":{},"123":{},"124":{},"159":{},"178":{},"179":{},"180":{},"186":{},"260":{},"283":{},"361":{}},"tags":{}}],["portion",{"_index":2669,"title":{},"content":{"342":{}},"tags":{}}],["portmap",{"_index":1005,"title":{},"content":{"62":{}},"tags":{}}],["portnumb",{"_index":1024,"title":{},"content":{"62":{}},"tags":{}}],["portnumber}/{protocol",{"_index":1025,"title":{},"content":{"62":{}},"tags":{}}],["posit",{"_index":2115,"title":{},"content":{"211":{},"240":{},"313":{}},"tags":{}}],["possibl",{"_index":1061,"title":{},"content":{"36":{},"37":{},"38":{},"39":{},"43":{},"48":{},"49":{},"50":{},"105":{},"128":{},"132":{},"136":{},"186":{},"257":{},"294":{}},"tags":{}}],["post",{"_index":16,"title":{},"content":{"25":{},"30":{},"34":{},"212":{},"224":{},"268":{},"368":{}},"tags":{}}],["postgr",{"_index":1980,"title":{},"content":{"180":{}},"tags":{}}],["potenti",{"_index":210,"title":{},"content":{"6":{},"42":{},"121":{},"123":{},"159":{},"190":{},"212":{},"240":{},"255":{},"268":{},"296":{}},"tags":{}}],["pow",{"_index":2574,"title":{},"content":{"311":{},"320":{}},"tags":{}}],["power",{"_index":74,"title":{"177":{}},"content":{"28":{},"124":{},"156":{},"158":{},"159":{},"160":{},"177":{},"193":{},"212":{},"229":{},"239":{},"262":{},"272":{},"285":{}},"tags":{}}],["pr",{"_index":625,"title":{},"content":{"34":{}},"tags":{}}],["practic",{"_index":1485,"title":{},"content":{"123":{},"203":{},"213":{},"244":{},"282":{},"308":{},"310":{}},"tags":{}}],["prais",{"_index":1545,"title":{},"content":{"139":{}},"tags":{}}],["prater",{"_index":2701,"title":{},"content":{"359":{}},"tags":{}}],["pre",{"_index":142,"title":{"23":{}},"content":{"5":{},"23":{},"129":{},"147":{},"161":{},"186":{},"220":{},"244":{},"256":{}},"tags":{}}],["precis",{"_index":2284,"title":{},"content":{"241":{}},"tags":{}}],["predat",{"_index":2445,"title":{},"content":{"278":{}},"tags":{}}],["predefin",{"_index":953,"title":{},"content":{"98":{},"223":{}},"tags":{}}],["prefer",{"_index":1537,"title":{},"content":{"136":{},"140":{},"159":{},"213":{},"220":{},"223":{},"256":{}},"tags":{}}],["preinstal",{"_index":2421,"title":{},"content":{"266":{}},"tags":{}}],["prepar",{"_index":1413,"title":{},"content":{"128":{},"221":{}},"tags":{}}],["prerequisit",{"_index":2224,"title":{"231":{}},"content":{"231":{}},"tags":{}}],["present",{"_index":299,"title":{},"content":{"13":{},"72":{},"91":{},"220":{},"223":{},"244":{},"250":{},"282":{}},"tags":{}}],["preserv",{"_index":1863,"title":{"246":{}},"content":{"172":{},"175":{},"246":{},"247":{},"260":{},"277":{}},"tags":{}}],["press",{"_index":1912,"title":{},"content":{"176":{},"207":{},"222":{},"276":{}},"tags":{}}],["pretti",{"_index":1635,"title":{},"content":{"153":{},"210":{}},"tags":{}}],["prevent",{"_index":1392,"title":{},"content":{"114":{},"118":{},"170":{},"211":{}},"tags":{}}],["previou",{"_index":1078,"title":{},"content":{"36":{},"116":{},"133":{},"135":{},"315":{},"322":{},"323":{},"366":{},"367":{}},"tags":{}}],["price",{"_index":1731,"title":{"162":{}},"content":{"162":{}},"tags":{}}],["pride",{"_index":2555,"title":{},"content":{"295":{}},"tags":{}}],["primari",{"_index":1497,"title":{},"content":{"132":{},"136":{},"143":{},"155":{},"227":{},"265":{}},"tags":{}}],["primarili",{"_index":1441,"title":{},"content":{"119":{},"242":{}},"tags":{}}],["principl",{"_index":2324,"title":{"246":{}},"content":{"246":{},"247":{},"291":{}},"tags":{}}],["print",{"_index":2178,"title":{},"content":{"218":{}},"tags":{}}],["prior",{"_index":2499,"title":{},"content":{"307":{}},"tags":{}}],["priorit",{"_index":2539,"title":{},"content":{"296":{},"300":{}},"tags":{}}],["privaci",{"_index":1788,"title":{"252":{}},"content":{"167":{},"170":{},"172":{},"175":{},"197":{},"213":{},"242":{},"252":{},"253":{},"273":{},"349":{},"361":{}},"tags":{}}],["privat",{"_index":1534,"title":{},"content":{"136":{},"167":{},"172":{},"174":{},"175":{},"242":{},"249":{},"272":{},"276":{},"280":{},"302":{},"306":{},"337":{}},"tags":{}}],["proactiv",{"_index":1364,"title":{},"content":{"109":{}},"tags":{}}],["probabl",{"_index":1902,"title":{},"content":{"175":{}},"tags":{}}],["problem",{"_index":1715,"title":{},"content":{"159":{},"234":{}},"tags":{}}],["proce",{"_index":1466,"title":{},"content":{"121":{},"184":{},"207":{},"209":{},"223":{},"244":{},"306":{}},"tags":{}}],["proceed",{"_index":2637,"title":{},"content":{"316":{}},"tags":{}}],["process",{"_index":169,"title":{},"content":{"5":{},"35":{},"48":{},"109":{},"110":{},"113":{},"114":{},"115":{},"120":{},"122":{},"128":{},"161":{},"188":{},"198":{},"211":{},"220":{},"222":{},"229":{},"243":{},"257":{},"260":{},"262":{},"286":{},"292":{},"296":{},"300":{},"305":{},"310":{},"311":{},"314":{},"315":{},"317":{},"319":{},"321":{},"322":{},"323":{},"325":{},"343":{},"344":{},"345":{},"357":{},"365":{},"366":{},"367":{}},"tags":{}}],["processor",{"_index":1962,"title":{},"content":{"180":{}},"tags":{}}],["prod",{"_index":2450,"title":{},"content":{"278":{}},"tags":{}}],["produc",{"_index":2085,"title":{},"content":{"210":{}},"tags":{}}],["product",{"_index":2582,"title":{},"content":{"320":{}},"tags":{}}],["profession",{"_index":2073,"title":{},"content":{"209":{}},"tags":{}}],["profil",{"_index":1578,"title":{},"content":{"146":{},"208":{},"218":{},"363":{}},"tags":{}}],["profit",{"_index":2560,"title":{},"content":{"296":{},"315":{},"322":{},"366":{}},"tags":{}}],["program",{"_index":130,"title":{},"content":{"5":{},"6":{},"99":{},"178":{},"322":{}},"tags":{}}],["progress",{"_index":2614,"title":{},"content":{"316":{},"323":{},"367":{}},"tags":{}}],["prohibit",{"_index":93,"title":{},"content":{"29":{}},"tags":{}}],["proident",{"_index":433,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["project",{"_index":47,"title":{"30":{}},"content":{"17":{},"20":{},"28":{},"30":{},"36":{},"53":{}},"tags":{}}],["project'",{"_index":173,"title":{},"content":{"5":{}},"tags":{}}],["project’",{"_index":967,"title":{},"content":{"100":{}},"tags":{}}],["prometheu",{"_index":1917,"title":{},"content":{"176":{},"242":{}},"tags":{}}],["promot",{"_index":150,"title":{},"content":{"5":{},"51":{},"280":{}},"tags":{}}],["prompt",{"_index":1120,"title":{"223":{}},"content":{"38":{},"118":{},"122":{},"124":{},"178":{},"208":{},"220":{},"223":{},"323":{},"346":{}},"tags":{}}],["proof",{"_index":2034,"title":{"339":{}},"content":{"197":{},"250":{},"285":{},"320":{},"339":{}},"tags":{}}],["properli",{"_index":724,"title":{},"content":{"72":{},"89":{},"211":{},"217":{},"300":{},"305":{}},"tags":{}}],["properti",{"_index":791,"title":{"73":{}},"content":{"57":{},"60":{},"61":{},"62":{},"66":{},"69":{},"70":{},"73":{},"79":{},"80":{},"83":{},"84":{},"85":{},"86":{},"87":{},"89":{},"90":{},"91":{},"92":{},"93":{},"96":{},"98":{},"99":{},"100":{}},"tags":{}}],["proport",{"_index":75,"title":{},"content":{"28":{}},"tags":{}}],["propos",{"_index":100,"title":{},"content":{"29":{},"43":{},"44":{},"45":{},"46":{},"47":{},"48":{},"50":{},"51":{},"53":{},"54":{},"102":{},"103":{},"104":{},"107":{},"108":{},"109":{},"110":{},"114":{},"120":{},"125":{},"313":{},"321":{},"324":{}},"tags":{}}],["proposalmiss",{"_index":1311,"title":{},"content":{"50":{}},"tags":{}}],["proposalok",{"_index":1310,"title":{},"content":{"50":{}},"tags":{}}],["proposalwrongfe",{"_index":1312,"title":{},"content":{"50":{}},"tags":{}}],["protect",{"_index":1444,"title":{},"content":{"119":{},"159":{},"170":{},"172":{},"202":{},"315":{},"322":{},"366":{}},"tags":{}}],["protocol",{"_index":1026,"title":{"249":{}},"content":{"62":{},"130":{},"138":{},"139":{},"141":{},"260":{},"285":{},"288":{},"298":{},"299":{},"300":{}},"tags":{}}],["prove",{"_index":2350,"title":{},"content":{"255":{}},"tags":{}}],["provid",{"_index":64,"title":{},"content":{"5":{},"14":{},"19":{},"28":{},"37":{},"38":{},"69":{},"70":{},"116":{},"121":{},"129":{},"132":{},"133":{},"140":{},"143":{},"147":{},"155":{},"157":{},"159":{},"160":{},"162":{},"166":{},"172":{},"173":{},"175":{},"176":{},"185":{},"186":{},"187":{},"206":{},"213":{},"220":{},"223":{},"228":{},"236":{},"239":{},"244":{},"256":{},"260":{},"267":{},"272":{},"273":{},"282":{},"285":{},"292":{},"294":{},"295":{},"296":{},"299":{},"310":{},"352":{},"353":{},"360":{}},"tags":{}}],["provis",{"_index":213,"title":{"7":{}},"content":{"159":{}},"tags":{}}],["proxi",{"_index":1418,"title":{"116":{},"117":{},"118":{}},"content":{"116":{},"117":{},"119":{},"129":{},"180":{},"319":{}},"tags":{}}],["proxim",{"_index":1569,"title":{},"content":{"143":{}},"tags":{}}],["prysm",{"_index":1937,"title":{},"content":{"180":{},"281":{},"286":{},"303":{},"321":{},"368":{}},"tags":{}}],["ps",{"_index":2212,"title":{},"content":{"224":{}},"tags":{}}],["pseudonym",{"_index":2263,"title":{},"content":{"238":{}},"tags":{}}],["ption",{"_index":1144,"title":{},"content":{"40":{}},"tags":{}}],["publ",{"_index":1118,"title":{},"content":{"38":{}},"tags":{}}],["public",{"_index":919,"title":{},"content":{"39":{},"93":{},"249":{},"260":{},"278":{},"281":{},"282":{},"283":{},"298":{},"305":{}},"tags":{}}],["public.dappnode.eth",{"_index":1129,"title":{},"content":{"39":{}},"tags":{}}],["publicli",{"_index":963,"title":{},"content":{"99":{}},"tags":{}}],["publish",{"_index":529,"title":{"38":{}},"content":{"23":{},"24":{},"35":{},"38":{},"39":{},"40":{},"199":{}},"tags":{}}],["pull",{"_index":489,"title":{},"content":{"21":{},"24":{}},"tags":{}}],["pull_request",{"_index":530,"title":{},"content":{"24":{}},"tags":{}}],["purchas",{"_index":282,"title":{},"content":{"13":{},"149":{},"157":{},"190":{}},"tags":{}}],["purpos",{"_index":147,"title":{"51":{}},"content":{"5":{},"77":{},"87":{},"96":{},"129":{},"159":{},"286":{}},"tags":{}}],["push",{"_index":499,"title":{},"content":{"22":{},"24":{}},"tags":{}}],["put",{"_index":1880,"title":{},"content":{"172":{},"211":{},"304":{},"350":{}},"tags":{}}],["qo",{"_index":2237,"title":{},"content":{"235":{}},"tags":{}}],["qr",{"_index":1562,"title":{},"content":{"143":{},"146":{}},"tags":{}}],["queri",{"_index":2068,"title":{},"content":{"203":{},"321":{}},"tags":{}}],["question",{"_index":469,"title":{},"content":{"19":{},"36":{},"170":{},"209":{},"283":{},"307":{},"353":{}},"tags":{}}],["queu",{"_index":2623,"title":{},"content":{"318":{},"326":{}},"tags":{}}],["queue",{"_index":2621,"title":{},"content":{"318":{},"325":{},"326":{}},"tags":{}}],["qui",{"_index":405,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["quick",{"_index":1587,"title":{},"content":{"146":{}},"tags":{}}],["quicker",{"_index":2416,"title":{},"content":{"262":{}},"tags":{}}],["quickli",{"_index":815,"title":{},"content":{"77":{},"115":{},"149":{},"151":{},"158":{},"161":{}},"tags":{}}],["r",{"_index":2233,"title":{},"content":{"233":{}},"tags":{}}],["ra",{"_index":1084,"title":{},"content":{"37":{}},"tags":{}}],["raiden",{"_index":949,"title":{},"content":{"96":{}},"tags":{}}],["rais",{"_index":2087,"title":{},"content":{"210":{}},"tags":{}}],["ram",{"_index":1668,"title":{},"content":{"159":{},"180":{},"215":{},"226":{},"241":{},"242":{}},"tags":{}}],["rang",{"_index":862,"title":{},"content":{"83":{},"90":{},"159":{},"160":{},"186":{},"197":{},"244":{},"280":{},"299":{}},"tags":{}}],["rank",{"_index":285,"title":{},"content":{"13":{}},"tags":{}}],["raspberri",{"_index":2159,"title":{},"content":{"217":{}},"tags":{}}],["rate",{"_index":1576,"title":{},"content":{"145":{}},"tags":{}}],["raw",{"_index":2293,"title":{},"content":{"242":{}},"tags":{}}],["rawdatabot",{"_index":1751,"title":{},"content":{"185":{}},"tags":{}}],["re",{"_index":208,"title":{},"content":{"6":{}},"tags":{}}],["reach",{"_index":1201,"title":{},"content":{"45":{},"118":{},"170":{},"325":{}},"tags":{}}],["read",{"_index":111,"title":{},"content":{"30":{},"72":{},"78":{},"90":{},"105":{},"168":{},"199":{},"261":{},"305":{},"323":{},"367":{}},"tags":{}}],["readabl",{"_index":924,"title":{},"content":{"93":{}},"tags":{}}],["readi",{"_index":528,"title":{},"content":{"23":{},"108":{},"112":{},"177":{},"184":{},"197":{},"203":{},"207":{},"272":{},"282":{},"304":{},"315":{},"322":{},"345":{},"366":{}},"tags":{}}],["readm",{"_index":959,"title":{},"content":{"98":{}},"tags":{}}],["readme.md",{"_index":535,"title":{},"content":{"24":{}},"tags":{}}],["real",{"_index":1659,"title":{},"content":{"158":{},"242":{},"310":{}},"tags":{}}],["realli",{"_index":1424,"title":{},"content":{"117":{},"265":{}},"tags":{}}],["realm",{"_index":2577,"title":{},"content":{"320":{},"362":{}},"tags":{}}],["reason",{"_index":1631,"title":{},"content":{"152":{},"159":{},"199":{},"262":{}},"tags":{}}],["reasons:th",{"_index":1399,"title":{},"content":{"115":{}},"tags":{}}],["reattach",{"_index":2139,"title":{},"content":{"212":{}},"tags":{}}],["reboot",{"_index":2202,"title":{"233":{}},"content":{"222":{},"224":{},"233":{}},"tags":{}}],["recap",{"_index":2507,"title":{},"content":{"282":{}},"tags":{}}],["receiv",{"_index":377,"title":{},"content":{"14":{},"47":{},"50":{},"51":{},"52":{},"54":{},"103":{},"114":{},"159":{},"173":{},"174":{},"175":{},"176":{},"187":{},"197":{},"252":{},"272":{},"285":{},"315":{},"316":{},"321":{},"322":{},"323":{},"366":{},"367":{}},"tags":{}}],["recent",{"_index":1526,"title":{},"content":{"135":{}},"tags":{}}],["reciev",{"_index":1263,"title":{},"content":{"53":{},"172":{}},"tags":{}}],["recipi",{"_index":279,"title":{"103":{},"110":{}},"content":{"13":{},"14":{},"50":{},"102":{},"103":{},"107":{},"109":{},"110":{},"112":{},"113":{},"115":{},"120":{},"128":{},"300":{}},"tags":{}}],["recogn",{"_index":1596,"title":{},"content":{"163":{}},"tags":{}}],["recomend",{"_index":2154,"title":{},"content":{"213":{}},"tags":{}}],["recommend",{"_index":461,"title":{"138":{},"215":{}},"content":{"17":{},"87":{},"104":{},"105":{},"115":{},"125":{},"128":{},"132":{},"143":{},"159":{},"173":{},"175":{},"180":{},"200":{},"206":{},"210":{},"221":{},"226":{},"229":{},"230":{},"242":{},"262":{},"266":{},"274":{},"275":{},"310":{},"315":{},"322":{},"334":{},"366":{}},"tags":{}}],["reconcil",{"_index":2436,"title":{},"content":{"277":{}},"tags":{}}],["reconnect",{"_index":720,"title":{},"content":{"72":{},"89":{},"159":{},"187":{}},"tags":{}}],["record",{"_index":2670,"title":{},"content":{"342":{}},"tags":{}}],["recov",{"_index":1423,"title":{},"content":{"117":{}},"tags":{}}],["recoveri",{"_index":1422,"title":{"206":{}},"content":{"117":{},"129":{},"206":{},"207":{},"208":{},"368":{}},"tags":{}}],["recreat",{"_index":2605,"title":{},"content":{"315":{},"322":{},"366":{}},"tags":{}}],["red",{"_index":2400,"title":{},"content":{"260":{}},"tags":{}}],["redcard",{"_index":1269,"title":{},"content":{"50":{},"54":{}},"tags":{}}],["redistribut",{"_index":2367,"title":{},"content":{"272":{}},"tags":{}}],["reduc",{"_index":1160,"title":{},"content":{"42":{},"149":{},"199":{},"212":{},"269":{},"273":{},"315":{},"322":{},"366":{}},"tags":{}}],["refer",{"_index":15,"title":{"56":{},"73":{}},"content":{"25":{},"92":{},"121":{},"178":{},"186":{},"188":{},"203":{},"224":{},"300":{},"318":{},"340":{},"358":{}},"tags":{}}],["reference](https://docs.ipfs.io/reference/api/http",{"_index":686,"title":{},"content":{"72":{},"78":{}},"tags":{}}],["reflect",{"_index":1338,"title":{},"content":{"107":{},"112":{},"115":{}},"tags":{}}],["refresh",{"_index":721,"title":{},"content":{"72":{},"89":{},"315":{},"322":{},"366":{}},"tags":{}}],["regain",{"_index":2039,"title":{},"content":{"206":{},"208":{}},"tags":{}}],["regardless",{"_index":1688,"title":{},"content":{"159":{},"190":{},"313":{}},"tags":{}}],["regener",{"_index":2600,"title":{},"content":{"315":{},"322":{},"366":{}},"tags":{}}],["regex",{"_index":1016,"title":{},"content":{"62":{},"66":{},"67":{}},"tags":{}}],["region",{"_index":1740,"title":{},"content":{"162":{},"184":{}},"tags":{}}],["regist",{"_index":1370,"title":{"204":{},"205":{},"282":{},"287":{}},"content":{"112":{},"115":{},"118":{},"175":{},"176":{},"205":{},"282":{},"283":{},"287":{},"305":{},"316":{},"323":{},"367":{}},"tags":{}}],["registered?email",{"_index":1910,"title":{},"content":{"176":{}},"tags":{}}],["registr",{"_index":1921,"title":{},"content":{"176":{},"206":{},"208":{},"282":{}},"tags":{}}],["registri",{"_index":1127,"title":{},"content":{"39":{}},"tags":{}}],["regul",{"_index":2617,"title":{},"content":{"324":{}},"tags":{}}],["regular",{"_index":801,"title":{},"content":{"75":{},"84":{},"346":{}},"tags":{}}],["regularli",{"_index":2069,"title":{},"content":{"203":{}},"tags":{}}],["relat",{"_index":158,"title":{},"content":{"5":{},"24":{},"46":{},"47":{},"71":{},"92":{},"98":{},"168":{},"169":{},"170":{},"197":{},"236":{},"244":{},"260":{},"268":{},"352":{}},"tags":{}}],["relationship",{"_index":118,"title":{},"content":{"30":{}},"tags":{}}],["relay",{"_index":1371,"title":{"113":{}},"content":{"112":{},"113":{},"115":{},"172":{},"180":{},"324":{}},"tags":{}}],["releas",{"_index":482,"title":{"23":{},"256":{}},"content":{"20":{},"23":{},"24":{},"34":{},"38":{},"40":{},"200":{},"211":{},"256":{},"315":{},"322":{},"366":{}},"tags":{}}],["release_type=[typ",{"_index":1098,"title":{},"content":{"38":{}},"tags":{}}],["relev",{"_index":607,"title":{},"content":{"33":{},"72":{},"88":{},"89":{},"97":{},"244":{}},"tags":{}}],["reli",{"_index":1883,"title":{},"content":{"173":{},"199":{},"229":{},"261":{}},"tags":{}}],["reliabl",{"_index":1496,"title":{},"content":{"130":{},"139":{},"143":{},"155":{},"158":{},"249":{},"250":{},"256":{}},"tags":{}}],["relianc",{"_index":1161,"title":{},"content":{"42":{}},"tags":{}}],["reload",{"_index":1415,"title":{},"content":{"128":{}},"tags":{}}],["reluct",{"_index":1784,"title":{},"content":{"167":{}},"tags":{}}],["remain",{"_index":1878,"title":{},"content":{"172":{},"175":{},"176":{},"229":{},"242":{},"247":{},"280":{},"291":{},"302":{},"342":{}},"tags":{}}],["remark",{"_index":2274,"title":{},"content":{"240":{}},"tags":{}}],["rememb",{"_index":1573,"title":{},"content":{"143":{},"154":{},"170":{},"202":{},"203":{},"209":{},"224":{},"226":{},"276":{},"292":{},"296":{},"307":{},"316":{},"324":{},"368":{}},"tags":{}}],["remind",{"_index":2704,"title":{"361":{}},"content":{},"tags":{}}],["remot",{"_index":1470,"title":{"140":{},"263":{},"267":{}},"content":{"122":{},"140":{},"143":{},"159":{},"169":{},"180":{},"199":{},"261":{},"262":{},"263":{},"265":{},"266":{},"267":{},"268":{},"348":{}},"tags":{}}],["remov",{"_index":92,"title":{},"content":{"29":{},"72":{},"82":{},"89":{},"167":{},"210":{},"212":{},"224":{},"260":{},"268":{}},"tags":{}}],["render",{"_index":821,"title":{},"content":{"77":{},"108":{}},"tags":{}}],["renown",{"_index":2296,"title":{},"content":{"242":{}},"tags":{}}],["reorg",{"_index":1250,"title":{},"content":{"48":{}},"tags":{}}],["replac",{"_index":1472,"title":{},"content":{"122":{},"176":{},"212":{},"359":{}},"tags":{}}],["repo",{"_index":1117,"title":{},"content":{"38":{}},"tags":{}}],["report",{"_index":18,"title":{},"content":{"25":{}},"tags":{}}],["repositori",{"_index":487,"title":{"99":{},"199":{},"261":{},"265":{},"335":{}},"content":{"21":{},"34":{},"36":{},"38":{},"39":{},"40":{},"72":{},"73":{},"99":{},"180":{},"244":{},"261":{},"264":{},"265":{},"268":{},"358":{}},"tags":{}}],["reposlug",{"_index":1133,"title":{},"content":{"40":{}},"tags":{}}],["reprehenderit",{"_index":419,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["repres",{"_index":126,"title":{},"content":{"5":{},"47":{},"96":{}},"tags":{}}],["represent",{"_index":854,"title":{},"content":{"82":{}},"tags":{}}],["request",{"_index":490,"title":{},"content":{"21":{},"24":{},"38":{},"85":{},"96":{},"123":{},"167":{},"172":{},"180":{},"260":{},"311":{},"368":{}},"tags":{}}],["requir",{"_index":696,"title":{"69":{},"84":{},"226":{},"281":{},"286":{},"303":{}},"content":{"38":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"69":{},"72":{},"73":{},"74":{},"75":{},"78":{},"79":{},"83":{},"84":{},"85":{},"87":{},"89":{},"90":{},"91":{},"92":{},"93":{},"98":{},"99":{},"100":{},"101":{},"107":{},"116":{},"121":{},"138":{},"140":{},"156":{},"159":{},"161":{},"163":{},"171":{},"173":{},"178":{},"186":{},"199":{},"208":{},"220":{},"226":{},"250":{},"261":{},"262":{},"265":{},"275":{},"278":{},"283":{},"290":{},"294":{},"298":{},"304":{},"305":{},"316":{},"321":{},"324":{},"350":{},"368":{}},"tags":{}}],["research",{"_index":2521,"title":{},"content":{"292":{},"300":{}},"tags":{}}],["reserv",{"_index":205,"title":{},"content":{"6":{}},"tags":{}}],["reservoir",{"_index":319,"title":{},"content":{"14":{}},"tags":{}}],["reset",{"_index":727,"title":{},"content":{"72":{},"89":{},"208":{}},"tags":{}}],["resili",{"_index":41,"title":{},"content":{"28":{},"154":{},"239":{},"302":{}},"tags":{}}],["resist",{"_index":2364,"title":{},"content":{"272":{},"342":{}},"tags":{}}],["resolv",{"_index":2381,"title":{},"content":{"268":{},"275":{}},"tags":{}}],["resort",{"_index":2428,"title":{},"content":{"267":{}},"tags":{}}],["resourc",{"_index":140,"title":{},"content":{"5":{},"17":{},"151":{},"159":{},"162":{},"167":{},"170":{},"229":{},"241":{},"244":{},"261":{},"262":{},"352":{}},"tags":{}}],["respect",{"_index":2220,"title":{},"content":{"229":{},"242":{}},"tags":{}}],["respons",{"_index":12,"title":{},"content":{"25":{},"46":{},"47":{},"48":{},"242":{},"283":{},"304":{}},"tags":{}}],["rest",{"_index":2307,"title":{},"content":{"242":{},"299":{},"305":{}},"tags":{}}],["restart",{"_index":569,"title":{},"content":{"32":{},"33":{},"82":{},"124":{},"180":{},"217":{},"260":{},"268":{}},"tags":{}}],["restor",{"_index":882,"title":{"234":{}},"content":{"87":{},"260":{}},"tags":{}}],["restrict",{"_index":1426,"title":{},"content":{"117":{},"118":{},"139":{},"143":{}},"tags":{}}],["result",{"_index":1639,"title":{},"content":{"153":{},"186":{},"229":{},"296":{}},"tags":{}}],["retain",{"_index":2556,"title":{},"content":{"295":{}},"tags":{}}],["retri",{"_index":1723,"title":{},"content":{"159":{},"180":{},"187":{}},"tags":{}}],["retriev",{"_index":1499,"title":{},"content":{"132":{},"143":{},"199":{},"206":{},"321":{}},"tags":{}}],["return",{"_index":1390,"title":{},"content":{"114":{},"187":{},"250":{},"272":{},"315":{},"322":{},"366":{}},"tags":{}}],["revers",{"_index":1249,"title":{},"content":{"48":{}},"tags":{}}],["review",{"_index":463,"title":{},"content":{"18":{},"186":{},"316":{},"323":{},"367":{}},"tags":{}}],["revolut",{"_index":2270,"title":{},"content":{"239":{}},"tags":{}}],["revolution",{"_index":117,"title":{},"content":{"30":{},"238":{}},"tags":{}}],["revolutionari",{"_index":2240,"title":{"249":{}},"content":{},"tags":{}}],["reward",{"_index":194,"title":{"52":{},"53":{},"54":{},"55":{},"250":{},"333":{}},"content":{"6":{},"10":{},"14":{},"41":{},"42":{},"43":{},"45":{},"46":{},"47":{},"48":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"96":{},"102":{},"103":{},"105":{},"107":{},"108":{},"109":{},"114":{},"120":{},"125":{},"128":{},"190":{},"197":{},"250":{},"272":{},"275":{},"285":{},"290":{},"292":{},"295":{},"296":{},"299":{},"305":{},"321":{},"339":{},"342":{}},"tags":{}}],["rewards?no",{"_index":1343,"title":{},"content":{"107":{}},"tags":{}}],["rewards?onc",{"_index":1327,"title":{},"content":{"107":{}},"tags":{}}],["ribbon",{"_index":2109,"title":{},"content":{"211":{}},"tags":{}}],["rich",{"_index":1218,"title":{},"content":{"45":{}},"tags":{}}],["richer",{"_index":1220,"title":{},"content":{"45":{}},"tags":{}}],["right",{"_index":748,"title":{},"content":{"56":{},"72":{},"92":{},"109":{},"120":{},"180":{},"186":{},"212":{},"244":{},"260":{},"283":{},"316":{},"318":{},"321":{},"323":{},"326":{},"367":{}},"tags":{}}],["risk",{"_index":744,"title":{},"content":{"72":{},"91":{},"267":{},"280":{},"292":{},"296":{},"300":{},"304":{},"306":{},"308":{},"310":{},"316":{}},"tags":{}}],["riski",{"_index":1482,"title":{},"content":{"123":{},"321":{}},"tags":{}}],["robust",{"_index":1484,"title":{},"content":{"123":{},"136":{},"199":{},"249":{}},"tags":{}}],["rocketpool",{"_index":2514,"title":{"289":{},"290":{},"292":{}},"content":{"290":{},"291":{},"292":{}},"tags":{}}],["role",{"_index":1060,"title":{"240":{}},"content":{"35":{},"43":{},"253":{},"278":{}},"tags":{}}],["rollup",{"_index":2433,"title":{"269":{},"270":{},"277":{}},"content":{"269":{},"270":{},"277":{},"278":{}},"tags":{}}],["room",{"_index":2086,"title":{},"content":{"210":{}},"tags":{}}],["root",{"_index":844,"title":{},"content":{"47":{},"48":{},"57":{},"81":{},"217":{},"364":{}},"tags":{}}],["root/.raiden/secret/keystor",{"_index":703,"title":{},"content":{"72":{},"87":{}},"tags":{}}],["root@yourinstancedn",{"_index":1774,"title":{},"content":{"187":{}},"tags":{}}],["roughli",{"_index":322,"title":{},"content":{"14":{},"211":{}},"tags":{}}],["round",{"_index":191,"title":{},"content":{"6":{},"10":{},"13":{}},"tags":{}}],["router",{"_index":1478,"title":{"177":{},"178":{}},"content":{"123":{},"140":{},"177":{},"178":{},"179":{},"180":{},"193":{},"283":{}},"tags":{}}],["router'",{"_index":1970,"title":{},"content":{"178":{},"180":{}},"tags":{}}],["row",{"_index":1299,"title":{},"content":{"50":{}},"tags":{}}],["rpc",{"_index":758,"title":{},"content":{"72":{},"80":{},"93":{},"260":{},"263":{},"274":{},"275":{},"278":{},"358":{},"360":{}},"tags":{}}],["rub",{"_index":2133,"title":{},"content":{"212":{}},"tags":{}}],["rule",{"_index":127,"title":{},"content":{"5":{},"159":{},"178":{},"186":{}},"tags":{}}],["ruleset",{"_index":2250,"title":{},"content":{"249":{}},"tags":{}}],["run",{"_index":155,"title":{"239":{},"262":{},"266":{},"310":{},"349":{}},"content":{"5":{},"22":{},"24":{},"31":{},"36":{},"37":{},"38":{},"40":{},"71":{},"84":{},"96":{},"112":{},"147":{},"150":{},"152":{},"154":{},"156":{},"157":{},"159":{},"161":{},"166":{},"167":{},"168":{},"176":{},"180":{},"186":{},"187":{},"203":{},"208":{},"218":{},"224":{},"226":{},"229":{},"234":{},"239":{},"240":{},"250":{},"253":{},"260":{},"261":{},"262":{},"264":{},"265":{},"266":{},"268":{},"273":{},"275":{},"280":{},"283":{},"285":{},"292":{},"294":{},"299":{},"302":{},"304":{},"307":{},"309":{},"310":{},"311":{},"321":{},"334":{},"339":{},"340":{},"349":{},"350":{},"354":{},"364":{}},"tags":{}}],["runner",{"_index":296,"title":{"300":{}},"content":{"13":{},"283":{},"300":{},"304":{}},"tags":{}}],["runner'",{"_index":2143,"title":{},"content":{"213":{}},"tags":{}}],["safe",{"_index":918,"title":{},"content":{"93":{},"159":{},"206":{},"211":{},"282":{},"287":{},"296":{},"315":{},"322":{},"348":{},"366":{}},"tags":{}}],["safeguard",{"_index":2040,"title":{},"content":{"206":{},"255":{},"257":{},"291":{}},"tags":{}}],["safeti",{"_index":2540,"title":{},"content":{"300":{},"361":{}},"tags":{}}],["sale",{"_index":1183,"title":{},"content":{"44":{}},"tags":{}}],["same",{"_index":887,"title":{},"content":{"55":{},"62":{},"87":{},"104":{},"111":{},"116":{},"117":{},"118":{},"122":{},"126":{},"129":{},"132":{},"133":{},"136":{},"140":{},"143":{},"154":{},"180":{},"210":{},"260":{},"283":{},"287":{},"304":{},"305":{},"316":{},"364":{},"368":{}},"tags":{}}],["sanction",{"_index":66,"title":{},"content":{"28":{}},"tags":{}}],["sandbox",{"_index":2564,"title":{},"content":{"308":{}},"tags":{}}],["sata",{"_index":2108,"title":{},"content":{"211":{}},"tags":{}}],["satisfi",{"_index":900,"title":{},"content":{"66":{},"90":{}},"tags":{}}],["satoshi",{"_index":2264,"title":{},"content":{"238":{}},"tags":{}}],["save",{"_index":1094,"title":{},"content":{"37":{},"146":{},"178":{},"185":{},"187":{},"202":{},"208":{},"315":{},"322":{},"366":{}},"tags":{}}],["say",{"_index":1769,"title":{},"content":{"187":{},"315":{},"322":{},"366":{}},"tags":{}}],["scalabl",{"_index":1627,"title":{"151":{}},"content":{"158":{},"159":{},"249":{},"269":{}},"tags":{}}],["scale",{"_index":1628,"title":{},"content":{"151":{},"159":{},"269":{}},"tags":{}}],["scan",{"_index":1563,"title":{},"content":{"143":{},"146":{},"179":{},"275":{}},"tags":{}}],["scenario",{"_index":1374,"title":{},"content":{"112":{}},"tags":{}}],["scenarios:dappnod",{"_index":1675,"title":{},"content":{"159":{}},"tags":{}}],["schedul",{"_index":496,"title":{},"content":{"22":{}},"tags":{}}],["schema",{"_index":1040,"title":{},"content":{"63":{},"64":{},"70":{}},"tags":{}}],["school",{"_index":2677,"title":{"353":{}},"content":{"327":{},"334":{},"344":{},"348":{},"353":{}},"tags":{}}],["scratch",{"_index":2399,"title":{"328":{}},"content":{"260":{}},"tags":{}}],["screen",{"_index":2156,"title":{},"content":{"215":{},"223":{},"260":{},"282":{},"292":{},"296":{}},"tags":{}}],["screenshot",{"_index":2616,"title":{},"content":{"323":{}},"tags":{}}],["screw",{"_index":2105,"title":{},"content":{"211":{}},"tags":{}}],["script",{"_index":642,"title":{"216":{},"229":{},"230":{}},"content":{"34":{},"216":{},"229":{},"230":{},"232":{}},"tags":{}}],["sd",{"_index":2160,"title":{},"content":{"217":{}},"tags":{}}],["seamless",{"_index":2007,"title":{},"content":{"177":{},"273":{},"302":{}},"tags":{}}],["seamlessli",{"_index":2289,"title":{},"content":{"242":{},"244":{}},"tags":{}}],["search",{"_index":1591,"title":{},"content":{"146":{},"164":{},"184":{},"244":{},"296":{},"316":{},"323":{},"367":{}},"tags":{}}],["season",{"_index":1179,"title":{"44":{}},"content":{},"tags":{}}],["second",{"_index":769,"title":{},"content":{"72":{},"82":{},"95":{},"168":{},"180":{}},"tags":{}}],["secret",{"_index":992,"title":{"65":{}},"content":{"58":{},"60":{},"62":{},"65":{}},"tags":{}}],["secrets.github_token",{"_index":511,"title":{},"content":{"22":{},"24":{}},"tags":{}}],["secrets.pinata_api_key",{"_index":513,"title":{},"content":{"22":{}},"tags":{}}],["secrets.pinata_secret_api_key",{"_index":515,"title":{},"content":{"22":{}},"tags":{}}],["section",{"_index":3,"title":{},"content":{"14":{},"25":{},"49":{},"52":{},"62":{},"105":{},"112":{},"114":{},"120":{},"129":{},"159":{},"164":{},"165":{},"167":{},"178":{},"186":{},"188":{},"209":{},"212":{},"218":{},"236":{},"256":{},"260":{},"296":{},"306":{},"323":{},"340":{},"351":{},"352":{},"367":{}},"tags":{}}],["secur",{"_index":7,"title":{"206":{},"347":{}},"content":{"25":{},"119":{},"122":{},"123":{},"129":{},"130":{},"133":{},"136":{},"138":{},"139":{},"140":{},"141":{},"143":{},"159":{},"165":{},"176":{},"186":{},"188":{},"197":{},"199":{},"200":{},"202":{},"203":{},"205":{},"206":{},"207":{},"212":{},"239":{},"242":{},"249":{},"250":{},"253":{},"255":{},"267":{},"272":{},"273":{},"282":{},"292":{},"294":{},"296":{},"306":{},"315":{},"322":{},"339":{},"342":{},"347":{},"354":{},"366":{}},"tags":{}}],["sed",{"_index":392,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["see",{"_index":1032,"title":{},"content":{"44":{},"50":{},"62":{},"112":{},"114":{},"132":{},"143":{},"176":{},"180":{},"222":{},"244":{},"263":{},"268":{},"282":{},"368":{}},"tags":{}}],["seed",{"_index":2659,"title":{},"content":{"368":{}},"tags":{}}],["seek",{"_index":2319,"title":{},"content":{"244":{}},"tags":{}}],["seen",{"_index":1816,"title":{},"content":{"168":{},"294":{}},"tags":{}}],["select",{"_index":620,"title":{"112":{}},"content":{"34":{},"62":{},"68":{},"112":{},"135":{},"146":{},"162":{},"164":{},"180":{},"184":{},"186":{},"205":{},"222":{},"262":{},"264":{},"281":{},"282":{},"286":{},"292":{},"299":{},"300":{},"304":{},"305":{},"306":{},"309":{},"315":{},"318":{},"322":{},"326":{},"343":{},"357":{},"358":{},"366":{},"368":{}},"tags":{}}],["selecting:1",{"_index":2476,"title":{},"content":{"303":{}},"tags":{}}],["self",{"_index":294,"title":{},"content":{"13":{},"203":{},"260":{},"273":{}},"tags":{}}],["semant",{"_index":797,"title":{},"content":{"75":{},"83":{}},"tags":{}}],["semver",{"_index":798,"title":{},"content":{"38":{},"75":{},"90":{}},"tags":{}}],["send",{"_index":989,"title":{},"content":{"48":{},"53":{},"54":{},"55":{},"58":{},"64":{},"107":{},"159":{},"172":{},"175":{},"176":{},"185":{},"187":{},"201":{},"292":{},"316":{},"323":{},"367":{}},"tags":{}}],["sender",{"_index":2345,"title":{},"content":{"252":{}},"tags":{}}],["sensit",{"_index":1014,"title":{},"content":{"62":{},"65":{},"260":{}},"tags":{}}],["sent",{"_index":1262,"title":{},"content":{"50":{},"53":{},"54":{},"107":{},"108":{},"176":{},"315":{},"322":{},"366":{}},"tags":{}}],["sentenc",{"_index":812,"title":{},"content":{"77":{}},"tags":{}}],["sentinel",{"_index":2626,"title":{},"content":{"312":{}},"tags":{}}],["separ",{"_index":1290,"title":{},"content":{"55":{},"132":{},"186":{},"260":{}},"tags":{}}],["seri",{"_index":2209,"title":{},"content":{"223":{},"344":{}},"tags":{}}],["serv",{"_index":1231,"title":{},"content":{"46":{},"54":{},"55":{},"255":{},"267":{},"272":{},"273":{},"308":{}},"tags":{}}],["server",{"_index":1637,"title":{},"content":{"153":{},"172":{},"209":{},"221":{},"229":{},"283":{},"300":{},"307":{},"346":{}},"tags":{}}],["serverless",{"_index":2366,"title":{},"content":{"272":{}},"tags":{}}],["servic",{"_index":523,"title":{"241":{},"283":{},"336":{}},"content":{"22":{},"32":{},"33":{},"58":{},"62":{},"72":{},"79":{},"81":{},"87":{},"93":{},"147":{},"159":{},"160":{},"167":{},"171":{},"172":{},"176":{},"180":{},"186":{},"199":{},"209":{},"217":{},"224":{},"241":{},"260":{},"283":{},"294":{},"336":{},"342":{},"361":{},"368":{}},"tags":{}}],["service'",{"_index":574,"title":{},"content":{"32":{}},"tags":{}}],["service1",{"_index":849,"title":{},"content":{"58":{},"62":{},"81":{},"87":{}},"tags":{}}],["service2",{"_index":1021,"title":{},"content":{"62":{}},"tags":{}}],["servicenam",{"_index":759,"title":{},"content":{"72":{},"93":{}},"tags":{}}],["session",{"_index":1721,"title":{},"content":{"159":{},"187":{},"327":{}},"tags":{}}],["set",{"_index":306,"title":{"119":{},"131":{},"142":{},"145":{},"165":{},"173":{},"181":{},"185":{},"203":{},"278":{},"328":{},"329":{},"347":{}},"content":{"14":{},"22":{},"34":{},"38":{},"40":{},"50":{},"62":{},"72":{},"89":{},"103":{},"110":{},"112":{},"113":{},"115":{},"117":{},"122":{},"124":{},"129":{},"130":{},"132":{},"141":{},"143":{},"161":{},"164":{},"165":{},"167":{},"176":{},"177":{},"178":{},"180":{},"186":{},"196":{},"197":{},"198":{},"205":{},"208":{},"213":{},"217":{},"218":{},"220":{},"223":{},"256":{},"260":{},"267":{},"268":{},"275":{},"281":{},"282":{},"283":{},"286":{},"292":{},"296":{},"300":{},"303":{},"305":{},"314":{},"315":{},"322":{},"344":{},"353":{},"354":{},"357":{},"359":{},"360":{},"365":{},"366":{}},"tags":{}}],["settings>network",{"_index":1528,"title":{},"content":{"135":{}},"tags":{}}],["setup",{"_index":613,"title":{"198":{},"330":{},"344":{},"354":{}},"content":{"34":{},"56":{},"57":{},"59":{},"60":{},"62":{},"72":{},"89":{},"117":{},"148":{},"154":{},"159":{},"173":{},"187":{},"188":{},"199":{},"213":{},"220":{},"224":{},"228":{},"229":{},"275":{},"283":{},"291":{},"295":{},"300":{},"304":{},"334":{},"344":{}},"tags":{}}],["seven",{"_index":1871,"title":{},"content":{"172":{}},"tags":{}}],["sever",{"_index":1712,"title":{},"content":{"159":{},"162":{},"167":{},"180":{},"326":{}},"tags":{}}],["shape",{"_index":2347,"title":{},"content":{"253":{}},"tags":{}}],["shapella",{"_index":2658,"title":{},"content":{"366":{}},"tags":{}}],["share",{"_index":1173,"title":{},"content":{"43":{},"44":{},"53":{},"54":{},"108":{},"260":{},"272":{},"283":{},"304":{},"305":{},"364":{}},"tags":{}}],["sheer",{"_index":1213,"title":{},"content":{"45":{}},"tags":{}}],["shell",{"_index":1469,"title":{},"content":{"122":{}},"tags":{}}],["shift",{"_index":2579,"title":{},"content":{"320":{}},"tags":{}}],["shift+c",{"_index":1777,"title":{},"content":{"187":{}},"tags":{}}],["shop",{"_index":2217,"title":{},"content":{"226":{}},"tags":{}}],["short",{"_index":811,"title":{},"content":{"77":{},"93":{},"150":{},"153":{},"159":{},"187":{},"211":{}},"tags":{}}],["shortdescript",{"_index":663,"title":{"77":{}},"content":{"72":{},"73":{}},"tags":{}}],["show",{"_index":361,"title":{},"content":{"14":{},"34":{},"36":{},"37":{},"38":{},"40":{},"60":{},"62":{},"66":{},"67":{},"80":{},"90":{},"143":{},"307":{},"318":{},"325":{},"368":{}},"tags":{}}],["shown",{"_index":656,"title":{},"content":{"62":{},"71":{},"76":{},"89":{},"90":{},"91":{},"97":{},"98":{},"143":{},"281":{},"282":{},"315":{},"322":{},"366":{}},"tags":{}}],["shut",{"_index":2146,"title":{},"content":{"213":{}},"tags":{}}],["shutdown",{"_index":2232,"title":{},"content":{"233":{}},"tags":{}}],["side",{"_index":1523,"title":{},"content":{"135":{},"150":{},"236":{},"244":{},"256":{},"341":{}},"tags":{}}],["sidebar",{"_index":1446,"title":{},"content":{"119":{}},"tags":{}}],["sign",{"_index":1747,"title":{},"content":{"170":{},"183":{},"302":{},"307":{},"315":{},"322":{},"366":{}},"tags":{}}],["signal",{"_index":1874,"title":{},"content":{"172":{}},"tags":{}}],["signatur",{"_index":105,"title":{"254":{},"255":{},"257":{}},"content":{"29":{},"255":{},"257":{},"302":{},"305":{},"363":{}},"tags":{}}],["signific",{"_index":1670,"title":{},"content":{"159":{},"283":{},"304":{}},"tags":{}}],["significantli",{"_index":1619,"title":{},"content":{"149":{}},"tags":{}}],["signing_bls_missing_identifier_count",{"_index":1840,"title":{},"content":{"170":{}},"tags":{}}],["signing_bls_signing_dur",{"_index":1836,"title":{},"content":{"170":{}},"tags":{}}],["signing_bls_signing_duration_count",{"_index":1838,"title":{},"content":{"170":{}},"tags":{}}],["signing_bls_signing_duration_sum",{"_index":1839,"title":{},"content":{"170":{}},"tags":{}}],["signing_signers_loaded_count",{"_index":1833,"title":{},"content":{"170":{}},"tags":{}}],["silenc",{"_index":1065,"title":{},"content":{"36":{},"37":{},"38":{},"40":{}},"tags":{}}],["silent",{"_index":1064,"title":{},"content":{"36":{},"37":{},"38":{},"40":{}},"tags":{}}],["similar",{"_index":1702,"title":{},"content":{"159":{},"178":{},"314":{},"365":{}},"tags":{}}],["simpl",{"_index":102,"title":{},"content":{"29":{},"32":{},"39":{},"56":{},"110":{},"112":{},"120":{},"125":{},"141":{},"244":{},"260":{},"321":{},"339":{}},"tags":{}}],["simplest",{"_index":1351,"title":{},"content":{"102":{},"120":{}},"tags":{}}],["simpli",{"_index":1722,"title":{},"content":{"159":{},"172":{},"176":{},"187":{},"189":{}},"tags":{}}],["simplic",{"_index":1541,"title":{},"content":{"138":{},"343":{}},"tags":{}}],["simplif",{"_index":2375,"title":{},"content":{"273":{}},"tags":{}}],["simplifi",{"_index":151,"title":{},"content":{"5":{},"161":{},"178":{},"241":{},"242":{},"244":{},"292":{},"300":{},"320":{}},"tags":{}}],["simul",{"_index":1205,"title":{},"content":{"45":{},"158":{}},"tags":{}}],["simultan",{"_index":1501,"title":{},"content":{"132":{},"280":{},"302":{}},"tags":{}}],["singl",{"_index":927,"title":{},"content":{"47":{},"93":{},"97":{},"112":{},"249":{}},"tags":{}}],["sint",{"_index":429,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["sit",{"_index":387,"title":{},"content":{"15":{},"16":{},"346":{}},"tags":{}}],["site",{"_index":722,"title":{},"content":{"72":{},"89":{}},"tags":{}}],["situat",{"_index":1383,"title":{},"content":{"112":{}},"tags":{}}],["size",{"_index":1690,"title":{},"content":{"159":{},"168":{},"180":{},"305":{}},"tags":{}}],["skip",{"_index":2226,"title":{},"content":{"231":{},"323":{},"367":{}},"tags":{}}],["skip_sav",{"_index":538,"title":{},"content":{"24":{},"37":{}},"tags":{}}],["skip_upload",{"_index":1096,"title":{},"content":{"37":{}},"tags":{}}],["slash",{"_index":1832,"title":{},"content":{"170":{}},"tags":{}}],["slot",{"_index":1252,"title":{},"content":{"48":{}},"tags":{}}],["small",{"_index":1328,"title":{},"content":{"107":{},"159":{},"210":{},"212":{}},"tags":{}}],["smaller",{"_index":356,"title":{},"content":{"14":{},"159":{},"211":{}},"tags":{}}],["smart",{"_index":1227,"title":{"47":{}},"content":{"46":{},"47":{},"48":{},"50":{},"105":{},"107":{},"129":{},"199":{},"261":{},"262":{},"277":{},"291":{},"320":{}},"tags":{}}],["smooth",{"_index":1146,"title":{"41":{},"42":{},"49":{},"105":{},"120":{},"125":{},"332":{}},"content":{"41":{},"42":{},"43":{},"44":{},"45":{},"46":{},"47":{},"49":{},"50":{},"52":{},"53":{},"54":{},"55":{},"102":{},"103":{},"105":{},"107":{},"108":{},"109":{},"110":{},"112":{},"114":{},"120":{},"125":{},"127":{},"128":{},"132":{},"177":{},"229":{}},"tags":{}}],["smooth'",{"_index":1225,"title":{"46":{},"53":{},"103":{},"110":{},"111":{},"126":{}},"content":{"47":{},"53":{},"54":{},"55":{},"102":{},"103":{},"104":{},"105":{},"107":{},"108":{},"109":{},"110":{},"111":{},"112":{},"115":{},"120":{},"125":{},"126":{}},"tags":{}}],["smooth?7",{"_index":1329,"title":{},"content":{"107":{}},"tags":{}}],["smooth](https://smooth.dappnode.io",{"_index":1405,"title":{},"content":{"115":{}},"tags":{}}],["snapshot",{"_index":83,"title":{},"content":{"29":{}},"tags":{}}],["softwar",{"_index":51,"title":{},"content":{"5":{},"28":{},"72":{},"76":{},"91":{},"159":{},"161":{},"162":{},"190":{},"192":{},"256":{},"321":{},"323":{},"367":{}},"tags":{}}],["sole",{"_index":549,"title":{},"content":{"24":{},"173":{}},"tags":{}}],["solo",{"_index":1151,"title":{"156":{}},"content":{"41":{},"42":{},"43":{},"45":{},"180":{},"283":{},"295":{},"296":{},"298":{},"304":{},"320":{},"341":{}},"tags":{}}],["solut",{"_index":52,"title":{},"content":{"28":{},"96":{},"155":{},"167":{},"242":{},"249":{},"268":{},"269":{},"277":{},"290":{},"337":{}},"tags":{}}],["solv",{"_index":1859,"title":{},"content":{"172":{},"236":{}},"tags":{}}],["somebodi",{"_index":1301,"title":{},"content":{"50":{}},"tags":{}}],["someon",{"_index":1649,"title":{},"content":{"154":{},"159":{}},"tags":{}}],["someth",{"_index":1400,"title":{},"content":{"115":{},"164":{},"180":{},"260":{},"351":{}},"tags":{}}],["sometim",{"_index":1884,"title":{},"content":{"173":{},"211":{}},"tags":{}}],["somewher",{"_index":2117,"title":{},"content":{"211":{},"315":{},"322":{},"366":{}},"tags":{}}],["soon",{"_index":1416,"title":{"166":{}},"content":{"128":{},"150":{},"250":{},"285":{},"314":{},"319":{},"355":{},"356":{},"365":{}},"tags":{}}],["sourc",{"_index":1229,"title":{"53":{},"199":{}},"content":{"46":{},"53":{},"186":{},"199":{},"220":{},"249":{},"255":{},"256":{}},"tags":{}}],["sourcecr",{"_index":286,"title":{},"content":{"13":{}},"tags":{}}],["sovereign",{"_index":2373,"title":{},"content":{"273":{}},"tags":{}}],["space",{"_index":178,"title":{},"content":{"5":{},"159":{},"168":{},"211":{},"241":{},"247":{},"265":{},"268":{}},"tags":{}}],["spam",{"_index":1393,"title":{},"content":{"114":{},"173":{},"176":{}},"tags":{}}],["spec",{"_index":1091,"title":{},"content":{"37":{},"38":{},"180":{}},"tags":{}}],["special",{"_index":824,"title":{"363":{}},"content":{"79":{},"205":{},"211":{},"275":{},"300":{},"321":{}},"tags":{}}],["specif",{"_index":480,"title":{"226":{}},"content":{"20":{},"38":{},"62":{},"88":{},"89":{},"90":{},"112":{},"117":{},"118":{},"147":{},"159":{},"161":{},"162":{},"166":{},"180":{},"188":{},"220":{},"226":{},"228":{},"229":{},"244":{},"359":{}},"tags":{}}],["specifi",{"_index":808,"title":{},"content":{"37":{},"38":{},"40":{},"76":{},"84":{},"87":{},"96":{},"159":{},"296":{},"305":{}},"tags":{}}],["specul",{"_index":80,"title":{},"content":{"28":{}},"tags":{}}],["speed",{"_index":1542,"title":{},"content":{"138":{},"220":{},"269":{},"277":{}},"tags":{}}],["spirit",{"_index":2647,"title":{},"content":{"362":{}},"tags":{}}],["split",{"_index":1214,"title":{},"content":{"45":{},"246":{},"282":{},"305":{}},"tags":{}}],["ssd",{"_index":2158,"title":{"217":{}},"content":{"217":{},"226":{}},"tags":{}}],["ssh",{"_index":1468,"title":{"122":{},"123":{}},"content":{"122":{},"123":{},"159":{},"186":{},"187":{}},"tags":{}}],["ssid",{"_index":1603,"title":{},"content":{"165":{},"218":{}},"tags":{}}],["ssv",{"_index":2500,"title":{"279":{},"282":{}},"content":{"280":{},"281":{},"282":{},"283":{}},"tags":{}}],["stabl",{"_index":1571,"title":{},"content":{"143":{},"294":{},"296":{}},"tags":{}}],["stack",{"_index":2595,"title":{},"content":{"321":{}},"tags":{}}],["staff",{"_index":2140,"title":{},"content":{"236":{}},"tags":{}}],["stage",{"_index":2193,"title":{},"content":{"220":{}},"tags":{}}],["stake",{"_index":71,"title":{"156":{},"170":{},"250":{},"276":{},"296":{},"331":{},"338":{},"339":{},"341":{},"342":{},"343":{}},"content":{"6":{},"9":{},"14":{},"28":{},"29":{},"42":{},"103":{},"110":{},"112":{},"115":{},"169":{},"170":{},"197":{},"229":{},"250":{},"272":{},"275":{},"276":{},"280":{},"285":{},"290":{},"291":{},"292":{},"294":{},"295":{},"296":{},"298":{},"299":{},"300":{},"310":{},"313":{},"314":{},"316":{},"317":{},"320":{},"321":{},"324":{},"325":{},"339":{},"340":{},"341":{},"342":{},"343":{},"365":{},"368":{}},"tags":{}}],["stakehous",{"_index":2522,"title":{"297":{},"298":{},"300":{},"330":{}},"content":{"298":{},"299":{},"300":{}},"tags":{}}],["stakehouse'",{"_index":2536,"title":{},"content":{"300":{}},"tags":{}}],["stakehouse’",{"_index":2523,"title":{},"content":{"298":{}},"tags":{}}],["staker",{"_index":293,"title":{"340":{},"359":{}},"content":{"13":{},"41":{},"42":{},"43":{},"45":{},"112":{},"180":{},"244":{},"262":{},"264":{},"278":{},"281":{},"282":{},"283":{},"285":{},"286":{},"292":{},"298":{},"303":{},"304":{},"309":{},"312":{},"314":{},"315":{},"318":{},"320":{},"321":{},"322":{},"326":{},"339":{},"340":{},"358":{},"359":{},"365":{},"366":{}},"tags":{}}],["stakewis",{"_index":2542,"title":{"293":{},"294":{},"296":{}},"content":{"294":{},"295":{},"296":{}},"tags":{}}],["stakewise'",{"_index":2561,"title":{},"content":{"296":{}},"tags":{}}],["stamp",{"_index":2349,"title":{},"content":{"255":{}},"tags":{}}],["stand",{"_index":2338,"title":{},"content":{"252":{},"278":{},"312":{},"320":{}},"tags":{}}],["standard",{"_index":838,"title":{},"content":{"80":{},"130":{},"159":{},"363":{}},"tags":{}}],["start",{"_index":61,"title":{"292":{},"296":{}},"content":{"17":{},"28":{},"43":{},"82":{},"103":{},"109":{},"114":{},"120":{},"174":{},"180":{},"185":{},"197":{},"205":{},"211":{},"212":{},"217":{},"218":{},"250":{},"260":{},"268":{},"291":{},"292":{},"304":{},"306":{},"310":{},"314":{},"315":{},"316":{},"318":{},"320":{},"321":{},"322":{},"323":{},"334":{},"349":{},"365":{},"366":{},"367":{},"368":{}},"tags":{}}],["startup",{"_index":2211,"title":{},"content":{"224":{}},"tags":{}}],["state",{"_index":1242,"title":{"49":{},"50":{},"51":{}},"content":{"47":{},"48":{},"49":{},"50":{},"51":{},"54":{},"105":{},"112":{},"229":{},"261":{},"277":{},"325":{},"361":{}},"tags":{}}],["static",{"_index":1975,"title":{},"content":{"180":{}},"tags":{}}],["statu",{"_index":835,"title":{"104":{}},"content":{"50":{},"80":{},"145":{},"180":{},"218":{},"260":{},"268":{}},"tags":{}}],["status",{"_index":1320,"title":{},"content":{"51":{}},"tags":{}}],["stay",{"_index":886,"title":{},"content":{"87":{},"173":{},"201":{},"203":{},"210":{},"335":{}},"tags":{}}],["steadfast",{"_index":2325,"title":{},"content":{"246":{}},"tags":{}}],["step",{"_index":505,"title":{"103":{},"104":{},"110":{},"111":{},"112":{},"113":{},"114":{},"126":{},"127":{},"128":{},"197":{},"224":{},"292":{},"296":{},"300":{},"304":{}},"content":{"22":{},"24":{},"36":{},"109":{},"110":{},"112":{},"113":{},"114":{},"120":{},"122":{},"133":{},"134":{},"135":{},"143":{},"144":{},"145":{},"163":{},"173":{},"179":{},"180":{},"181":{},"185":{},"186":{},"187":{},"197":{},"203":{},"217":{},"231":{},"236":{},"241":{},"244":{},"247":{},"275":{},"300":{},"304":{},"305":{},"306":{},"315":{},"316":{},"317":{},"318":{},"322":{},"323":{},"339":{},"340":{},"343":{},"345":{},"352":{},"366":{},"367":{},"368":{}},"tags":{}}],["steward",{"_index":2332,"title":{},"content":{"247":{}},"tags":{}}],["stick",{"_index":2196,"title":{},"content":{"221":{},"222":{},"224":{},"314":{},"321":{},"365":{}},"tags":{}}],["still",{"_index":1303,"title":{},"content":{"50":{},"112":{},"115":{},"157":{},"159":{},"167":{},"172":{},"176":{},"180":{},"208":{},"210":{},"285":{}},"tags":{}}],["stint",{"_index":1622,"title":{},"content":{"150":{}},"tags":{}}],["stop",{"_index":571,"title":{"43":{},"150":{}},"content":{"32":{},"33":{},"43":{},"82":{},"150":{},"172":{},"176":{},"180":{},"217":{},"218":{},"260":{},"266":{},"268":{},"283":{}},"tags":{}}],["storag",{"_index":950,"title":{"276":{}},"content":{"96":{},"151":{},"159":{},"160":{},"162":{},"180":{},"186":{},"199":{},"210":{},"226":{},"262":{},"268":{},"272":{},"275":{}},"tags":{}}],["store",{"_index":665,"title":{},"content":{"47":{},"72":{},"77":{},"78":{},"87":{},"92":{},"96":{},"97":{},"133":{},"135":{},"143":{},"163":{},"169":{},"190":{},"202":{},"206":{},"211":{},"240":{},"242":{},"269":{},"272":{},"296":{},"306":{},"315":{},"321":{},"322":{},"366":{}},"tags":{}}],["straightforward",{"_index":2048,"title":{},"content":{"198":{},"220":{},"243":{}},"tags":{}}],["stream",{"_index":317,"title":{},"content":{"14":{}},"tags":{}}],["streamlin",{"_index":1540,"title":{},"content":{"138":{},"141":{},"173":{},"278":{},"343":{}},"tags":{}}],["strict",{"_index":1862,"title":{},"content":{"172":{}},"tags":{}}],["string",{"_index":792,"title":{},"content":{"36":{},"37":{},"38":{},"40":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"66":{},"67":{},"68":{},"73":{},"74":{},"75":{},"76":{},"77":{},"78":{},"79":{},"80":{},"81":{},"82":{},"84":{},"86":{},"87":{},"88":{},"89":{},"90":{},"91":{},"92":{},"93":{},"94":{},"95":{},"96":{},"97":{},"98":{},"99":{},"100":{},"101":{}},"tags":{}}],["strong",{"_index":1479,"title":{},"content":{"123":{},"202":{},"242":{}},"tags":{}}],["stronger",{"_index":2475,"title":{},"content":{"302":{}},"tags":{}}],["strongli",{"_index":1604,"title":{},"content":{"165":{},"200":{},"256":{}},"tags":{}}],["structur",{"_index":86,"title":{},"content":{"29":{},"31":{},"70":{},"94":{},"95":{},"295":{}},"tags":{}}],["struggl",{"_index":2090,"title":{},"content":{"210":{}},"tags":{}}],["style",{"_index":745,"title":{"92":{}},"content":{"72":{},"73":{}},"tags":{}}],["subjug",{"_index":1648,"title":{},"content":{"154":{}},"tags":{}}],["submit",{"_index":2486,"title":{},"content":{"305":{},"306":{},"307":{}},"tags":{}}],["subnet",{"_index":2252,"title":{},"content":{"249":{}},"tags":{}}],["subscrib",{"_index":1243,"title":{"114":{},"120":{},"184":{},"332":{}},"content":{"47":{},"48":{},"50":{},"54":{},"102":{},"103":{},"104":{},"105":{},"109":{},"110":{},"112":{},"114":{},"120":{},"125":{},"128":{},"184":{}},"tags":{}}],["subscribe_all_subnet",{"_index":598,"title":{},"content":{"33":{}},"tags":{}}],["subscript",{"_index":1156,"title":{"102":{},"104":{},"109":{}},"content":{"41":{},"46":{},"47":{},"54":{},"109":{},"112":{},"113":{},"114":{},"115":{},"120":{},"128":{}},"tags":{}}],["subsequ",{"_index":2387,"title":{},"content":{"275":{}},"tags":{}}],["subset",{"_index":2469,"title":{},"content":{"280":{},"302":{}},"tags":{}}],["succeed",{"_index":2495,"title":{},"content":{"307":{}},"tags":{}}],["success",{"_index":176,"title":{},"content":{"5":{},"107":{},"108":{},"206":{},"229":{},"236":{},"240":{}},"tags":{}}],["successfulli",{"_index":1265,"title":{},"content":{"50":{},"53":{},"125":{},"179":{},"187":{},"224":{},"282":{},"287":{},"306":{},"368":{}},"tags":{}}],["sucessfulli",{"_index":1414,"title":{},"content":{"128":{}},"tags":{}}],["such",{"_index":137,"title":{},"content":{"5":{},"33":{},"79":{},"87":{},"108":{},"118":{},"162":{},"173":{},"185":{},"201":{},"241":{},"242":{},"244":{},"260":{},"274":{},"339":{}},"tags":{}}],["sudo",{"_index":1530,"title":{},"content":{"135":{},"146":{},"187":{},"231":{},"232":{},"234":{},"235":{}},"tags":{}}],["suffici",{"_index":1669,"title":{},"content":{"159":{}},"tags":{}}],["suggest",{"_index":1759,"title":{},"content":{"180":{},"186":{}},"tags":{}}],["suit",{"_index":1550,"title":{},"content":{"140":{},"159":{},"278":{},"334":{}},"tags":{}}],["suitabl",{"_index":1662,"title":{},"content":{"159":{},"186":{}},"tags":{}}],["sum",{"_index":1279,"title":{},"content":{"55":{},"108":{},"170":{}},"tags":{}}],["summar",{"_index":1241,"title":{},"content":{"47":{},"48":{}},"tags":{}}],["summari",{"_index":706,"title":{},"content":{"72":{},"88":{},"153":{},"186":{}},"tags":{}}],["summer",{"_index":331,"title":{},"content":{"14":{}},"tags":{}}],["sunt",{"_index":434,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["super",{"_index":2584,"title":{},"content":{"321":{}},"tags":{}}],["superpow",{"_index":2527,"title":{},"content":{"298":{}},"tags":{}}],["suppli",{"_index":188,"title":{},"content":{"6":{},"10":{},"12":{},"14":{},"240":{}},"tags":{}}],["support",{"_index":278,"title":{"19":{},"239":{},"247":{},"250":{}},"content":{"13":{},"53":{},"54":{},"57":{},"58":{},"59":{},"62":{},"64":{},"88":{},"107":{},"118":{},"136":{},"163":{},"170":{},"179":{},"199":{},"203":{},"224":{},"250":{},"253":{},"260":{},"263":{},"264":{},"269":{},"273":{},"295":{},"300":{},"305":{},"307":{},"363":{}},"tags":{}}],["sure",{"_index":1368,"title":{},"content":{"110":{},"112":{},"176":{},"177":{},"178":{},"180":{},"211":{},"217":{},"222":{},"229":{},"234":{},"268":{},"282":{},"283":{},"287":{},"292":{},"296":{},"300":{},"306":{},"311":{},"314":{},"315":{},"316":{},"318":{},"321":{},"322":{},"323":{},"347":{},"365":{},"366":{},"367":{},"368":{}},"tags":{}}],["surfac",{"_index":2131,"title":{},"content":{"212":{}},"tags":{}}],["sushiswap",{"_index":69,"title":{},"content":{"6":{},"7":{},"8":{},"9":{},"28":{}},"tags":{}}],["sustain",{"_index":175,"title":{},"content":{"5":{},"54":{},"107":{}},"tags":{}}],["swap",{"_index":2380,"title":{},"content":{"275":{}},"tags":{}}],["swarm",{"_index":937,"title":{"272":{}},"content":{"38":{},"96":{},"272":{},"274":{},"275":{},"276":{}},"tags":{}}],["swarm'",{"_index":2370,"title":{},"content":{"272":{}},"tags":{}}],["swarm(direct",{"_index":2378,"title":{},"content":{"275":{}},"tags":{}}],["swarm.dnp.dappnode.eth",{"_index":695,"title":{},"content":{"72":{},"83":{}},"tags":{}}],["swift",{"_index":1572,"title":{},"content":{"143":{}},"tags":{}}],["switch",{"_index":1447,"title":{},"content":{"119":{},"135":{},"174":{},"175":{},"180":{},"257":{},"260":{},"262":{},"268":{},"270":{},"314":{},"321":{},"365":{}},"tags":{}}],["symbol",{"_index":2036,"title":{},"content":{"205":{}},"tags":{}}],["sync",{"_index":834,"title":{"349":{}},"content":{"80":{},"170":{},"180":{},"229":{},"260":{},"261":{},"262":{},"281":{},"286":{},"292":{},"303":{},"304":{},"314":{},"321":{},"349":{},"354":{},"361":{},"365":{}},"tags":{}}],["sync?thi",{"_index":1988,"title":{},"content":{"180":{}},"tags":{}}],["synchron",{"_index":2592,"title":{},"content":{"314":{},"321":{},"365":{}},"tags":{}}],["syncing!it'",{"_index":1985,"title":{},"content":{"180":{}},"tags":{}}],["syncron",{"_index":2519,"title":{},"content":{"292":{}},"tags":{}}],["system",{"_index":664,"title":{"200":{},"201":{}},"content":{"72":{},"77":{},"78":{},"108":{},"121":{},"122":{},"129":{},"135":{},"157":{},"159":{},"163":{},"169":{},"172":{},"173":{},"176":{},"188":{},"218":{},"219":{},"228":{},"229":{},"230":{},"240":{},"241":{},"242":{},"256":{},"257":{}},"tags":{}}],["systemctl",{"_index":2162,"title":{},"content":{"217":{}},"tags":{}}],["t",{"_index":1086,"title":{},"content":{"37":{},"38":{}},"tags":{}}],["tab",{"_index":1771,"title":{"359":{}},"content":{"180":{},"187":{},"256":{},"260":{},"262":{},"268":{},"281":{},"282":{},"283":{},"305":{},"306":{},"309":{},"316":{},"319":{}},"tags":{}}],["tabl",{"_index":324,"title":{},"content":{"14":{},"114":{},"128":{}},"tags":{}}],["tag",{"_index":545,"title":{},"content":{"24":{}},"tags":{}}],["tailor",{"_index":2247,"title":{},"content":{"249":{}},"tags":{}}],["take",{"_index":97,"title":{},"content":{"29":{},"42":{},"50":{},"107":{},"109":{},"112":{},"114":{},"115":{},"125":{},"180":{},"187":{},"190":{},"229":{},"287":{},"299":{},"304":{},"313":{},"314":{},"321":{},"323":{},"326":{},"345":{},"365":{},"367":{}},"tags":{}}],["taken",{"_index":1509,"title":{},"content":{"133":{}},"tags":{}}],["tap",{"_index":82,"title":{},"content":{"29":{},"135":{},"146":{}},"tags":{}}],["tarbal",{"_index":885,"title":{},"content":{"87":{}},"tags":{}}],["target",{"_index":898,"title":{"62":{}},"content":{"58":{},"60":{},"62":{},"65":{},"66":{},"67":{},"68":{},"90":{},"361":{}},"tags":{}}],["task",{"_index":1623,"title":{},"content":{"150":{},"242":{},"313":{},"320":{}},"tags":{}}],["tb",{"_index":1678,"title":{},"content":{"159":{},"226":{},"321":{}},"tags":{}}],["tcp",{"_index":1027,"title":{},"content":{"62":{},"159":{},"186":{},"260":{}},"tags":{}}],["team",{"_index":207,"title":{},"content":{"6":{},"13":{},"170":{},"256":{}},"tags":{}}],["tech",{"_index":2667,"title":{},"content":{"341":{}},"tags":{}}],["technic",{"_index":1504,"title":{},"content":{"132":{},"159":{},"226":{},"273":{},"339":{},"353":{}},"tags":{}}],["techniqu",{"_index":2315,"title":{},"content":{"244":{},"252":{}},"tags":{}}],["technolog",{"_index":84,"title":{},"content":{"29":{},"136":{},"140":{},"238":{},"239":{},"240":{},"267":{},"272":{},"283":{},"285":{},"302":{},"304":{},"321":{},"335":{}},"tags":{}}],["tediou",{"_index":2283,"title":{},"content":{"241":{}},"tags":{}}],["teku",{"_index":1939,"title":{},"content":{"180":{},"281":{},"286":{},"303":{},"314":{},"321":{},"365":{},"368":{}},"tags":{}}],["telegram",{"_index":1705,"title":{"174":{},"185":{}},"content":{"159":{},"172":{},"173":{},"174":{},"176":{},"184":{},"185":{},"186":{},"187":{},"337":{}},"tags":{}}],["telemetri",{"_index":1783,"title":{},"content":{"167":{}},"tags":{}}],["tell",{"_index":1781,"title":{},"content":{"166":{}},"tags":{}}],["temperatur",{"_index":2081,"title":{"213":{}},"content":{"210":{},"211":{},"212":{},"213":{},"236":{}},"tags":{}}],["templat",{"_index":1730,"title":{},"content":{"161":{}},"tags":{}}],["tempor",{"_index":394,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["temporari",{"_index":1656,"title":{},"content":{"157":{}},"tags":{}}],["temporarili",{"_index":1916,"title":{},"content":{"176":{},"311":{}},"tags":{}}],["term",{"_index":369,"title":{},"content":{"14":{},"138":{},"153":{},"184":{}},"tags":{}}],["termin",{"_index":1067,"title":{"121":{},"124":{}},"content":{"36":{},"37":{},"38":{},"40":{},"121":{},"122":{},"129":{},"132":{},"135":{},"143":{},"159":{},"187":{},"202":{},"208":{},"218":{},"224":{},"231":{},"234":{},"260":{},"368":{}},"tags":{}}],["test",{"_index":536,"title":{"157":{}},"content":{"24":{},"37":{},"39":{},"75":{},"84":{},"135":{},"146":{},"147":{},"149":{},"158":{},"159":{},"176":{},"278":{},"285":{},"311":{}},"tags":{}}],["test.public.dappnode.eth",{"_index":566,"title":{},"content":{"32":{}},"tags":{}}],["test.public.dappnode.eth:0.1.0",{"_index":568,"title":{},"content":{"32":{}},"tags":{}}],["testament",{"_index":2630,"title":{},"content":{"312":{}},"tags":{}}],["testnet",{"_index":939,"title":{"308":{},"310":{}},"content":{"96":{},"159":{},"280":{},"285":{},"286":{},"302":{},"304":{},"308":{},"309":{},"310":{}},"tags":{}}],["text",{"_index":810,"title":{},"content":{"57":{},"76":{},"186":{}},"tags":{}}],["thank",{"_index":2589,"title":{},"content":{"314":{},"321":{},"341":{},"365":{}},"tags":{}}],["that",{"_index":1899,"title":{},"content":{"175":{}},"tags":{}}],["that'",{"_index":527,"title":{},"content":{"23":{},"118":{},"134":{},"144":{},"180":{},"202":{},"244":{},"362":{}},"tags":{}}],["themselv",{"_index":2009,"title":{},"content":{"178":{}},"tags":{}}],["there'",{"_index":486,"title":{},"content":{"21":{},"34":{},"163":{},"172":{},"210":{},"211":{},"262":{},"304":{},"337":{},"345":{},"351":{}},"tags":{}}],["therefor",{"_index":1276,"title":{},"content":{"54":{},"154":{},"274":{}},"tags":{}}],["thermal",{"_index":2123,"title":{"212":{}},"content":{"212":{}},"tags":{}}],["they'r",{"_index":2071,"title":{},"content":{"209":{}},"tags":{}}],["thing",{"_index":1855,"title":{},"content":{"172":{},"236":{},"244":{},"281":{},"286":{},"303":{}},"tags":{}}],["third",{"_index":1278,"title":{},"content":{"55":{},"199":{}},"tags":{}}],["thorough",{"_index":2358,"title":{},"content":{"256":{},"292":{},"300":{},"324":{}},"tags":{}}],["thoroughli",{"_index":2132,"title":{},"content":{"212":{}},"tags":{}}],["those",{"_index":63,"title":{},"content":{"28":{},"34":{},"45":{},"51":{},"108":{},"129":{},"157":{},"159":{},"163":{},"229":{},"236":{},"241":{},"266":{},"290":{},"298":{}},"tags":{}}],["though",{"_index":1409,"title":{},"content":{"119":{},"120":{},"296":{},"300":{}},"tags":{}}],["thousand",{"_index":1872,"title":{},"content":{"172":{}},"tags":{}}],["three",{"_index":1055,"title":{},"content":{"35":{}},"tags":{}}],["thrive",{"_index":2334,"title":{},"content":{"247":{}},"tags":{}}],["through",{"_index":144,"title":{"244":{}},"content":{"5":{},"55":{},"109":{},"125":{},"129":{},"141":{},"159":{},"170":{},"172":{},"175":{},"180":{},"184":{},"198":{},"220":{},"227":{},"242":{},"244":{},"247":{},"250":{},"260":{},"275":{},"281":{},"282":{},"286":{},"290":{},"303":{},"327":{},"334":{},"335":{},"337":{},"339":{},"340":{},"344":{},"346":{},"347":{},"348":{},"350":{}},"tags":{}}],["throughout",{"_index":2551,"title":{},"content":{"294":{}},"tags":{}}],["throughput",{"_index":2451,"title":{},"content":{"269":{}},"tags":{}}],["thu",{"_index":357,"title":{},"content":{"14":{}},"tags":{}}],["tight",{"_index":2122,"title":{},"content":{"211":{}},"tags":{}}],["time",{"_index":332,"title":{},"content":{"14":{},"50":{},"107":{},"114":{},"125":{},"132":{},"136":{},"149":{},"153":{},"164":{},"168":{},"180":{},"193":{},"197":{},"198":{},"211":{},"212":{},"229":{},"241":{},"242":{},"282":{},"294":{},"295":{},"307":{},"314":{},"315":{},"321":{},"322":{},"326":{},"353":{},"365":{},"366":{}},"tags":{}}],["timeout",{"_index":850,"title":{},"content":{"37":{},"38":{},"82":{}},"tags":{}}],["timestamp",{"_index":1815,"title":{},"content":{"168":{}},"tags":{}}],["timestr",{"_index":856,"title":{},"content":{"82":{}},"tags":{}}],["tip",{"_index":1206,"title":{},"content":{"45":{},"55":{},"143":{},"147":{},"159":{},"172":{},"173":{},"187":{},"193":{},"200":{},"211":{},"213":{},"218":{},"244":{},"261":{},"265":{},"268":{},"310":{},"315":{},"322":{},"366":{}},"tags":{}}],["titan",{"_index":2576,"title":{},"content":{"320":{}},"tags":{}}],["titl",{"_index":987,"title":{"63":{}},"content":{"58":{},"60":{},"63":{}},"tags":{}}],["togeth",{"_index":1172,"title":{},"content":{"43":{},"45":{},"46":{},"105":{},"327":{},"350":{}},"tags":{}}],["toggl",{"_index":1445,"title":{},"content":{"119":{},"135":{},"165":{},"174":{},"176":{},"257":{},"268":{},"314":{},"321":{},"365":{}},"tags":{}}],["token",{"_index":22,"title":{"8":{},"27":{},"206":{}},"content":{"6":{},"12":{},"14":{},"28":{},"108":{},"159":{},"185":{},"206":{},"207":{},"208":{},"250":{},"272":{},"285":{},"295":{},"317":{}},"tags":{}}],["token.txt",{"_index":2047,"title":{},"content":{"208":{}},"tags":{}}],["token?if",{"_index":1707,"title":{},"content":{"159":{},"208":{}},"tags":{}}],["tokenom",{"_index":2546,"title":{},"content":{"294":{}},"tags":{}}],["toler",{"_index":2473,"title":{},"content":{"280":{},"302":{}},"tags":{}}],["tool",{"_index":154,"title":{},"content":{"5":{},"17":{},"39":{},"40":{},"72":{},"87":{},"96":{},"176":{},"179":{},"180":{},"197":{},"217":{},"260":{},"288":{},"315":{},"322":{},"336":{},"364":{},"366":{},"368":{}},"tags":{}}],["toolkit",{"_index":2291,"title":{},"content":{"242":{}},"tags":{}}],["top",{"_index":1054,"title":{},"content":{"35":{},"135":{},"184":{},"201":{},"212":{},"260":{},"270":{},"315":{},"318":{},"322":{},"326":{},"366":{}},"tags":{}}],["topic",{"_index":2141,"title":{},"content":{"236":{},"352":{}},"tags":{}}],["tor",{"_index":1849,"title":{},"content":{"170":{},"172":{},"175":{}},"tags":{}}],["total",{"_index":187,"title":{},"content":{"6":{},"12":{},"114":{},"167":{},"168":{}},"tags":{}}],["touch",{"_index":2529,"title":{},"content":{"298":{}},"tags":{}}],["trace",{"_index":2344,"title":{},"content":{"252":{}},"tags":{}}],["tracing/arch",{"_index":2585,"title":{},"content":{"321":{}},"tags":{}}],["track",{"_index":323,"title":{},"content":{"14":{},"39":{},"46":{},"50":{},"51":{},"96":{},"105":{},"236":{},"262":{},"292":{},"296":{},"318":{},"326":{}},"tags":{}}],["tracker",{"_index":968,"title":{},"content":{"100":{}},"tags":{}}],["trade",{"_index":2454,"title":{},"content":{"269":{},"295":{}},"tags":{}}],["tradit",{"_index":1616,"title":{},"content":{"148":{},"240":{},"346":{}},"tags":{}}],["traffic",{"_index":1695,"title":{},"content":{"159":{},"172":{},"241":{},"242":{}},"tags":{}}],["transacion",{"_index":2509,"title":{},"content":{"282":{}},"tags":{}}],["transact",{"_index":1254,"title":{},"content":{"48":{},"55":{},"107":{},"114":{},"125":{},"128":{},"239":{},"246":{},"252":{},"269":{},"273":{},"277":{},"278":{},"282":{},"319":{},"342":{},"361":{},"363":{}},"tags":{}}],["transfer",{"_index":1339,"title":{},"content":{"107":{},"145":{},"212":{},"238":{},"276":{},"296":{}},"tags":{}}],["transform",{"_index":1274,"title":{},"content":{"54":{},"107":{},"242":{}},"tags":{}}],["transit",{"_index":1293,"title":{},"content":{"49":{},"50":{},"108":{},"159":{}},"tags":{}}],["transmiss",{"_index":1847,"title":{},"content":{"170":{}},"tags":{}}],["transpar",{"_index":131,"title":{},"content":{"5":{},"162":{},"167":{},"240":{},"291":{},"295":{}},"tags":{}}],["trash",{"_index":2397,"title":{},"content":{"260":{}},"tags":{}}],["travis_tag=releas",{"_index":1100,"title":{},"content":{"38":{}},"tags":{}}],["travis_tag=release/[typ",{"_index":1103,"title":{},"content":{"38":{}},"tags":{}}],["treat",{"_index":1511,"title":{},"content":{"133":{},"143":{}},"tags":{}}],["tree",{"_index":1240,"title":{},"content":{"47":{},"48":{}},"tags":{}}],["tri",{"_index":1401,"title":{},"content":{"115":{},"132":{},"143":{},"159":{},"180":{},"187":{},"209":{},"210":{},"211":{},"218":{},"236":{},"268":{},"321":{}},"tags":{}}],["trick",{"_index":2652,"title":{},"content":{"327":{},"363":{}},"tags":{}}],["trigger",{"_index":544,"title":{},"content":{"24":{},"50":{},"55":{},"79":{},"221":{},"319":{}},"tags":{}}],["tripl",{"_index":1947,"title":{},"content":{"180":{}},"tags":{}}],["troubl",{"_index":1906,"title":{},"content":{"176":{}},"tags":{}}],["troubleshoot",{"_index":1380,"title":{"115":{},"159":{},"176":{},"179":{},"196":{},"208":{},"264":{},"268":{},"356":{}},"content":{"112":{},"159":{},"224":{},"260":{},"314":{},"321":{},"365":{}},"tags":{}}],["true",{"_index":599,"title":{},"content":{"33":{},"58":{},"65":{},"69":{},"72":{},"85":{},"275":{}},"tags":{}}],["trueblock",{"_index":2587,"title":{},"content":{"321":{}},"tags":{}}],["trust",{"_index":2351,"title":{"256":{},"257":{}},"content":{"255":{},"256":{},"257":{},"261":{},"263":{},"265":{},"267":{},"283":{},"304":{},"364":{}},"tags":{}}],["trustworthi",{"_index":2480,"title":{},"content":{"283":{},"304":{}},"tags":{}}],["tunnel",{"_index":1574,"title":{},"content":{"145":{},"146":{},"189":{}},"tags":{}}],["tunnelblick",{"_index":1518,"title":{},"content":{"135":{}},"tags":{}}],["turn",{"_index":1440,"title":{},"content":{"119":{},"165":{},"176":{},"177":{},"193":{},"194":{},"229":{},"321":{},"324":{}},"tags":{}}],["tutori",{"_index":2676,"title":{"351":{},"352":{}},"content":{"327":{},"351":{},"353":{},"358":{}},"tags":{}}],["tweak",{"_index":2150,"title":{},"content":{"213":{}},"tags":{}}],["twice",{"_index":2210,"title":{},"content":{"224":{},"233":{}},"tags":{}}],["two",{"_index":931,"title":{},"content":{"46":{},"50":{},"62":{},"96":{},"105":{},"115":{},"120":{},"132":{},"136":{},"143":{},"162":{},"165":{},"180":{},"187":{},"213":{},"220":{},"227":{},"242":{},"260":{},"261":{},"265":{},"269":{},"286":{},"335":{}},"tags":{}}],["txt",{"_index":1559,"title":{},"content":{"143":{}},"tags":{}}],["type",{"_index":687,"title":{"79":{}},"content":{"38":{},"40":{},"54":{},"55":{},"58":{},"59":{},"60":{},"61":{},"62":{},"63":{},"64":{},"65":{},"66":{},"67":{},"68":{},"69":{},"70":{},"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":{},"98":{},"99":{},"100":{},"101":{},"108":{},"118":{},"122":{},"135":{},"146":{},"162":{},"169":{},"186":{},"269":{},"275":{},"315":{},"318":{},"319":{},"322":{},"326":{},"366":{},"368":{}},"tags":{}}],["typic",{"_index":562,"title":{},"content":{"31":{},"34":{},"45":{},"123":{}},"tags":{}}],["ubuntu",{"_index":503,"title":{},"content":{"22":{},"24":{},"187":{},"230":{}},"tags":{}}],["ubuntu@yourinstancedn",{"_index":1775,"title":{},"content":{"187":{}},"tags":{}}],["ubuntuopen",{"_index":1527,"title":{},"content":{"135":{}},"tags":{}}],["udp",{"_index":1028,"title":{},"content":{"62":{},"159":{},"180":{},"186":{},"260":{}},"tags":{}}],["ui",{"_index":658,"title":{"189":{},"318":{},"326":{},"340":{}},"content":{"60":{},"62":{},"71":{},"72":{},"76":{},"80":{},"87":{},"92":{},"97":{},"98":{},"112":{},"119":{},"132":{},"143":{},"159":{},"163":{},"176":{},"186":{},"208":{},"213":{},"266":{},"270":{},"275":{},"281":{},"283":{},"286":{},"287":{},"292":{},"296":{},"314":{},"315":{},"316":{},"317":{},"318":{},"321":{},"322":{},"323":{},"325":{},"326":{},"339":{},"340":{},"365":{},"366":{},"367":{}},"tags":{}}],["ui)/dashboard",{"_index":2712,"title":{},"content":{"354":{}},"tags":{}}],["ui/account/wallet",{"_index":2391,"title":{},"content":{"276":{}},"tags":{}}],["ui/dashboard",{"_index":2393,"title":{},"content":{"260":{}},"tags":{}}],["ullamco",{"_index":408,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["ultim",{"_index":2253,"title":{},"content":{"249":{}},"tags":{}}],["un",{"_index":2548,"title":{},"content":{"294":{}},"tags":{}}],["unalloc",{"_index":1626,"title":{},"content":{"150":{}},"tags":{}}],["unalt",{"_index":2336,"title":{},"content":{"247":{}},"tags":{}}],["unattend",{"_index":2192,"title":{},"content":{"220":{},"223":{}},"tags":{}}],["unauthor",{"_index":2353,"title":{},"content":{"255":{},"347":{}},"tags":{}}],["unavail",{"_index":2413,"title":{},"content":{"262":{},"265":{}},"tags":{}}],["uncensor",{"_index":40,"title":{},"content":{"28":{},"273":{}},"tags":{}}],["uncertain",{"_index":1654,"title":{},"content":{"157":{}},"tags":{}}],["unclaim",{"_index":1283,"title":{},"content":{"55":{},"108":{}},"tags":{}}],["under",{"_index":889,"title":{},"content":{"87":{},"167":{},"172":{},"178":{},"186":{},"238":{},"260":{},"262":{},"299":{},"300":{},"305":{},"306":{},"309":{},"316":{},"341":{},"368":{}},"tags":{}}],["undergo",{"_index":2461,"title":{},"content":{"285":{}},"tags":{}}],["underli",{"_index":807,"title":{},"content":{"76":{}},"tags":{}}],["understand",{"_index":465,"title":{"258":{},"350":{}},"content":{"18":{},"71":{},"105":{},"116":{},"121":{},"159":{},"167":{},"241":{},"242":{},"283":{},"292":{},"296":{},"304":{},"310":{},"311":{},"316":{},"323":{},"324":{},"334":{},"352":{},"353":{},"354":{},"367":{}},"tags":{}}],["unevenli",{"_index":1192,"title":{},"content":{"45":{}},"tags":{}}],["unexpect",{"_index":2406,"title":{},"content":{"260":{},"337":{}},"tags":{}}],["uninstal",{"_index":2235,"title":{"235":{}},"content":{"235":{}},"tags":{}}],["unintend",{"_index":1464,"title":{},"content":{"121":{}},"tags":{}}],["uninterrupt",{"_index":1505,"title":{},"content":{"132":{},"202":{},"262":{}},"tags":{}}],["uniqu",{"_index":1004,"title":{},"content":{"42":{},"61":{},"176":{},"202":{},"269":{},"273":{},"294":{},"305":{},"363":{}},"tags":{}}],["uniswap",{"_index":68,"title":{},"content":{"6":{},"7":{},"8":{},"9":{},"28":{}},"tags":{}}],["univers",{"_index":371,"title":{},"content":{"14":{},"178":{},"247":{},"363":{}},"tags":{}}],["unless",{"_index":570,"title":{},"content":{"32":{},"33":{},"186":{}},"tags":{}}],["unlock",{"_index":2306,"title":{},"content":{"242":{}},"tags":{}}],["unnecessarili",{"_index":2705,"title":{},"content":{"361":{}},"tags":{}}],["unrecover",{"_index":2494,"title":{},"content":{"306":{}},"tags":{}}],["unregist",{"_index":1406,"title":{},"content":{"115":{},"176":{}},"tags":{}}],["unregistr",{"_index":1924,"title":{},"content":{"176":{}},"tags":{}}],["unreli",{"_index":2420,"title":{},"content":{"265":{}},"tags":{}}],["unstabl",{"_index":2431,"title":{},"content":{"268":{}},"tags":{}}],["unstopp",{"_index":2365,"title":{},"content":{"272":{}},"tags":{}}],["unsubscrib",{"_index":1304,"title":{"125":{},"127":{}},"content":{"50":{},"103":{},"107":{},"110":{},"125":{},"127":{},"128":{}},"tags":{}}],["unsubscript",{"_index":1233,"title":{},"content":{"46":{},"47":{}},"tags":{}}],["unsur",{"_index":2014,"title":{},"content":{"178":{}},"tags":{}}],["until",{"_index":312,"title":{},"content":{"14":{},"48":{},"50":{},"54":{},"109":{},"180":{},"323":{},"367":{}},"tags":{}}],["untrack",{"_index":1308,"title":{},"content":{"50":{}},"tags":{}}],["unwav",{"_index":2328,"title":{},"content":{"246":{}},"tags":{}}],["up",{"_index":903,"title":{"131":{},"142":{},"145":{},"173":{},"181":{},"185":{},"278":{},"328":{},"329":{},"347":{}},"content":{"45":{},"91":{},"112":{},"114":{},"115":{},"117":{},"129":{},"130":{},"132":{},"141":{},"143":{},"146":{},"151":{},"159":{},"161":{},"167":{},"170":{},"176":{},"178":{},"180":{},"183":{},"197":{},"198":{},"200":{},"203":{},"205":{},"213":{},"220":{},"229":{},"281":{},"286":{},"292":{},"296":{},"303":{},"305":{},"307":{},"314":{},"320":{},"325":{},"326":{},"334":{},"344":{},"349":{},"353":{},"354":{},"357":{},"363":{},"365":{}},"tags":{}}],["updat",{"_index":481,"title":{"21":{},"200":{}},"content":{"20":{},"21":{},"38":{},"48":{},"72":{},"82":{},"89":{},"90":{},"102":{},"112":{},"114":{},"115":{},"120":{},"159":{},"167":{},"169":{},"172":{},"180":{},"200":{},"203":{},"234":{},"268":{},"295":{}},"tags":{}}],["update=tru",{"_index":2234,"title":{},"content":{"234":{}},"tags":{}}],["updatealert",{"_index":731,"title":{"90":{}},"content":{"72":{},"73":{}},"tags":{}}],["upfront",{"_index":1389,"title":{},"content":{"114":{}},"tags":{}}],["upgrad",{"_index":2447,"title":{},"content":{"278":{},"318":{},"366":{},"368":{}},"tags":{}}],["uphold",{"_index":2327,"title":{},"content":{"246":{}},"tags":{}}],["uploa",{"_index":1136,"title":{},"content":{"40":{}},"tags":{}}],["upload",{"_index":675,"title":{},"content":{"37":{},"38":{},"56":{},"62":{},"72":{},"78":{},"135":{},"260":{},"272":{},"315":{},"316":{},"318":{},"322":{},"323":{},"326":{},"327":{},"366":{},"367":{}},"tags":{}}],["upload_to",{"_index":1116,"title":{},"content":{"38":{}},"tags":{}}],["upnp",{"_index":1969,"title":{"178":{}},"content":{"177":{},"178":{},"179":{},"180":{}},"tags":{}}],["upon",{"_index":555,"title":{},"content":{"31":{},"108":{},"176":{},"206":{},"244":{}},"tags":{}}],["upper",{"_index":2091,"title":{},"content":{"210":{},"283":{},"316":{},"367":{},"368":{}},"tags":{}}],["upstream",{"_index":484,"title":{"21":{}},"content":{"21":{},"22":{},"34":{},"260":{}},"tags":{}}],["upstream_vers",{"_index":581,"title":{},"content":{"33":{},"34":{}},"tags":{}}],["upstreamrepo",{"_index":632,"title":{},"content":{"34":{}},"tags":{}}],["upstreamvers",{"_index":631,"title":{"76":{}},"content":{"34":{},"72":{},"73":{}},"tags":{}}],["uptim",{"_index":2221,"title":{},"content":{"229":{},"267":{}},"tags":{}}],["url",{"_index":781,"title":{"132":{}},"content":{"72":{},"98":{},"99":{},"100":{},"132":{},"133":{},"135":{},"174":{},"176":{},"260":{},"268":{},"306":{},"360":{},"368":{}},"tags":{}}],["url>/eth/v1/beacon/pool/bls_to_execution_chang",{"_index":2662,"title":{},"content":{"368":{}},"tags":{}}],["us",{"_index":152,"title":{"57":{},"117":{},"148":{},"155":{},"263":{},"267":{},"328":{}},"content":{"5":{},"14":{},"17":{},"22":{},"24":{},"34":{},"36":{},"37":{},"38":{},"40":{},"47":{},"57":{},"61":{},"62":{},"65":{},"66":{},"72":{},"78":{},"79":{},"80":{},"86":{},"87":{},"96":{},"98":{},"102":{},"112":{},"114":{},"115":{},"117":{},"118":{},"119":{},"120":{},"121":{},"122":{},"123":{},"124":{},"129":{},"132":{},"134":{},"136":{},"140":{},"143":{},"144":{},"153":{},"155":{},"159":{},"161":{},"162":{},"163":{},"167":{},"168":{},"172":{},"174":{},"175":{},"176":{},"179":{},"180":{},"185":{},"186":{},"187":{},"188":{},"193":{},"194":{},"197":{},"199":{},"203":{},"211":{},"212":{},"213":{},"217":{},"218":{},"220":{},"221":{},"222":{},"223":{},"224":{},"226":{},"228":{},"230":{},"252":{},"256":{},"260":{},"261":{},"262":{},"263":{},"265":{},"266":{},"267":{},"268":{},"274":{},"275":{},"280":{},"282":{},"287":{},"291":{},"296":{},"298":{},"305":{},"314":{},"315":{},"321":{},"322":{},"323":{},"335":{},"358":{},"364":{},"365":{},"366":{},"367":{},"368":{}},"tags":{}}],["usag",{"_index":1131,"title":{},"content":{"40":{},"138":{},"168":{},"201":{},"242":{}},"tags":{}}],["usb",{"_index":1492,"title":{"221":{},"222":{}},"content":{"124":{},"221":{},"222":{},"224":{}},"tags":{}}],["user",{"_index":159,"title":{"202":{},"205":{},"346":{}},"content":{"5":{},"17":{},"34":{},"47":{},"52":{},"55":{},"56":{},"62":{},"70":{},"72":{},"77":{},"78":{},"84":{},"87":{},"88":{},"89":{},"90":{},"91":{},"98":{},"116":{},"118":{},"122":{},"129":{},"140":{},"147":{},"155":{},"159":{},"160":{},"161":{},"167":{},"169":{},"172":{},"185":{},"187":{},"202":{},"220":{},"223":{},"228":{},"229":{},"241":{},"255":{},"256":{},"257":{},"260":{},"263":{},"266":{},"267":{},"273":{},"275":{},"280":{},"290":{},"291":{},"294":{},"295":{},"296":{},"298":{},"299":{},"302":{},"308":{},"315":{},"322":{},"347":{},"351":{},"353":{},"354":{},"366":{}},"tags":{}}],["user'",{"_index":1287,"title":{},"content":{"55":{}},"tags":{}}],["userid",{"_index":1762,"title":{},"content":{"186":{}},"tags":{}}],["userid,bottoken",{"_index":1766,"title":{},"content":{"186":{}},"tags":{}}],["usernam",{"_index":1475,"title":{},"content":{"122":{},"159":{},"178":{},"185":{},"205":{},"207":{}},"tags":{}}],["usr/src/app/config.json",{"_index":894,"title":{},"content":{"87":{}},"tags":{}}],["usr/src/config.json",{"_index":1038,"title":{},"content":{"62":{}},"tags":{}}],["usr/src/dappnode/dncore/.dappnode_profil",{"_index":2187,"title":{},"content":{"218":{}},"tags":{}}],["usr/src/dappnode/dncore/admin",{"_index":2046,"title":{},"content":{"208":{}},"tags":{}}],["usual",{"_index":627,"title":{},"content":{"34":{},"40":{},"141":{},"178":{},"180":{},"260":{}},"tags":{}}],["ut",{"_index":396,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["util",{"_index":479,"title":{},"content":{"20":{},"173":{},"190":{},"229":{},"241":{},"244":{},"262":{},"278":{}},"tags":{}}],["utilis",{"_index":2549,"title":{},"content":{"294":{}},"tags":{}}],["utmost",{"_index":1846,"title":{},"content":{"170":{}},"tags":{}}],["uuid",{"_index":2166,"title":{},"content":{"217":{}},"tags":{}}],["uuid=b311b983",{"_index":2168,"title":{},"content":{"217":{}},"tags":{}}],["ux",{"_index":2665,"title":{},"content":{"339":{}},"tags":{}}],["v",{"_index":1080,"title":{},"content":{"36":{},"37":{},"38":{},"40":{}},"tags":{}}],["v0.2.36",{"_index":858,"title":{},"content":{"82":{}},"tags":{}}],["v1.0.0",{"_index":547,"title":{},"content":{"24":{}},"tags":{}}],["v2",{"_index":218,"title":{},"content":{"8":{}},"tags":{}}],["v4.0.7",{"_index":582,"title":{},"content":{"33":{}},"tags":{}}],["v[0",{"_index":531,"title":{},"content":{"24":{}},"tags":{}}],["valid",{"_index":120,"title":{"49":{},"112":{},"127":{},"279":{},"301":{},"307":{},"313":{},"315":{},"318":{},"322":{},"329":{},"332":{},"364":{},"366":{},"368":{}},"content":{"30":{},"33":{},"43":{},"45":{},"46":{},"47":{},"48":{},"49":{},"50":{},"51":{},"52":{},"53":{},"54":{},"55":{},"58":{},"62":{},"66":{},"67":{},"68":{},"70":{},"72":{},"87":{},"92":{},"102":{},"103":{},"104":{},"105":{},"107":{},"108":{},"110":{},"111":{},"112":{},"113":{},"114":{},"115":{},"120":{},"125":{},"126":{},"127":{},"128":{},"156":{},"170":{},"180":{},"197":{},"229":{},"239":{},"250":{},"256":{},"260":{},"268":{},"273":{},"280":{},"281":{},"282":{},"283":{},"285":{},"288":{},"290":{},"299":{},"302":{},"304":{},"305":{},"306":{},"307":{},"309":{},"310":{},"311":{},"312":{},"313":{},"314":{},"315":{},"316":{},"317":{},"318":{},"320":{},"321":{},"322":{},"323":{},"324":{},"325":{},"326":{},"339":{},"340":{},"341":{},"342":{},"349":{},"364":{},"365":{},"366":{},"367":{},"368":{}},"tags":{}}],["validating?thes",{"_index":1931,"title":{},"content":{"180":{}},"tags":{}}],["validating_from_dappnod",{"_index":600,"title":{},"content":{"33":{}},"tags":{}}],["validator'",{"_index":1280,"title":{},"content":{"55":{},"109":{},"112":{},"115":{},"128":{},"307":{}},"tags":{}}],["validatordao",{"_index":110,"title":{},"content":{"30":{}},"tags":{}}],["validator’",{"_index":2501,"title":{},"content":{"280":{}},"tags":{}}],["valu",{"_index":826,"title":{},"content":{"59":{},"79":{},"80":{},"82":{},"83":{},"86":{},"92":{},"96":{},"154":{},"238":{},"240":{},"253":{}},"tags":{}}],["valuabl",{"_index":1853,"title":{},"content":{"172":{},"244":{},"352":{}},"tags":{}}],["var",{"_index":1019,"title":{},"content":{"62":{}},"tags":{}}],["var/lib/dock",{"_index":2175,"title":{},"content":{"217":{}},"tags":{}}],["vari",{"_index":1598,"title":{},"content":{"162":{},"163":{},"178":{},"222":{},"357":{}},"tags":{}}],["variabl",{"_index":518,"title":{},"content":{"22":{},"33":{},"34":{},"56":{},"62":{}},"tags":{}}],["varieti",{"_index":2382,"title":{},"content":{"275":{}},"tags":{}}],["variou",{"_index":951,"title":{},"content":{"50":{},"98":{},"155":{},"159":{},"176":{},"220":{},"268":{},"273":{},"352":{},"357":{},"360":{}},"tags":{}}],["vast",{"_index":1193,"title":{},"content":{"45":{},"108":{}},"tags":{}}],["vc",{"_index":966,"title":{},"content":{"99":{}},"tags":{}}],["vcpu",{"_index":1666,"title":{},"content":{"159":{}},"tags":{}}],["velit",{"_index":421,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["veniam",{"_index":404,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["verbos",{"_index":1068,"title":{},"content":{"36":{},"37":{},"38":{},"40":{}},"tags":{}}],["veri",{"_index":896,"title":{},"content":{"45":{},"47":{},"89":{},"154":{},"180":{},"211":{},"260":{},"314":{},"315":{},"321":{},"322":{},"365":{},"366":{}},"tags":{}}],["verif",{"_index":2348,"title":{},"content":{"255":{},"256":{}},"tags":{}}],["verifi",{"_index":1575,"title":{},"content":{"145":{},"179":{},"267":{},"268":{},"282":{}},"tags":{}}],["versatil",{"_index":1454,"title":{},"content":{"129":{},"139":{},"140":{},"155":{}},"tags":{}}],["version",{"_index":491,"title":{"59":{},"75":{},"234":{}},"content":{"21":{},"22":{},"24":{},"32":{},"33":{},"36":{},"37":{},"38":{},"40":{},"58":{},"59":{},"72":{},"73":{},"75":{},"76":{},"84":{},"87":{},"88":{},"90":{},"168":{},"169":{},"200":{},"234":{},"260":{},"268":{},"285":{}},"tags":{}}],["vertic",{"_index":2114,"title":{},"content":{"211":{}},"tags":{}}],["via",{"_index":1099,"title":{"118":{},"135":{},"146":{},"188":{},"193":{},"216":{}},"content":{"38":{},"124":{},"129":{},"132":{},"143":{},"159":{},"172":{},"179":{},"185":{},"186":{},"187":{},"188":{},"196":{},"208":{},"275":{},"312":{},"321":{},"358":{}},"tags":{}}],["video",{"_index":2675,"title":{"351":{}},"content":{"327":{},"334":{},"335":{},"336":{},"344":{},"347":{},"350":{},"351":{},"353":{}},"tags":{}}],["view",{"_index":619,"title":{},"content":{"34":{},"77":{},"87":{},"98":{},"162":{},"179":{},"180":{},"206":{},"244":{},"316":{},"323":{},"367":{}},"tags":{}}],["virtual",{"_index":1533,"title":{},"content":{"136":{},"161":{}},"tags":{}}],["visibl",{"_index":609,"title":{},"content":{"34":{}},"tags":{}}],["visit",{"_index":1397,"title":{},"content":{"114":{},"176":{},"183":{},"186":{},"243":{},"268":{},"276":{},"281":{},"286":{}},"tags":{}}],["vist",{"_index":1284,"title":{},"content":{"55":{}},"tags":{}}],["visual",{"_index":2286,"title":{},"content":{"242":{},"244":{}},"tags":{}}],["vital",{"_index":2352,"title":{},"content":{"255":{},"296":{}},"tags":{}}],["voic",{"_index":78,"title":{},"content":{"28":{}},"tags":{}}],["voil",{"_index":2625,"title":{},"content":{"319":{},"326":{}},"tags":{}}],["volum",{"_index":583,"title":{},"content":{"33":{},"62":{},"180":{},"234":{},"260":{},"268":{},"315":{},"322":{},"366":{}},"tags":{}}],["volumenam",{"_index":1033,"title":{},"content":{"62":{}},"tags":{}}],["volunt",{"_index":1869,"title":{},"content":{"172":{}},"tags":{}}],["volupt",{"_index":420,"title":{},"content":{"15":{},"16":{}},"tags":{}}],["vote",{"_index":45,"title":{},"content":{"28":{},"29":{}},"tags":{}}],["vpn",{"_index":714,"title":{"132":{},"136":{},"137":{},"143":{},"348":{}},"content":{"72":{},"89":{},"90":{},"117":{},"119":{},"129":{},"130":{},"132":{},"135":{},"136":{},"138":{},"139":{},"140":{},"141":{},"143":{},"144":{},"159":{},"176":{},"180":{},"197":{},"218":{},"344":{},"348":{},"354":{},"358":{}},"tags":{}}],["vpn/wireguard",{"_index":1967,"title":{},"content":{"180":{}},"tags":{}}],["vs",{"_index":1217,"title":{"140":{}},"content":{"45":{},"220":{}},"tags":{}}],["vulner",{"_index":1487,"title":{},"content":{"123":{},"200":{}},"tags":{}}],["wagyu",{"_index":1943,"title":{},"content":{"180":{},"315":{},"322":{},"366":{},"368":{}},"tags":{}}],["wait",{"_index":1363,"title":{},"content":{"109":{},"115":{},"120":{},"159":{},"180":{},"187":{},"315":{},"319":{},"322":{},"326":{},"366":{}},"tags":{}}],["walk",{"_index":1554,"title":{},"content":{"141":{},"198":{}},"tags":{}}],["wallet",{"_index":104,"title":{},"content":{"29":{},"104":{},"107":{},"111":{},"126":{},"276":{},"282":{},"287":{},"304":{},"307":{},"316":{},"319":{},"323":{},"352":{},"367":{}},"tags":{}}],["wan",{"_index":2020,"title":{},"content":{"178":{}},"tags":{}}],["want",{"_index":460,"title":{"127":{},"150":{},"192":{}},"content":{"17":{},"19":{},"62":{},"103":{},"107":{},"112":{},"115":{},"119":{},"127":{},"136":{},"150":{},"153":{},"159":{},"167":{},"175":{},"179":{},"180":{},"190":{},"192":{},"208":{},"213":{},"217":{},"219":{},"222":{},"229":{},"231":{},"234":{},"256":{},"260":{},"266":{},"282":{},"283":{},"309":{},"315":{},"317":{},"318":{},"322":{},"325":{},"326":{},"327":{},"349":{},"357":{},"366":{}},"tags":{}}],["warn",{"_index":709,"title":{"89":{}},"content":{"72":{},"73":{},"112":{},"115":{},"128":{}},"tags":{}}],["wasn't",{"_index":1385,"title":{},"content":{"112":{}},"tags":{}}],["wast",{"_index":1625,"title":{},"content":{"150":{}},"tags":{}}],["watch",{"_index":2681,"title":{},"content":{"327":{},"334":{}},"tags":{}}],["way",{"_index":76,"title":{},"content":{"28":{},"43":{},"62":{},"102":{},"116":{},"120":{},"129":{},"143":{},"167":{},"172":{},"173":{},"176":{},"201":{},"211":{},"260":{},"261":{},"263":{},"315":{},"322":{},"346":{},"348":{},"350":{},"366":{}},"tags":{}}],["we'll",{"_index":1460,"title":{},"content":{"129":{},"176":{},"306":{},"335":{},"347":{}},"tags":{}}],["we'r",{"_index":467,"title":{},"content":{"19":{},"113":{}},"tags":{}}],["we'v",{"_index":2673,"title":{},"content":{"343":{},"344":{}},"tags":{}}],["wealth",{"_index":2314,"title":{},"content":{"244":{}},"tags":{}}],["web",{"_index":38,"title":{},"content":{"5":{},"28":{},"56":{},"72":{},"78":{},"118":{},"133":{},"159":{},"160":{},"163":{},"174":{},"178":{},"189":{},"195":{},"266":{},"282":{},"346":{}},"tags":{}}],["web3",{"_index":1609,"title":{},"content":{"147":{},"276":{},"282":{},"319":{},"349":{}},"tags":{}}],["web3sign",{"_index":1830,"title":{"326":{}},"content":{"170":{},"180":{},"299":{},"300":{},"309":{},"314":{},"315":{},"316":{},"318":{},"322":{},"323":{},"326":{},"365":{},"366":{},"367":{}},"tags":{}}],["webapp",{"_index":2505,"title":{},"content":{"282":{}},"tags":{}}],["webserv",{"_index":689,"title":{},"content":{"72":{},"81":{}},"tags":{}}],["websit",{"_index":667,"title":{"111":{},"126":{}},"content":{"55":{},"72":{},"78":{},"98":{},"102":{},"104":{},"109":{},"111":{},"112":{},"120":{},"125":{},"126":{},"134":{},"144":{},"183":{},"250":{},"272":{}},"tags":{}}],["website/contract",{"_index":1948,"title":{},"content":{"180":{}},"tags":{}}],["week",{"_index":227,"title":{},"content":{"10":{},"326":{}},"tags":{}}],["weekli",{"_index":224,"title":{"10":{}},"content":{"10":{}},"tags":{}}],["welcom",{"_index":443,"title":{"17":{},"41":{}},"content":{"17":{},"18":{},"41":{},"72":{},"78":{},"175":{},"176":{},"209":{},"275":{},"344":{},"351":{}},"tags":{}}],["well",{"_index":956,"title":{},"content":{"52":{},"98":{},"139":{},"145":{},"180":{},"238":{},"241":{},"242":{},"260":{},"286":{}},"tags":{}}],["went",{"_index":1984,"title":{},"content":{"180":{}},"tags":{}}],["wether",{"_index":1822,"title":{},"content":{"169":{},"170":{}},"tags":{}}],["wg",{"_index":1586,"title":{},"content":{"146":{}},"tags":{}}],["wg0",{"_index":1588,"title":{},"content":{"146":{}},"tags":{}}],["wget",{"_index":2227,"title":{},"content":{"231":{},"232":{},"234":{},"235":{}},"tags":{}}],["what'",{"_index":2692,"title":{},"content":{"346":{}},"tags":{}}],["whenev",{"_index":1264,"title":{},"content":{"53":{},"180":{},"260":{}},"tags":{}}],["wherea",{"_index":374,"title":{},"content":{"14":{}},"tags":{}}],["wherev",{"_index":2031,"title":{},"content":{"197":{}},"tags":{}}],["whether",{"_index":452,"title":{},"content":{"17":{},"151":{},"244":{},"273":{},"349":{},"351":{}},"tags":{}}],["white",{"_index":752,"title":{},"content":{"72":{},"92":{}},"tags":{}}],["whole",{"_index":2280,"title":{},"content":{"241":{},"323":{},"367":{}},"tags":{}}],["whose",{"_index":948,"title":{},"content":{"62":{},"96":{},"257":{}},"tags":{}}],["wi",{"_index":1437,"title":{"163":{},"164":{},"165":{},"193":{}},"content":{"119":{},"163":{},"164":{},"165":{},"179":{},"194":{},"196":{}},"tags":{}}],["wide",{"_index":1495,"title":{},"content":{"130":{},"159":{},"160":{},"280":{}},"tags":{}}],["wider",{"_index":162,"title":{},"content":{"5":{},"302":{}},"tags":{}}],["widespread",{"_index":2275,"title":{},"content":{"240":{}},"tags":{}}],["wifi",{"_index":1451,"title":{},"content":{"129":{},"136":{},"194":{},"197":{},"218":{},"358":{}},"tags":{}}],["will",{"_index":1780,"title":{},"content":{"166":{}},"tags":{}}],["window",{"_index":1525,"title":{},"content":{"135":{},"146":{},"210":{},"368":{}},"tags":{}}],["windowslaunch",{"_index":1524,"title":{},"content":{"135":{},"146":{}},"tags":{}}],["wipe",{"_index":2189,"title":{},"content":{"219":{},"260":{}},"tags":{}}],["wire",{"_index":2157,"title":{},"content":{"215":{}},"tags":{}}],["wireguard",{"_index":1453,"title":{"138":{},"141":{},"142":{},"144":{},"145":{},"146":{},"185":{},"187":{},"188":{}},"content":{"129":{},"136":{},"138":{},"141":{},"143":{},"144":{},"145":{},"146":{},"159":{},"180":{},"185":{},"186":{},"187":{},"188":{},"189":{},"197":{},"218":{}},"tags":{}}],["wish",{"_index":623,"title":{},"content":{"34":{},"190":{},"194":{},"292":{},"296":{},"310":{}},"tags":{}}],["withdraw",{"_index":1281,"title":{"317":{},"325":{},"331":{},"368":{}},"content":{"55":{},"102":{},"104":{},"107":{},"108":{},"111":{},"120":{},"126":{},"315":{},"317":{},"318":{},"319":{},"322":{},"325":{},"326":{},"366":{},"368":{}},"tags":{}}],["withdrawn",{"_index":2640,"title":{},"content":{"317":{}},"tags":{}}],["within",{"_index":615,"title":{},"content":{"34":{},"50":{},"53":{},"116":{},"143":{},"145":{},"161":{},"172":{},"177":{},"229":{},"244":{},"249":{},"256":{}},"tags":{}}],["without",{"_index":1123,"title":{"333":{},"341":{}},"content":{"38":{},"40":{},"103":{},"110":{},"112":{},"116":{},"120":{},"147":{},"149":{},"151":{},"156":{},"157":{},"158":{},"159":{},"161":{},"172":{},"173":{},"211":{},"220":{},"234":{},"236":{},"260":{},"265":{},"290":{},"296":{},"298":{},"308":{},"310":{},"339":{},"341":{},"358":{}},"tags":{}}],["wizard",{"_index":614,"title":{"56":{}},"content":{"34":{},"56":{},"59":{},"60":{},"62":{},"300":{}},"tags":{}}],["wizard.yml",{"_index":974,"title":{},"content":{"57":{}},"tags":{}}],["won't",{"_index":1387,"title":{},"content":{"112":{},"176":{},"199":{},"210":{},"306":{}},"tags":{}}],["wonder",{"_index":2691,"title":{},"content":{"346":{}},"tags":{}}],["wont",{"_index":1404,"title":{},"content":{"115":{}},"tags":{}}],["word",{"_index":297,"title":{},"content":{"13":{},"50":{},"77":{},"112":{}},"tags":{}}],["work",{"_index":350,"title":{"242":{}},"content":{"14":{},"34":{},"41":{},"46":{},"48":{},"72":{},"87":{},"89":{},"105":{},"116":{},"118":{},"122":{},"129":{},"143":{},"176":{},"199":{},"211":{},"244":{},"260":{},"263":{},"268":{},"311":{},"316":{},"317":{},"320":{},"323":{},"334":{},"335":{},"346":{},"350":{},"367":{}},"tags":{}}],["workflow",{"_index":477,"title":{"22":{},"24":{}},"content":{"20":{},"24":{}},"tags":{}}],["working!ar",{"_index":1968,"title":{},"content":{"180":{}},"tags":{}}],["workshop",{"_index":2679,"title":{},"content":{"327":{}},"tags":{}}],["world",{"_index":1660,"title":{},"content":{"158":{},"197":{},"203":{},"238":{},"362":{}},"tags":{}}],["worldwid",{"_index":1868,"title":{},"content":{"172":{}},"tags":{}}],["worri",{"_index":1174,"title":{},"content":{"43":{},"156":{},"345":{}},"tags":{}}],["worth",{"_index":2313,"title":{},"content":{"244":{}},"tags":{}}],["wouldn't",{"_index":1903,"title":{},"content":{"175":{}},"tags":{}}],["wrap",{"_index":804,"title":{},"content":{"76":{}},"tags":{}}],["write",{"_index":978,"title":{},"content":{"57":{},"168":{},"319":{}},"tags":{}}],["written",{"_index":2708,"title":{},"content":{"351":{},"352":{}},"tags":{}}],["wrong",{"_index":1307,"title":{},"content":{"50":{},"180":{}},"tags":{}}],["wrong?web3sign",{"_index":1978,"title":{},"content":{"180":{}},"tags":{}}],["x",{"_index":2661,"title":{},"content":{"368":{}},"tags":{}}],["x86",{"_index":879,"title":{},"content":{"86":{}},"tags":{}}],["xbzz",{"_index":2385,"title":{},"content":{"275":{}},"tags":{}}],["xdai",{"_index":26,"title":{},"content":{"6":{},"9":{},"12":{},"14":{},"27":{},"28":{},"274":{},"314":{},"317":{},"319":{}},"tags":{}}],["xz",{"_index":2225,"title":{},"content":{"231":{}},"tags":{}}],["y",{"_index":1070,"title":{},"content":{"36":{}},"tags":{}}],["yaml",{"_index":976,"title":{},"content":{"57":{}},"tags":{}}],["ye",{"_index":1071,"title":{},"content":{"36":{},"323":{},"341":{}},"tags":{}}],["year",{"_index":309,"title":{},"content":{"14":{},"43":{},"44":{}},"tags":{}}],["yellowcard",{"_index":1267,"title":{},"content":{"50":{},"54":{}},"tags":{}}],["yield",{"_index":2543,"title":{},"content":{"294":{}},"tags":{}}],["you'd",{"_index":462,"title":{},"content":{"18":{},"119":{},"133":{}},"tags":{}}],["you'll",{"_index":603,"title":{},"content":{"33":{},"41":{},"109":{},"132":{},"133":{},"136":{},"143":{},"165":{},"178":{},"206":{},"208":{},"213":{},"222":{},"223":{},"244":{},"260":{},"281":{},"282":{},"283":{},"286":{},"287":{},"303":{},"304":{},"305":{},"309":{},"316":{},"344":{},"345":{},"351":{},"358":{},"364":{},"368":{}},"tags":{}}],["you'r",{"_index":453,"title":{},"content":{"17":{},"110":{},"117":{},"119":{},"129":{},"140":{},"143":{},"151":{},"178":{},"180":{},"209":{},"213":{},"223":{},"229":{},"244":{},"292":{},"310":{},"311":{},"346":{},"347":{},"349":{},"350":{},"351":{},"358":{},"360":{},"367":{},"368":{}},"tags":{}}],["you'v",{"_index":1494,"title":{},"content":{"124":{},"134":{},"208":{},"211":{},"223":{},"224":{},"357":{},"358":{}},"tags":{}}],["yougetsign",{"_index":2025,"title":{},"content":{"179":{}},"tags":{}}],["your_inst",{"_index":1928,"title":{},"content":{"176":{}},"tags":{}}],["yourkeypair",{"_index":1772,"title":{},"content":{"187":{}},"tags":{}}],["yourself",{"_index":1361,"title":{},"content":{"104":{},"180":{},"256":{},"310":{}},"tags":{}}],["youtub",{"_index":2680,"title":{},"content":{"327":{}},"tags":{}}],["you’r",{"_index":669,"title":{},"content":{"72":{},"78":{}},"tags":{}}],["you’v",{"_index":2520,"title":{},"content":{"292":{},"315":{},"322":{},"366":{}},"tags":{}}],["zk",{"_index":2453,"title":{},"content":{"269":{}},"tags":{}}]],"pipeline":["stemmer"]}} \ No newline at end of file diff --git a/search-index.json b/search-index.json new file mode 100644 index 000000000..808bd4b8e --- /dev/null +++ b/search-index.json @@ -0,0 +1 @@ +[{"documents":[{"i":1,"t":"","u":"/blog/archive","b":[]},{"i":2,"t":"First Blog Post","u":"/blog/first-blog-post","b":[]},{"i":4,"t":"MDX Blog Post","u":"/blog/mdx-blog-post","b":[]},{"i":6,"t":"Long Blog Post","u":"/blog/long-blog-post","b":[]},{"i":8,"t":"Governance","u":"/docs/dao","b":["DAO"]},{"i":17,"t":"Welcome","u":"/blog/welcome","b":[]},{"i":19,"t":"Dappnode DAO FAQ","u":"/docs/dao/faq","b":["DAO"]},{"i":21,"t":"The NODE Economy","u":"/docs/dao/node-basics","b":["DAO"]},{"i":28,"t":"Liquidity Mining","u":"/docs/dao/liquidity-mining","b":["DAO"]},{"i":38,"t":"NODEdrop","u":"/docs/dao/node-drop","b":[]},{"i":40,"t":"Welcome to the Developer Documentation!","u":"/docs/dev","b":["Dev Docs"]},{"i":46,"t":"NODEstream","u":"/docs/dao/node-stream","b":[]},{"i":48,"t":"GitHub Actions for Dappnode Packages","u":"/docs/dev/github-actions","b":["Dev Docs"]},{"i":58,"t":"Wizard Reference","u":"/docs/dev/references/setup-wizard","b":["Dev Docs","File references"]},{"i":88,"t":"Main commands","u":"/docs/dev/sdk/commands","b":["Dev Docs","DappnodeSDK"]},{"i":96,"t":"DappnodeSDK","u":"/docs/dev/sdk/overview","b":["Dev Docs","DappnodeSDK"]},{"i":100,"t":"Deep Dive into Smooth!","u":"/docs/smooth/deep-dive-into-smooth/overview","b":["Smooth","Deep dive into Smooth"]},{"i":102,"t":"Rewards","u":"/docs/smooth/deep-dive-into-smooth/rewards","b":["Smooth","Deep dive into Smooth"]},{"i":110,"t":"Smooth's architecture","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","b":["Smooth","Deep dive into Smooth"]},{"i":116,"t":"Welcome to Smooth, Dappnode's MEV Smoothing Pool!","u":"/docs/smooth","b":["Smooth"]},{"i":126,"t":"Smooth Validator States","u":"/docs/smooth/deep-dive-into-smooth/states","b":["Smooth","Deep dive into Smooth"]},{"i":132,"t":"FAQ & Glossary","u":"/docs/smooth/faq-glossary","b":["Smooth"]},{"i":137,"t":"Automatic Subscription","u":"/docs/smooth/subscribe-to-smooth/automatic","b":["Smooth","Subscribe to Smooth!"]},{"i":143,"t":"Subscribing to Smooth","u":"/docs/smooth/subscribe-to-smooth/overview","b":["Smooth","Subscribe to Smooth!"]},{"i":145,"t":"Manual Subscription","u":"/docs/smooth/subscribe-to-smooth/manual","b":["Smooth","Subscribe to Smooth!"]},{"i":159,"t":"Unsubscribing from Smooth.","u":"/docs/smooth/unsubscribe-from-smooth","b":["Smooth"]},{"i":167,"t":"Local Proxy Access to Dappnode","u":"/docs/user/access-your-dappnode/local","b":["User Docs","Access your dappnode"]},{"i":175,"t":"🌐 Access your Dappnode","u":"/docs/user/access-your-dappnode/overview","b":["User Docs","Access your dappnode"]},{"i":177,"t":"Terminal Access to Dappnode","u":"/docs/user/access-your-dappnode/terminal","b":["User Docs","Access your dappnode"]},{"i":185,"t":"OpenVPN Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/openvpn","b":["User Docs","Access your dappnode","VPN"]},{"i":196,"t":"VPN Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/overview","b":["User Docs","Access your dappnode","VPN"]},{"i":205,"t":"Dappnode Package (DNP) manifest","u":"/docs/dev/references/manifest","b":["Dev Docs","File references"]},{"i":267,"t":"WireGuard Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/wireguard","b":["User Docs","Access your dappnode","VPN"]},{"i":278,"t":"What is Dappnode Cloud?","u":"/docs/user/dappnode-cloud/overview","b":["User Docs","Dappnode Cloud"]},{"i":302,"t":"Wi-Fi Access to Dappnode","u":"/docs/user/access-your-dappnode/wifi","b":["User Docs","Access your dappnode"]},{"i":308,"t":"FAQs & Troubleshooting","u":"/docs/user/dappnode-cloud/providers/aws/faqs","b":["User Docs","Dappnode Cloud","Cloud Providers","AWS"]},{"i":310,"t":"AWS","u":"/docs/user/dappnode-cloud/providers/aws/overview","b":["User Docs","Dappnode Cloud","Cloud Providers","AWS"]},{"i":316,"t":"Ethical Metrics","u":"/docs/user/ethical-metrics/overview","b":["User Docs","Ethical metrics"]},{"i":320,"t":"Setting up Ethical Metrics","u":"/docs/user/ethical-metrics/setup","b":["User Docs","Ethical metrics"]},{"i":326,"t":"Troubleshooting","u":"/docs/user/ethical-metrics/troubleshooting","b":["User Docs","Ethical metrics"]},{"i":328,"t":"FAQs","u":"/docs/user/faqs","b":["User Docs"]},{"i":330,"t":"Metrics Collected by Ethical Metrics","u":"/docs/user/ethical-metrics/metrics","b":["User Docs","Ethical metrics"]},{"i":338,"t":"How to Set Up an Instance","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","b":["User Docs","Dappnode Cloud","Cloud Providers","AWS"]},{"i":356,"t":"Access Dappnode via Wi-Fi","u":"/docs/user/getting-started/access-dappnode-via-wifi","b":["User Docs","Getting started"]},{"i":364,"t":"Connect your dappnode to the router and power","u":"/docs/user/getting-started/connect-dappnode-to-the-router","b":["User Docs","Getting started"]},{"i":370,"t":"Next Steps","u":"/docs/user/getting-started/next-steps","b":["User Docs","Getting started"]},{"i":372,"t":"Register","u":"/docs/user/getting-started/register","b":["User Docs","Getting started"]},{"i":381,"t":"More coming soon","u":"/docs/user/dappnode-cloud/providers/coming-soon","b":["User Docs","Dappnode Cloud","Cloud Providers"]},{"i":383,"t":"Choose your path","u":"/docs/user/getting-started/choose-your-path","b":["User Docs","Getting started"]},{"i":389,"t":"Setup","u":"/docs/user/getting-started/setup","b":["User Docs","Getting started"]},{"i":401,"t":"Maintenance","u":"/docs/user/hardware/maintenance","b":["User Docs","Hardware"]},{"i":409,"t":"Temperature","u":"/docs/user/hardware/temperature","b":["User Docs","Hardware"]},{"i":411,"t":"Hardware","u":"/docs/user/hardware/overview","b":["User Docs","Hardware"]},{"i":413,"t":"Docker compose file","u":"/docs/dev/references/docker-compose","b":["Dev Docs","File references"]},{"i":421,"t":"Install - ARM","u":"/docs/user/install/arm","b":["User Docs","Install"]},{"i":428,"t":"Dappnode commands","u":"/docs/user/install/dappnode-commands","b":["User Docs","Install"]},{"i":430,"t":"Installation Overview","u":"/docs/user/install/overview","b":["User Docs","Install"]},{"i":439,"t":"ISO Installation","u":"/docs/user/install/iso","b":["User Docs","Install"]},{"i":451,"t":"Script installation","u":"/docs/user/install/script","b":["User Docs","Install"]},{"i":463,"t":"Bitcoin","u":"/docs/user/packages/bitcoin","b":["User Docs","Packages"]},{"i":470,"t":"Avalanche","u":"/docs/user/packages/avalanche","b":["User Docs","Packages"]},{"i":475,"t":"Ethereum Classic","u":"/docs/user/packages/ethclassic","b":["User Docs","Packages"]},{"i":480,"t":"Dappnode Monitoring Service (DMS)","u":"/docs/user/packages/dms","b":["User Docs","Packages"]},{"i":488,"t":"Monero","u":"/docs/user/packages/monero","b":["User Docs","Packages"]},{"i":493,"t":"Packages' Signature","u":"/docs/user/packages/signature","b":["User Docs","Packages"]},{"i":500,"t":"Guide to Installing Bee Node on Dappnode","u":"/docs/user/packages/swarm","b":["User Docs","Packages"]},{"i":511,"t":"Understanding Dappnode Packages","u":"/docs/user/packages/understanding-dappnode-packages","b":["User Docs","Packages"]},{"i":515,"t":"Ethereum repository","u":"/docs/user/repository/ethereum","b":["User Docs","Repository"]},{"i":523,"t":"IPFS repository","u":"/docs/user/repository/ipfs","b":["User Docs","Repository"]},{"i":531,"t":"Ethereum Rollups: An Overview","u":"/docs/user/rollups/overview","b":["User Docs","Rollups"]},{"i":535,"t":"Optimism Rollup","u":"/docs/user/rollups/optimism","b":["User Docs","Rollups"]},{"i":539,"t":"Diva package for Dappnode","u":"/docs/user/staking/ethereum/dvt-technologies/diva","b":["User Docs","Staking","Ethereum","DVT Technologies"]},{"i":548,"t":"Obol Distributed Validator package for Dappnode","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","b":["User Docs","Staking","Ethereum","DVT Technologies"]},{"i":561,"t":"SSV Distributed Validator package for Dappnode","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","b":["User Docs","Staking","Ethereum","DVT Technologies"]},{"i":570,"t":"StakeWise","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","b":["User Docs","Staking","Ethereum","LSD Pools"]},{"i":577,"t":"Rocketpool","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","b":["User Docs","Staking","Ethereum","LSD Pools"]},{"i":584,"t":"Holesky Testnet","u":"/docs/user/staking/ethereum/solo/holesky","b":["User Docs","Staking","Ethereum","Solo Staking"]},{"i":592,"t":"Stakehouse","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","b":["User Docs","Staking","Ethereum","LSD Pools"]},{"i":599,"t":"Ethereum mainnet","u":"/docs/user/staking/ethereum/solo/mainnet","b":["User Docs","Staking","Ethereum","Solo Staking"]},{"i":613,"t":"Earn with Staking in Dappnode","u":"/docs/user/staking/overview","b":["User Docs","Staking"]},{"i":624,"t":"Gnosis Chain","u":"/docs/user/staking/gnosis-chain/solo","b":["User Docs","Staking","Gnosis Chain"]},{"i":640,"t":"Crash Course","u":"/docs/user/videos-and-tutorials/crash-course","b":["User Docs","Videos and tutorials"]},{"i":648,"t":"2. Configuring your Dappnode","u":"/docs/user/videos-and-tutorials/driving-school/configuration","b":["User Docs","Videos and tutorials","Driving School"]},{"i":656,"t":"1. Initial Dappnode Setup","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","b":["User Docs","Videos and tutorials","Driving School"]},{"i":670,"t":"How to Connect to My Blockchain Node","u":"/docs/user/videos-and-tutorials/guides/connect-node","b":["User Docs","Videos and tutorials","Guides"]},{"i":680,"t":"Videos and Tutorials","u":"/docs/user/videos-and-tutorials/overview","b":[]},{"i":692,"t":"LUKSO","u":"/docs/user/staking/lukso/solo","b":["User Docs","Staking","LUKSO"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[]],["t/2",[0,3.687,1,2.92,2,2.92]],["t/4",[1,2.92,2,2.92,3,3.687]],["t/6",[1,2.92,2,2.92,4,3.687]],["t/8",[5,5.344]],["t/17",[6,4.232]],["t/19",[7,1.196,8,3.687,9,2.693]],["t/21",[10,3.456,11,4.364]],["t/28",[12,4.364,13,4.364]],["t/38",[14,5.344]],["t/40",[6,2.92,15,3.687,16,3.687]],["t/46",[17,5.344]],["t/48",[7,1.035,18,3.193,19,3.193,20,1.931]],["t/58",[21,4.364,22,4.364]],["t/88",[23,4.364,24,3.816]],["t/96",[25,5.344]],["t/100",[26,3.687,27,3.687,28,2.511]],["t/102",[29,5.344]],["t/110",[30,4.364,31,4.364]],["t/116",[6,1.993,28,2.676,32,2.517,33,2.517,34,2.517]],["t/126",[28,2.511,35,2.92,36,3.687]],["t/132",[9,2.693,37,2.92,38,3.687]],["t/137",[39,4.364,40,3.816]],["t/143",[28,2.971,41,4.364]],["t/145",[40,3.816,42,4.364]],["t/159",[28,2.971,43,4.364]],["t/167",[7,1.035,44,3.193,45,3.193,46,1.833]],["t/175",[7,1.196,37,2.92,46,2.117]],["t/177",[7,1.196,46,2.117,47,3.687]],["t/185",[7,1.196,46,2.117,48,3.687]],["t/196",[7,1.196,46,2.117,49,3.687]],["t/205",[7,1.035,20,1.931,50,3.193,51,3.193]],["t/267",[7,1.196,46,2.117,52,3.687]],["t/278",[7,1.415,53,4.364]],["t/302",[7,1.035,46,1.833,54,2.792,55,2.792]],["t/308",[9,2.693,37,2.92,56,3.225]],["t/310",[57,5.344]],["t/316",[58,3.456,59,3.456]],["t/320",[58,2.528,59,2.528,60,2.792,61,2.792]],["t/326",[56,4.673]],["t/328",[9,3.902]],["t/330",[58,2.528,59,3.728,62,3.193]],["t/338",[60,3.225,61,3.225,63,3.687]],["t/356",[7,0.913,46,1.616,54,2.462,55,2.462,64,2.815]],["t/364",[7,1.035,65,2.792,66,3.193,67,3.193]],["t/370",[68,4.364,69,4.364]],["t/372",[70,5.344]],["t/381",[71,3.687,72,3.687,73,3.687]],["t/383",[74,4.364,75,4.364]],["t/389",[76,4.673]],["t/401",[77,5.344]],["t/409",[78,5.344]],["t/411",[79,5.344]],["t/413",[80,3.687,81,3.687,82,3.687]],["t/421",[83,2.971,84,4.364]],["t/428",[7,1.415,24,3.816]],["t/430",[83,2.971,85,3.816]],["t/439",[83,2.971,86,4.364]],["t/451",[83,2.971,87,4.364]],["t/463",[88,5.344]],["t/470",[89,5.344]],["t/475",[90,3.186,91,4.364]],["t/480",[7,1.035,92,3.193,93,3.193,94,3.193]],["t/488",[95,5.344]],["t/493",[20,2.639,96,4.364]],["t/500",[7,0.913,10,2.229,83,1.917,97,2.815,98,2.815]],["t/511",[7,1.196,20,2.23,99,3.687]],["t/515",[90,3.186,100,3.816]],["t/523",[100,3.816,101,4.364]],["t/531",[85,3.225,90,2.693,102,3.225]],["t/535",[102,3.816,103,4.364]],["t/539",[7,1.196,20,2.23,104,3.687]],["t/548",[7,0.913,20,1.702,35,2.229,105,2.815,106,2.462]],["t/561",[7,0.913,20,1.702,35,2.229,106,2.462,107,2.815]],["t/570",[108,5.344]],["t/577",[109,5.344]],["t/584",[110,4.364,111,4.364]],["t/592",[112,5.344]],["t/599",[90,3.186,113,4.364]],["t/613",[7,1.196,114,3.687,115,3.687]],["t/624",[116,4.364,117,4.364]],["t/640",[118,4.364,119,4.364]],["t/648",[7,1.196,120,3.687,121,3.687]],["t/656",[7,1.035,76,2.792,122,3.193,123,3.193]],["t/670",[10,2.92,65,3.225,124,3.687]],["t/680",[125,4.364,126,4.364]],["t/692",[127,5.344]]],"invertedIndex":[["",{"_index":37,"t":{"132":{"position":[[4,1]]},"175":{"position":[[0,2]]},"308":{"position":[[5,1]]}}}],["1",{"_index":122,"t":{"656":{"position":[[0,2]]}}}],["2",{"_index":120,"t":{"648":{"position":[[0,2]]}}}],["access",{"_index":46,"t":{"167":{"position":[[12,6]]},"175":{"position":[[3,6]]},"177":{"position":[[9,6]]},"185":{"position":[[8,6]]},"196":{"position":[[4,6]]},"267":{"position":[[10,6]]},"302":{"position":[[6,6]]},"356":{"position":[[0,6]]}}}],["action",{"_index":19,"t":{"48":{"position":[[7,7]]}}}],["architectur",{"_index":31,"t":{"110":{"position":[[9,12]]}}}],["arm",{"_index":84,"t":{"421":{"position":[[10,3]]}}}],["automat",{"_index":39,"t":{"137":{"position":[[0,9]]}}}],["avalanch",{"_index":89,"t":{"470":{"position":[[0,9]]}}}],["aw",{"_index":57,"t":{"310":{"position":[[0,3]]}}}],["bee",{"_index":98,"t":{"500":{"position":[[20,3]]}}}],["bitcoin",{"_index":88,"t":{"463":{"position":[[0,7]]}}}],["blockchain",{"_index":124,"t":{"670":{"position":[[21,10]]}}}],["blog",{"_index":1,"t":{"2":{"position":[[6,4]]},"4":{"position":[[4,4]]},"6":{"position":[[5,4]]}}}],["chain",{"_index":117,"t":{"624":{"position":[[7,5]]}}}],["choos",{"_index":74,"t":{"383":{"position":[[0,6]]}}}],["classic",{"_index":91,"t":{"475":{"position":[[9,7]]}}}],["cloud",{"_index":53,"t":{"278":{"position":[[17,6]]}}}],["collect",{"_index":62,"t":{"330":{"position":[[8,9]]}}}],["come",{"_index":72,"t":{"381":{"position":[[5,6]]}}}],["command",{"_index":24,"t":{"88":{"position":[[5,8]]},"428":{"position":[[9,8]]}}}],["compos",{"_index":81,"t":{"413":{"position":[[7,7]]}}}],["configur",{"_index":121,"t":{"648":{"position":[[3,11]]}}}],["connect",{"_index":65,"t":{"364":{"position":[[0,7]]},"670":{"position":[[7,7]]}}}],["cours",{"_index":119,"t":{"640":{"position":[[6,6]]}}}],["crash",{"_index":118,"t":{"640":{"position":[[0,5]]}}}],["dao",{"_index":8,"t":{"19":{"position":[[9,3]]}}}],["dappnod",{"_index":7,"t":{"19":{"position":[[0,8]]},"48":{"position":[[19,8]]},"167":{"position":[[22,8]]},"175":{"position":[[15,8]]},"177":{"position":[[19,8]]},"185":{"position":[[18,8]]},"196":{"position":[[14,8]]},"205":{"position":[[0,8]]},"267":{"position":[[20,8]]},"278":{"position":[[8,8]]},"302":{"position":[[16,8]]},"356":{"position":[[7,8]]},"364":{"position":[[13,8]]},"428":{"position":[[0,8]]},"480":{"position":[[0,8]]},"500":{"position":[[32,8]]},"511":{"position":[[14,8]]},"539":{"position":[[17,8]]},"548":{"position":[[39,8]]},"561":{"position":[[38,8]]},"613":{"position":[[21,8]]},"648":{"position":[[20,8]]},"656":{"position":[[11,8]]}}}],["dappnode'",{"_index":32,"t":{"116":{"position":[[19,10]]}}}],["dappnodesdk",{"_index":25,"t":{"96":{"position":[[0,11]]}}}],["deep",{"_index":26,"t":{"100":{"position":[[0,4]]}}}],["develop",{"_index":15,"t":{"40":{"position":[[15,9]]}}}],["distribut",{"_index":106,"t":{"548":{"position":[[5,11]]},"561":{"position":[[4,11]]}}}],["diva",{"_index":104,"t":{"539":{"position":[[0,4]]}}}],["dive",{"_index":27,"t":{"100":{"position":[[5,4]]}}}],["dm",{"_index":94,"t":{"480":{"position":[[28,5]]}}}],["dnp",{"_index":50,"t":{"205":{"position":[[17,5]]}}}],["docker",{"_index":80,"t":{"413":{"position":[[0,6]]}}}],["document",{"_index":16,"t":{"40":{"position":[[25,14]]}}}],["earn",{"_index":114,"t":{"613":{"position":[[0,4]]}}}],["economi",{"_index":11,"t":{"21":{"position":[[9,7]]}}}],["ethereum",{"_index":90,"t":{"475":{"position":[[0,8]]},"515":{"position":[[0,8]]},"531":{"position":[[0,8]]},"599":{"position":[[0,8]]}}}],["ethic",{"_index":58,"t":{"316":{"position":[[0,7]]},"320":{"position":[[11,7]]},"330":{"position":[[21,7]]}}}],["faq",{"_index":9,"t":{"19":{"position":[[13,3]]},"132":{"position":[[0,3]]},"308":{"position":[[0,4]]},"328":{"position":[[0,4]]}}}],["fi",{"_index":55,"t":{"302":{"position":[[3,2]]},"356":{"position":[[23,2]]}}}],["file",{"_index":82,"t":{"413":{"position":[[15,4]]}}}],["first",{"_index":0,"t":{"2":{"position":[[0,5]]}}}],["github",{"_index":18,"t":{"48":{"position":[[0,6]]}}}],["glossari",{"_index":38,"t":{"132":{"position":[[6,8]]}}}],["gnosi",{"_index":116,"t":{"624":{"position":[[0,6]]}}}],["govern",{"_index":5,"t":{"8":{"position":[[0,10]]}}}],["guid",{"_index":97,"t":{"500":{"position":[[0,5]]}}}],["hardwar",{"_index":79,"t":{"411":{"position":[[0,8]]}}}],["holeski",{"_index":110,"t":{"584":{"position":[[0,7]]}}}],["initi",{"_index":123,"t":{"656":{"position":[[3,7]]}}}],["instal",{"_index":83,"t":{"421":{"position":[[0,7]]},"430":{"position":[[0,12]]},"439":{"position":[[4,12]]},"451":{"position":[[7,12]]},"500":{"position":[[9,10]]}}}],["instanc",{"_index":63,"t":{"338":{"position":[[17,8]]}}}],["ipf",{"_index":101,"t":{"523":{"position":[[0,4]]}}}],["iso",{"_index":86,"t":{"439":{"position":[[0,3]]}}}],["liquid",{"_index":12,"t":{"28":{"position":[[0,9]]}}}],["local",{"_index":44,"t":{"167":{"position":[[0,5]]}}}],["long",{"_index":4,"t":{"6":{"position":[[0,4]]}}}],["lukso",{"_index":127,"t":{"692":{"position":[[0,5]]}}}],["main",{"_index":23,"t":{"88":{"position":[[0,4]]}}}],["mainnet",{"_index":113,"t":{"599":{"position":[[9,7]]}}}],["mainten",{"_index":77,"t":{"401":{"position":[[0,11]]}}}],["manifest",{"_index":51,"t":{"205":{"position":[[23,8]]}}}],["manual",{"_index":42,"t":{"145":{"position":[[0,6]]}}}],["mdx",{"_index":3,"t":{"4":{"position":[[0,3]]}}}],["metric",{"_index":59,"t":{"316":{"position":[[8,7]]},"320":{"position":[[19,7]]},"330":{"position":[[0,7],[29,7]]}}}],["mev",{"_index":33,"t":{"116":{"position":[[30,3]]}}}],["mine",{"_index":13,"t":{"28":{"position":[[10,6]]}}}],["monero",{"_index":95,"t":{"488":{"position":[[0,6]]}}}],["monitor",{"_index":92,"t":{"480":{"position":[[9,10]]}}}],["more",{"_index":71,"t":{"381":{"position":[[0,4]]}}}],["next",{"_index":68,"t":{"370":{"position":[[0,4]]}}}],["node",{"_index":10,"t":{"21":{"position":[[4,4]]},"500":{"position":[[24,4]]},"670":{"position":[[32,4]]}}}],["nodedrop",{"_index":14,"t":{"38":{"position":[[0,8]]}}}],["nodestream",{"_index":17,"t":{"46":{"position":[[0,10]]}}}],["obol",{"_index":105,"t":{"548":{"position":[[0,4]]}}}],["openvpn",{"_index":48,"t":{"185":{"position":[[0,7]]}}}],["optim",{"_index":103,"t":{"535":{"position":[[0,8]]}}}],["overview",{"_index":85,"t":{"430":{"position":[[13,8]]},"531":{"position":[[21,8]]}}}],["packag",{"_index":20,"t":{"48":{"position":[[28,8]]},"205":{"position":[[9,7]]},"493":{"position":[[0,9]]},"511":{"position":[[23,8]]},"539":{"position":[[5,7]]},"548":{"position":[[27,7]]},"561":{"position":[[26,7]]}}}],["path",{"_index":75,"t":{"383":{"position":[[12,4]]}}}],["pool",{"_index":34,"t":{"116":{"position":[[44,5]]}}}],["post",{"_index":2,"t":{"2":{"position":[[11,4]]},"4":{"position":[[9,4]]},"6":{"position":[[10,4]]}}}],["power",{"_index":67,"t":{"364":{"position":[[40,5]]}}}],["proxi",{"_index":45,"t":{"167":{"position":[[6,5]]}}}],["refer",{"_index":22,"t":{"58":{"position":[[7,9]]}}}],["regist",{"_index":70,"t":{"372":{"position":[[0,8]]}}}],["repositori",{"_index":100,"t":{"515":{"position":[[9,10]]},"523":{"position":[[5,10]]}}}],["reward",{"_index":29,"t":{"102":{"position":[[0,7]]}}}],["rocketpool",{"_index":109,"t":{"577":{"position":[[0,10]]}}}],["rollup",{"_index":102,"t":{"531":{"position":[[9,8]]},"535":{"position":[[9,6]]}}}],["router",{"_index":66,"t":{"364":{"position":[[29,6]]}}}],["script",{"_index":87,"t":{"451":{"position":[[0,6]]}}}],["servic",{"_index":93,"t":{"480":{"position":[[20,7]]}}}],["set",{"_index":60,"t":{"320":{"position":[[0,7]]},"338":{"position":[[7,3]]}}}],["setup",{"_index":76,"t":{"389":{"position":[[0,5]]},"656":{"position":[[20,5]]}}}],["signatur",{"_index":96,"t":{"493":{"position":[[10,9]]}}}],["smooth",{"_index":28,"t":{"100":{"position":[[15,7]]},"116":{"position":[[11,7],[34,9]]},"126":{"position":[[0,6]]},"143":{"position":[[15,6]]},"159":{"position":[[19,7]]}}}],["smooth'",{"_index":30,"t":{"110":{"position":[[0,8]]}}}],["soon",{"_index":73,"t":{"381":{"position":[[12,4]]}}}],["ssv",{"_index":107,"t":{"561":{"position":[[0,3]]}}}],["stake",{"_index":115,"t":{"613":{"position":[[10,7]]}}}],["stakehous",{"_index":112,"t":{"592":{"position":[[0,10]]}}}],["stakewis",{"_index":108,"t":{"570":{"position":[[0,9]]}}}],["state",{"_index":36,"t":{"126":{"position":[[17,6]]}}}],["step",{"_index":69,"t":{"370":{"position":[[5,5]]}}}],["subscrib",{"_index":41,"t":{"143":{"position":[[0,11]]}}}],["subscript",{"_index":40,"t":{"137":{"position":[[10,12]]},"145":{"position":[[7,12]]}}}],["temperatur",{"_index":78,"t":{"409":{"position":[[0,11]]}}}],["termin",{"_index":47,"t":{"177":{"position":[[0,8]]}}}],["testnet",{"_index":111,"t":{"584":{"position":[[8,7]]}}}],["troubleshoot",{"_index":56,"t":{"308":{"position":[[7,15]]},"326":{"position":[[0,15]]}}}],["tutori",{"_index":126,"t":{"680":{"position":[[11,9]]}}}],["understand",{"_index":99,"t":{"511":{"position":[[0,13]]}}}],["unsubscrib",{"_index":43,"t":{"159":{"position":[[0,13]]}}}],["up",{"_index":61,"t":{"320":{"position":[[8,2]]},"338":{"position":[[11,2]]}}}],["valid",{"_index":35,"t":{"126":{"position":[[7,9]]},"548":{"position":[[17,9]]},"561":{"position":[[16,9]]}}}],["via",{"_index":64,"t":{"356":{"position":[[16,3]]}}}],["video",{"_index":125,"t":{"680":{"position":[[0,6]]}}}],["vpn",{"_index":49,"t":{"196":{"position":[[0,3]]}}}],["welcom",{"_index":6,"t":{"17":{"position":[[0,7]]},"40":{"position":[[0,7]]},"116":{"position":[[0,7]]}}}],["wi",{"_index":54,"t":{"302":{"position":[[0,2]]},"356":{"position":[[20,2]]}}}],["wireguard",{"_index":52,"t":{"267":{"position":[[0,9]]}}}],["wizard",{"_index":21,"t":{"58":{"position":[[0,6]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":9,"t":"Token Addresses","u":"/docs/dao","h":"#token-addresses","p":8},{"i":11,"t":"Mission & Membership","u":"/docs/dao","h":"#mission--membership","p":8},{"i":13,"t":"Architecture","u":"/docs/dao","h":"#architecture","p":8},{"i":15,"t":"DAO Projects","u":"/docs/dao","h":"#dao-projects","p":8},{"i":22,"t":"NODE Basics","u":"/docs/dao/node-basics","h":"#node-basics","p":21},{"i":24,"t":"NODEdrop","u":"/docs/dao/node-basics","h":"#nodedrop","p":21},{"i":26,"t":"NODEstream","u":"/docs/dao/node-basics","h":"#nodestream","p":21},{"i":30,"t":"Liquidity Provision Pools Contract Addresses","u":"/docs/dao/liquidity-mining","h":"#liquidity-provision-pools-contract-addresses","p":28},{"i":32,"t":"LP Token Addresses (Mainnet)","u":"/docs/dao/liquidity-mining","h":"#lp-token-addresses-mainnet","p":28},{"i":34,"t":"Liquidity Mining Contracts","u":"/docs/dao/liquidity-mining","h":"#liquidity-mining-contracts","p":28},{"i":36,"t":"Weekly Distribution","u":"/docs/dao/liquidity-mining","h":"#weekly-distribution","p":28},{"i":42,"t":"Contributing","u":"/docs/dev","h":"#contributing","p":40},{"i":44,"t":"Feedback and Support","u":"/docs/dev","h":"#feedback-and-support","p":40},{"i":50,"t":"1. Auto Check for Upstream Updates (auto_check.yml)","u":"/docs/dev/github-actions","h":"#1-auto-check-for-upstream-updates-auto_checkyml","p":48},{"i":52,"t":"Workflow File:","u":"/docs/dev/github-actions","h":"#workflow-file","p":48},{"i":54,"t":"2. Main Build and Pre-release (main.yml)","u":"/docs/dev/github-actions","h":"#2-main-build-and-pre-release-mainyml","p":48},{"i":56,"t":"Workflow File:","u":"/docs/dev/github-actions","h":"#workflow-file-1","p":48},{"i":60,"t":"How to use","u":"/docs/dev/references/setup-wizard","h":"#how-to-use","p":58},{"i":62,"t":"Example","u":"/docs/dev/references/setup-wizard","h":"#example","p":58},{"i":64,"t":"version","u":"/docs/dev/references/setup-wizard","h":"#version","p":58},{"i":66,"t":"fields","u":"/docs/dev/references/setup-wizard","h":"#fields","p":58},{"i":68,"t":"id","u":"/docs/dev/references/setup-wizard","h":"#id","p":58},{"i":70,"t":"target","u":"/docs/dev/references/setup-wizard","h":"#target","p":58},{"i":72,"t":"title","u":"/docs/dev/references/setup-wizard","h":"#title","p":58},{"i":74,"t":"description","u":"/docs/dev/references/setup-wizard","h":"#description","p":58},{"i":76,"t":"secret","u":"/docs/dev/references/setup-wizard","h":"#secret","p":58},{"i":78,"t":"pattern","u":"/docs/dev/references/setup-wizard","h":"#pattern","p":58},{"i":80,"t":"patternErrorMessage","u":"/docs/dev/references/setup-wizard","h":"#patternerrormessage","p":58},{"i":82,"t":"enum","u":"/docs/dev/references/setup-wizard","h":"#enum","p":58},{"i":84,"t":"required","u":"/docs/dev/references/setup-wizard","h":"#required","p":58},{"i":86,"t":"if","u":"/docs/dev/references/setup-wizard","h":"#if","p":58},{"i":90,"t":"init","u":"/docs/dev/sdk/commands","h":"#init","p":88},{"i":92,"t":"build","u":"/docs/dev/sdk/commands","h":"#build","p":88},{"i":94,"t":"publish","u":"/docs/dev/sdk/commands","h":"#publish","p":88},{"i":98,"t":"Command-line options","u":"/docs/dev/sdk/overview","h":"#command-line-options","p":96},{"i":104,"t":"Smooth's source of rewards","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"#smooths-source-of-rewards","p":102},{"i":106,"t":"How rewards are distributed","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"#how-rewards-are-distributed","p":102},{"i":108,"t":"How rewards are claimed","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"#how-rewards-are-claimed","p":102},{"i":112,"t":"The Smart Contract","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","h":"#the-smart-contract","p":110},{"i":114,"t":"The Oracle","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","h":"#the-oracle","p":110},{"i":118,"t":"What is Smooth and why should you join it?","u":"/docs/smooth","h":"#what-is-smooth-and-why-should-you-join-it","p":116},{"i":120,"t":"🎰 Stop Depending on Luck!","u":"/docs/smooth","h":"#slot_machine-stop-depending-on-luck","p":116},{"i":122,"t":"🚀 Don't miss high fee seasons!","u":"/docs/smooth","h":"#rocket-dont-miss-high-fee-seasons","p":116},{"i":124,"t":"💰 Hitting MEV Lottery Blocks","u":"/docs/smooth","h":"#moneybag-hitting-mev-lottery-blocks","p":116},{"i":128,"t":"State Machine Overview","u":"/docs/smooth/deep-dive-into-smooth/states","h":"#state-machine-overview","p":126},{"i":130,"t":"The purpose of the State Machine","u":"/docs/smooth/deep-dive-into-smooth/states","h":"#the-purpose-of-the-state-machine","p":126},{"i":133,"t":"FAQ","u":"/docs/smooth/faq-glossary","h":"#faq","p":132},{"i":135,"t":"Glossary","u":"/docs/smooth/faq-glossary","h":"#glossary","p":132},{"i":139,"t":"Step 1: Change your fee recipient to Smooth's address.","u":"/docs/smooth/subscribe-to-smooth/automatic","h":"#step-1-change-your-fee-recipient-to-smooths-address","p":137},{"i":141,"t":"Step 2: Check your subscription status!","u":"/docs/smooth/subscribe-to-smooth/automatic","h":"#step-2-check-your-subscription-status","p":137},{"i":147,"t":"Step 1: Change your fee recipient to Smooth's address.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-1-change-your-fee-recipient-to-smooths-address","p":145},{"i":149,"t":"Step 2: Log in to Smooth's website.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-2-log-in-to-smooths-website","p":145},{"i":151,"t":"Step 3: Select your validator.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-3-select-your-validator","p":145},{"i":153,"t":"Step 4: Confirm Relays check.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-4-confirm-relays-check","p":145},{"i":155,"t":"Step 5: Make the deposit and subscribe!","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-5-make-the-deposit-and-subscribe","p":145},{"i":157,"t":"Troubleshooting.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#troubleshooting","p":145},{"i":161,"t":"Step 1: Log in to Smooth's website.","u":"/docs/smooth/unsubscribe-from-smooth","h":"#step-1-log-in-to-smooths-website","p":159},{"i":163,"t":"Step 2: Click on the \"Unsubscribe\" button of the validator you want to unsubscribe.","u":"/docs/smooth/unsubscribe-from-smooth","h":"#step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe","p":159},{"i":165,"t":"Step 3: Follow the dialog instructions.","u":"/docs/smooth/unsubscribe-from-smooth","h":"#step-3-follow-the-dialog-instructions","p":159},{"i":169,"t":"When to Use Local Proxy","u":"/docs/user/access-your-dappnode/local","h":"#when-to-use-local-proxy","p":167},{"i":171,"t":"Accessing Dappnode via Local Proxy","u":"/docs/user/access-your-dappnode/local","h":"#accessing-dappnode-via-local-proxy","p":167},{"i":173,"t":"Limitations & Settings","u":"/docs/user/access-your-dappnode/local","h":"#limitations--settings","p":167},{"i":179,"t":"SSH Access","u":"/docs/user/access-your-dappnode/terminal","h":"#ssh-access","p":177},{"i":181,"t":"External SSH Access","u":"/docs/user/access-your-dappnode/terminal","h":"#external-ssh-access","p":177},{"i":183,"t":"Physical Terminal Access","u":"/docs/user/access-your-dappnode/terminal","h":"#physical-terminal-access","p":177},{"i":187,"t":"Setting Up OpenVPN","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#setting-up-openvpn","p":185},{"i":188,"t":"1. Get VPN Credentials URL","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#1-get-vpn-credentials-url","p":185},{"i":190,"t":"2. Download OpenVPN Credentials","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#2-download-openvpn-credentials","p":185},{"i":192,"t":"3. OpenVPN Installation","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#3-openvpn-installation","p":185},{"i":194,"t":"4. Connecting to Dappnode via OpenVPN","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#4-connecting-to-dappnode-via-openvpn","p":185},{"i":198,"t":"VPN Clients","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#vpn-clients","p":196},{"i":199,"t":"WireGuard (Recommended)","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#wireguard-recommended","p":196},{"i":201,"t":"OpenVPN","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#openvpn","p":196},{"i":203,"t":"Local vs. Remote Access","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#local-vs-remote-access","p":196},{"i":207,"t":"Example","u":"/docs/dev/references/manifest","h":"#example","p":205},{"i":209,"t":"Properties reference","u":"/docs/dev/references/manifest","h":"#properties-reference","p":205},{"i":211,"t":"name","u":"/docs/dev/references/manifest","h":"#name","p":205},{"i":213,"t":"version","u":"/docs/dev/references/manifest","h":"#version","p":205},{"i":215,"t":"upstreamVersion","u":"/docs/dev/references/manifest","h":"#upstreamversion","p":205},{"i":217,"t":"shortDescription","u":"/docs/dev/references/manifest","h":"#shortdescription","p":205},{"i":219,"t":"description","u":"/docs/dev/references/manifest","h":"#description","p":205},{"i":221,"t":"type","u":"/docs/dev/references/manifest","h":"#type","p":205},{"i":223,"t":"chain","u":"/docs/dev/references/manifest","h":"#chain","p":205},{"i":225,"t":"mainService","u":"/docs/dev/references/manifest","h":"#mainservice","p":205},{"i":227,"t":"dockerTimeout","u":"/docs/dev/references/manifest","h":"#dockertimeout","p":205},{"i":229,"t":"dependencies","u":"/docs/dev/references/manifest","h":"#dependencies","p":205},{"i":231,"t":"requirements","u":"/docs/dev/references/manifest","h":"#requirements","p":205},{"i":233,"t":"globalEnvs","u":"/docs/dev/references/manifest","h":"#globalenvs","p":205},{"i":235,"t":"architectures","u":"/docs/dev/references/manifest","h":"#architectures","p":205},{"i":237,"t":"backup","u":"/docs/dev/references/manifest","h":"#backup","p":205},{"i":239,"t":"changelog","u":"/docs/dev/references/manifest","h":"#changelog","p":205},{"i":241,"t":"warnings","u":"/docs/dev/references/manifest","h":"#warnings","p":205},{"i":243,"t":"updateAlerts","u":"/docs/dev/references/manifest","h":"#updatealerts","p":205},{"i":245,"t":"disclaimer","u":"/docs/dev/references/manifest","h":"#disclaimer","p":205},{"i":247,"t":"style","u":"/docs/dev/references/manifest","h":"#style","p":205},{"i":249,"t":"exposable","u":"/docs/dev/references/manifest","h":"#exposable","p":205},{"i":251,"t":"author","u":"/docs/dev/references/manifest","h":"#author","p":205},{"i":253,"t":"contributors","u":"/docs/dev/references/manifest","h":"#contributors","p":205},{"i":255,"t":"categories","u":"/docs/dev/references/manifest","h":"#categories","p":205},{"i":257,"t":"keywords","u":"/docs/dev/references/manifest","h":"#keywords","p":205},{"i":259,"t":"links","u":"/docs/dev/references/manifest","h":"#links","p":205},{"i":261,"t":"repository","u":"/docs/dev/references/manifest","h":"#repository","p":205},{"i":263,"t":"bugs","u":"/docs/dev/references/manifest","h":"#bugs","p":205},{"i":265,"t":"license","u":"/docs/dev/references/manifest","h":"#license","p":205},{"i":269,"t":"Setting Up WireGuard","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#setting-up-wireguard","p":267},{"i":270,"t":"1. Get VPN Credentials","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#1-get-vpn-credentials","p":267},{"i":272,"t":"2. Installing WireGuard Client","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#2-installing-wireguard-client","p":267},{"i":274,"t":"3. Setting Up WireGuard Client","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#3-setting-up-wireguard-client","p":267},{"i":276,"t":"4. Connecting to Dappnode via WireGuard","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#4-connecting-to-dappnode-via-wireguard","p":267},{"i":280,"t":"Why using Dappnode Cloud?","u":"/docs/user/dappnode-cloud/overview","h":"#why-using-dappnode-cloud","p":278},{"i":282,"t":"No Initial Hardware Investment 💰","u":"/docs/user/dappnode-cloud/overview","h":"#no-initial-hardware-investment-","p":278},{"i":284,"t":"Stop when you want 🧑‍🔧️","u":"/docs/user/dappnode-cloud/overview","h":"#stop-when-you-want-️","p":278},{"i":286,"t":"Scalability 📈","u":"/docs/user/dappnode-cloud/overview","h":"#scalability-","p":278},{"i":288,"t":"Physical or Cloud?","u":"/docs/user/dappnode-cloud/overview","h":"#physical-or-cloud","p":278},{"i":290,"t":"1. Economics 💲","u":"/docs/user/dappnode-cloud/overview","h":"#1-economics-","p":278},{"i":292,"t":"2. Decentralization 🗽","u":"/docs/user/dappnode-cloud/overview","h":"#2-decentralization-","p":278},{"i":294,"t":"Use cases","u":"/docs/user/dappnode-cloud/overview","h":"#use-cases","p":278},{"i":296,"t":"Blockchain participation & Solo Staking ⛓️","u":"/docs/user/dappnode-cloud/overview","h":"#blockchain-participation--solo-staking-️","p":278},{"i":298,"t":"Testing 🧪","u":"/docs/user/dappnode-cloud/overview","h":"#testing-","p":278},{"i":300,"t":"Developing 🧑‍💻️","u":"/docs/user/dappnode-cloud/overview","h":"#developing-️","p":278},{"i":304,"t":"Connecting to Dappnode Wi-Fi","u":"/docs/user/access-your-dappnode/wifi","h":"#connecting-to-dappnode-wi-fi","p":302},{"i":306,"t":"Wi-Fi Settings in Dappmanager","u":"/docs/user/access-your-dappnode/wifi","h":"#wi-fi-settings-in-dappmanager","p":302},{"i":312,"t":"Dappnode AWS AMI","u":"/docs/user/dappnode-cloud/providers/aws/overview","h":"#dappnode-aws-ami","p":310},{"i":314,"t":"Pricing","u":"/docs/user/dappnode-cloud/providers/aws/overview","h":"#pricing","p":310},{"i":318,"t":"Introduction","u":"/docs/user/ethical-metrics/overview","h":"#introduction","p":316},{"i":322,"t":"Telegram Notifications","u":"/docs/user/ethical-metrics/setup","h":"#telegram-notifications","p":320},{"i":324,"t":"Email Notifications","u":"/docs/user/ethical-metrics/setup","h":"#email-notifications","p":320},{"i":332,"t":"Dappnode host metrics","u":"/docs/user/ethical-metrics/metrics","h":"#dappnode-host-metrics","p":330},{"i":334,"t":"Dappmanager metrics","u":"/docs/user/ethical-metrics/metrics","h":"#dappmanager-metrics","p":330},{"i":336,"t":"Staking Metrics","u":"/docs/user/ethical-metrics/metrics","h":"#staking-metrics","p":330},{"i":340,"t":"1. Navigate to AWS Marketplace 🧭","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#1-navigate-to-aws-marketplace-","p":338},{"i":342,"t":"2. AWS Account 👤","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#2-aws-account-","p":338},{"i":344,"t":"3. Subscribe to Dappnode AMI 📀","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#3-subscribe-to-dappnode-ami-","p":338},{"i":346,"t":"4. Set Up Telegram for Wireguard Credentials (Optional) 💬","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#4-set-up-telegram-for-wireguard-credentials-optional-","p":338},{"i":348,"t":"5. Launch Instance 🚀","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#5-launch-instance-","p":338},{"i":350,"t":"6. Get wireguard credentials 🔐","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#6-get-wireguard-credentials-","p":338},{"i":352,"t":"7. Connect via Wireguard 🔌","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#7-connect-via-wireguard-","p":338},{"i":354,"t":"8. Navigate to Dappnode's UI 🏁","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#8-navigate-to-dappnodes-ui-","p":338},{"i":358,"t":"1. Connect to DappnodeWIFI:","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"#1-connect-to-dappnodewifi","p":356},{"i":360,"t":"2. Access the Dappnode Interface:","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"#2-access-the-dappnode-interface","p":356},{"i":362,"t":"Troubleshooting:","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"#troubleshooting","p":356},{"i":366,"t":"Enable UPnP in your router","u":"/docs/user/getting-started/connect-dappnode-to-the-router","h":"#enable-upnp-in-your-router","p":364},{"i":368,"t":"Troubleshooting","u":"/docs/user/getting-started/connect-dappnode-to-the-router","h":"#troubleshooting","p":364},{"i":373,"t":"1. Register as New User","u":"/docs/user/getting-started/register","h":"#1-register-as-new-user","p":372},{"i":375,"t":"2. Secure Your Recovery Token","u":"/docs/user/getting-started/register","h":"#2-secure-your-recovery-token","p":372},{"i":377,"t":"3. Logging In","u":"/docs/user/getting-started/register","h":"#3-logging-in","p":372},{"i":379,"t":"Troubleshooting","u":"/docs/user/getting-started/register","h":"#troubleshooting","p":372},{"i":385,"t":"Dappnode is installed","u":"/docs/user/getting-started/choose-your-path","h":"","p":383},{"i":387,"t":"I want to install Dappnode","u":"/docs/user/getting-started/choose-your-path","h":"","p":383},{"i":391,"t":"Choose Repository Source","u":"/docs/user/getting-started/setup","h":"#choose-repository-source","p":389},{"i":393,"t":"Enable/Disable System Auto Updates","u":"/docs/user/getting-started/setup","h":"#enabledisable-system-auto-updates","p":389},{"i":395,"t":"Enable system notifications","u":"/docs/user/getting-started/setup","h":"#enable-system-notifications","p":389},{"i":397,"t":"Change Host User Password","u":"/docs/user/getting-started/setup","h":"#change-host-user-password","p":389},{"i":399,"t":"All Set!","u":"/docs/user/getting-started/setup","h":"#all-set","p":389},{"i":403,"t":"1. Air Flow","u":"/docs/user/hardware/maintenance","h":"#1-air-flow","p":401},{"i":405,"t":"2. Dust cleaning","u":"/docs/user/hardware/maintenance","h":"#2-dust-cleaning","p":401},{"i":407,"t":"3. Thermal Paste Change","u":"/docs/user/hardware/maintenance","h":"#3-thermal-paste-change","p":401},{"i":415,"t":"Basic Example","u":"/docs/dev/references/docker-compose","h":"#basic-example","p":413},{"i":417,"t":"Complex Example","u":"/docs/dev/references/docker-compose","h":"#complex-example","p":413},{"i":419,"t":"Notable Features","u":"/docs/dev/references/docker-compose","h":"#notable-features","p":413},{"i":422,"t":"Hardware Recommendations","u":"/docs/user/install/arm","h":"#hardware-recommendations","p":421},{"i":424,"t":"Install Dappnode via Script","u":"/docs/user/install/arm","h":"#install-dappnode-via-script","p":421},{"i":426,"t":"Add an external SSD","u":"/docs/user/install/arm","h":"#add-an-external-ssd","p":421},{"i":431,"t":"Specifications & Minimum Requirements","u":"/docs/user/install/overview","h":"#specifications--minimum-requirements","p":430},{"i":433,"t":"Installation Methods","u":"/docs/user/install/overview","h":"#installation-methods","p":430},{"i":435,"t":"1. ISO Installation","u":"/docs/user/install/overview","h":"#1-iso-installation","p":430},{"i":437,"t":"2. Script Installation over Debian-based Distribution","u":"/docs/user/install/overview","h":"#2-script-installation-over-debian-based-distribution","p":430},{"i":441,"t":"Get the ISO","u":"/docs/user/install/iso","h":"#get-the-iso","p":439},{"i":443,"t":"Burn the ISO in a USB","u":"/docs/user/install/iso","h":"#burn-the-iso-in-a-usb","p":439},{"i":445,"t":"Boot from the USB","u":"/docs/user/install/iso","h":"#boot-from-the-usb","p":439},{"i":447,"t":"Follow the Installation Prompts","u":"/docs/user/install/iso","h":"#follow-the-installation-prompts","p":439},{"i":449,"t":"Final Steps","u":"/docs/user/install/iso","h":"#final-steps","p":439},{"i":453,"t":"Prerequisites","u":"/docs/user/install/script","h":"#prerequisites","p":451},{"i":455,"t":"Install Dappnode","u":"/docs/user/install/script","h":"#install-dappnode","p":451},{"i":457,"t":"Reboot","u":"/docs/user/install/script","h":"#reboot","p":451},{"i":459,"t":"Restore to the latest version","u":"/docs/user/install/script","h":"#restore-to-the-latest-version","p":451},{"i":461,"t":"Uninstall","u":"/docs/user/install/script","h":"#uninstall","p":451},{"i":464,"t":"Exploring Bitcoin: The Pioneer of Cryptocurrency","u":"/docs/user/packages/bitcoin","h":"#exploring-bitcoin-the-pioneer-of-cryptocurrency","p":463},{"i":466,"t":"Running a Bitcoin Node on Dappnode and Supporting the Network","u":"/docs/user/packages/bitcoin","h":"#running-a-bitcoin-node-on-dappnode-and-supporting-the-network","p":463},{"i":468,"t":"Bitcoin’s Role in Decentralization: A Decade of Innovation","u":"/docs/user/packages/bitcoin","h":"#bitcoins-role-in-decentralization-a-decade-of-innovation","p":463},{"i":471,"t":"Avalanche: A Revolutionary Consensus Protocol","u":"/docs/user/packages/avalanche","h":"#avalanche-a-revolutionary-consensus-protocol","p":470},{"i":473,"t":"AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network","u":"/docs/user/packages/avalanche","h":"#avax-staking-on-dappnode-earn-rewards-while-supporting-avalanche-network","p":470},{"i":476,"t":"Introducing Ethereum Classic: Preserving Blockchain Principles","u":"/docs/user/packages/ethclassic","h":"#introducing-ethereum-classic-preserving-blockchain-principles","p":475},{"i":478,"t":"Ethereum Classic on Dappnode: Supporting Decentralization","u":"/docs/user/packages/ethclassic","h":"#ethereum-classic-on-dappnode-supporting-decentralization","p":475},{"i":482,"t":"How It All Works","u":"/docs/user/packages/dms","h":"#how-it-all-works","p":480},{"i":484,"t":"Installing and accessing DMS","u":"/docs/user/packages/dms","h":"#installing-and-accessing-dms","p":480},{"i":486,"t":"Monitoring through Dashboards","u":"/docs/user/packages/dms","h":"#monitoring-through-dashboards","p":480},{"i":489,"t":"Introducing Monero: A Privacy-Centric Cryptocurrency","u":"/docs/user/packages/monero","h":"#introducing-monero-a-privacy-centric-cryptocurrency","p":488},{"i":491,"t":"Monero’s Package on Dappnode","u":"/docs/user/packages/monero","h":"#moneros-package-on-dappnode","p":488},{"i":494,"t":"Dappnode's Packages Signatures","u":"/docs/user/packages/signature","h":"#dappnodes-packages-signatures","p":493},{"i":496,"t":"Release trusted keys","u":"/docs/user/packages/signature","h":"#release-trusted-keys","p":493},{"i":498,"t":"Bypass trusted signature","u":"/docs/user/packages/signature","h":"#bypass-trusted-signature","p":493},{"i":501,"t":"Introduction to Swarm","u":"/docs/user/packages/swarm","h":"#introduction-to-swarm","p":500},{"i":503,"t":"Introduction to Dappnode","u":"/docs/user/packages/swarm","h":"#introduction-to-dappnode","p":500},{"i":505,"t":"Gnosis Chain","u":"/docs/user/packages/swarm","h":"#gnosis-chain","p":500},{"i":507,"t":"Installing a Bee node","u":"/docs/user/packages/swarm","h":"#installing-a-bee-node","p":500},{"i":509,"t":"Engage in Storage Incentives by Staking Your BZZ","u":"/docs/user/packages/swarm","h":"#engage-in-storage-incentives-by-staking-your-bzz","p":500},{"i":512,"t":"What are Dappnode packages and what features do they offer?","u":"/docs/user/packages/understanding-dappnode-packages","h":"#what-are-dappnode-packages-and-what-features-do-they-offer","p":511},{"i":513,"t":"Introduction","u":"/docs/user/packages/understanding-dappnode-packages","h":"#introduction","p":511},{"i":517,"t":"Run your own Ethereum node","u":"/docs/user/repository/ethereum","h":"#run-your-own-ethereum-node","p":515},{"i":519,"t":"Use a remote Ethereum node","u":"/docs/user/repository/ethereum","h":"#use-a-remote-ethereum-node","p":515},{"i":521,"t":"Troubleshooting","u":"/docs/user/repository/ethereum","h":"#troubleshooting","p":515},{"i":525,"t":"Run your own IPFS node","u":"/docs/user/repository/ipfs","h":"#run-your-own-ipfs-node","p":523},{"i":527,"t":"Use a remote IPFS node","u":"/docs/user/repository/ipfs","h":"#use-a-remote-ipfs-node","p":523},{"i":529,"t":"Troubleshooting","u":"/docs/user/repository/ipfs","h":"#troubleshooting","p":523},{"i":533,"t":"Enable rollups","u":"/docs/user/rollups/overview","h":"#enable-rollups","p":531},{"i":537,"t":"Setting Up an Optimism Node","u":"/docs/user/rollups/optimism","h":"#setting-up-an-optimism-node","p":535},{"i":540,"t":"Introduction","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#introduction","p":539},{"i":542,"t":"Requirements","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#requirements","p":539},{"i":544,"t":"Registering a Dappnode Diva Operator","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#registering-a-dappnode-diva-operator","p":539},{"i":546,"t":"Monitoring your Diva nodes","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#monitoring-your-diva-nodes","p":539},{"i":549,"t":"Introduction","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#introduction","p":548},{"i":551,"t":"Requirements","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#requirements","p":548},{"i":553,"t":"First Steps","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#first-steps","p":548},{"i":555,"t":"Cluster Configuration","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#cluster-configuration","p":548},{"i":557,"t":"Distributed Key Generation (DKG) Event","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#distributed-key-generation-dkg-event","p":548},{"i":559,"t":"Adding Validators to an Active Cluster","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#adding-validators-to-an-active-cluster","p":548},{"i":562,"t":"Introduction","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#introduction","p":561},{"i":564,"t":"Requirements","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#requirements","p":561},{"i":566,"t":"Registering a Dappnode SSV Node as an Operator","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#registering-a-dappnode-ssv-node-as-an-operator","p":561},{"i":568,"t":"Exposing your DKG service","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#exposing-your-dkg-service","p":561},{"i":571,"t":"StakeWise Overview","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","h":"#stakewise-overview","p":570},{"i":573,"t":"Package Key Features","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","h":"#package-key-features","p":570},{"i":575,"t":"First Steps to Start Staking with StakeWise and Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","h":"#first-steps-to-start-staking-with-stakewise-and-dappnode","p":570},{"i":578,"t":"Rocketpool Overview","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","h":"#rocketpool-overview","p":577},{"i":580,"t":"Package Key Features","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","h":"#package-key-features","p":577},{"i":582,"t":"First Steps to Start a Minipool with Rocketpool and Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","h":"#first-steps-to-start-a-minipool-with-rocketpool-and-dappnode","p":577},{"i":586,"t":"Navigating to Holesky in Dappnode","u":"/docs/user/staking/ethereum/solo/holesky","h":"#navigating-to-holesky-in-dappnode","p":584},{"i":588,"t":"Why Run a Holesky Testnet Node?","u":"/docs/user/staking/ethereum/solo/holesky","h":"#why-run-a-holesky-testnet-node","p":584},{"i":590,"t":"Holesky Faucet","u":"/docs/user/staking/ethereum/solo/holesky","h":"#holesky-faucet","p":584},{"i":593,"t":"Stakehouse Overview","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","h":"#stakehouse-overview","p":592},{"i":595,"t":"Package Key Features","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","h":"#package-key-features","p":592},{"i":597,"t":"First Steps to become a Node Runner with Stakehouse and Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","h":"#first-steps-to-become-a-node-runner-with-stakehouse-and-dappnode","p":592},{"i":601,"t":"1. Install the necessary packages on Dappnode","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#1-install-the-necessary-packages-on-dappnode","p":599},{"i":603,"t":"2. Creating the keys for your validator","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#2-creating-the-keys-for-your-validator","p":599},{"i":605,"t":"3: Deposit ETH into the Ethereum deposit contract","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#3-deposit-eth-into-the-ethereum-deposit-contract","p":599},{"i":607,"t":"Additional Opportunities: MEV Boost","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#additional-opportunities-mev-boost","p":599},{"i":609,"t":"Withdrawing my ETH","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#withdrawing-my-eth","p":599},{"i":611,"t":"Opening your Web3Signer UI.","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#opening-your-web3signer-ui","p":599},{"i":614,"t":"Decentralize Proof-of-Stake chains and earn","u":"/docs/user/staking/overview","h":"#decentralize-proof-of-stake-chains-and-earn","p":613},{"i":616,"t":"The Stakers UI","u":"/docs/user/staking/overview","h":"#the-stakers-ui","p":613},{"i":618,"t":"Can I stake without 32 ETH?","u":"/docs/user/staking/overview","h":"#can-i-stake-without-32-eth","p":613},{"i":620,"t":"What is Staking?","u":"/docs/user/staking/overview","h":"#what-is-staking","p":613},{"i":622,"t":"Why Stake with Dappnode?","u":"/docs/user/staking/overview","h":"#why-stake-with-dappnode","p":613},{"i":626,"t":"Joining the Gnosis Chain as a Validator","u":"/docs/user/staking/gnosis-chain/solo","h":"#joining-the-gnosis-chain-as-a-validator","p":624},{"i":628,"t":"1. Install the necessary packages on Dappnode","u":"/docs/user/staking/gnosis-chain/solo","h":"#1-install-the-necessary-packages-on-dappnode","p":624},{"i":630,"t":"2. Creating validator keys for Gnosis Chain","u":"/docs/user/staking/gnosis-chain/solo","h":"#2-creating-validator-keys-for-gnosis-chain","p":624},{"i":632,"t":"3: Deposit GNO into the Gnosis Chain deposit contract","u":"/docs/user/staking/gnosis-chain/solo","h":"#3-deposit-gno-into-the-gnosis-chain-deposit-contract","p":624},{"i":634,"t":"Withdrawing my GNO","u":"/docs/user/staking/gnosis-chain/solo","h":"#withdrawing-my-gno","p":624},{"i":636,"t":"1. Exit the validator from the Dappnode UI","u":"/docs/user/staking/gnosis-chain/solo","h":"#1-exit-the-validator-from-the-dappnode-ui","p":624},{"i":638,"t":"2. Claim your GNO from the deposit contract","u":"/docs/user/staking/gnosis-chain/solo","h":"#2-claim-your-gno-from-the-deposit-contract","p":624},{"i":642,"t":"1. How to set up Dappnode from scratch using your own hardware","u":"/docs/user/videos-and-tutorials/crash-course","h":"#1-how-to-set-up-dappnode-from-scratch-using-your-own-hardware","p":640},{"i":643,"t":"2. How to set up a validator","u":"/docs/user/videos-and-tutorials/crash-course","h":"#2-how-to-set-up-a-validator","p":640},{"i":644,"t":"3. How to setup Stakehouse node operator","u":"/docs/user/videos-and-tutorials/crash-course","h":"#3-how-to-setup-stakehouse-node-operator","p":640},{"i":645,"t":"4. How to withdraw your staked ETH","u":"/docs/user/videos-and-tutorials/crash-course","h":"#4-how-to-withdraw-your-staked-eth","p":640},{"i":646,"t":"5. How to subscribe your validator to Smooth 😎","u":"/docs/user/videos-and-tutorials/crash-course","h":"#5-how-to-subscribe-your-validator-to-smooth-","p":640},{"i":647,"t":"6. How to earn rewards with your Dappnode without investing","u":"/docs/user/videos-and-tutorials/crash-course","h":"#6-how-to-earn-rewards-with-your-dappnode-without-investing","p":640},{"i":650,"t":"🧬 2.1 Repositories","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":648},{"i":652,"t":"🧮 2.2 Dappnode Monitoring Service (DMS)","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":648},{"i":654,"t":"🌡 2.3 Ethical Metrics","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":648},{"i":658,"t":"🖥️ 1.1 Booting from the Dappnode ISO","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#️-11-booting-from-the-dappnode-iso","p":656},{"i":660,"t":"🌐 1.2 Accessing the Dappnode User Interface or Dashboard","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-12-accessing-the-dappnode-user-interface-or-dashboard","p":656},{"i":662,"t":"🔒 1.3 Setting up Dappnode Security","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-13-setting-up-dappnode-security","p":656},{"i":664,"t":"🔗 1.4 Configuring your Dappnode VPN","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-14-configuring-your-dappnode-vpn","p":656},{"i":666,"t":"🔄 1.5 Syncing your clients/An overview on node running","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-15-syncing-your-clientsan-overview-on-node-running","p":656},{"i":668,"t":"💾 1.6 Understanding your Dappnode's Hardware","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-16-understanding-your-dappnodes-hardware","p":656},{"i":672,"t":"Ethereum Mainnet Node","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#ethereum-mainnet-node","p":670},{"i":674,"t":"Other Nodes in Stakers tab","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#other-nodes-in-stakers-tab","p":670},{"i":676,"t":"Connecting to Metamask","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#connecting-to-metamask","p":670},{"i":678,"t":"Important Reminders","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#important-reminders","p":670},{"i":682,"t":"Tutorial docs","u":"/docs/user/videos-and-tutorials/overview","h":"#tutorial-docs","p":680},{"i":684,"t":"Dappnode Driving School","u":"/docs/user/videos-and-tutorials/overview","h":"#dappnode-driving-school","p":680},{"i":686,"t":"I. Initial Dappnode Setup","u":"/docs/user/videos-and-tutorials/overview","h":"#i-initial-dappnode-setup","p":680},{"i":688,"t":"II. Configuring your Dappnode","u":"/docs/user/videos-and-tutorials/overview","h":"#ii-configuring-your-dappnode","p":680},{"i":690,"t":"III. Dappnode Troubleshooting","u":"/docs/user/videos-and-tutorials/overview","h":"#iii-dappnode-troubleshooting","p":680},{"i":694,"t":"What Makes LUKSO Special?","u":"/docs/user/staking/lukso/solo","h":"#what-makes-lukso-special","p":692},{"i":696,"t":"Joining LUKSO as a validator","u":"/docs/user/staking/lukso/solo","h":"#joining-lukso-as-a-validator","p":692},{"i":698,"t":"1. Install the necessary LUKSO packages on Dappnode.","u":"/docs/user/staking/lukso/solo","h":"#1-install-the-necessary-lukso-packages-on-dappnode","p":692},{"i":700,"t":"2. Creating validator keys for LUKSO","u":"/docs/user/staking/lukso/solo","h":"#2-creating-validator-keys-for-lukso","p":692},{"i":702,"t":"3: Deposit LYX into the LUKSO deposit contract","u":"/docs/user/staking/lukso/solo","h":"#3-deposit-lyx-into-the-lukso-deposit-contract","p":692},{"i":704,"t":"3. Adding a Withdrawal Address to your LUKSO validator","u":"/docs/user/staking/lukso/solo","h":"#3-adding-a-withdrawal-address-to-your-lukso-validator","p":692}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/9",[0,5.071,1,4.356]],["t/11",[2,5.221,3,2.154,4,5.221]],["t/13",[5,6.489]],["t/15",[6,6.05,7,6.05]],["t/22",[8,3.279,9,5.459]],["t/24",[10,7.19]],["t/26",[11,7.19]],["t/30",[1,2.951,12,3.699,13,4.099,14,4.099,15,2.839]],["t/32",[0,3.849,1,3.306,16,4.592,17,4.144]],["t/34",[12,4.712,15,3.616,18,5.221]],["t/36",[19,6.05,20,4.78]],["t/42",[21,7.19]],["t/44",[22,6.05,23,4.78]],["t/50",[24,1.965,25,3.34,26,3.102,27,3.701,28,3.34,29,3.701]],["t/52",[30,5.459,31,5.459]],["t/54",[32,1.965,33,3.701,34,3.34,35,3.701,36,3.34,37,3.701]],["t/56",[30,5.459,31,5.459]],["t/60",[38,4.98]],["t/62",[39,5.682]],["t/64",[40,6.027]],["t/66",[41,7.19]],["t/68",[42,7.19]],["t/70",[43,7.19]],["t/72",[44,7.19]],["t/74",[45,6.489]],["t/76",[46,7.19]],["t/78",[47,7.19]],["t/80",[48,7.19]],["t/82",[49,7.19]],["t/84",[50,5.177]],["t/86",[]],["t/90",[51,7.19]],["t/92",[34,6.489]],["t/94",[52,7.19]],["t/98",[53,5.221,54,5.221,55,4.712]],["t/104",[56,3.926,57,4.712,58,3.926]],["t/106",[20,4.78,58,4.549]],["t/108",[58,4.549,59,5.459]],["t/112",[15,4.19,60,6.05]],["t/114",[61,7.19]],["t/118",[62,5.459,63,5.071]],["t/120",[3,1.895,64,4.144,65,4.144,66,4.592]],["t/122",[3,1.527,67,3.701,68,3.701,69,3.701,70,3.102,71,3.701]],["t/124",[3,1.691,72,4.099,73,3.699,74,4.099,75,4.099]],["t/128",[76,4.712,77,4.712,78,3.926]],["t/130",[76,4.712,77,4.712,79,5.221]],["t/133",[80,7.19]],["t/135",[81,7.19]],["t/139",[1,2.429,24,1.791,56,2.536,70,2.828,82,1.869,83,2.666,84,3.044]],["t/141",[26,3.435,32,2.176,82,2.271,85,4.099,86,4.099]],["t/147",[1,2.429,24,1.791,56,2.536,70,2.828,82,1.869,83,2.666,84,3.044]],["t/149",[32,2.176,56,3.082,82,2.271,87,3.435,88,3.699]],["t/151",[82,2.544,89,2.733,90,4.592,91,2.733]],["t/153",[26,3.435,82,2.271,92,3.082,93,4.099,94,4.099]],["t/155",[82,2.271,95,3.435,96,3.699,97,3.082,98,3.435]],["t/157",[99,4.98]],["t/161",[24,2.176,56,3.082,82,2.271,87,3.435,88,3.699]],["t/163",[32,1.645,82,1.717,91,1.844,100,3.099,101,4.884,102,3.099,103,2.598]],["t/165",[82,2.271,89,2.439,104,3.699,105,4.099,106,4.099]],["t/169",[38,3.616,107,4.376,108,4.712]],["t/171",[107,3.435,108,3.699,109,2.741,110,1.5,111,3.082]],["t/173",[3,2.154,112,5.221,113,3.19]],["t/179",[109,4.046,114,5.459]],["t/181",[109,3.492,114,4.712,115,4.712]],["t/183",[109,3.492,116,4.712,117,5.221]],["t/187",[113,3.19,118,3.492,119,3.926]],["t/188",[24,2.438,120,3.629,121,3.453,122,4.592]],["t/190",[32,2.438,119,3.453,121,3.453,123,4.592]],["t/192",[89,3.107,119,3.926,124,2.893]],["t/194",[92,3.082,110,1.5,111,3.082,119,3.082,125,2.951]],["t/198",[120,4.78,126,5.071]],["t/199",[127,4.046,128,5.459]],["t/201",[119,5.406]],["t/203",[107,3.849,109,3.071,129,4.592,130,3.849]],["t/207",[39,5.682]],["t/209",[131,6.05,132,6.05]],["t/211",[133,7.19]],["t/213",[40,6.027]],["t/215",[134,7.19]],["t/217",[135,7.19]],["t/219",[45,6.489]],["t/221",[136,7.19]],["t/223",[137,5.177]],["t/225",[138,7.19]],["t/227",[139,7.19]],["t/229",[65,6.489]],["t/231",[50,5.177]],["t/233",[140,7.19]],["t/235",[5,6.489]],["t/237",[141,7.19]],["t/239",[142,7.19]],["t/241",[143,7.19]],["t/243",[144,7.19]],["t/245",[145,7.19]],["t/247",[146,7.19]],["t/249",[147,6.489]],["t/251",[148,7.19]],["t/253",[149,7.19]],["t/255",[150,7.19]],["t/257",[151,7.19]],["t/259",[152,7.19]],["t/261",[153,6.027]],["t/263",[154,7.19]],["t/265",[155,7.19]],["t/269",[113,3.19,118,3.492,127,3.492]],["t/270",[24,2.772,120,4.126,121,3.926]],["t/272",[32,2.438,124,2.544,126,3.849,127,3.071]],["t/274",[89,2.439,113,2.504,118,2.741,126,3.435,127,2.741]],["t/276",[92,3.082,110,1.5,111,3.082,125,2.951,127,2.741]],["t/280",[38,3.616,110,1.911,156,4.712]],["t/282",[3,1.895,157,4.144,158,3.629,159,4.144]],["t/284",[3,2.154,64,4.712,103,4.376]],["t/286",[3,2.496,160,6.05]],["t/288",[116,5.459,156,5.459]],["t/290",[3,2.154,24,2.772,161,5.221]],["t/292",[3,2.154,32,2.772,162,4.126]],["t/294",[38,4.19,163,6.05]],["t/296",[3,2.311,164,3.34,165,3.701,166,3.701,167,2.326]],["t/298",[3,2.496,168,6.05]],["t/300",[3,2.496,169,6.05]],["t/304",[110,1.68,125,3.306,170,4.144,171,4.144]],["t/306",[113,2.806,170,4.144,171,4.144,172,4.144]],["t/312",[110,1.911,173,4.376,174,4.712]],["t/314",[175,7.19]],["t/318",[176,4.98]],["t/322",[177,5.459,178,5.071]],["t/324",[178,5.071,179,6.05]],["t/332",[110,1.911,180,4.712,181,4.126]],["t/334",[172,5.459,181,4.78]],["t/336",[167,3.801,181,4.78]],["t/340",[3,1.691,24,2.176,173,3.435,182,3.435,183,4.099]],["t/342",[3,1.895,32,2.438,173,3.849,184,4.592]],["t/344",[3,1.691,89,2.439,98,3.435,110,1.5,174,3.699]],["t/346",[3,1.279,55,2.797,92,2.33,113,1.894,118,2.073,121,2.33,127,2.073,177,2.797]],["t/348",[3,1.895,95,3.849,185,4.592,186,4.592]],["t/350",[3,1.895,121,3.453,127,3.071,187,4.144]],["t/352",[3,1.691,111,3.082,125,2.951,127,2.741,188,4.099]],["t/354",[3,1.691,182,3.435,189,4.099,190,3.435,191,3.239]],["t/358",[24,2.772,125,3.759,192,5.221]],["t/360",[32,2.438,109,3.071,110,1.68,193,4.144]],["t/362",[99,4.98]],["t/366",[194,4.376,195,5.221,196,5.221]],["t/368",[99,4.98]],["t/373",[24,2.438,197,3.849,198,4.592,199,3.849]],["t/375",[0,3.849,32,2.438,200,4.144,201,4.592]],["t/377",[87,5.071,89,3.6]],["t/379",[99,4.98]],["t/385",[110,2.214,124,3.352]],["t/387",[103,4.376,110,1.911,124,2.893]],["t/391",[57,4.712,153,4.376,202,5.221]],["t/393",[25,4.144,28,4.144,203,4.592,204,4.144]],["t/395",[178,4.376,194,4.376,204,4.712]],["t/397",[83,3.629,180,4.144,199,3.849,205,4.592]],["t/399",[113,4.393]],["t/403",[24,2.772,206,5.221,207,5.221]],["t/405",[32,2.772,208,5.221,209,5.221]],["t/407",[83,3.629,89,2.733,210,4.592,211,4.592]],["t/415",[9,5.459,39,4.78]],["t/417",[39,4.78,212,6.05]],["t/419",[213,6.05,214,4.549]],["t/422",[128,5.459,158,4.78]],["t/424",[110,1.68,111,3.453,124,2.544,215,4.144]],["t/426",[115,4.712,216,5.221,217,5.221]],["t/431",[3,1.895,50,3.306,218,4.592,219,4.592]],["t/433",[124,3.352,220,6.05]],["t/435",[24,2.772,124,2.893,221,4.126]],["t/437",[20,2.666,32,1.791,124,1.869,215,3.044,222,3.373,223,3.373,224,3.373]],["t/441",[221,5.682]],["t/443",[221,4.126,225,5.221,226,4.712]],["t/445",[226,5.459,227,5.459]],["t/447",[104,4.712,124,2.893,228,5.221]],["t/449",[82,3.352,229,6.05]],["t/453",[230,7.19]],["t/455",[110,2.214,124,3.352]],["t/457",[231,7.19]],["t/459",[40,4.376,232,5.221,233,5.221]],["t/461",[234,7.19]],["t/464",[235,4.592,236,4.144,237,4.592,238,4.144]],["t/466",[8,2.006,23,2.924,110,1.354,236,3.34,239,2.783,240,3.34]],["t/468",[162,3.239,241,4.099,242,4.099,243,4.099,244,4.099]],["t/471",[245,4.144,246,4.592,247,4.592,248,4.592]],["t/473",[23,2.449,58,2.33,110,1.134,167,1.947,240,2.797,245,2.797,249,3.099,250,2.598]],["t/476",[164,3.34,251,3.34,252,2.664,253,3.34,254,3.701,255,3.701]],["t/478",[23,3.239,110,1.5,162,3.239,252,2.951,253,3.699]],["t/482",[256,7.19]],["t/484",[109,3.492,124,2.893,257,4.712]],["t/486",[258,4.376,259,5.221,260,4.712]],["t/489",[238,3.699,251,3.699,261,4.099,262,4.099,263,4.099]],["t/491",[110,1.911,264,5.221,265,3.381]],["t/494",[190,4.376,265,3.381,266,4.712]],["t/496",[36,4.712,267,4.712,268,3.492]],["t/498",[266,4.712,267,4.712,269,5.221]],["t/501",[176,4.19,270,6.05]],["t/503",[110,2.214,176,4.19]],["t/505",[137,4.356,271,4.78]],["t/507",[8,2.83,124,2.893,272,5.221]],["t/509",[167,2.576,273,4.099,274,4.099,275,4.099,276,4.099]],["t/512",[110,1.68,214,3.453,265,2.974,277,4.592]],["t/513",[176,4.98]],["t/517",[8,2.83,239,3.926,252,3.759]],["t/519",[8,2.489,38,3.181,130,3.849,252,3.306]],["t/521",[99,4.98]],["t/525",[8,2.83,239,3.926,278,4.712]],["t/527",[8,2.489,38,3.181,130,3.849,278,4.144]],["t/529",[99,4.98]],["t/533",[194,5.071,279,6.05]],["t/537",[8,2.489,113,2.806,118,3.071,280,4.592]],["t/540",[176,4.98]],["t/542",[50,5.177]],["t/544",[110,1.68,197,3.849,281,4.144,282,3.849]],["t/546",[8,2.83,258,4.376,281,4.712]],["t/549",[176,4.98]],["t/551",[50,5.177]],["t/553",[82,3.352,283,4.78]],["t/555",[284,5.459,285,5.071]],["t/557",[20,3.239,268,2.741,286,4.099,287,3.699,288,4.099]],["t/559",[91,2.733,284,4.144,289,4.144,290,4.592]],["t/562",[176,4.98]],["t/564",[50,5.177]],["t/566",[8,2.222,110,1.5,197,3.435,282,3.435,291,4.099]],["t/568",[147,4.712,287,4.712,292,4.712]],["t/571",[78,4.549,293,5.459]],["t/573",[214,3.926,265,3.381,268,3.492]],["t/575",[82,2.05,110,1.354,167,2.326,283,2.924,293,3.34,294,3.34]],["t/578",[78,4.549,295,5.459]],["t/580",[214,3.926,265,3.381,268,3.492]],["t/582",[82,2.05,110,1.354,283,2.924,294,3.34,295,3.34,296,3.701]],["t/586",[110,1.911,182,4.376,297,4.376]],["t/588",[8,2.489,239,3.453,297,3.849,298,4.592]],["t/590",[297,5.071,299,6.05]],["t/593",[78,4.549,300,5.071]],["t/595",[214,3.926,265,3.381,268,3.492]],["t/597",[8,1.829,82,1.869,110,1.234,283,2.666,300,2.828,301,3.373,302,3.373]],["t/601",[24,2.176,110,1.5,124,2.271,265,2.654,303,3.435]],["t/603",[32,2.438,91,2.733,268,3.071,304,3.849]],["t/605",[15,2.563,89,2.202,97,4.212,252,2.664,305,2.924]],["t/607",[73,4.144,306,4.592,307,4.592,308,4.592]],["t/609",[305,4.78,309,4.78]],["t/611",[191,4.126,310,5.221,311,5.221]],["t/614",[137,2.951,162,3.239,167,2.576,250,3.435,312,4.099]],["t/616",[191,4.78,313,5.459]],["t/618",[167,2.886,305,3.629,314,4.144,315,4.592]],["t/620",[167,4.518]],["t/622",[110,2.214,167,3.801]],["t/626",[63,3.849,91,2.733,137,3.306,271,3.629]],["t/628",[24,2.176,110,1.5,124,2.271,265,2.654,303,3.435]],["t/630",[32,1.965,91,2.202,137,2.664,268,2.475,271,2.924,304,3.102]],["t/632",[15,2.337,89,2.007,97,3.924,137,2.429,271,2.666,316,2.828]],["t/634",[309,4.78,316,5.071]],["t/636",[24,2.176,91,2.439,110,1.5,191,3.239,317,4.099]],["t/638",[15,2.839,32,2.176,59,3.699,97,3.082,316,3.435]],["t/642",[24,1.791,38,2.337,110,1.234,113,2.061,118,2.256,158,2.666,318,3.373]],["t/643",[32,2.438,91,2.733,113,2.806,118,3.071]],["t/644",[8,2.222,89,2.439,282,3.435,300,3.435,319,3.699]],["t/645",[92,3.453,167,2.886,305,3.629,309,3.629]],["t/646",[3,1.691,62,3.699,91,2.439,95,3.435,98,3.435]],["t/647",[58,2.783,110,1.354,159,3.34,187,3.34,250,3.102,314,3.34]],["t/650",[3,2.154,153,4.376,320,5.221]],["t/652",[3,1.527,110,1.354,257,3.34,258,3.102,292,3.34,321,3.701]],["t/654",[3,1.895,181,3.629,322,4.592,323,4.592]],["t/658",[3,1.691,110,1.5,221,3.239,227,3.699,324,4.099]],["t/660",[3,1.392,109,2.256,110,1.234,193,3.044,199,2.828,260,3.044,325,3.373]],["t/662",[3,1.527,110,1.354,113,2.261,118,2.475,200,3.34,326,3.701]],["t/664",[3,1.691,110,1.5,120,3.239,285,3.435,327,4.099]],["t/666",[3,1.392,8,1.829,78,2.536,239,2.536,328,3.373,329,3.373,330,3.373]],["t/668",[3,1.691,158,3.239,190,3.435,331,4.099,332,4.099]],["t/672",[8,2.83,17,4.712,252,3.759]],["t/674",[8,2.83,313,4.712,333,5.221]],["t/676",[125,4.356,334,6.05]],["t/678",[335,6.05,336,6.05]],["t/682",[337,6.05,338,6.05]],["t/684",[110,1.911,339,5.221,340,5.221]],["t/686",[110,1.911,157,4.712,319,4.712]],["t/688",[110,1.911,285,4.376,341,5.221]],["t/690",[99,3.616,110,1.911,342,5.221]],["t/694",[96,4.712,343,3.759,344,5.221]],["t/696",[63,4.376,91,3.107,343,3.759]],["t/698",[24,1.965,110,1.354,124,2.05,265,2.396,303,3.102,343,2.664]],["t/700",[32,2.176,91,2.439,268,2.741,304,3.435,343,2.951]],["t/702",[15,2.563,89,2.202,97,4.212,343,2.664,345,3.701]],["t/704",[1,2.664,89,2.202,91,2.202,289,3.34,309,2.924,343,2.664]]],"invertedIndex":[["",{"_index":3,"t":{"11":{"position":[[8,1]]},"120":{"position":[[0,2]]},"122":{"position":[[0,2]]},"124":{"position":[[0,2]]},"173":{"position":[[12,1]]},"282":{"position":[[31,2]]},"284":{"position":[[19,6]]},"286":{"position":[[12,2]]},"290":{"position":[[13,2]]},"292":{"position":[[20,2]]},"296":{"position":[[25,1],[40,2]]},"298":{"position":[[8,2]]},"300":{"position":[[11,6]]},"340":{"position":[[31,2]]},"342":{"position":[[15,2]]},"344":{"position":[[29,2]]},"346":{"position":[[56,2]]},"348":{"position":[[19,2]]},"350":{"position":[[29,2]]},"352":{"position":[[25,2]]},"354":{"position":[[29,2]]},"431":{"position":[[15,1]]},"646":{"position":[[45,2]]},"650":{"position":[[0,2]]},"652":{"position":[[0,2]]},"654":{"position":[[0,2]]},"658":{"position":[[0,3]]},"660":{"position":[[0,2]]},"662":{"position":[[0,2]]},"664":{"position":[[0,2]]},"666":{"position":[[0,2]]},"668":{"position":[[0,2]]}}}],["1",{"_index":24,"t":{"50":{"position":[[0,2]]},"139":{"position":[[5,2]]},"147":{"position":[[5,2]]},"161":{"position":[[5,2]]},"188":{"position":[[0,2]]},"270":{"position":[[0,2]]},"290":{"position":[[0,2]]},"340":{"position":[[0,2]]},"358":{"position":[[0,2]]},"373":{"position":[[0,2]]},"403":{"position":[[0,2]]},"435":{"position":[[0,2]]},"601":{"position":[[0,2]]},"628":{"position":[[0,2]]},"636":{"position":[[0,2]]},"642":{"position":[[0,2]]},"698":{"position":[[0,2]]}}}],["1.1",{"_index":324,"t":{"658":{"position":[[4,3]]}}}],["1.2",{"_index":325,"t":{"660":{"position":[[3,3]]}}}],["1.3",{"_index":326,"t":{"662":{"position":[[3,3]]}}}],["1.4",{"_index":327,"t":{"664":{"position":[[3,3]]}}}],["1.5",{"_index":328,"t":{"666":{"position":[[3,3]]}}}],["1.6",{"_index":331,"t":{"668":{"position":[[3,3]]}}}],["2",{"_index":32,"t":{"54":{"position":[[0,2]]},"141":{"position":[[5,2]]},"149":{"position":[[5,2]]},"163":{"position":[[5,2]]},"190":{"position":[[0,2]]},"272":{"position":[[0,2]]},"292":{"position":[[0,2]]},"342":{"position":[[0,2]]},"360":{"position":[[0,2]]},"375":{"position":[[0,2]]},"405":{"position":[[0,2]]},"437":{"position":[[0,2]]},"603":{"position":[[0,2]]},"630":{"position":[[0,2]]},"638":{"position":[[0,2]]},"643":{"position":[[0,2]]},"700":{"position":[[0,2]]}}}],["2.1",{"_index":320,"t":{"650":{"position":[[3,3]]}}}],["2.2",{"_index":321,"t":{"652":{"position":[[3,3]]}}}],["2.3",{"_index":322,"t":{"654":{"position":[[3,3]]}}}],["3",{"_index":89,"t":{"151":{"position":[[5,2]]},"165":{"position":[[5,2]]},"192":{"position":[[0,2]]},"274":{"position":[[0,2]]},"344":{"position":[[0,2]]},"377":{"position":[[0,2]]},"407":{"position":[[0,2]]},"605":{"position":[[0,2]]},"632":{"position":[[0,2]]},"644":{"position":[[0,2]]},"702":{"position":[[0,2]]},"704":{"position":[[0,2]]}}}],["32",{"_index":315,"t":{"618":{"position":[[20,2]]}}}],["4",{"_index":92,"t":{"153":{"position":[[5,2]]},"194":{"position":[[0,2]]},"276":{"position":[[0,2]]},"346":{"position":[[0,2]]},"645":{"position":[[0,2]]}}}],["5",{"_index":95,"t":{"155":{"position":[[5,2]]},"348":{"position":[[0,2]]},"646":{"position":[[0,2]]}}}],["6",{"_index":187,"t":{"350":{"position":[[0,2]]},"647":{"position":[[0,2]]}}}],["7",{"_index":188,"t":{"352":{"position":[[0,2]]}}}],["8",{"_index":189,"t":{"354":{"position":[[0,2]]}}}],["access",{"_index":109,"t":{"171":{"position":[[0,9]]},"179":{"position":[[4,6]]},"181":{"position":[[13,6]]},"183":{"position":[[18,6]]},"203":{"position":[[17,6]]},"360":{"position":[[3,6]]},"484":{"position":[[15,9]]},"660":{"position":[[7,9]]}}}],["account",{"_index":184,"t":{"342":{"position":[[7,7]]}}}],["activ",{"_index":290,"t":{"559":{"position":[[24,6]]}}}],["ad",{"_index":289,"t":{"559":{"position":[[0,6]]},"704":{"position":[[3,6]]}}}],["add",{"_index":216,"t":{"426":{"position":[[0,3]]}}}],["addit",{"_index":306,"t":{"607":{"position":[[0,10]]}}}],["address",{"_index":1,"t":{"9":{"position":[[6,9]]},"30":{"position":[[35,9]]},"32":{"position":[[9,9]]},"139":{"position":[[46,8]]},"147":{"position":[[46,8]]},"704":{"position":[[23,7]]}}}],["air",{"_index":206,"t":{"403":{"position":[[3,3]]}}}],["ami",{"_index":174,"t":{"312":{"position":[[13,3]]},"344":{"position":[[25,3]]}}}],["architectur",{"_index":5,"t":{"13":{"position":[[0,12]]},"235":{"position":[[0,13]]}}}],["author",{"_index":148,"t":{"251":{"position":[[0,6]]}}}],["auto",{"_index":25,"t":{"50":{"position":[[3,4]]},"393":{"position":[[22,4]]}}}],["auto_check.yml",{"_index":29,"t":{"50":{"position":[[35,16]]}}}],["avalanch",{"_index":245,"t":{"471":{"position":[[0,10]]},"473":{"position":[[56,9]]}}}],["avax",{"_index":249,"t":{"473":{"position":[[0,4]]}}}],["aw",{"_index":173,"t":{"312":{"position":[[9,3]]},"340":{"position":[[15,3]]},"342":{"position":[[3,3]]}}}],["backup",{"_index":141,"t":{"237":{"position":[[0,6]]}}}],["base",{"_index":224,"t":{"437":{"position":[[35,5]]}}}],["basic",{"_index":9,"t":{"22":{"position":[[5,6]]},"415":{"position":[[0,5]]}}}],["becom",{"_index":301,"t":{"597":{"position":[[15,6]]}}}],["bee",{"_index":272,"t":{"507":{"position":[[13,3]]}}}],["bitcoin",{"_index":236,"t":{"464":{"position":[[10,8]]},"466":{"position":[[10,7]]}}}],["bitcoin’",{"_index":241,"t":{"468":{"position":[[0,9]]}}}],["block",{"_index":75,"t":{"124":{"position":[[23,6]]}}}],["blockchain",{"_index":164,"t":{"296":{"position":[[0,10]]},"476":{"position":[[41,10]]}}}],["boost",{"_index":308,"t":{"607":{"position":[[30,5]]}}}],["boot",{"_index":227,"t":{"445":{"position":[[0,4]]},"658":{"position":[[8,7]]}}}],["bug",{"_index":154,"t":{"263":{"position":[[0,4]]}}}],["build",{"_index":34,"t":{"54":{"position":[[8,5]]},"92":{"position":[[0,5]]}}}],["burn",{"_index":225,"t":{"443":{"position":[[0,4]]}}}],["button",{"_index":102,"t":{"163":{"position":[[35,6]]}}}],["bypass",{"_index":269,"t":{"498":{"position":[[0,6]]}}}],["bzz",{"_index":276,"t":{"509":{"position":[[45,3]]}}}],["case",{"_index":163,"t":{"294":{"position":[[4,5]]}}}],["categori",{"_index":150,"t":{"255":{"position":[[0,10]]}}}],["centric",{"_index":263,"t":{"489":{"position":[[30,7]]}}}],["chain",{"_index":137,"t":{"223":{"position":[[0,5]]},"505":{"position":[[7,5]]},"614":{"position":[[28,6]]},"626":{"position":[[19,5]]},"630":{"position":[[38,5]]},"632":{"position":[[31,5]]}}}],["chang",{"_index":83,"t":{"139":{"position":[[8,6]]},"147":{"position":[[8,6]]},"397":{"position":[[0,6]]},"407":{"position":[[17,6]]}}}],["changelog",{"_index":142,"t":{"239":{"position":[[0,9]]}}}],["check",{"_index":26,"t":{"50":{"position":[[8,5]]},"141":{"position":[[8,5]]},"153":{"position":[[23,6]]}}}],["choos",{"_index":202,"t":{"391":{"position":[[0,6]]}}}],["claim",{"_index":59,"t":{"108":{"position":[[16,7]]},"638":{"position":[[3,5]]}}}],["classic",{"_index":253,"t":{"476":{"position":[[21,8]]},"478":{"position":[[9,7]]}}}],["clean",{"_index":209,"t":{"405":{"position":[[8,8]]}}}],["click",{"_index":100,"t":{"163":{"position":[[8,5]]}}}],["client",{"_index":126,"t":{"198":{"position":[[4,7]]},"272":{"position":[[24,6]]},"274":{"position":[[24,6]]}}}],["clients/an",{"_index":330,"t":{"666":{"position":[[20,10]]}}}],["cloud",{"_index":156,"t":{"280":{"position":[[19,6]]},"288":{"position":[[12,6]]}}}],["cluster",{"_index":284,"t":{"555":{"position":[[0,7]]},"559":{"position":[[31,7]]}}}],["command",{"_index":53,"t":{"98":{"position":[[0,7]]}}}],["complex",{"_index":212,"t":{"417":{"position":[[0,7]]}}}],["configur",{"_index":285,"t":{"555":{"position":[[8,13]]},"664":{"position":[[7,11]]},"688":{"position":[[4,11]]}}}],["confirm",{"_index":93,"t":{"153":{"position":[[8,7]]}}}],["connect",{"_index":125,"t":{"194":{"position":[[3,10]]},"276":{"position":[[3,10]]},"304":{"position":[[0,10]]},"352":{"position":[[3,7]]},"358":{"position":[[3,7]]},"676":{"position":[[0,10]]}}}],["consensu",{"_index":247,"t":{"471":{"position":[[27,9]]}}}],["contract",{"_index":15,"t":{"30":{"position":[[26,8]]},"34":{"position":[[17,9]]},"112":{"position":[[10,8]]},"605":{"position":[[41,8]]},"632":{"position":[[45,8]]},"638":{"position":[[35,8]]},"702":{"position":[[38,8]]}}}],["contribut",{"_index":21,"t":{"42":{"position":[[0,12]]}}}],["contributor",{"_index":149,"t":{"253":{"position":[[0,12]]}}}],["creat",{"_index":304,"t":{"603":{"position":[[3,8]]},"630":{"position":[[3,8]]},"700":{"position":[[3,8]]}}}],["credenti",{"_index":121,"t":{"188":{"position":[[11,11]]},"190":{"position":[[20,11]]},"270":{"position":[[11,11]]},"346":{"position":[[33,11]]},"350":{"position":[[17,11]]}}}],["cryptocurr",{"_index":238,"t":{"464":{"position":[[34,14]]},"489":{"position":[[38,14]]}}}],["dao",{"_index":6,"t":{"15":{"position":[[0,3]]}}}],["dappmanag",{"_index":172,"t":{"306":{"position":[[18,11]]},"334":{"position":[[0,11]]}}}],["dappnod",{"_index":110,"t":{"171":{"position":[[10,8]]},"194":{"position":[[17,8]]},"276":{"position":[[17,8]]},"280":{"position":[[10,8]]},"304":{"position":[[14,8]]},"312":{"position":[[0,8]]},"332":{"position":[[0,8]]},"344":{"position":[[16,8]]},"360":{"position":[[14,8]]},"385":{"position":[[0,8]]},"387":{"position":[[18,8]]},"424":{"position":[[8,8]]},"455":{"position":[[8,8]]},"466":{"position":[[26,8]]},"473":{"position":[[16,9]]},"478":{"position":[[20,9]]},"491":{"position":[[20,8]]},"503":{"position":[[16,8]]},"512":{"position":[[9,8]]},"544":{"position":[[14,8]]},"566":{"position":[[14,8]]},"575":{"position":[[48,8]]},"582":{"position":[[52,8]]},"586":{"position":[[25,8]]},"597":{"position":[[56,8]]},"601":{"position":[[37,8]]},"622":{"position":[[15,9]]},"628":{"position":[[37,8]]},"636":{"position":[[31,8]]},"642":{"position":[[17,8]]},"647":{"position":[[33,8]]},"652":{"position":[[7,8]]},"658":{"position":[[25,8]]},"660":{"position":[[21,8]]},"662":{"position":[[18,8]]},"664":{"position":[[24,8]]},"684":{"position":[[0,8]]},"686":{"position":[[11,8]]},"688":{"position":[[21,8]]},"690":{"position":[[5,8]]},"698":{"position":[[43,9]]}}}],["dappnode'",{"_index":190,"t":{"354":{"position":[[15,10]]},"494":{"position":[[0,10]]},"668":{"position":[[26,10]]}}}],["dappnodewifi",{"_index":192,"t":{"358":{"position":[[14,13]]}}}],["dashboard",{"_index":260,"t":{"486":{"position":[[19,10]]},"660":{"position":[[48,9]]}}}],["debian",{"_index":223,"t":{"437":{"position":[[28,6]]}}}],["decad",{"_index":243,"t":{"468":{"position":[[38,6]]}}}],["decentr",{"_index":162,"t":{"292":{"position":[[3,16]]},"468":{"position":[[18,17]]},"478":{"position":[[41,16]]},"614":{"position":[[0,12]]}}}],["depend",{"_index":65,"t":{"120":{"position":[[8,9]]},"229":{"position":[[0,12]]}}}],["deposit",{"_index":97,"t":{"155":{"position":[[17,7]]},"605":{"position":[[3,7],[33,7]]},"632":{"position":[[3,7],[37,7]]},"638":{"position":[[27,7]]},"702":{"position":[[3,7],[30,7]]}}}],["descript",{"_index":45,"t":{"74":{"position":[[0,11]]},"219":{"position":[[0,11]]}}}],["develop",{"_index":169,"t":{"300":{"position":[[0,10]]}}}],["dialog",{"_index":105,"t":{"165":{"position":[[19,6]]}}}],["disclaim",{"_index":145,"t":{"245":{"position":[[0,10]]}}}],["distribut",{"_index":20,"t":{"36":{"position":[[7,12]]},"106":{"position":[[16,11]]},"437":{"position":[[41,12]]},"557":{"position":[[0,11]]}}}],["diva",{"_index":281,"t":{"544":{"position":[[23,4]]},"546":{"position":[[16,4]]}}}],["dkg",{"_index":287,"t":{"557":{"position":[[27,5]]},"568":{"position":[[14,3]]}}}],["dm",{"_index":257,"t":{"484":{"position":[[25,3]]},"652":{"position":[[35,5]]}}}],["doc",{"_index":338,"t":{"682":{"position":[[9,4]]}}}],["dockertimeout",{"_index":139,"t":{"227":{"position":[[0,13]]}}}],["don't",{"_index":67,"t":{"122":{"position":[[3,5]]}}}],["download",{"_index":123,"t":{"190":{"position":[[3,8]]}}}],["drive",{"_index":339,"t":{"684":{"position":[[9,7]]}}}],["dust",{"_index":208,"t":{"405":{"position":[[3,4]]}}}],["earn",{"_index":250,"t":{"473":{"position":[[26,4]]},"614":{"position":[[39,4]]},"647":{"position":[[10,4]]}}}],["econom",{"_index":161,"t":{"290":{"position":[[3,9]]}}}],["email",{"_index":179,"t":{"324":{"position":[[0,5]]}}}],["enabl",{"_index":194,"t":{"366":{"position":[[0,6]]},"395":{"position":[[0,6]]},"533":{"position":[[0,6]]}}}],["enable/dis",{"_index":203,"t":{"393":{"position":[[0,14]]}}}],["engag",{"_index":273,"t":{"509":{"position":[[0,6]]}}}],["enum",{"_index":49,"t":{"82":{"position":[[0,4]]}}}],["eth",{"_index":305,"t":{"605":{"position":[[11,3]]},"609":{"position":[[15,3]]},"618":{"position":[[23,4]]},"645":{"position":[[31,3]]}}}],["ethereum",{"_index":252,"t":{"476":{"position":[[12,8]]},"478":{"position":[[0,8]]},"517":{"position":[[13,8]]},"519":{"position":[[13,8]]},"605":{"position":[[24,8]]},"672":{"position":[[0,8]]}}}],["ethic",{"_index":323,"t":{"654":{"position":[[7,7]]}}}],["event",{"_index":288,"t":{"557":{"position":[[33,5]]}}}],["exampl",{"_index":39,"t":{"62":{"position":[[0,7]]},"207":{"position":[[0,7]]},"415":{"position":[[6,7]]},"417":{"position":[[8,7]]}}}],["exit",{"_index":317,"t":{"636":{"position":[[3,4]]}}}],["explor",{"_index":235,"t":{"464":{"position":[[0,9]]}}}],["expos",{"_index":147,"t":{"249":{"position":[[0,9]]},"568":{"position":[[0,8]]}}}],["extern",{"_index":115,"t":{"181":{"position":[[0,8]]},"426":{"position":[[7,8]]}}}],["faq",{"_index":80,"t":{"133":{"position":[[0,3]]}}}],["faucet",{"_index":299,"t":{"590":{"position":[[8,6]]}}}],["featur",{"_index":214,"t":{"419":{"position":[[8,8]]},"512":{"position":[[36,8]]},"573":{"position":[[12,8]]},"580":{"position":[[12,8]]},"595":{"position":[[12,8]]}}}],["fee",{"_index":70,"t":{"122":{"position":[[19,3]]},"139":{"position":[[20,3]]},"147":{"position":[[20,3]]}}}],["feedback",{"_index":22,"t":{"44":{"position":[[0,8]]}}}],["fi",{"_index":171,"t":{"304":{"position":[[26,2]]},"306":{"position":[[3,2]]}}}],["field",{"_index":41,"t":{"66":{"position":[[0,6]]}}}],["file",{"_index":31,"t":{"52":{"position":[[9,5]]},"56":{"position":[[9,5]]}}}],["final",{"_index":229,"t":{"449":{"position":[[0,5]]}}}],["first",{"_index":283,"t":{"553":{"position":[[0,5]]},"575":{"position":[[0,5]]},"582":{"position":[[0,5]]},"597":{"position":[[0,5]]}}}],["flow",{"_index":207,"t":{"403":{"position":[[7,4]]}}}],["follow",{"_index":104,"t":{"165":{"position":[[8,6]]},"447":{"position":[[0,6]]}}}],["gener",{"_index":286,"t":{"557":{"position":[[16,10]]}}}],["globalenv",{"_index":140,"t":{"233":{"position":[[0,10]]}}}],["glossari",{"_index":81,"t":{"135":{"position":[[0,8]]}}}],["gno",{"_index":316,"t":{"632":{"position":[[11,3]]},"634":{"position":[[15,3]]},"638":{"position":[[14,3]]}}}],["gnosi",{"_index":271,"t":{"505":{"position":[[0,6]]},"626":{"position":[[12,6]]},"630":{"position":[[31,6]]},"632":{"position":[[24,6]]}}}],["hardwar",{"_index":158,"t":{"282":{"position":[[11,8]]},"422":{"position":[[0,8]]},"642":{"position":[[54,8]]},"668":{"position":[[37,8]]}}}],["high",{"_index":69,"t":{"122":{"position":[[14,4]]}}}],["hit",{"_index":72,"t":{"124":{"position":[[3,7]]}}}],["holeski",{"_index":297,"t":{"586":{"position":[[14,7]]},"588":{"position":[[10,7]]},"590":{"position":[[0,7]]}}}],["host",{"_index":180,"t":{"332":{"position":[[9,4]]},"397":{"position":[[7,4]]}}}],["id",{"_index":42,"t":{"68":{"position":[[0,2]]}}}],["ii",{"_index":341,"t":{"688":{"position":[[0,3]]}}}],["iii",{"_index":342,"t":{"690":{"position":[[0,4]]}}}],["import",{"_index":335,"t":{"678":{"position":[[0,9]]}}}],["incent",{"_index":275,"t":{"509":{"position":[[18,10]]}}}],["init",{"_index":51,"t":{"90":{"position":[[0,4]]}}}],["initi",{"_index":157,"t":{"282":{"position":[[3,7]]},"686":{"position":[[3,7]]}}}],["innov",{"_index":244,"t":{"468":{"position":[[48,10]]}}}],["instal",{"_index":124,"t":{"192":{"position":[[11,12]]},"272":{"position":[[3,10]]},"385":{"position":[[12,9]]},"387":{"position":[[10,7]]},"424":{"position":[[0,7]]},"433":{"position":[[0,12]]},"435":{"position":[[7,12]]},"437":{"position":[[10,12]]},"447":{"position":[[11,12]]},"455":{"position":[[0,7]]},"484":{"position":[[0,10]]},"507":{"position":[[0,10]]},"601":{"position":[[3,7]]},"628":{"position":[[3,7]]},"698":{"position":[[3,7]]}}}],["instanc",{"_index":186,"t":{"348":{"position":[[10,8]]}}}],["instruct",{"_index":106,"t":{"165":{"position":[[26,13]]}}}],["interfac",{"_index":193,"t":{"360":{"position":[[23,10]]},"660":{"position":[[35,9]]}}}],["introduc",{"_index":251,"t":{"476":{"position":[[0,11]]},"489":{"position":[[0,11]]}}}],["introduct",{"_index":176,"t":{"318":{"position":[[0,12]]},"501":{"position":[[0,12]]},"503":{"position":[[0,12]]},"513":{"position":[[0,12]]},"540":{"position":[[0,12]]},"549":{"position":[[0,12]]},"562":{"position":[[0,12]]}}}],["invest",{"_index":159,"t":{"282":{"position":[[20,10]]},"647":{"position":[[50,9]]}}}],["ipf",{"_index":278,"t":{"525":{"position":[[13,4]]},"527":{"position":[[13,4]]}}}],["iso",{"_index":221,"t":{"435":{"position":[[3,3]]},"441":{"position":[[8,3]]},"443":{"position":[[9,3]]},"658":{"position":[[34,3]]}}}],["join",{"_index":63,"t":{"118":{"position":[[34,4]]},"626":{"position":[[0,7]]},"696":{"position":[[0,7]]}}}],["key",{"_index":268,"t":{"496":{"position":[[16,4]]},"557":{"position":[[12,3]]},"573":{"position":[[8,3]]},"580":{"position":[[8,3]]},"595":{"position":[[8,3]]},"603":{"position":[[16,4]]},"630":{"position":[[22,4]]},"700":{"position":[[22,4]]}}}],["keyword",{"_index":151,"t":{"257":{"position":[[0,8]]}}}],["latest",{"_index":233,"t":{"459":{"position":[[15,6]]}}}],["launch",{"_index":185,"t":{"348":{"position":[[3,6]]}}}],["licens",{"_index":155,"t":{"265":{"position":[[0,7]]}}}],["limit",{"_index":112,"t":{"173":{"position":[[0,11]]}}}],["line",{"_index":54,"t":{"98":{"position":[[8,4]]}}}],["link",{"_index":152,"t":{"259":{"position":[[0,5]]}}}],["liquid",{"_index":12,"t":{"30":{"position":[[0,9]]},"34":{"position":[[0,9]]}}}],["local",{"_index":107,"t":{"169":{"position":[[12,5]]},"171":{"position":[[23,5]]},"203":{"position":[[0,5]]}}}],["log",{"_index":87,"t":{"149":{"position":[[8,3]]},"161":{"position":[[8,3]]},"377":{"position":[[3,7]]}}}],["lotteri",{"_index":74,"t":{"124":{"position":[[15,7]]}}}],["lp",{"_index":16,"t":{"32":{"position":[[0,2]]}}}],["luck",{"_index":66,"t":{"120":{"position":[[21,5]]}}}],["lukso",{"_index":343,"t":{"694":{"position":[[11,5]]},"696":{"position":[[8,5]]},"698":{"position":[[25,5]]},"700":{"position":[[31,5]]},"702":{"position":[[24,5]]},"704":{"position":[[39,5]]}}}],["lyx",{"_index":345,"t":{"702":{"position":[[11,3]]}}}],["machin",{"_index":77,"t":{"128":{"position":[[6,7]]},"130":{"position":[[25,7]]}}}],["main",{"_index":33,"t":{"54":{"position":[[3,4]]}}}],["main.yml",{"_index":37,"t":{"54":{"position":[[30,10]]}}}],["mainnet",{"_index":17,"t":{"32":{"position":[[19,9]]},"672":{"position":[[9,7]]}}}],["mainservic",{"_index":138,"t":{"225":{"position":[[0,11]]}}}],["make",{"_index":96,"t":{"155":{"position":[[8,4]]},"694":{"position":[[5,5]]}}}],["marketplac",{"_index":183,"t":{"340":{"position":[[19,11]]}}}],["membership",{"_index":4,"t":{"11":{"position":[[10,10]]}}}],["metamask",{"_index":334,"t":{"676":{"position":[[14,8]]}}}],["method",{"_index":220,"t":{"433":{"position":[[13,7]]}}}],["metric",{"_index":181,"t":{"332":{"position":[[14,7]]},"334":{"position":[[12,7]]},"336":{"position":[[8,7]]},"654":{"position":[[15,7]]}}}],["mev",{"_index":73,"t":{"124":{"position":[[11,3]]},"607":{"position":[[26,3]]}}}],["mine",{"_index":18,"t":{"34":{"position":[[10,6]]}}}],["minimum",{"_index":219,"t":{"431":{"position":[[17,7]]}}}],["minipool",{"_index":296,"t":{"582":{"position":[[23,8]]}}}],["miss",{"_index":68,"t":{"122":{"position":[[9,4]]}}}],["mission",{"_index":2,"t":{"11":{"position":[[0,7]]}}}],["monero",{"_index":261,"t":{"489":{"position":[[12,7]]}}}],["monero’",{"_index":264,"t":{"491":{"position":[[0,8]]}}}],["monitor",{"_index":258,"t":{"486":{"position":[[0,10]]},"546":{"position":[[0,10]]},"652":{"position":[[16,10]]}}}],["name",{"_index":133,"t":{"211":{"position":[[0,4]]}}}],["navig",{"_index":182,"t":{"340":{"position":[[3,8]]},"354":{"position":[[3,8]]},"586":{"position":[[0,10]]}}}],["necessari",{"_index":303,"t":{"601":{"position":[[15,9]]},"628":{"position":[[15,9]]},"698":{"position":[[15,9]]}}}],["network",{"_index":240,"t":{"466":{"position":[[54,7]]},"473":{"position":[[66,7]]}}}],["new",{"_index":198,"t":{"373":{"position":[[15,3]]}}}],["node",{"_index":8,"t":{"22":{"position":[[0,4]]},"466":{"position":[[18,4]]},"507":{"position":[[17,4]]},"517":{"position":[[22,4]]},"519":{"position":[[22,4]]},"525":{"position":[[18,4]]},"527":{"position":[[18,4]]},"537":{"position":[[23,4]]},"546":{"position":[[21,5]]},"566":{"position":[[27,4]]},"588":{"position":[[26,5]]},"597":{"position":[[24,4]]},"644":{"position":[[27,4]]},"666":{"position":[[43,4]]},"672":{"position":[[17,4]]},"674":{"position":[[6,5]]}}}],["nodedrop",{"_index":10,"t":{"24":{"position":[[0,8]]}}}],["nodestream",{"_index":11,"t":{"26":{"position":[[0,10]]}}}],["notabl",{"_index":213,"t":{"419":{"position":[[0,7]]}}}],["notif",{"_index":178,"t":{"322":{"position":[[9,13]]},"324":{"position":[[6,13]]},"395":{"position":[[14,13]]}}}],["offer",{"_index":277,"t":{"512":{"position":[[53,6]]}}}],["open",{"_index":310,"t":{"611":{"position":[[0,7]]}}}],["openvpn",{"_index":119,"t":{"187":{"position":[[11,7]]},"190":{"position":[[12,7]]},"192":{"position":[[3,7]]},"194":{"position":[[30,7]]},"201":{"position":[[0,7]]}}}],["oper",{"_index":282,"t":{"544":{"position":[[28,8]]},"566":{"position":[[38,8]]},"644":{"position":[[32,8]]}}}],["opportun",{"_index":307,"t":{"607":{"position":[[11,14]]}}}],["optim",{"_index":280,"t":{"537":{"position":[[14,8]]}}}],["option",{"_index":55,"t":{"98":{"position":[[13,7]]},"346":{"position":[[45,10]]}}}],["oracl",{"_index":61,"t":{"114":{"position":[[4,6]]}}}],["over",{"_index":222,"t":{"437":{"position":[[23,4]]}}}],["overview",{"_index":78,"t":{"128":{"position":[[14,8]]},"571":{"position":[[10,8]]},"578":{"position":[[11,8]]},"593":{"position":[[11,8]]},"666":{"position":[[31,8]]}}}],["packag",{"_index":265,"t":{"491":{"position":[[9,7]]},"494":{"position":[[11,8]]},"512":{"position":[[18,8]]},"573":{"position":[[0,7]]},"580":{"position":[[0,7]]},"595":{"position":[[0,7]]},"601":{"position":[[25,8]]},"628":{"position":[[25,8]]},"698":{"position":[[31,8]]}}}],["particip",{"_index":165,"t":{"296":{"position":[[11,13]]}}}],["password",{"_index":205,"t":{"397":{"position":[[17,8]]}}}],["past",{"_index":211,"t":{"407":{"position":[[11,5]]}}}],["pattern",{"_index":47,"t":{"78":{"position":[[0,7]]}}}],["patternerrormessag",{"_index":48,"t":{"80":{"position":[[0,19]]}}}],["physic",{"_index":116,"t":{"183":{"position":[[0,8]]},"288":{"position":[[0,8]]}}}],["pioneer",{"_index":237,"t":{"464":{"position":[[23,7]]}}}],["pool",{"_index":14,"t":{"30":{"position":[[20,5]]}}}],["pre",{"_index":35,"t":{"54":{"position":[[18,3]]}}}],["prerequisit",{"_index":230,"t":{"453":{"position":[[0,13]]}}}],["preserv",{"_index":254,"t":{"476":{"position":[[30,10]]}}}],["price",{"_index":175,"t":{"314":{"position":[[0,7]]}}}],["principl",{"_index":255,"t":{"476":{"position":[[52,10]]}}}],["privaci",{"_index":262,"t":{"489":{"position":[[22,7]]}}}],["project",{"_index":7,"t":{"15":{"position":[[4,8]]}}}],["prompt",{"_index":228,"t":{"447":{"position":[[24,7]]}}}],["proof",{"_index":312,"t":{"614":{"position":[[13,5]]}}}],["properti",{"_index":131,"t":{"209":{"position":[[0,10]]}}}],["protocol",{"_index":248,"t":{"471":{"position":[[37,8]]}}}],["provis",{"_index":13,"t":{"30":{"position":[[10,9]]}}}],["proxi",{"_index":108,"t":{"169":{"position":[[18,5]]},"171":{"position":[[29,5]]}}}],["publish",{"_index":52,"t":{"94":{"position":[[0,7]]}}}],["purpos",{"_index":79,"t":{"130":{"position":[[4,7]]}}}],["reboot",{"_index":231,"t":{"457":{"position":[[0,6]]}}}],["recipi",{"_index":84,"t":{"139":{"position":[[24,9]]},"147":{"position":[[24,9]]}}}],["recommend",{"_index":128,"t":{"199":{"position":[[10,13]]},"422":{"position":[[9,15]]}}}],["recoveri",{"_index":201,"t":{"375":{"position":[[15,8]]}}}],["refer",{"_index":132,"t":{"209":{"position":[[11,9]]}}}],["regist",{"_index":197,"t":{"373":{"position":[[3,8]]},"544":{"position":[[0,11]]},"566":{"position":[[0,11]]}}}],["relay",{"_index":94,"t":{"153":{"position":[[16,6]]}}}],["releas",{"_index":36,"t":{"54":{"position":[[22,7]]},"496":{"position":[[0,7]]}}}],["remind",{"_index":336,"t":{"678":{"position":[[10,9]]}}}],["remot",{"_index":130,"t":{"203":{"position":[[10,6]]},"519":{"position":[[6,6]]},"527":{"position":[[6,6]]}}}],["repositori",{"_index":153,"t":{"261":{"position":[[0,10]]},"391":{"position":[[7,10]]},"650":{"position":[[7,12]]}}}],["requir",{"_index":50,"t":{"84":{"position":[[0,8]]},"231":{"position":[[0,12]]},"431":{"position":[[25,12]]},"542":{"position":[[0,12]]},"551":{"position":[[0,12]]},"564":{"position":[[0,12]]}}}],["restor",{"_index":232,"t":{"459":{"position":[[0,7]]}}}],["revolutionari",{"_index":246,"t":{"471":{"position":[[13,13]]}}}],["reward",{"_index":58,"t":{"104":{"position":[[19,7]]},"106":{"position":[[4,7]]},"108":{"position":[[4,7]]},"473":{"position":[[31,7]]},"647":{"position":[[15,7]]}}}],["rocketpool",{"_index":295,"t":{"578":{"position":[[0,10]]},"582":{"position":[[37,10]]}}}],["role",{"_index":242,"t":{"468":{"position":[[10,4]]}}}],["rollup",{"_index":279,"t":{"533":{"position":[[7,7]]}}}],["router",{"_index":196,"t":{"366":{"position":[[20,6]]}}}],["run",{"_index":239,"t":{"466":{"position":[[0,7]]},"517":{"position":[[0,3]]},"525":{"position":[[0,3]]},"588":{"position":[[4,3]]},"666":{"position":[[48,7]]}}}],["runner",{"_index":302,"t":{"597":{"position":[[29,6]]}}}],["scalabl",{"_index":160,"t":{"286":{"position":[[0,11]]}}}],["school",{"_index":340,"t":{"684":{"position":[[17,6]]}}}],["scratch",{"_index":318,"t":{"642":{"position":[[31,7]]}}}],["script",{"_index":215,"t":{"424":{"position":[[21,6]]},"437":{"position":[[3,6]]}}}],["season",{"_index":71,"t":{"122":{"position":[[23,8]]}}}],["secret",{"_index":46,"t":{"76":{"position":[[0,6]]}}}],["secur",{"_index":200,"t":{"375":{"position":[[3,6]]},"662":{"position":[[27,8]]}}}],["select",{"_index":90,"t":{"151":{"position":[[8,6]]}}}],["servic",{"_index":292,"t":{"568":{"position":[[18,7]]},"652":{"position":[[27,7]]}}}],["set",{"_index":113,"t":{"173":{"position":[[14,8]]},"187":{"position":[[0,7]]},"269":{"position":[[0,7]]},"274":{"position":[[3,7]]},"306":{"position":[[6,8]]},"346":{"position":[[3,3]]},"399":{"position":[[4,4]]},"537":{"position":[[0,7]]},"642":{"position":[[10,3]]},"643":{"position":[[10,3]]},"662":{"position":[[7,7]]}}}],["setup",{"_index":319,"t":{"644":{"position":[[10,5]]},"686":{"position":[[20,5]]}}}],["shortdescript",{"_index":135,"t":{"217":{"position":[[0,16]]}}}],["signatur",{"_index":266,"t":{"494":{"position":[[20,10]]},"498":{"position":[[15,9]]}}}],["smart",{"_index":60,"t":{"112":{"position":[[4,5]]}}}],["smooth",{"_index":62,"t":{"118":{"position":[[8,6]]},"646":{"position":[[38,6]]}}}],["smooth'",{"_index":56,"t":{"104":{"position":[[0,8]]},"139":{"position":[[37,8]]},"147":{"position":[[37,8]]},"149":{"position":[[18,8]]},"161":{"position":[[18,8]]}}}],["solo",{"_index":166,"t":{"296":{"position":[[27,4]]}}}],["sourc",{"_index":57,"t":{"104":{"position":[[9,6]]},"391":{"position":[[18,6]]}}}],["special",{"_index":344,"t":{"694":{"position":[[17,8]]}}}],["specif",{"_index":218,"t":{"431":{"position":[[0,14]]}}}],["ssd",{"_index":217,"t":{"426":{"position":[[16,3]]}}}],["ssh",{"_index":114,"t":{"179":{"position":[[0,3]]},"181":{"position":[[9,3]]}}}],["ssv",{"_index":291,"t":{"566":{"position":[[23,3]]}}}],["stake",{"_index":167,"t":{"296":{"position":[[32,7]]},"336":{"position":[[0,7]]},"473":{"position":[[5,7]]},"509":{"position":[[32,7]]},"575":{"position":[[21,7]]},"614":{"position":[[22,5]]},"618":{"position":[[6,5]]},"620":{"position":[[8,8]]},"622":{"position":[[4,5]]},"645":{"position":[[24,6]]}}}],["stakehous",{"_index":300,"t":{"593":{"position":[[0,10]]},"597":{"position":[[41,10]]},"644":{"position":[[16,10]]}}}],["staker",{"_index":313,"t":{"616":{"position":[[4,7]]},"674":{"position":[[15,7]]}}}],["stakewis",{"_index":293,"t":{"571":{"position":[[0,9]]},"575":{"position":[[34,9]]}}}],["start",{"_index":294,"t":{"575":{"position":[[15,5]]},"582":{"position":[[15,5]]}}}],["state",{"_index":76,"t":{"128":{"position":[[0,5]]},"130":{"position":[[19,5]]}}}],["statu",{"_index":86,"t":{"141":{"position":[[32,7]]}}}],["step",{"_index":82,"t":{"139":{"position":[[0,4]]},"141":{"position":[[0,4]]},"147":{"position":[[0,4]]},"149":{"position":[[0,4]]},"151":{"position":[[0,4]]},"153":{"position":[[0,4]]},"155":{"position":[[0,4]]},"161":{"position":[[0,4]]},"163":{"position":[[0,4]]},"165":{"position":[[0,4]]},"449":{"position":[[6,5]]},"553":{"position":[[6,5]]},"575":{"position":[[6,5]]},"582":{"position":[[6,5]]},"597":{"position":[[6,5]]}}}],["stop",{"_index":64,"t":{"120":{"position":[[3,4]]},"284":{"position":[[0,4]]}}}],["storag",{"_index":274,"t":{"509":{"position":[[10,7]]}}}],["style",{"_index":146,"t":{"247":{"position":[[0,5]]}}}],["subscrib",{"_index":98,"t":{"155":{"position":[[29,10]]},"344":{"position":[[3,9]]},"646":{"position":[[10,9]]}}}],["subscript",{"_index":85,"t":{"141":{"position":[[19,12]]}}}],["support",{"_index":23,"t":{"44":{"position":[[13,7]]},"466":{"position":[[39,10]]},"473":{"position":[[45,10]]},"478":{"position":[[30,10]]}}}],["swarm",{"_index":270,"t":{"501":{"position":[[16,5]]}}}],["sync",{"_index":329,"t":{"666":{"position":[[7,7]]}}}],["system",{"_index":204,"t":{"393":{"position":[[15,6]]},"395":{"position":[[7,6]]}}}],["tab",{"_index":333,"t":{"674":{"position":[[23,3]]}}}],["target",{"_index":43,"t":{"70":{"position":[[0,6]]}}}],["telegram",{"_index":177,"t":{"322":{"position":[[0,8]]},"346":{"position":[[10,8]]}}}],["termin",{"_index":117,"t":{"183":{"position":[[9,8]]}}}],["test",{"_index":168,"t":{"298":{"position":[[0,7]]}}}],["testnet",{"_index":298,"t":{"588":{"position":[[18,7]]}}}],["thermal",{"_index":210,"t":{"407":{"position":[[3,7]]}}}],["through",{"_index":259,"t":{"486":{"position":[[11,7]]}}}],["titl",{"_index":44,"t":{"72":{"position":[[0,5]]}}}],["token",{"_index":0,"t":{"9":{"position":[[0,5]]},"32":{"position":[[3,5]]},"375":{"position":[[24,5]]}}}],["troubleshoot",{"_index":99,"t":{"157":{"position":[[0,16]]},"362":{"position":[[0,16]]},"368":{"position":[[0,15]]},"379":{"position":[[0,15]]},"521":{"position":[[0,15]]},"529":{"position":[[0,15]]},"690":{"position":[[14,15]]}}}],["trust",{"_index":267,"t":{"496":{"position":[[8,7]]},"498":{"position":[[7,7]]}}}],["tutori",{"_index":337,"t":{"682":{"position":[[0,8]]}}}],["type",{"_index":136,"t":{"221":{"position":[[0,4]]}}}],["ui",{"_index":191,"t":{"354":{"position":[[26,2]]},"611":{"position":[[24,3]]},"616":{"position":[[12,2]]},"636":{"position":[[40,2]]}}}],["understand",{"_index":332,"t":{"668":{"position":[[7,13]]}}}],["uninstal",{"_index":234,"t":{"461":{"position":[[0,9]]}}}],["unsubscrib",{"_index":101,"t":{"163":{"position":[[21,13],[71,12]]}}}],["up",{"_index":118,"t":{"187":{"position":[[8,2]]},"269":{"position":[[8,2]]},"274":{"position":[[11,2]]},"346":{"position":[[7,2]]},"537":{"position":[[8,2]]},"642":{"position":[[14,2]]},"643":{"position":[[14,2]]},"662":{"position":[[15,2]]}}}],["updat",{"_index":28,"t":{"50":{"position":[[27,7]]},"393":{"position":[[27,7]]}}}],["updatealert",{"_index":144,"t":{"243":{"position":[[0,12]]}}}],["upnp",{"_index":195,"t":{"366":{"position":[[7,4]]}}}],["upstream",{"_index":27,"t":{"50":{"position":[[18,8]]}}}],["upstreamvers",{"_index":134,"t":{"215":{"position":[[0,15]]}}}],["url",{"_index":122,"t":{"188":{"position":[[23,3]]}}}],["us",{"_index":38,"t":{"60":{"position":[[7,3]]},"169":{"position":[[8,3]]},"280":{"position":[[4,5]]},"294":{"position":[[0,3]]},"519":{"position":[[0,3]]},"527":{"position":[[0,3]]},"642":{"position":[[39,5]]}}}],["usb",{"_index":226,"t":{"443":{"position":[[18,3]]},"445":{"position":[[14,3]]}}}],["user",{"_index":199,"t":{"373":{"position":[[19,4]]},"397":{"position":[[12,4]]},"660":{"position":[[30,4]]}}}],["valid",{"_index":91,"t":{"151":{"position":[[20,10]]},"163":{"position":[[49,9]]},"559":{"position":[[7,10]]},"603":{"position":[[30,9]]},"626":{"position":[[30,9]]},"630":{"position":[[12,9]]},"636":{"position":[[12,9]]},"643":{"position":[[19,9]]},"646":{"position":[[25,9]]},"696":{"position":[[19,9]]},"700":{"position":[[12,9]]},"704":{"position":[[45,9]]}}}],["version",{"_index":40,"t":{"64":{"position":[[0,7]]},"213":{"position":[[0,7]]},"459":{"position":[[22,7]]}}}],["via",{"_index":111,"t":{"171":{"position":[[19,3]]},"194":{"position":[[26,3]]},"276":{"position":[[26,3]]},"352":{"position":[[11,3]]},"424":{"position":[[17,3]]}}}],["vpn",{"_index":120,"t":{"188":{"position":[[7,3]]},"198":{"position":[[0,3]]},"270":{"position":[[7,3]]},"664":{"position":[[33,3]]}}}],["vs",{"_index":129,"t":{"203":{"position":[[6,3]]}}}],["want",{"_index":103,"t":{"163":{"position":[[63,4]]},"284":{"position":[[14,4]]},"387":{"position":[[2,4]]}}}],["warn",{"_index":143,"t":{"241":{"position":[[0,8]]}}}],["web3sign",{"_index":311,"t":{"611":{"position":[[13,10]]}}}],["websit",{"_index":88,"t":{"149":{"position":[[27,8]]},"161":{"position":[[27,8]]}}}],["weekli",{"_index":19,"t":{"36":{"position":[[0,6]]}}}],["wi",{"_index":170,"t":{"304":{"position":[[23,2]]},"306":{"position":[[0,2]]}}}],["wireguard",{"_index":127,"t":{"199":{"position":[[0,9]]},"269":{"position":[[11,9]]},"272":{"position":[[14,9]]},"274":{"position":[[14,9]]},"276":{"position":[[30,9]]},"346":{"position":[[23,9]]},"350":{"position":[[7,9]]},"352":{"position":[[15,9]]}}}],["withdraw",{"_index":309,"t":{"609":{"position":[[0,11]]},"634":{"position":[[0,11]]},"645":{"position":[[10,8]]},"704":{"position":[[12,10]]}}}],["without",{"_index":314,"t":{"618":{"position":[[12,7]]},"647":{"position":[[42,7]]}}}],["work",{"_index":256,"t":{"482":{"position":[[11,5]]}}}],["workflow",{"_index":30,"t":{"52":{"position":[[0,8]]},"56":{"position":[[0,8]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":1,"t":"Archive","s":"","u":"/blog/archive","p":1},{"i":2,"t":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","s":"First Blog Post","u":"/blog/first-blog-post","p":2},{"i":4,"t":"Blog posts support Docusaurus Markdown features, such as MDX.","s":"MDX Blog Post","u":"/blog/mdx-blog-post","p":4},{"i":6,"t":"This is the summary of a very long blog post,","s":"Long Blog Post","u":"/blog/long-blog-post","p":6},{"i":8,"t":"DAO information","s":"Governance","u":"/docs/dao","p":8},{"i":17,"t":"Docusaurus blogging features are powered by the blog plugin.","s":"Welcome","u":"/blog/welcome","p":17},{"i":19,"t":"What is a DAO?","s":"Dappnode DAO FAQ","u":"/docs/dao/faq","p":19},{"i":21,"t":"NODE Basics","s":"The NODE Economy","u":"/docs/dao/node-basics","p":21},{"i":28,"t":"Liquidity Mining (LM) launched on Jul 17 2021, 2000 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows:","s":"Liquidity Mining","u":"/docs/dao/liquidity-mining","p":28},{"i":38,"t":"\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"","s":"NODEdrop","u":"/docs/dao/node-drop","p":38},{"i":40,"t":"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment.","s":"Welcome to the Developer Documentation!","u":"/docs/dev","p":40},{"i":46,"t":"\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"","s":"NODEstream","u":"/docs/dao/node-stream","p":46},{"i":48,"t":"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases.","s":"GitHub Actions for Dappnode Packages","u":"/docs/dev/github-actions","p":48},{"i":58,"t":"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.","s":"Wizard Reference","u":"/docs/dev/references/setup-wizard","p":58},{"i":88,"t":"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).","s":"Main commands","u":"/docs/dev/sdk/commands","p":88},{"i":96,"t":"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet.","s":"DappnodeSDK","u":"/docs/dev/sdk/overview","p":96},{"i":100,"t":"In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more!","s":"Deep Dive into Smooth!","u":"/docs/smooth/deep-dive-into-smooth/overview","p":100},{"i":102,"t":"Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.","s":"Rewards","u":"/docs/smooth/deep-dive-into-smooth/rewards","p":102},{"i":110,"t":"Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible of computing the rewards of each validator.","s":"Smooth's architecture","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","p":110},{"i":116,"t":"Smooth introduction","s":"Welcome to Smooth, Dappnode's MEV Smoothing Pool!","u":"/docs/smooth","p":116},{"i":126,"t":"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.","s":"Smooth Validator States","u":"/docs/smooth/deep-dive-into-smooth/states","p":126},{"i":132,"t":"FAQ","s":"FAQ & Glossary","u":"/docs/smooth/faq-glossary","p":132},{"i":137,"t":"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block.","s":"Automatic Subscription","u":"/docs/smooth/subscribe-to-smooth/automatic","p":137},{"i":143,"t":"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully.","s":"Subscribing to Smooth","u":"/docs/smooth/subscribe-to-smooth/overview","p":143},{"i":145,"t":"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from Smooth.","s":"Manual Subscription","u":"/docs/smooth/subscribe-to-smooth/manual","p":145},{"i":159,"t":"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth's website and it only takes one simple transaction.","s":"Unsubscribing from Smooth.","u":"/docs/smooth/unsubscribe-from-smooth","p":159},{"i":167,"t":"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users.","s":"Local Proxy Access to Dappnode","u":"/docs/user/access-your-dappnode/local","p":167},{"i":175,"t":"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface.","s":"🌐 Access your Dappnode","u":"/docs/user/access-your-dappnode/overview","p":175},{"i":177,"t":"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage.","s":"Terminal Access to Dappnode","u":"/docs/user/access-your-dappnode/terminal","p":177},{"i":185,"t":"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode.","s":"OpenVPN Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/openvpn","p":185},{"i":196,"t":"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN.","s":"VPN Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/overview","p":196},{"i":205,"t":"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package:","s":"Dappnode Package (DNP) manifest","u":"/docs/dev/references/manifest","p":205},{"i":267,"t":"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode.","s":"WireGuard Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/wireguard","p":267},{"i":278,"t":"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode.","s":"What is Dappnode Cloud?","u":"/docs/user/dappnode-cloud/overview","p":278},{"i":302,"t":"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode's Wi-Fi hotspot.","s":"Wi-Fi Access to Dappnode","u":"/docs/user/access-your-dappnode/wifi","p":302},{"i":308,"t":"Which machine should I choose?","s":"FAQs & Troubleshooting","u":"/docs/user/dappnode-cloud/providers/aws/faqs","p":308},{"i":310,"t":"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.","s":"AWS","u":"/docs/user/dappnode-cloud/providers/aws/overview","p":310},{"i":316,"t":"Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.","s":"Ethical Metrics","u":"/docs/user/ethical-metrics/overview","p":316},{"i":320,"t":"We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications.","s":"Setting up Ethical Metrics","u":"/docs/user/ethical-metrics/setup","p":320},{"i":326,"t":"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the Dappnode Discord and we'll be happy to assist you!","s":"Troubleshooting","u":"/docs/user/ethical-metrics/troubleshooting","p":326},{"i":328,"t":"How can I start validating?","s":"FAQs","u":"/docs/user/faqs","p":328},{"i":330,"t":"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy.","s":"Metrics Collected by Ethical Metrics","u":"/docs/user/ethical-metrics/metrics","p":330},{"i":338,"t":"To launch a Dappnode AMI instance, follow these steps:","s":"How to Set Up an Instance","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","p":338},{"i":356,"t":"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it.","s":"Access Dappnode via Wi-Fi","u":"/docs/user/getting-started/access-dappnode-via-wifi","p":356},{"i":364,"t":"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router.","s":"Connect your dappnode to the router and power","u":"/docs/user/getting-started/connect-dappnode-to-the-router","p":364},{"i":370,"t":"Now that your DAppNode is set up and ready to go, it's time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps:","s":"Next Steps","u":"/docs/user/getting-started/next-steps","p":370},{"i":372,"t":"1. Register as New User","s":"Register","u":"/docs/user/getting-started/register","p":372},{"i":381,"t":"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future.","s":"More coming soon","u":"/docs/user/dappnode-cloud/providers/coming-soon","p":381},{"i":383,"t":"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode.","s":"Choose your path","u":"/docs/user/getting-started/choose-your-path","p":383},{"i":389,"t":"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.","s":"Setup","u":"/docs/user/getting-started/setup","p":389},{"i":401,"t":"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they're always welcome in our Discord server.","s":"Maintenance","u":"/docs/user/hardware/maintenance","p":401},{"i":409,"t":"Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics 📊 in the main dashboard to do so.","s":"Temperature","u":"/docs/user/hardware/temperature","p":409},{"i":411,"t":"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things.","s":"Hardware","u":"/docs/user/hardware/overview","p":411},{"i":413,"t":"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.","s":"Docker compose file","u":"/docs/dev/references/docker-compose","p":413},{"i":421,"t":"Hardware Recommendations","s":"Install - ARM","u":"/docs/user/install/arm","p":421},{"i":428,"t":"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line.","s":"Dappnode commands","u":"/docs/user/install/dappnode-commands","p":428},{"i":430,"t":"Specifications & Minimum Requirements","s":"Installation Overview","u":"/docs/user/install/overview","p":430},{"i":439,"t":"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.","s":"ISO Installation","u":"/docs/user/install/iso","p":439},{"i":451,"t":"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.","s":"Script installation","u":"/docs/user/install/script","p":451},{"i":463,"t":"Exploring Bitcoin: The Pioneer of Cryptocurrency","s":"Bitcoin","u":"/docs/user/packages/bitcoin","p":463},{"i":470,"t":"Avalanche: A Revolutionary Consensus Protocol","s":"Avalanche","u":"/docs/user/packages/avalanche","p":470},{"i":475,"t":"Introducing Ethereum Classic: Preserving Blockchain Principles","s":"Ethereum Classic","u":"/docs/user/packages/ethclassic","p":475},{"i":480,"t":"As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or \"health\" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.","s":"Dappnode Monitoring Service (DMS)","u":"/docs/user/packages/dms","p":480},{"i":488,"t":"Introducing Monero: A Privacy-Centric Cryptocurrency","s":"Monero","u":"/docs/user/packages/monero","p":488},{"i":493,"t":"Dappnode's Packages Signatures","s":"Packages' Signature","u":"/docs/user/packages/signature","p":493},{"i":500,"t":"Introduction to Swarm","s":"Guide to Installing Bee Node on Dappnode","u":"/docs/user/packages/swarm","p":500},{"i":511,"t":"What are Dappnode packages and what features do they offer?","s":"Understanding Dappnode Packages","u":"/docs/user/packages/understanding-dappnode-packages","p":511},{"i":515,"t":"Dappnode uses smart contracts to distribute the dappnode packages available in the Dappstore. The smart contracts are deployed in the Ethereum blockchain and the Dappnode client interacts with them to get the list of available packages and to download them. Your dappnode will need a connection to an Ethereum node in order to read the smart contracts and download the packages. There are two ways to establish this connection:","s":"Ethereum repository","u":"/docs/user/repository/ethereum","p":515},{"i":523,"t":"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices:","s":"IPFS repository","u":"/docs/user/repository/ipfs","p":523},{"i":531,"t":"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs.","s":"Ethereum Rollups: An Overview","u":"/docs/user/rollups/overview","p":531},{"i":535,"t":"Optimism is Ethereum's Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.","s":"Optimism Rollup","u":"/docs/user/rollups/optimism","p":535},{"i":539,"t":"---","s":"Diva package for Dappnode","u":"/docs/user/staking/ethereum/dvt-technologies/diva","p":539},{"i":548,"t":"---","s":"Obol Distributed Validator package for Dappnode","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","p":548},{"i":561,"t":"---","s":"SSV Distributed Validator package for Dappnode","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","p":561},{"i":570,"t":"---","s":"StakeWise","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","p":570},{"i":577,"t":"---","s":"Rocketpool","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","p":577},{"i":584,"t":"The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike.","s":"Holesky Testnet","u":"/docs/user/staking/ethereum/solo/holesky","p":584},{"i":592,"t":"---","s":"Stakehouse","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","p":592},{"i":599,"t":"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum's block production by staking ETH.","s":"Ethereum mainnet","u":"/docs/user/staking/ethereum/solo/mainnet","p":599},{"i":613,"t":"Decentralize Proof-of-Stake chains and earn","s":"Earn with Staking in Dappnode","u":"/docs/user/staking/overview","p":613},{"i":624,"t":"Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It's operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it's a testament to its popularity and accessibility.","s":"Gnosis Chain","u":"/docs/user/staking/gnosis-chain/solo","p":624},{"i":640,"t":"Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School!","s":"Crash Course","u":"/docs/user/videos-and-tutorials/crash-course","p":640},{"i":648,"t":"We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it.","s":"2. Configuring your Dappnode","u":"/docs/user/videos-and-tutorials/driving-school/configuration","p":648},{"i":656,"t":"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered.","s":"1. Initial Dappnode Setup","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","p":656},{"i":670,"t":"When you've set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you've selected. Below is a guide on how to do this:","s":"How to Connect to My Blockchain Node","u":"/docs/user/videos-and-tutorials/guides/connect-node","p":670},{"i":680,"t":"Welcome to the Videos and Tutorials section! Here, you'll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you're a beginner or an advanced user, there's something here for everyone.","s":"Videos and Tutorials","u":"/docs/user/videos-and-tutorials/overview","p":680},{"i":692,"t":"LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That's LUKSO for you!","s":"LUKSO","u":"/docs/user/staking/lukso/solo","p":692}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[0,6.615]],["t/2",[1,3.942,2,4.627,3,3.942,4,3.942,5,3.942,6,2.729,7,2.729,8,2.729,9,3.446,10,3.446,11,3.446,12,3.446,13,3.446,14,3.446,15,2.729,16,3.446,17,3.446,18,2.729]],["t/4",[19,4.093,20,4.52,21,4.52,22,4.52,23,5.169,24,3.774,25,4.52,26,5.169]],["t/6",[19,4.516,20,4.988,27,5.703,28,5.703,29,5.703]],["t/8",[30,5.563,31,4.645]],["t/17",[19,5.405,22,4.821,24,4.026,32,4.366,33,5.513]],["t/19",[30,5.785]],["t/21",[34,3.847,35,5.037]],["t/28",[34,2.799,36,3.121,37,3.121,38,4.629,39,2.729,40,3.121,41,3.121,42,3.121,43,3.121,44,3.121,45,4.629,46,3.121,47,3.121,48,3.121,49,3.121,50,3.121,51,2.729,52,3.121,53,3.121,54,3.121,55,2.125,56,2.125,57,3.121,58,2.729,59,2.472,60,2.472]],["t/38",[1,1.472,2,1.472,3,3.629,4,1.472,5,1.472,6,1.472,7,1.472,8,1.472,15,1.472,18,1.472,61,1.625,62,1.625,63,1.625,64,3.446,65,1.625,66,1.625,67,1.625,68,1.625,69,1.625,70,1.625,71,1.625,72,1.625,73,2.692,74,1.625,75,1.625,76,1.625,77,1.625,78,1.625,79,1.625,80,1.625,81,1.625,82,1.625,83,1.625,84,1.625,85,1.625,86,1.625,87,1.625,88,1.625,89,1.625,90,1.625,91,1.625,92,1.625,93,1.625,94,1.625,95,1.625,96,1.625,97,1.625,98,1.625,99,1.625,100,1.625,101,1.625,102,1.625,103,1.625,104,1.625,105,1.625,106,1.625,107,1.625,108,1.625,109,1.625]],["t/40",[110,2.196,111,2.048,112,4.275,113,3.007,114,3.938,115,3.007,116,1.924,117,2.048,118,2.63,119,2.63,120,2.382,121,2.63,122,1.924,123,1.924,124,2.63,125,0.858,126,1.441,127,2.63,128,2.63,129,2.63,130,2.382,131,2.63,132,2.63,133,1.924,134,3.007,135,3.007,136,2.63]],["t/46",[1,1.472,2,1.472,3,3.629,4,1.472,5,1.472,6,1.472,7,1.472,8,1.472,15,1.472,18,1.472,61,1.625,62,1.625,63,1.625,64,3.446,65,1.625,66,1.625,67,1.625,68,1.625,69,1.625,70,1.625,71,1.625,72,1.625,73,2.692,74,1.625,75,1.625,76,1.625,77,1.625,78,1.625,79,1.625,80,1.625,81,1.625,82,1.625,83,1.625,84,1.625,85,1.625,86,1.625,87,1.625,88,1.625,89,1.625,90,1.625,91,1.625,92,1.625,93,1.625,94,1.625,95,1.625,96,1.625,97,1.625,98,1.625,99,1.625,100,1.625,101,1.625,102,1.625,103,1.625,104,1.625,105,1.625,106,1.625,107,1.625,108,1.625,109,1.625]],["t/48",[123,2.581,125,0.769,126,1.934,131,3.528,133,2.581,137,6.368,138,5.563,139,3.528,140,4.034,141,4.034,142,2.946,143,3.528,144,4.034,145,4.034]],["t/58",[124,2.729,125,0.595,126,2.645,133,1.997,136,2.729,139,2.729,146,2.472,147,3.121,148,3.121,149,2.417,150,2.125,151,2.472,152,3.121,153,3.121,154,3.121,155,3.121,156,3.121,157,3.121,158,2.729,159,2.279,160,2.125,161,2.472,162,3.121,163,2.729,164,2.729,165,2.125]],["t/88",[112,2.977,122,2.405,125,0.716,126,1.802,127,3.288,166,3.759,167,2.977,168,3.759,169,3.759,170,2.745,171,3.288,172,3.759,173,2.977,174,3.288,175,2.745,176,2.977,177,3.288,178,3.759,179,3.759,180,2.405]],["t/96",[118,3.145,121,3.145,125,0.685,126,1.723,130,4.064,133,2.301,160,2.448,171,4.488,173,2.848,174,4.488,181,3.145,182,2.848,183,2.626,184,3.145,185,3.596,186,3.596,187,3.145,188,1.877,189,3.596]],["t/100",[182,3.359,190,2.565,191,2.888,192,4.241,193,4.241,194,2.214,195,2.714,196,3.359,197,3.709,198,3.709,199,3.359,200,2.888,201,2.434,202,4.241,203,3.097]],["t/102",[55,4.281,56,3.725,149,2.056,170,2.876,190,2.382,194,2.857,201,2.261,204,3.938,205,3.119,206,3.938,207,3.119,208,3.938,209,3.444,210,3.938]],["t/110",[55,2.667,56,1.707,58,2.192,170,1.83,175,1.83,187,3.425,194,2.045,195,1.604,198,3.425,201,2.248,211,2.506,212,2.667,213,1.604,214,3.917,215,2.86,216,2.86,217,2.506,218,2.506,219,2.506,220,2.192,221,2.506,222,2.506,223,2.192,224,2.506,225,2.192,226,2.506,227,2.192,228,2.506,229,1.83,230,1.985,231,2.506,232,2.506,233,1.707]],["t/116",[194,3.321,234,5.563]],["t/126",[175,2.745,182,2.977,190,2.273,194,1.963,199,5.271,201,3.52,205,2.977,207,2.977,235,3.759,236,2.745,237,3.759,238,3.759,239,3.288,240,3.759,241,3.288]],["t/132",[242,5.785]],["t/137",[194,2.159,200,3.853,201,2.374,229,3.019,230,3.275,243,4.135,244,3.275,245,3.616,246,3.275,247,3.275,248,3.616,249,3.275,250,3.616,251,3.616,252,3.019]],["t/143",[31,3.097,60,3.359,160,2.888,180,2.714,190,2.565,191,2.888,194,2.214,200,2.888,201,2.434,253,4.241,254,3.709,255,4.241,256,4.241,257,2.714,258,4.241]],["t/145",[55,2.765,163,2.296,180,1.68,194,1.371,200,1.788,227,3.552,229,2.965,230,3.216,246,2.079,247,2.079,248,2.296,249,2.079,250,2.296,251,2.296,252,2.965,257,1.68,259,4.061,260,2.626,261,2.626,262,2.079,263,2.079,264,2.626,265,2.626,266,2.626,267,2.626,268,2.626,269,3.216,270,2.626,271,2.296,272,2.626,273,2.296,274,2.626]],["t/159",[160,3.92,194,3.006,200,2.888,205,3.359,249,3.359,263,3.359,275,5.757,276,2.888,277,4.241,278,2.714,279,4.241,280,3.359]],["t/167",[125,0.643,149,1.762,195,2.16,244,2.673,281,4.904,282,3.376,283,3.883,284,2.041,285,1.845,286,2.952,287,3.376,288,3.138,289,2.673,290,3.376,291,2.465,292,2.299,293,2.465,294,3.376,295,2.465,296,3.376,297,3.376,298,3.376]],["t/175",[125,0.671,165,2.396,195,2.252,196,2.787,213,2.252,233,2.396,241,3.078,285,1.924,299,3.519,300,3.519,301,3.078,302,3.519,303,3.078,304,3.078,305,3.078,306,3.519,307,2.787,308,3.519,309,2.787,310,2.396,311,2.252,312,3.519,313,3.078]],["t/177",[123,1.96,125,0.584,159,2.237,176,4.322,246,2.426,283,2.426,284,1.852,285,1.675,292,2.086,301,2.679,311,1.96,313,2.679,314,3.063,315,3.063,316,3.993,317,3.063,318,3.063,319,2.679,320,3.063,321,2.426,322,3.063,323,3.063,324,3.063,325,3.063,326,3.063,327,2.679,328,3.063]],["t/185",[125,0.83,329,3.807,330,3.807,331,4.353,332,3.178,333,3.447,334,4.353,335,4.353,336,3.807,337,3.447,338,4.353,339,4.353,340,2.273,341,2.38]],["t/196",[21,2.583,123,1.89,125,1.132,151,2.339,212,2.011,236,2.157,283,2.339,285,1.615,288,1.89,304,2.583,329,2.583,332,3.244,337,2.339,342,4.443,343,2.583,344,2.954,345,2.583,346,2.954,347,1.786,348,2.954,349,2.954,350,2.339,351,2.954,352,1.89,353,2.583,354,2.954,355,2.583]],["t/205",[31,3.66,125,1.225,126,3.081,295,3.66,356,5.012,357,4.383,358,5.012]],["t/267",[116,2.405,125,1.009,160,2.56,278,2.405,285,2.055,332,2.745,333,2.977,336,3.288,337,2.977,340,1.963,341,2.055,352,2.405,355,4.632,359,3.759,360,2.745,361,3.759,362,2.977,363,3.288]],["t/278",[122,2.837,125,0.967,149,1.152,151,1.747,181,1.929,184,3.096,203,1.61,213,1.411,245,1.929,284,3.069,285,1.206,289,1.747,291,1.61,350,2.803,364,4.018,365,1.411,366,2.206,367,2.585,368,2.206,369,2.206,370,3.096,371,1.929,372,1.929,373,1.747,374,2.206,375,1.929,376,2.206,377,2.206,378,2.206,379,2.206,380,1.929,381,1.929,382,1.61,383,2.206,384,2.206,385,1.747]],["t/302",[111,2.503,117,2.503,125,1.154,161,2.911,165,2.503,233,2.503,303,3.215,347,2.223,386,3.676,387,3.215,388,3.215,389,5.213,390,5.213,391,3.676,392,3.676,393,3.676,394,3.676]],["t/308",[382,4.645,395,6.361]],["t/310",[32,2.568,120,2.568,122,2.075,149,1.693,161,2.568,173,2.568,196,2.568,233,3.243,284,1.961,288,2.075,319,2.836,330,2.836,352,2.075,364,2.568,365,3.611,371,2.836,396,4.762,397,2.836,398,3.243,399,3.243,400,2.836,401,2.836,402,3.243]],["t/316",[125,1.202,236,3.552,292,3.312,365,3.113,403,4.865,404,4.254,405,3.852,406,4.254,407,4.865]],["t/320",[142,3.355,271,4.018,400,4.018,408,4.594,409,3.355,410,4.594,411,4.594,412,4.594,413,4.594,414,4.594,415,4.594,416,4.018]],["t/326",[125,0.751,132,3.444,242,3.444,340,2.056,341,2.153,416,3.444,417,3.938,418,3.444,419,3.444,420,3.938,421,3.119,422,3.444,423,3.938,424,3.938,425,3.444,426,3.938,427,3.938,428,3.938]],["t/328",[201,3.651,273,5.563]],["t/330",[125,0.618,149,1.693,340,1.693,341,2.604,343,2.836,352,2.075,365,2.075,375,2.836,405,2.568,429,3.243,430,3.243,431,3.243,432,3.243,433,2.368,434,3.243,435,2.368,436,3.243,437,2.568,438,3.243,439,3.243,440,3.243,441,3.243,442,2.568,443,3.243,444,3.243,445,2.836]],["t/338",[39,4.821,60,4.366,125,1.051,257,3.528,370,4.821,446,5.513]],["t/356",[32,4.093,125,0.985,276,3.519,293,3.774,347,3.964,447,4.52,448,5.169]],["t/364",[120,2.977,125,1.009,150,2.56,177,3.288,194,1.963,286,3.288,310,2.56,340,1.963,345,3.288,347,2.273,352,2.405,360,2.745,422,3.288,447,4.632,449,3.759,450,3.759,451,3.288,452,3.759]],["t/370",[24,2.876,125,0.751,150,2.682,252,2.876,257,2.52,276,2.682,291,2.876,293,2.876,340,2.056,341,2.153,372,3.444,453,3.938,454,3.444,455,3.444,456,3.938,457,3.119,458,3.119,459,3.938]],["t/372",[130,4.678,149,3.084,460,5.907,461,5.907]],["t/381",[122,3.207,125,0.955,203,3.66,284,3.031,364,3.969,381,4.383,462,5.012,463,5.012,464,5.012]],["t/383",[55,2.682,125,1.043,142,2.876,150,2.682,183,2.876,262,3.119,263,3.119,327,3.444,465,3.938,466,3.938,467,3.938,468,3.444,469,3.938,470,3.938,471,3.938,472,3.938,473,3.938]],["t/389",[51,4.018,116,2.94,125,1.158,180,2.94,276,3.128,278,2.94,291,3.355,340,2.399,341,2.512,363,4.018,474,4.594]],["t/401",[110,2.809,167,3.046,190,2.326,197,3.364,362,3.046,365,2.461,367,2.809,385,3.046,425,3.364,475,3.847,476,3.847,477,3.847,478,3.847,479,3.847,480,3.847,481,3.847,482,3.847,483,3.847,484,3.847]],["t/409",[34,2.44,35,3.195,111,2.747,125,0.769,213,2.581,284,2.44,307,3.195,404,3.528,485,3.528,486,4.034,487,4.034,488,4.034,489,4.034,490,4.034,491,4.034,492,4.034,493,4.034]],["t/411",[31,2.323,111,2.166,114,2.782,125,0.895,133,2.035,190,2.839,191,2.166,225,2.782,257,2.035,284,1.924,289,2.519,367,3.428,382,2.323,419,2.782,494,3.181,495,3.181,496,3.181,497,2.782,498,3.181,499,3.181,500,3.181,501,3.181,502,2.782,503,3.181,504,3.181]],["t/413",[116,2.205,125,0.949,126,2.386,158,4.353,159,2.516,207,2.729,357,3.014,388,3.014,505,3.446,506,5.843,507,4.977,508,3.446,509,3.446,510,3.446,511,4.977,512,3.446,513,3.446]],["t/421",[367,4.645,409,4.645]],["t/428",[117,4.136,123,2.94,125,0.876,176,5.388,311,2.94,316,4.018,340,2.399,373,3.638,514,4.594]],["t/430",[143,5.166,292,4.022,307,4.678,515,5.907]],["t/439",[125,1.043,165,4.626,309,3.119,310,2.682,311,2.52,360,2.876,382,2.876,435,2.876,437,3.119,516,3.938,517,3.938,518,3.444,519,3.938,520,3.444]],["t/451",[117,4.136,125,0.876,165,4.136,310,3.128,311,2.94,409,3.355,520,4.018,521,4.594,522,4.594,523,4.594]],["t/463",[455,5.166,524,5.907,525,5.907,526,5.166]],["t/470",[333,4.678,527,5.907,528,5.907,529,5.907]],["t/475",[188,2.878,530,4.821,531,5.513,532,4.821,533,4.026,534,5.513]],["t/480",[25,2.097,119,2.097,123,1.534,125,0.721,126,1.813,142,1.751,149,1.252,150,1.632,209,2.097,233,1.632,254,2.097,257,1.534,276,1.632,288,1.534,295,1.751,311,1.534,360,1.751,365,1.534,405,2.995,406,2.097,502,2.097,535,2.397,536,2.397,537,2.397,538,2.397,539,2.397,540,2.397,541,2.397,542,2.397,543,2.397,544,2.397,545,2.397,546,2.397,547,2.397,548,2.397,549,2.397,550,2.397,551,2.397,552,2.397,553,2.397,554,2.397,555,2.397]],["t/488",[445,4.988,526,4.988,530,4.988,556,5.703,557,5.703]],["t/493",[111,4.171,126,2.936,558,6.125]],["t/500",[234,5.563,559,6.361]],["t/511",[24,4.313,125,1.126,126,2.831,352,3.78]],["t/515",[34,1.667,56,1.877,59,3.339,117,1.877,122,1.764,125,1.093,126,2.454,159,2.013,188,2.201,212,1.877,215,3.738,216,3.738,244,2.183,347,2.55,350,2.183,385,2.183,421,2.183,533,2.013,560,2.411,561,2.757,562,3.687,563,2.757,564,2.757]],["t/523",[34,2.223,56,2.503,59,2.911,125,0.993,126,2.498,212,2.503,288,2.352,292,2.503,347,3.152,353,3.215,373,2.911,560,3.215,562,3.215,565,3.215,566,6.057,567,3.676]],["t/531",[175,1.858,188,2.069,212,1.733,213,1.628,247,2.015,280,2.015,288,1.628,321,2.015,362,2.015,387,2.226,433,1.858,437,2.015,442,2.015,485,2.226,568,5.209,569,2.226,570,2.226,571,2.545,572,2.545,573,2.545,574,2.545,575,2.894,576,2.545,577,2.545,578,2.226,579,2.545,580,2.545,581,2.545,582,2.545,583,2.545,584,2.226,585,2.545,586,2.545,587,2.545,588,2.545]],["t/535",[188,2.486,199,2.568,213,2.075,215,2.368,216,2.368,280,3.771,442,2.568,451,2.836,532,2.836,565,2.836,568,2.836,569,2.836,570,2.836,575,3.477,578,2.836,584,2.836,589,2.836,590,3.243,591,3.243,592,3.243,593,3.243,594,3.243,595,3.243,596,3.243]],["t/539",[]],["t/548",[]],["t/561",[]],["t/570",[]],["t/577",[]],["t/584",[112,3.852,149,2.54,188,2.54,223,4.254,597,4.865,598,6.305,599,4.865,600,4.865,601,4.865]],["t/592",[]],["t/599",[188,1.762,195,2.16,215,2.465,216,2.465,220,2.952,229,2.465,341,1.845,397,2.952,589,2.952,602,2.952,603,3.376,604,2.952,605,3.376,606,3.376,607,4.288,608,3.376,609,4.288,610,3.376,611,3.376,612,3.376,613,3.376,614,3.376,615,3.376]],["t/613",[262,4.516,468,4.988,575,4.164,607,4.988,609,4.988]],["t/624",[125,0.643,170,2.465,188,1.762,201,1.938,239,2.952,285,1.845,293,3.581,305,2.952,309,2.673,310,2.299,497,2.952,575,3.581,602,2.952,616,3.376,617,3.376,618,3.376,619,3.376,620,3.376,621,3.376,622,3.376,623,3.376,624,3.376,625,3.376]],["t/640",[125,1.158,203,3.355,278,2.94,418,4.018,435,3.355,457,3.638,626,4.594,627,3.355,628,4.018,629,3.638,630,3.638]],["t/648",[35,3.119,125,1.043,146,3.119,164,3.444,183,2.876,195,2.52,278,2.52,285,2.153,295,2.876,409,2.876,454,3.444,627,3.995,629,3.119,630,3.119,631,3.938,632,3.938]],["t/656",[34,2.001,110,2.416,116,2.117,125,0.921,146,2.62,167,2.62,180,2.117,183,2.416,188,1.727,191,2.253,269,2.62,278,3.092,285,1.809,332,2.416,340,1.727,341,1.809,458,2.62,518,2.893,627,2.416,629,2.62,630,2.62,633,3.308,634,3.308,635,3.308]],["t/670",[34,2.382,116,2.52,125,0.751,180,2.52,236,2.876,340,2.056,341,2.153,347,2.382,401,3.444,435,2.876,533,3.995,636,5.471,637,3.938,638,3.938,639,3.938,640,3.938]],["t/680",[110,2.465,125,0.643,128,2.952,129,2.952,133,2.16,149,1.762,190,2.041,191,2.299,269,2.673,321,2.673,380,2.952,421,2.673,433,2.465,457,2.673,458,3.883,627,3.581,628,4.288,641,3.376,642,3.376,643,3.376,644,3.376,645,3.376]],["t/692",[188,1.963,252,2.745,433,3.867,533,2.745,604,3.288,646,5.296,647,3.759,648,3.759,649,3.759,650,3.759,651,3.759,652,3.759,653,3.759,654,3.759,655,3.759,656,3.759,657,3.759,658,3.759]]],"invertedIndex":[["",{"_index":307,"t":{"175":{"position":[[143,1]]},"409":{"position":[[137,2]]},"430":{"position":[[15,1]]}}}],["1",{"_index":460,"t":{"372":{"position":[[0,2]]}}}],["10",{"_index":621,"t":{"624":{"position":[[144,3]]}}}],["17",{"_index":41,"t":{"28":{"position":[[38,2]]}}}],["2",{"_index":570,"t":{"531":{"position":[[27,1]]},"535":{"position":[[29,1]]}}}],["2000",{"_index":43,"t":{"28":{"position":[[47,4]]}}}],["2021",{"_index":42,"t":{"28":{"position":[[41,5]]}}}],["4",{"_index":57,"t":{"28":{"position":[[194,1]]}}}],["5.5",{"_index":45,"t":{"28":{"position":[[57,4],[89,3]]}}}],["6",{"_index":53,"t":{"28":{"position":[[151,1]]}}}],["absolut",{"_index":429,"t":{"330":{"position":[[13,10]]}}}],["accept",{"_index":331,"t":{"185":{"position":[[20,8]]}}}],["access",{"_index":285,"t":{"167":{"position":[[41,6]]},"175":{"position":[[98,8]]},"177":{"position":[[0,9]]},"196":{"position":[[53,9]]},"267":{"position":[[112,9]]},"278":{"position":[[310,10]]},"624":{"position":[[238,14]]},"648":{"position":[[193,6]]},"656":{"position":[[162,9]]}}}],["accumul",{"_index":274,"t":{"145":{"position":[[382,12]]}}}],["action",{"_index":138,"t":{"48":{"position":[[7,7],[121,7]]}}}],["ad",{"_index":70,"t":{"38":{"position":[[133,2]]},"46":{"position":[[133,2]]}}}],["addit",{"_index":412,"t":{"320":{"position":[[61,8]]}}}],["address",{"_index":250,"t":{"137":{"position":[[121,7]]},"145":{"position":[[249,8]]}}}],["adipisc",{"_index":7,"t":{"2":{"position":[[40,10]]},"38":{"position":[[41,10]]},"46":{"position":[[41,10]]}}}],["advanc",{"_index":321,"t":{"177":{"position":[[182,8]]},"531":{"position":[[12,8]]},"680":{"position":[[193,8]]}}}],["aim",{"_index":462,"t":{"381":{"position":[[7,6]]}}}],["alert",{"_index":440,"t":{"330":{"position":[[250,7]]}}}],["alik",{"_index":601,"t":{"584":{"position":[[107,6]]}}}],["aliqua",{"_index":68,"t":{"38":{"position":[[117,7]]},"46":{"position":[[117,7]]}}}],["aliquam",{"_index":17,"t":{"2":{"position":[[133,7]]}}}],["aliquip",{"_index":79,"t":{"38":{"position":[[200,7]]},"46":{"position":[[200,7]]}}}],["alloc",{"_index":50,"t":{"28":{"position":[[116,9]]}}}],["allow",{"_index":151,"t":{"58":{"position":[[121,5]]},"196":{"position":[[161,8]]},"278":{"position":[[33,6]]}}}],["alway",{"_index":483,"t":{"401":{"position":[[187,6]]}}}],["amazon",{"_index":396,"t":{"310":{"position":[[0,6],[68,7]]}}}],["amet",{"_index":5,"t":{"2":{"position":[[22,5],[174,4]]},"38":{"position":[[23,5]]},"46":{"position":[[23,5]]}}}],["ami",{"_index":446,"t":{"338":{"position":[[21,3]]}}}],["and/or",{"_index":498,"t":{"411":{"position":[[196,6]]}}}],["anim",{"_index":106,"t":{"38":{"position":[[426,4]]},"46":{"position":[[426,4]]}}}],["anoth",{"_index":241,"t":{"126":{"position":[[237,8]]},"175":{"position":[[112,7]]}}}],["anywher",{"_index":349,"t":{"196":{"position":[[213,9]]}}}],["apm",{"_index":186,"t":{"96":{"position":[[194,3]]}}}],["applic",{"_index":401,"t":{"310":{"position":[[220,12]]},"670":{"position":[[68,12]]}}}],["approach",{"_index":362,"t":{"267":{"position":[[90,8]]},"401":{"position":[[39,10]]},"531":{"position":[[381,8]]}}}],["archiv",{"_index":0,"t":{"1":{"position":[[0,7]]}}}],["around",{"_index":141,"t":{"48":{"position":[[39,6]]}}}],["art",{"_index":657,"t":{"692":{"position":[[157,4]]}}}],["aspect",{"_index":549,"t":{"480":{"position":[[363,7]]}}}],["assist",{"_index":428,"t":{"326":{"position":[[169,6]]}}}],["aut",{"_index":84,"t":{"38":{"position":[[238,4]]},"46":{"position":[[238,4]]}}}],["autom",{"_index":139,"t":{"48":{"position":[[20,8]]},"58":{"position":[[45,8]]}}}],["automat",{"_index":251,"t":{"137":{"position":[[145,13]]},"145":{"position":[[275,9]]}}}],["avail",{"_index":59,"t":{"28":{"position":[[202,9]]},"515":{"position":[[66,9],[217,9]]},"523":{"position":[[50,9]]}}}],["avalanch",{"_index":527,"t":{"470":{"position":[[0,10]]}}}],["aw",{"_index":371,"t":{"278":{"position":[[217,4]]},"310":{"position":[[20,5]]}}}],["away",{"_index":267,"t":{"145":{"position":[[165,5]]}}}],["base",{"_index":517,"t":{"439":{"position":[[64,4]]}}}],["basic",{"_index":35,"t":{"21":{"position":[[5,6]]},"409":{"position":[[80,5]]},"648":{"position":[[135,5]]}}}],["be",{"_index":239,"t":{"126":{"position":[[166,5]]},"624":{"position":[[166,5]]}}}],["becom",{"_index":550,"t":{"480":{"position":[[375,6]]}}}],["befor",{"_index":164,"t":{"58":{"position":[[257,6]]},"648":{"position":[[68,6]]}}}],["begin",{"_index":261,"t":{"145":{"position":[[74,5]]}}}],["beginn",{"_index":643,"t":{"680":{"position":[[178,8]]}}}],["behavior",{"_index":237,"t":{"126":{"position":[[62,9]]}}}],["below",{"_index":640,"t":{"670":{"position":[[175,5]]}}}],["benefici",{"_index":539,"t":{"480":{"position":[[134,11]]}}}],["between",{"_index":348,"t":{"196":{"position":[[123,7]]}}}],["bitcoin",{"_index":524,"t":{"463":{"position":[[10,8]]}}}],["block",{"_index":229,"t":{"110":{"position":[[350,5]]},"137":{"position":[[184,6]]},"145":{"position":[[51,5],[350,6]]},"599":{"position":[[212,5]]}}}],["blockchain",{"_index":533,"t":{"475":{"position":[[41,10]]},"515":{"position":[[143,10]]},"670":{"position":[[89,10],[147,10]]},"692":{"position":[[22,10]]}}}],["blog",{"_index":19,"t":{"4":{"position":[[0,4]]},"6":{"position":[[35,4]]},"17":{"position":[[11,8],[48,4]]}}}],["boot",{"_index":634,"t":{"656":{"position":[[132,7]]}}}],["both",{"_index":219,"t":{"110":{"position":[[164,4]]}}}],["bought",{"_index":386,"t":{"302":{"position":[[7,6]]}}}],["broadli",{"_index":581,"t":{"531":{"position":[[289,7]]}}}],["build",{"_index":173,"t":{"88":{"position":[[69,6]]},"96":{"position":[[142,6]]},"310":{"position":[[203,5]]}}}],["built",{"_index":388,"t":{"302":{"position":[[84,5]]},"413":{"position":[[22,5]]}}}],["came",{"_index":441,"t":{"330":{"position":[[261,4]]}}}],["canari",{"_index":618,"t":{"624":{"position":[[52,6]]}}}],["capabl",{"_index":319,"t":{"177":{"position":[[133,13]]},"310":{"position":[[171,13]]}}}],["carefulli",{"_index":258,"t":{"143":{"position":[[175,10]]}}}],["case",{"_index":522,"t":{"451":{"position":[[64,5]]}}}],["categor",{"_index":582,"t":{"531":{"position":[[297,11]]}}}],["centric",{"_index":557,"t":{"488":{"position":[[30,7]]}}}],["certain",{"_index":297,"t":{"167":{"position":[[192,7]]}}}],["chain",{"_index":575,"t":{"531":{"position":[[172,5],[222,6]]},"535":{"position":[[147,6],[200,6]]},"613":{"position":[[28,6]]},"624":{"position":[[7,5],[59,5]]}}}],["chang",{"_index":246,"t":{"137":{"position":[[64,8]]},"145":{"position":[[199,6]]},"177":{"position":[[303,7]]}}}],["channel",{"_index":411,"t":{"320":{"position":[[43,7]]}}}],["check",{"_index":418,"t":{"326":{"position":[[57,5]]},"640":{"position":[[59,5]]}}}],["chip",{"_index":391,"t":{"302":{"position":[[99,5]]}}}],["choic",{"_index":567,"t":{"523":{"position":[[229,8]]}}}],["choos",{"_index":395,"t":{"308":{"position":[[23,7]]}}}],["cillum",{"_index":90,"t":{"38":{"position":[[296,6]]},"46":{"position":[[296,6]]}}}],["claim",{"_index":210,"t":{"102":{"position":[[216,5]]}}}],["classic",{"_index":531,"t":{"475":{"position":[[21,8]]}}}],["clean",{"_index":516,"t":{"439":{"position":[[27,5]]}}}],["cli",{"_index":317,"t":{"177":{"position":[[89,6]]}}}],["client",{"_index":561,"t":{"515":{"position":[[171,6]]}}}],["close",{"_index":486,"t":{"409":{"position":[[10,5]]}}}],["cloud",{"_index":364,"t":{"278":{"position":[[9,5],[72,5],[201,5],[421,5]]},"310":{"position":[[31,5]]},"381":{"position":[[48,5]]}}}],["collect",{"_index":436,"t":{"330":{"position":[[161,7]]}}}],["come",{"_index":373,"t":{"278":{"position":[[239,4]]},"428":{"position":[[9,5]]},"523":{"position":[[167,5]]}}}],["command",{"_index":176,"t":{"88":{"position":[[94,7]]},"177":{"position":[[66,7],[221,7],[271,8]]},"428":{"position":[[29,8],[83,8],[122,7]]}}}],["commend",{"_index":469,"t":{"383":{"position":[[127,12]]}}}],["commit",{"_index":577,"t":{"531":{"position":[[208,10]]}}}],["commodo",{"_index":82,"t":{"38":{"position":[[214,7]]},"46":{"position":[[214,7]]}}}],["common",{"_index":459,"t":{"370":{"position":[[173,6]]}}}],["commun",{"_index":497,"t":{"411":{"position":[[186,9]]},"624":{"position":[[123,10]]}}}],["community'",{"_index":438,"t":{"330":{"position":[[209,11]]}}}],["compat",{"_index":596,"t":{"535":{"position":[[228,13]]}}}],["complet",{"_index":432,"t":{"330":{"position":[[51,10]]}}}],["complex",{"_index":551,"t":{"480":{"position":[[382,7]]}}}],["compon",{"_index":198,"t":{"100":{"position":[[104,11]]},"110":{"position":[[31,11],[88,10]]}}}],["compos",{"_index":211,"t":{"110":{"position":[[10,8]]}}}],["compose.yml",{"_index":511,"t":{"413":{"position":[[131,11],[216,11]]}}}],["comprehens",{"_index":115,"t":{"40":{"position":[[69,13]]}}}],["compromis",{"_index":444,"t":{"330":{"position":[[298,10]]}}}],["comput",{"_index":233,"t":{"110":{"position":[[403,9]]},"175":{"position":[[40,9]]},"302":{"position":[[68,8]]},"310":{"position":[[37,9],[122,9]]},"480":{"position":[[239,8]]}}}],["condit",{"_index":541,"t":{"480":{"position":[[175,9]]}}}],["conduct",{"_index":593,"t":{"535":{"position":[[121,8]]}}}],["configur",{"_index":291,"t":{"167":{"position":[[118,13]]},"278":{"position":[[167,10]]},"370":{"position":[[79,14]]},"389":{"position":[[83,11]]}}}],["connect",{"_index":347,"t":{"196":{"position":[[112,10]]},"302":{"position":[[120,7]]},"356":{"position":[[6,10],[88,7]]},"364":{"position":[[116,7]]},"515":{"position":[[284,10],[416,11]]},"523":{"position":[[131,10],[176,10]]},"670":{"position":[[52,7]]}}}],["consectetur",{"_index":6,"t":{"2":{"position":[[28,11]]},"38":{"position":[[29,11]]},"46":{"position":[[29,11]]}}}],["consensu",{"_index":529,"t":{"470":{"position":[[27,9]]}}}],["consequ",{"_index":238,"t":{"126":{"position":[[150,12]]}}}],["consequat",{"_index":18,"t":{"2":{"position":[[141,10]]},"38":{"position":[[222,10]]},"46":{"position":[[222,10]]}}}],["consid",{"_index":320,"t":{"177":{"position":[[171,10]]}}}],["consist",{"_index":245,"t":{"137":{"position":[[52,8]]},"278":{"position":[[354,8]]}}}],["contain",{"_index":507,"t":{"413":{"position":[[40,11],[84,10]]}}}],["continu",{"_index":375,"t":{"278":{"position":[[254,8]]},"330":{"position":[[221,10]]}}}],["contract",{"_index":216,"t":{"110":{"position":[[68,9],[249,8]]},"515":{"position":[[20,9],[104,9],[342,9]]},"535":{"position":[[262,10]]},"599":{"position":[[49,8]]}}}],["contribut",{"_index":467,"t":{"383":{"position":[[73,10]]}}}],["control",{"_index":301,"t":{"175":{"position":[[63,7]]},"177":{"position":[[110,7]]}}}],["conveni",{"_index":152,"t":{"58":{"position":[[136,12]]}}}],["core",{"_index":206,"t":{"102":{"position":[[49,4]]}}}],["cost",{"_index":592,"t":{"535":{"position":[[111,6]]}}}],["cover",{"_index":167,"t":{"88":{"position":[[10,6]]},"401":{"position":[[18,5]]},"656":{"position":[[236,8]]}}}],["cpu",{"_index":543,"t":{"480":{"position":[[266,4]]}}}],["creat",{"_index":121,"t":{"40":{"position":[[141,7]]},"96":{"position":[[49,8]]}}}],["creativ",{"_index":648,"t":{"692":{"position":[[47,8]]}}}],["crucial",{"_index":178,"t":{"88":{"position":[[110,7]]}}}],["cryptocurr",{"_index":526,"t":{"463":{"position":[[34,14]]},"488":{"position":[[38,14]]}}}],["cryptograph",{"_index":576,"t":{"531":{"position":[[194,13]]}}}],["culpa",{"_index":102,"t":{"38":{"position":[[392,5]]},"46":{"position":[[392,5]]}}}],["cupidatat",{"_index":98,"t":{"38":{"position":[[360,9]]},"46":{"position":[[360,9]]}}}],["curat",{"_index":641,"t":{"680":{"position":[[65,7]]}}}],["custom",{"_index":124,"t":{"40":{"position":[[177,6]]},"58":{"position":[[66,13]]}}}],["damag",{"_index":328,"t":{"177":{"position":[[331,7]]}}}],["dao",{"_index":30,"t":{"8":{"position":[[0,3]]},"19":{"position":[[10,4]]}}}],["dappmanag",{"_index":303,"t":{"175":{"position":[[82,12]]},"302":{"position":[[135,11]]}}}],["dappnod",{"_index":125,"t":{"40":{"position":[[184,8],[351,8]]},"48":{"position":[[75,8]]},"58":{"position":[[21,8]]},"88":{"position":[[168,8]]},"96":{"position":[[77,8]]},"167":{"position":[[53,8]]},"175":{"position":[[0,8]]},"177":{"position":[[31,9]]},"185":{"position":[[131,9]]},"196":{"position":[[68,9],[151,9],[189,8],[264,8]]},"205":{"position":[[4,8],[74,8]]},"267":{"position":[[127,9],[201,9]]},"278":{"position":[[0,8],[58,8],[368,8],[497,9]]},"302":{"position":[[16,8],[54,8],[147,9]]},"316":{"position":[[29,8],[67,8]]},"326":{"position":[[130,8]]},"330":{"position":[[0,8]]},"338":{"position":[[12,8]]},"356":{"position":[[22,8]]},"364":{"position":[[0,8],[129,8]]},"370":{"position":[[14,8]]},"381":{"position":[[24,8]]},"383":{"position":[[38,9],[205,9]]},"389":{"position":[[11,8],[100,8]]},"409":{"position":[[102,8]]},"411":{"position":[[177,8],[246,8]]},"413":{"position":[[0,8],[239,8]]},"428":{"position":[[0,8]]},"439":{"position":[[90,9],[162,8]]},"451":{"position":[[16,8]]},"480":{"position":[[5,8],[463,8]]},"511":{"position":[[9,8]]},"515":{"position":[[0,8],[48,8],[162,8],[263,8]]},"523":{"position":[[0,8],[111,8]]},"624":{"position":[[189,9]]},"640":{"position":[[25,8],[73,8]]},"648":{"position":[[44,8],[167,8]]},"656":{"position":[[11,8],[140,8]]},"670":{"position":[[24,9]]},"680":{"position":[[151,9]]}}}],["dappnode'",{"_index":111,"t":{"40":{"position":[[15,10]]},"302":{"position":[[175,10]]},"409":{"position":[[28,10]]},"411":{"position":[[73,10]]},"493":{"position":[[0,10]]}}}],["dappnodesdk",{"_index":171,"t":{"88":{"position":[[50,12]]},"96":{"position":[[4,11],[16,11]]}}}],["dappstor",{"_index":560,"t":{"515":{"position":[[83,10]]},"523":{"position":[[67,10]]}}}],["dashboard",{"_index":493,"t":{"409":{"position":[[152,9]]}}}],["data",{"_index":437,"t":{"330":{"position":[[173,4]]},"439":{"position":[[145,4]]},"531":{"position":[[145,4]]}}}],["debian",{"_index":520,"t":{"439":{"position":[[176,7]]},"451":{"position":[[101,6]]}}}],["decentr",{"_index":468,"t":{"383":{"position":[[87,16]]},"613":{"position":[[0,12]]}}}],["dedic",{"_index":300,"t":{"175":{"position":[[30,9]]}}}],["deep",{"_index":318,"t":{"177":{"position":[[105,4]]}}}],["defin",{"_index":357,"t":{"205":{"position":[[30,7]]},"413":{"position":[[65,8]]}}}],["depend",{"_index":236,"t":{"126":{"position":[[45,9]]},"196":{"position":[[223,9]]},"316":{"position":[[88,13]]},"670":{"position":[[128,9]]}}}],["deploy",{"_index":122,"t":{"40":{"position":[[149,7]]},"88":{"position":[[146,10]]},"278":{"position":[[49,6],[275,10],[383,8]]},"310":{"position":[[213,6]]},"381":{"position":[[17,6]]},"515":{"position":[[118,8]]}}}],["depth",{"_index":192,"t":{"100":{"position":[[37,5]]}}}],["deserunt",{"_index":104,"t":{"38":{"position":[[410,8]]},"46":{"position":[[410,8]]}}}],["design",{"_index":433,"t":{"330":{"position":[[73,7]]},"531":{"position":[[47,8]]},"680":{"position":[[110,8]]},"692":{"position":[[33,8],[166,7]]}}}],["desir",{"_index":471,"t":{"383":{"position":[[155,7]]}}}],["develop",{"_index":112,"t":{"40":{"position":[[26,9],[261,10],[333,10]]},"88":{"position":[[130,11]]},"584":{"position":[[96,10]]}}}],["devic",{"_index":304,"t":{"175":{"position":[[120,6]]},"196":{"position":[[136,6]]}}}],["differ",{"_index":197,"t":{"100":{"position":[[94,9]]},"401":{"position":[[29,9]]}}}],["difficulti",{"_index":477,"t":{"401":{"position":[[103,10]]}}}],["digit",{"_index":652,"t":{"692":{"position":[[86,7]]}}}],["dignissim",{"_index":11,"t":{"2":{"position":[[80,9]]}}}],["directli",{"_index":514,"t":{"428":{"position":[[104,8]]}}}],["discord",{"_index":425,"t":{"326":{"position":[[139,7]]},"401":{"position":[[209,7]]}}}],["disk",{"_index":545,"t":{"480":{"position":[[280,4]]}}}],["distribut",{"_index":56,"t":{"28":{"position":[[173,12]]},"102":{"position":[[14,12],[164,11]]},"110":{"position":[[137,10]]},"515":{"position":[[33,10]]},"523":{"position":[[28,12]]}}}],["dm",{"_index":406,"t":{"316":{"position":[[57,5]]},"480":{"position":[[491,5]]}}}],["dnp",{"_index":127,"t":{"40":{"position":[[202,6]]},"88":{"position":[[186,7]]}}}],["doc",{"_index":113,"t":{"40":{"position":[[36,5]]}}}],["docker",{"_index":506,"t":{"413":{"position":[[33,6],[124,6],[209,6]]}}}],["document",{"_index":114,"t":{"40":{"position":[[47,13],[277,13]]},"411":{"position":[[255,13]]}}}],["docusauru",{"_index":22,"t":{"4":{"position":[[19,10]]},"17":{"position":[[0,10]]}}}],["doesn't",{"_index":443,"t":{"330":{"position":[[290,7]]}}}],["dolor",{"_index":3,"t":{"2":{"position":[[12,5],[164,5]]},"38":{"position":[[13,5],[104,6],[249,5],[303,6]]},"46":{"position":[[13,5],[104,6],[249,5],[303,6]]}}}],["done",{"_index":277,"t":{"159":{"position":[[112,4]]}}}],["download",{"_index":562,"t":{"515":{"position":[[243,8],[356,8]]},"523":{"position":[[81,8]]}}}],["drive",{"_index":629,"t":{"640":{"position":[[82,7]]},"648":{"position":[[53,7]]},"656":{"position":[[20,7]]}}}],["due",{"_index":296,"t":{"167":{"position":[[185,3]]}}}],["dui",{"_index":83,"t":{"38":{"position":[[233,4]]},"46":{"position":[[233,4]]}}}],["dure",{"_index":268,"t":{"145":{"position":[[171,6]]}}}],["ea",{"_index":81,"t":{"38":{"position":[[211,2]]},"46":{"position":[[211,2]]}}}],["each",{"_index":175,"t":{"88":{"position":[[89,4]]},"110":{"position":[[428,4]]},"126":{"position":[[172,4]]},"531":{"position":[[360,4]]}}}],["earn",{"_index":262,"t":{"145":{"position":[[80,7]]},"383":{"position":[[108,7]]},"613":{"position":[[39,4]]}}}],["easi",{"_index":368,"t":{"278":{"position":[[158,4]]}}}],["easiest",{"_index":478,"t":{"401":{"position":[[119,7]]}}}],["easili",{"_index":392,"t":{"302":{"position":[[113,6]]}}}],["ecosystem",{"_index":599,"t":{"584":{"position":[[50,10]]}}}],["edit",{"_index":153,"t":{"58":{"position":[[149,4]]}}}],["effici",{"_index":402,"t":{"310":{"position":[[246,12]]}}}],["eiusmod",{"_index":62,"t":{"38":{"position":[[65,7]]},"46":{"position":[[65,7]]}}}],["elementum",{"_index":10,"t":{"2":{"position":[[70,9]]}}}],["elimin",{"_index":383,"t":{"278":{"position":[[437,11]]}}}],["elit",{"_index":8,"t":{"2":{"position":[[51,5]]},"38":{"position":[[52,5]]},"46":{"position":[[52,5]]}}}],["email",{"_index":415,"t":{"320":{"position":[[105,5]]}}}],["embark",{"_index":470,"t":{"383":{"position":[[140,6]]}}}],["enabl",{"_index":120,"t":{"40":{"position":[[127,6]]},"310":{"position":[[185,8]]},"364":{"position":[[157,6]]}}}],["encrypt",{"_index":346,"t":{"196":{"position":[[102,9]]}}}],["enhanc",{"_index":578,"t":{"531":{"position":[[237,7]]},"535":{"position":[[74,7]]}}}],["enim",{"_index":69,"t":{"38":{"position":[[128,4]]},"46":{"position":[[128,4]]}}}],["ensur",{"_index":345,"t":{"196":{"position":[[81,7]]},"364":{"position":[[84,6]]}}}],["environ",{"_index":136,"t":{"40":{"position":[[360,12]]},"58":{"position":[[154,11]]}}}],["ero",{"_index":16,"t":{"2":{"position":[[128,4]]}}}],["ess",{"_index":89,"t":{"38":{"position":[[291,4]]},"46":{"position":[[291,4]]}}}],["essenti",{"_index":294,"t":{"167":{"position":[[156,9]]}}}],["est",{"_index":108,"t":{"38":{"position":[[434,3]]},"46":{"position":[[434,3]]}}}],["establish",{"_index":564,"t":{"515":{"position":[[401,9]]}}}],["et",{"_index":66,"t":{"38":{"position":[[101,2]]},"46":{"position":[[101,2]]}}}],["etc",{"_index":231,"t":{"110":{"position":[[367,6]]}}}],["eth",{"_index":615,"t":{"599":{"position":[[240,4]]}}}],["ethereum",{"_index":188,"t":{"96":{"position":[[213,8]]},"475":{"position":[[12,8]]},"515":{"position":[[134,8],[301,8]]},"531":{"position":[[90,8],[163,8]]},"535":{"position":[[191,8],[247,8]]},"584":{"position":[[41,8]]},"599":{"position":[[0,8]]},"624":{"position":[[69,9]]},"656":{"position":[[207,8]]},"692":{"position":[[120,8]]}}}],["ethereum'",{"_index":589,"t":{"535":{"position":[[12,10]]},"599":{"position":[[201,10]]}}}],["ethic",{"_index":403,"t":{"316":{"position":[[0,7]]}}}],["eu",{"_index":91,"t":{"38":{"position":[[310,2]]},"46":{"position":[[310,2]]}}}],["even",{"_index":254,"t":{"143":{"position":[[104,4]]},"480":{"position":[[403,4]]}}}],["event",{"_index":224,"t":{"110":{"position":[[282,6]]}}}],["everyon",{"_index":380,"t":{"278":{"position":[[341,9]]},"680":{"position":[[235,9]]}}}],["ex",{"_index":80,"t":{"38":{"position":[[208,2]]},"46":{"position":[[208,2]]}}}],["excepteur",{"_index":95,"t":{"38":{"position":[[336,9]]},"46":{"position":[[336,9]]}}}],["execut",{"_index":574,"t":{"531":{"position":[[111,9]]}}}],["exercit",{"_index":75,"t":{"38":{"position":[[163,12]]},"46":{"position":[[163,12]]}}}],["expect",{"_index":632,"t":{"648":{"position":[[114,6]]}}}],["experi",{"_index":150,"t":{"58":{"position":[[101,11]]},"364":{"position":[[41,11]]},"370":{"position":[[135,11]]},"383":{"position":[[172,10]]},"480":{"position":[[423,11]]}}}],["experienc",{"_index":132,"t":{"40":{"position":[[249,11]]},"326":{"position":[[0,12]]}}}],["explain",{"_index":207,"t":{"102":{"position":[[105,7]]},"126":{"position":[[96,7]]},"413":{"position":[[172,7]]}}}],["explan",{"_index":193,"t":{"100":{"position":[[43,11]]}}}],["explor",{"_index":455,"t":{"370":{"position":[[63,7]]},"463":{"position":[[0,9]]}}}],["export",{"_index":407,"t":{"316":{"position":[[76,8]]}}}],["ey",{"_index":487,"t":{"409":{"position":[[16,3]]}}}],["fairli",{"_index":218,"t":{"110":{"position":[[156,7]]}}}],["familiar",{"_index":322,"t":{"177":{"position":[[204,11]]}}}],["faq",{"_index":242,"t":{"132":{"position":[[0,3]]},"326":{"position":[[68,4]]}}}],["fashion",{"_index":656,"t":{"692":{"position":[[148,8]]}}}],["featur",{"_index":24,"t":{"4":{"position":[[39,9]]},"17":{"position":[[20,8]]},"370":{"position":[[98,8]]},"511":{"position":[[36,8]]}}}],["fee",{"_index":247,"t":{"137":{"position":[[77,3]]},"145":{"position":[[223,3]]},"531":{"position":[[268,5]]}}}],["fi",{"_index":390,"t":{"302":{"position":[[96,2],[189,2]]}}}],["file",{"_index":158,"t":{"58":{"position":[[203,5]]},"413":{"position":[[143,5],[228,4]]}}}],["final",{"_index":595,"t":{"535":{"position":[[166,5]]}}}],["find",{"_index":191,"t":{"100":{"position":[[26,4]]},"143":{"position":[[32,4]]},"411":{"position":[[25,4]]},"656":{"position":[[48,4]]},"680":{"position":[[58,4]]}}}],["first",{"_index":51,"t":{"28":{"position":[[133,5]]},"389":{"position":[[117,5]]}}}],["flow",{"_index":548,"t":{"480":{"position":[[330,5]]}}}],["follow",{"_index":60,"t":{"28":{"position":[[218,8]]},"143":{"position":[[158,6]]},"338":{"position":[[35,6]]}}}],["form",{"_index":162,"t":{"58":{"position":[[245,5]]}}}],["four",{"_index":475,"t":{"401":{"position":[[24,4]]}}}],["free",{"_index":379,"t":{"278":{"position":[[332,4]]}}}],["fugiat",{"_index":92,"t":{"38":{"position":[[313,6]]},"46":{"position":[[313,6]]}}}],["full",{"_index":473,"t":{"383":{"position":[[187,4]]}}}],["function",{"_index":170,"t":{"88":{"position":[[31,15]]},"102":{"position":[[54,15]]},"110":{"position":[[210,11]]},"624":{"position":[[35,11]]}}}],["further",{"_index":456,"t":{"370":{"position":[[71,7]]}}}],["fusc",{"_index":13,"t":{"2":{"position":[[101,5]]}}}],["futur",{"_index":464,"t":{"381":{"position":[[76,7]]}}}],["gen",{"_index":647,"t":{"692":{"position":[[18,3]]}}}],["github",{"_index":137,"t":{"48":{"position":[[0,6],[63,7],[114,6]]}}}],["gmt",{"_index":44,"t":{"28":{"position":[[52,4]]}}}],["gnosi",{"_index":616,"t":{"624":{"position":[[0,6]]}}}],["gnosisdao",{"_index":620,"t":{"624":{"position":[[113,9]]}}}],["go",{"_index":454,"t":{"370":{"position":[[46,3]]},"648":{"position":[[13,5]]}}}],["good",{"_index":491,"t":{"409":{"position":[[86,4]]}}}],["graphic",{"_index":312,"t":{"175":{"position":[[225,9]]}}}],["guid",{"_index":116,"t":{"40":{"position":[[83,5]]},"267":{"position":[[142,5]]},"389":{"position":[[55,5]]},"413":{"position":[[157,6]]},"656":{"position":[[82,5]]},"670":{"position":[[186,5]]}}}],["handl",{"_index":208,"t":{"102":{"position":[[129,7]]}}}],["happi",{"_index":427,"t":{"326":{"position":[[160,5]]}}}],["hardest",{"_index":479,"t":{"401":{"position":[[130,8]]}}}],["hardwar",{"_index":367,"t":{"278":{"position":[[137,9],[471,8]]},"401":{"position":[[68,9]]},"411":{"position":[[57,8],[313,8]]},"421":{"position":[[0,8]]}}}],["hassl",{"_index":378,"t":{"278":{"position":[[325,6]]}}}],["have",{"_index":535,"t":{"480":{"position":[[41,6]]}}}],["health",{"_index":542,"t":{"480":{"position":[[188,8]]}}}],["heart",{"_index":508,"t":{"413":{"position":[[56,5]]}}}],["hello",{"_index":253,"t":{"143":{"position":[[0,6]]}}}],["help",{"_index":133,"t":{"40":{"position":[[296,4]]},"48":{"position":[[15,4]]},"58":{"position":[[39,5]]},"96":{"position":[[121,5]]},"411":{"position":[[274,4]]},"680":{"position":[[122,4]]}}}],["here",{"_index":458,"t":{"370":{"position":[[147,4]]},"656":{"position":[[36,4]]},"680":{"position":[[45,5],[226,4]]}}}],["here'",{"_index":339,"t":{"185":{"position":[[97,6]]}}}],["hidden",{"_index":430,"t":{"330":{"position":[[27,6]]}}}],["high",{"_index":336,"t":{"185":{"position":[[72,4]]},"267":{"position":[[23,4]]}}}],["highli",{"_index":408,"t":{"320":{"position":[[3,6]]}}}],["holeski",{"_index":597,"t":{"584":{"position":[[4,7]]}}}],["home",{"_index":622,"t":{"624":{"position":[[172,4]]}}}],["host",{"_index":494,"t":{"411":{"position":[[84,4]]}}}],["hotspot",{"_index":394,"t":{"302":{"position":[[192,8]]}}}],["id",{"_index":107,"t":{"38":{"position":[[431,2]]},"46":{"position":[[431,2]]}}}],["imag",{"_index":381,"t":{"278":{"position":[[377,5]]},"381":{"position":[[33,6]]}}}],["imagin",{"_index":651,"t":{"692":{"position":[[76,7]]}}}],["immedi",{"_index":272,"t":{"145":{"position":[[364,11]]}}}],["import",{"_index":256,"t":{"143":{"position":[[145,9]]}}}],["improv",{"_index":148,"t":{"58":{"position":[[84,7]]}}}],["incididunt",{"_index":63,"t":{"38":{"position":[[80,10]]},"46":{"position":[[80,10]]}}}],["includ",{"_index":196,"t":{"100":{"position":[[81,8]]},"175":{"position":[[215,7]]},"310":{"position":[[112,9]]}}}],["incompat",{"_index":298,"t":{"167":{"position":[[208,18]]}}}],["incorrect",{"_index":323,"t":{"177":{"position":[[248,9]]}}}],["increas",{"_index":572,"t":{"531":{"position":[[59,8]]}}}],["incred",{"_index":538,"t":{"480":{"position":[[123,10]]}}}],["indispens",{"_index":222,"t":{"110":{"position":[[189,13]]}}}],["individu",{"_index":612,"t":{"599":{"position":[[171,11]]}}}],["industri",{"_index":649,"t":{"692":{"position":[[56,10]]}}}],["inform",{"_index":31,"t":{"8":{"position":[[4,11]]},"143":{"position":[[45,11]]},"205":{"position":[[56,11]]},"411":{"position":[[30,11]]}}}],["infrastructrur",{"_index":377,"t":{"278":{"position":[[294,15]]}}}],["init",{"_index":172,"t":{"88":{"position":[[63,5]]}}}],["initi",{"_index":183,"t":{"96":{"position":[[130,11]]},"383":{"position":[[59,10]]},"648":{"position":[[27,7]]},"656":{"position":[[104,7]]}}}],["insight",{"_index":536,"t":{"480":{"position":[[48,8]]}}}],["instal",{"_index":165,"t":{"58":{"position":[[264,10]]},"175":{"position":[[166,9]]},"302":{"position":[[44,9]]},"439":{"position":[[33,12],[49,10],[100,10],[154,7]]},"451":{"position":[[8,7],[35,12]]}}}],["instanc",{"_index":370,"t":{"278":{"position":[[178,9],[405,8]]},"338":{"position":[[25,9]]}}}],["instead",{"_index":271,"t":{"145":{"position":[[308,7]]},"320":{"position":[[76,7]]}}}],["interact",{"_index":159,"t":{"58":{"position":[[215,11]]},"177":{"position":[[234,13]]},"413":{"position":[[103,8]]},"515":{"position":[[178,9]]}}}],["interfac",{"_index":313,"t":{"175":{"position":[[235,10]]},"177":{"position":[[79,9]]}}}],["intricaci",{"_index":135,"t":{"40":{"position":[[318,11]]}}}],["introduc",{"_index":530,"t":{"475":{"position":[[0,11]]},"488":{"position":[[0,11]]}}}],["introduct",{"_index":234,"t":{"116":{"position":[[7,12]]},"500":{"position":[[0,12]]}}}],["invest",{"_index":384,"t":{"278":{"position":[[461,6]]}}}],["ipf",{"_index":566,"t":{"523":{"position":[[19,4],[148,4],[194,4]]}}}],["ipsum",{"_index":2,"t":{"2":{"position":[[6,5],[115,5],[158,5]]},"38":{"position":[[7,5]]},"46":{"position":[[7,5]]}}}],["irur",{"_index":85,"t":{"38":{"position":[[243,5]]},"46":{"position":[[243,5]]}}}],["isn't",{"_index":420,"t":{"326":{"position":[[87,5]]}}}],["iso",{"_index":518,"t":{"439":{"position":[[119,3]]},"656":{"position":[[154,3]]}}}],["issu",{"_index":419,"t":{"326":{"position":[[81,5]]},"411":{"position":[[121,5]]}}}],["it'",{"_index":293,"t":{"167":{"position":[[151,4]]},"356":{"position":[[75,4]]},"370":{"position":[[50,4]]},"624":{"position":[[79,4],[199,4]]}}}],["jul",{"_index":40,"t":{"28":{"position":[[34,3]]}}}],["keep",{"_index":485,"t":{"409":{"position":[[0,7]]},"531":{"position":[[184,7]]}}}],["known",{"_index":334,"t":{"185":{"position":[[42,5]]}}}],["labor",{"_index":65,"t":{"38":{"position":[[94,6]]},"46":{"position":[[94,6]]}}}],["labori",{"_index":77,"t":{"38":{"position":[[184,7]]},"46":{"position":[[184,7]]}}}],["laborum",{"_index":109,"t":{"38":{"position":[[438,9]]},"46":{"position":[[438,9]]}}}],["later",{"_index":374,"t":{"278":{"position":[[244,6]]}}}],["launch",{"_index":39,"t":{"28":{"position":[[22,8]]},"338":{"position":[[3,6]]}}}],["layer",{"_index":569,"t":{"531":{"position":[[21,5]]},"535":{"position":[[23,5]]}}}],["lead",{"_index":325,"t":{"177":{"position":[[284,4]]}}}],["learn",{"_index":626,"t":{"640":{"position":[[8,5]]}}}],["level",{"_index":476,"t":{"401":{"position":[[94,5]]}}}],["leverag",{"_index":565,"t":{"523":{"position":[[9,9]]},"535":{"position":[[41,10]]}}}],["li",{"_index":510,"t":{"413":{"position":[[112,4]]}}}],["line",{"_index":316,"t":{"177":{"position":[[74,4],[229,4]]},"428":{"position":[[130,5]]}}}],["liquid",{"_index":36,"t":{"28":{"position":[[0,9]]}}}],["list",{"_index":421,"t":{"326":{"position":[[93,7]]},"515":{"position":[[209,4]]},"680":{"position":[[73,4]]}}}],["lm",{"_index":38,"t":{"28":{"position":[[17,4],[139,2]]}}}],["local",{"_index":281,"t":{"167":{"position":[[4,5],[83,5]]}}}],["long",{"_index":29,"t":{"6":{"position":[[30,4]]}}}],["lorem",{"_index":1,"t":{"2":{"position":[[0,5],[152,5]]},"38":{"position":[[0,6]]},"46":{"position":[[0,6]]}}}],["lower",{"_index":591,"t":{"535":{"position":[[105,5]]}}}],["lukso",{"_index":646,"t":{"692":{"position":[[0,5],[181,5]]}}}],["machin",{"_index":382,"t":{"278":{"position":[[397,7]]},"308":{"position":[[6,7]]},"411":{"position":[[89,8]]},"439":{"position":[[137,7]]}}}],["made",{"_index":299,"t":{"175":{"position":[[12,4]]}}}],["magna",{"_index":67,"t":{"38":{"position":[[111,5]]},"46":{"position":[[111,5]]}}}],["main",{"_index":213,"t":{"110":{"position":[[26,4]]},"175":{"position":[[58,4]]},"278":{"position":[[196,4]]},"409":{"position":[[147,4]]},"531":{"position":[[158,4]]},"535":{"position":[[186,4]]}}}],["mainnet",{"_index":189,"t":{"96":{"position":[[222,8]]}}}],["make",{"_index":181,"t":{"96":{"position":[[43,5]]},"278":{"position":[[266,4]]}}}],["manag",{"_index":123,"t":{"40":{"position":[[161,6]]},"48":{"position":[[132,6]]},"177":{"position":[[122,10]]},"196":{"position":[[177,6]]},"428":{"position":[[58,6]]},"480":{"position":[[341,8]]}}}],["manifest",{"_index":356,"t":{"205":{"position":[[21,8]]}}}],["manual",{"_index":266,"t":{"145":{"position":[[139,6]]}}}],["map",{"_index":156,"t":{"58":{"position":[[182,9]]}}}],["markdown",{"_index":23,"t":{"4":{"position":[[30,8]]}}}],["matter",{"_index":555,"t":{"480":{"position":[[518,8]]}}}],["mdx",{"_index":26,"t":{"4":{"position":[[57,4]]}}}],["mean",{"_index":540,"t":{"480":{"position":[[151,5]]}}}],["meant",{"_index":308,"t":{"175":{"position":[[154,5]]}}}],["meet",{"_index":654,"t":{"692":{"position":[[129,5]]}}}],["method",{"_index":283,"t":{"167":{"position":[[16,6],[232,6]]},"177":{"position":[[161,6]]},"196":{"position":[[42,6]]}}}],["metric",{"_index":404,"t":{"316":{"position":[[8,7]]},"409":{"position":[[129,7]]}}}],["million",{"_index":49,"t":{"28":{"position":[[93,7]]}}}],["mind",{"_index":650,"t":{"692":{"position":[[70,5]]}}}],["mine",{"_index":37,"t":{"28":{"position":[[10,6]]}}}],["minim",{"_index":71,"t":{"38":{"position":[[136,5]]},"46":{"position":[[136,5]]}}}],["minimum",{"_index":515,"t":{"430":{"position":[[17,7]]}}}],["misguid",{"_index":324,"t":{"177":{"position":[[261,9]]}}}],["modern",{"_index":359,"t":{"267":{"position":[[15,7]]}}}],["mollit",{"_index":105,"t":{"38":{"position":[[419,6]]},"46":{"position":[[419,6]]}}}],["monero",{"_index":556,"t":{"488":{"position":[[12,7]]}}}],["monitor",{"_index":405,"t":{"316":{"position":[[38,10]]},"330":{"position":[[115,10]]},"480":{"position":[[303,10],[472,10]]}}}],["month",{"_index":54,"t":{"28":{"position":[[153,7]]}}}],["monument",{"_index":605,"t":{"599":{"position":[[73,10]]}}}],["more",{"_index":203,"t":{"100":{"position":[[172,5]]},"278":{"position":[[231,4]]},"381":{"position":[[43,4]]},"640":{"position":[[14,4]]}}}],["much",{"_index":202,"t":{"100":{"position":[[167,4]]}}}],["multipl",{"_index":235,"t":{"126":{"position":[[29,8]]}}}],["my.dappnod",{"_index":306,"t":{"175":{"position":[[131,11]]}}}],["navig",{"_index":134,"t":{"40":{"position":[[305,8]]}}}],["nearli",{"_index":463,"t":{"381":{"position":[[69,6]]}}}],["necessari",{"_index":358,"t":{"205":{"position":[[46,9]]}}}],["need",{"_index":350,"t":{"196":{"position":[[241,5]]},"278":{"position":[[119,4],[453,4]]},"515":{"position":[[277,4]]}}}],["network",{"_index":288,"t":{"167":{"position":[[89,7],[200,7]]},"196":{"position":[[16,7]]},"310":{"position":[[160,10]]},"480":{"position":[[314,7]]},"523":{"position":[[199,8]]},"531":{"position":[[99,8]]}}}],["new",{"_index":130,"t":{"40":{"position":[[224,3]]},"96":{"position":[[73,3],[171,3]]},"372":{"position":[[15,3]]}}}],["next",{"_index":252,"t":{"137":{"position":[[179,4]]},"145":{"position":[[37,4],[336,4]]},"370":{"position":[[180,4]]},"692":{"position":[[13,4]]}}}],["nisi",{"_index":78,"t":{"38":{"position":[[192,4]]},"46":{"position":[[192,4]]}}}],["node",{"_index":34,"t":{"21":{"position":[[0,4]]},"28":{"position":[[101,5],[161,4]]},"409":{"position":[[66,4]]},"515":{"position":[[310,4]]},"523":{"position":[[153,5]]},"656":{"position":[[216,5]]},"670":{"position":[[100,5]]}}}],["non",{"_index":99,"t":{"38":{"position":[[370,3]]},"46":{"position":[[370,3]]}}}],["nostrud",{"_index":74,"t":{"38":{"position":[[155,7]]},"46":{"position":[[155,7]]}}}],["notic",{"_index":495,"t":{"411":{"position":[[109,7]]}}}],["notif",{"_index":416,"t":{"320":{"position":[[111,14]]},"326":{"position":[[39,13]]}}}],["now",{"_index":372,"t":{"278":{"position":[[226,4]]},"370":{"position":[[0,3]]}}}],["nulla",{"_index":93,"t":{"38":{"position":[[320,5]]},"46":{"position":[[320,5]]}}}],["nurtur",{"_index":619,"t":{"624":{"position":[[97,8]]}}}],["occaecat",{"_index":97,"t":{"38":{"position":[[351,8]]},"46":{"position":[[351,8]]}}}],["off",{"_index":588,"t":{"531":{"position":[[400,5]]}}}],["offer",{"_index":352,"t":{"196":{"position":[[273,6]]},"267":{"position":[[58,6]]},"310":{"position":[[79,6]]},"330":{"position":[[244,5]]},"364":{"position":[[9,6]]},"511":{"position":[[53,6]]}}}],["officia",{"_index":103,"t":{"38":{"position":[[402,7]]},"46":{"position":[[402,7]]}}}],["on",{"_index":205,"t":{"102":{"position":[[38,3]]},"126":{"position":[[224,3]]},"159":{"position":[[160,3]]}}}],["onchain",{"_index":226,"t":{"110":{"position":[[309,7]]}}}],["open",{"_index":220,"t":{"110":{"position":[[173,4]]},"599":{"position":[[143,6]]}}}],["openvpn",{"_index":329,"t":{"185":{"position":[[0,7]]},"196":{"position":[[336,8]]}}}],["oper",{"_index":310,"t":{"175":{"position":[[184,9]]},"364":{"position":[[98,10]]},"439":{"position":[[69,9]]},"451":{"position":[[116,9]]},"624":{"position":[[84,8]]}}}],["opportun",{"_index":611,"t":{"599":{"position":[[153,13]]}}}],["opt",{"_index":265,"t":{"145":{"position":[[131,3]]}}}],["optim",{"_index":451,"t":{"364":{"position":[[57,7]]},"535":{"position":[[0,8]]}}}],["optimist",{"_index":584,"t":{"531":{"position":[[325,10]]},"535":{"position":[[52,10]]}}}],["option",{"_index":400,"t":{"310":{"position":[[147,8]]},"320":{"position":[[51,6]]}}}],["oracl",{"_index":214,"t":{"110":{"position":[[47,6],[378,6]]}}}],["order",{"_index":385,"t":{"278":{"position":[[483,5]]},"401":{"position":[[82,5]]},"515":{"position":[[318,5]]}}}],["out",{"_index":457,"t":{"370":{"position":[[123,3]]},"640":{"position":[[65,3]]},"680":{"position":[[144,3]]}}}],["over",{"_index":309,"t":{"175":{"position":[[176,4]]},"439":{"position":[[171,4]]},"624":{"position":[[139,4]]}}}],["packag",{"_index":126,"t":{"40":{"position":[[193,8]]},"48":{"position":[[84,9]]},"58":{"position":[[30,8],[58,7],[279,8]]},"88":{"position":[[177,8]]},"96":{"position":[[86,8]]},"205":{"position":[[13,7],[102,8]]},"413":{"position":[[9,8],[248,8]]},"480":{"position":[[86,8],[205,9]]},"493":{"position":[[11,8]]},"511":{"position":[[18,8]]},"515":{"position":[[57,8],[227,8],[369,9]]},"523":{"position":[[41,8],[96,9]]}}}],["package/repo",{"_index":185,"t":{"96":{"position":[[175,12]]}}}],["page",{"_index":166,"t":{"88":{"position":[[5,4]]}}}],["panel",{"_index":302,"t":{"175":{"position":[[71,6]]}}}],["pariatur",{"_index":94,"t":{"38":{"position":[[326,9]]},"46":{"position":[[326,9]]}}}],["part",{"_index":489,"t":{"409":{"position":[[54,4]]}}}],["particip",{"_index":613,"t":{"599":{"position":[[186,11]]}}}],["path",{"_index":472,"t":{"383":{"position":[[163,4]]}}}],["pay",{"_index":423,"t":{"326":{"position":[[108,3]]}}}],["pellentesqu",{"_index":9,"t":{"2":{"position":[[57,12]]}}}],["perform",{"_index":360,"t":{"267":{"position":[[28,11]]},"364":{"position":[[65,11]]},"439":{"position":[[17,7]]},"480":{"position":[[66,11]]}}}],["physic",{"_index":366,"t":{"278":{"position":[[128,8]]}}}],["pioneer",{"_index":525,"t":{"463":{"position":[[23,7]]}}}],["platform",{"_index":397,"t":{"310":{"position":[[47,8]]},"599":{"position":[[58,10]]}}}],["play",{"_index":177,"t":{"88":{"position":[[102,5]]},"364":{"position":[[36,4]]}}}],["pleas",{"_index":422,"t":{"326":{"position":[[101,6]]},"364":{"position":[[109,6]]}}}],["plug",{"_index":450,"t":{"364":{"position":[[27,4]]}}}],["plugin",{"_index":33,"t":{"17":{"position":[[53,7]]}}}],["po",{"_index":610,"t":{"599":{"position":[[133,5]]}}}],["pool",{"_index":58,"t":{"28":{"position":[[196,5]]},"110":{"position":[[304,4]]}}}],["popular",{"_index":625,"t":{"624":{"position":[[223,10]]}}}],["port",{"_index":155,"t":{"58":{"position":[[177,4]]}}}],["possibl",{"_index":182,"t":{"96":{"position":[[108,9]]},"100":{"position":[[127,8]]},"126":{"position":[[108,8]]}}}],["post",{"_index":20,"t":{"4":{"position":[[5,5]]},"6":{"position":[[40,5]]}}}],["potenti",{"_index":327,"t":{"177":{"position":[[314,9]]},"383":{"position":[[192,9]]}}}],["pow",{"_index":608,"t":{"599":{"position":[[109,5]]}}}],["power",{"_index":32,"t":{"17":{"position":[[33,7]]},"310":{"position":[[132,6]]},"356":{"position":[[49,6]]}}}],["practic",{"_index":492,"t":{"409":{"position":[[91,10]]}}}],["pre",{"_index":369,"t":{"278":{"position":[[163,3]]}}}],["precis",{"_index":553,"t":{"480":{"position":[[443,9]]}}}],["prefer",{"_index":351,"t":{"196":{"position":[[251,12]]}}}],["preserv",{"_index":532,"t":{"475":{"position":[[30,10]]},"535":{"position":[[217,10]]}}}],["previou",{"_index":290,"t":{"167":{"position":[[109,8]]}}}],["primari",{"_index":353,"t":{"196":{"position":[[296,7]]},"523":{"position":[[221,7]]}}}],["principl",{"_index":534,"t":{"475":{"position":[[52,10]]}}}],["privaci",{"_index":445,"t":{"330":{"position":[[314,8]]},"488":{"position":[[22,7]]}}}],["privat",{"_index":343,"t":{"196":{"position":[[8,7]]},"330":{"position":[[62,7]]}}}],["proactiv",{"_index":264,"t":{"145":{"position":[[112,9]]}}}],["process",{"_index":180,"t":{"88":{"position":[[157,7]]},"143":{"position":[[120,7]]},"145":{"position":[[183,8]]},"389":{"position":[[41,8]]},"656":{"position":[[118,8]]},"670":{"position":[[111,7]]}}}],["product",{"_index":614,"t":{"599":{"position":[[218,10]]}}}],["proident",{"_index":100,"t":{"38":{"position":[[374,9]]},"46":{"position":[[374,9]]}}}],["project",{"_index":131,"t":{"40":{"position":[[235,7]]},"48":{"position":[[51,8]]}}}],["proof",{"_index":607,"t":{"599":{"position":[[95,5],[118,5]]},"613":{"position":[[13,5]]}}}],["propos",{"_index":230,"t":{"110":{"position":[[356,10]]},"137":{"position":[[164,9]]},"145":{"position":[[42,8],[341,8]]}}}],["protocol",{"_index":333,"t":{"185":{"position":[[33,8]]},"267":{"position":[[44,8]]},"470":{"position":[[37,8]]}}}],["provid",{"_index":284,"t":{"167":{"position":[[23,8]]},"177":{"position":[[96,8]]},"278":{"position":[[78,8],[150,7],[207,9],[427,9]]},"310":{"position":[[56,8]]},"381":{"position":[[54,9]]},"409":{"position":[[111,8]]},"411":{"position":[[161,8]]}}}],["proxi",{"_index":282,"t":{"167":{"position":[[10,5]]}}}],["publish",{"_index":174,"t":{"88":{"position":[[80,8]]},"96":{"position":[[62,10],[159,7]]}}}],["question",{"_index":481,"t":{"401":{"position":[[169,9]]}}}],["qui",{"_index":73,"t":{"38":{"position":[[150,4],[398,3]]},"46":{"position":[[150,4],[398,3]]}}}],["ram",{"_index":544,"t":{"480":{"position":[[271,4]]}}}],["rang",{"_index":398,"t":{"310":{"position":[[93,5]]}}}],["read",{"_index":563,"t":{"515":{"position":[[327,4]]}}}],["readi",{"_index":453,"t":{"370":{"position":[[37,5]]}}}],["realm",{"_index":604,"t":{"599":{"position":[[34,5]]},"692":{"position":[[94,5]]}}}],["receiv",{"_index":204,"t":{"102":{"position":[[0,9]]}}}],["recipi",{"_index":248,"t":{"137":{"position":[[81,9]]},"145":{"position":[[227,9]]}}}],["recommend",{"_index":409,"t":{"320":{"position":[[10,9]]},"421":{"position":[[9,15]]},"451":{"position":[[73,9]]},"648":{"position":[[3,9]]}}}],["reconcil",{"_index":594,"t":{"535":{"position":[[154,11]]}}}],["reduc",{"_index":580,"t":{"531":{"position":[[261,6]]}}}],["refer",{"_index":315,"t":{"177":{"position":[[47,8]]}}}],["regardless",{"_index":465,"t":{"383":{"position":[[0,10]]}}}],["regist",{"_index":461,"t":{"372":{"position":[[3,8]]}}}],["relat",{"_index":225,"t":{"110":{"position":[[289,7]]},"411":{"position":[[42,7]]}}}],["releas",{"_index":145,"t":{"48":{"position":[[151,9]]}}}],["reli",{"_index":413,"t":{"320":{"position":[[87,7]]}}}],["reliabl",{"_index":335,"t":{"185":{"position":[[56,11]]}}}],["reluct",{"_index":434,"t":{"330":{"position":[[89,9]]}}}],["rememb",{"_index":480,"t":{"401":{"position":[[139,8]]}}}],["reprehenderit",{"_index":86,"t":{"38":{"position":[[258,13]]},"46":{"position":[[258,13]]}}}],["request",{"_index":439,"t":{"330":{"position":[[232,8]]}}}],["requir",{"_index":292,"t":{"167":{"position":[[132,9]]},"177":{"position":[[195,8]]},"316":{"position":[[16,8]]},"430":{"position":[[25,12]]},"523":{"position":[[120,8]]}}}],["resourc",{"_index":119,"t":{"40":{"position":[[112,9]]},"480":{"position":[[248,9]]}}}],["respons",{"_index":232,"t":{"110":{"position":[[388,11]]}}}],["revolutionari",{"_index":528,"t":{"470":{"position":[[13,13]]}}}],["reward",{"_index":55,"t":{"28":{"position":[[166,6]]},"102":{"position":[[27,7],[117,7],[228,8]]},"110":{"position":[[148,7],[417,7]]},"145":{"position":[[88,8],[395,7]]},"383":{"position":[[116,7]]}}}],["rhoncu",{"_index":14,"t":{"2":{"position":[[107,7]]}}}],["right",{"_index":163,"t":{"58":{"position":[[251,5]]},"145":{"position":[[159,5]]}}}],["robust",{"_index":344,"t":{"196":{"position":[[35,6]]}}}],["role",{"_index":179,"t":{"88":{"position":[[118,4]]}}}],["rollup",{"_index":568,"t":{"531":{"position":[[0,7],[229,7],[274,7],[336,7],[351,8]]},"535":{"position":[[63,7]]}}}],["round",{"_index":52,"t":{"28":{"position":[[142,5]]}}}],["router",{"_index":447,"t":{"356":{"position":[[38,6]]},"364":{"position":[[146,6],[189,7]]}}}],["run",{"_index":509,"t":{"413":{"position":[[95,3]]}}}],["runner'",{"_index":490,"t":{"409":{"position":[[71,8]]}}}],["same",{"_index":287,"t":{"167":{"position":[[78,4]]}}}],["sandbox",{"_index":600,"t":{"584":{"position":[[74,7]]}}}],["scalabl",{"_index":579,"t":{"531":{"position":[[245,11]]}}}],["scale",{"_index":571,"t":{"531":{"position":[[29,7]]}}}],["school",{"_index":630,"t":{"640":{"position":[[90,7]]},"648":{"position":[[61,6]]},"656":{"position":[[28,7]]}}}],["script",{"_index":521,"t":{"451":{"position":[[48,7]]}}}],["seamless",{"_index":449,"t":{"364":{"position":[[18,8]]}}}],["section",{"_index":190,"t":{"100":{"position":[[8,8]]},"102":{"position":[[89,7]]},"126":{"position":[[80,7]]},"143":{"position":[[15,7]]},"401":{"position":[[5,7]]},"411":{"position":[[8,7],[231,7]]},"680":{"position":[[36,8]]}}}],["secur",{"_index":337,"t":{"185":{"position":[[77,8]]},"196":{"position":[[91,6]]},"267":{"position":[[103,8]]}}}],["sed",{"_index":61,"t":{"38":{"position":[[58,3]]},"46":{"position":[[58,3]]}}}],["select",{"_index":639,"t":{"670":{"position":[[165,9]]}}}],["sentinel",{"_index":617,"t":{"624":{"position":[[25,9]]}}}],["seri",{"_index":633,"t":{"656":{"position":[[55,6]]}}}],["serv",{"_index":223,"t":{"110":{"position":[[258,6]]},"584":{"position":[[61,7]]}}}],["server",{"_index":484,"t":{"401":{"position":[[217,7]]}}}],["servic",{"_index":365,"t":{"278":{"position":[[20,7]]},"310":{"position":[[11,8],[102,9],[237,8]]},"316":{"position":[[49,7]]},"330":{"position":[[126,7]]},"401":{"position":[[53,9]]},"480":{"position":[[483,7]]}}}],["set",{"_index":340,"t":{"185":{"position":[[116,3]]},"267":{"position":[[170,7]]},"326":{"position":[[26,7]]},"330":{"position":[[102,7]]},"364":{"position":[[169,8]]},"370":{"position":[[26,3]]},"389":{"position":[[0,7]]},"428":{"position":[[22,3]]},"656":{"position":[[191,7]]},"670":{"position":[[12,3]]}}}],["setup",{"_index":146,"t":{"58":{"position":[[4,5]]},"648":{"position":[[35,5]]},"656":{"position":[[112,5]]}}}],["shift",{"_index":606,"t":{"599":{"position":[[84,5]]}}}],["side",{"_index":503,"t":{"411":{"position":[[322,4]]}}}],["signatur",{"_index":558,"t":{"493":{"position":[[20,10]]}}}],["simpl",{"_index":160,"t":{"58":{"position":[[234,6]]},"96":{"position":[[98,6]]},"143":{"position":[[131,7]]},"159":{"position":[[32,6],[164,6]]},"267":{"position":[[67,6]]}}}],["simplest",{"_index":243,"t":{"137":{"position":[[12,8]]}}}],["simplifi",{"_index":554,"t":{"480":{"position":[[509,8]]}}}],["sint",{"_index":96,"t":{"38":{"position":[[346,4]]},"46":{"position":[[346,4]]}}}],["sit",{"_index":4,"t":{"2":{"position":[[18,3],[170,3]]},"38":{"position":[[19,3]]},"46":{"position":[[19,3]]}}}],["smart",{"_index":215,"t":{"110":{"position":[[62,5],[243,5]]},"515":{"position":[[14,5],[98,5],[336,5]]},"535":{"position":[[256,5]]},"599":{"position":[[43,5]]}}}],["smooth",{"_index":194,"t":{"100":{"position":[[62,6]]},"102":{"position":[[73,7],[140,6]]},"110":{"position":[[0,6],[225,7]]},"116":{"position":[[0,6]]},"126":{"position":[[2,6]]},"137":{"position":[[41,7]]},"143":{"position":[[96,7]]},"145":{"position":[[408,7]]},"159":{"position":[[19,6],[86,6]]},"364":{"position":[[91,6]]}}}],["smooth'",{"_index":249,"t":{"137":{"position":[[112,8]]},"145":{"position":[[240,8]]},"159":{"position":[[125,8]]}}}],["sole",{"_index":414,"t":{"320":{"position":[[95,6]]}}}],["solut",{"_index":442,"t":{"330":{"position":[[276,8]]},"531":{"position":[[37,9]]},"535":{"position":[[31,9]]}}}],["solv",{"_index":501,"t":{"411":{"position":[[283,7]]}}}],["someth",{"_index":645,"t":{"680":{"position":[[216,9]]}}}],["sourc",{"_index":221,"t":{"110":{"position":[[178,6]]}}}],["space",{"_index":546,"t":{"480":{"position":[[285,6]]}}}],["specif",{"_index":143,"t":{"48":{"position":[[105,8]]},"430":{"position":[[0,14]]}}}],["speed",{"_index":590,"t":{"535":{"position":[[94,6]]}}}],["spirit",{"_index":653,"t":{"692":{"position":[[110,6]]}}}],["staff",{"_index":499,"t":{"411":{"position":[[203,5]]}}}],["stake",{"_index":609,"t":{"599":{"position":[[127,5],[232,7]]},"613":{"position":[[22,5]]}}}],["staker",{"_index":623,"t":{"624":{"position":[[177,7]]}}}],["stand",{"_index":602,"t":{"599":{"position":[[9,6]]},"624":{"position":[[13,6]]}}}],["standard",{"_index":338,"t":{"185":{"position":[[86,10]]}}}],["start",{"_index":273,"t":{"145":{"position":[[376,5]]},"328":{"position":[[10,5]]}}}],["state",{"_index":199,"t":{"100":{"position":[[120,6]]},"126":{"position":[[38,6],[117,6],[177,6],[228,5]]},"535":{"position":[[172,6]]}}}],["step",{"_index":257,"t":{"143":{"position":[[169,5]]},"145":{"position":[[122,4]]},"338":{"position":[[48,6]]},"370":{"position":[[185,6]]},"411":{"position":[[155,5]]},"480":{"position":[[497,5]]}}}],["storag",{"_index":399,"t":{"310":{"position":[[139,7]]}}}],["store",{"_index":387,"t":{"302":{"position":[[34,6]]},"531":{"position":[[125,7]]}}}],["straightforward",{"_index":474,"t":{"389":{"position":[[25,15]]}}}],["streamlin",{"_index":361,"t":{"267":{"position":[[78,11]]}}}],["structur",{"_index":513,"t":{"413":{"position":[[192,9]]}}}],["subscrib",{"_index":200,"t":{"100":{"position":[[141,10]]},"137":{"position":[[28,9],[133,11]]},"143":{"position":[[67,9]]},"145":{"position":[[60,9]]},"159":{"position":[[42,11]]}}}],["subscript",{"_index":227,"t":{"110":{"position":[[317,15]]},"145":{"position":[[146,12],[285,13]]}}}],["success",{"_index":500,"t":{"411":{"position":[[217,8]]}}}],["such",{"_index":25,"t":{"4":{"position":[[49,4]]},"480":{"position":[[258,4]]}}}],["summari",{"_index":27,"t":{"6":{"position":[[12,7]]}}}],["sunt",{"_index":101,"t":{"38":{"position":[[384,4]]},"46":{"position":[[384,4]]}}}],["suppli",{"_index":48,"t":{"28":{"position":[[81,7]]}}}],["support",{"_index":21,"t":{"4":{"position":[[11,7]]},"196":{"position":[[280,7]]}}}],["swarm",{"_index":559,"t":{"500":{"position":[[16,5]]}}}],["system",{"_index":311,"t":{"175":{"position":[[194,6]]},"177":{"position":[[324,6]]},"428":{"position":[[69,7]]},"439":{"position":[[79,6]]},"451":{"position":[[126,7]]},"480":{"position":[[109,6]]}}}],["take",{"_index":263,"t":{"145":{"position":[[105,4]]},"159":{"position":[[154,5]]},"383":{"position":[[48,6]]}}}],["technolog",{"_index":354,"t":{"196":{"position":[[308,13]]}}}],["tediou",{"_index":552,"t":{"480":{"position":[[394,8]]}}}],["telegram",{"_index":410,"t":{"320":{"position":[[34,8]]}}}],["telemetri",{"_index":431,"t":{"330":{"position":[[34,9]]}}}],["temperatur",{"_index":488,"t":{"409":{"position":[[39,11]]}}}],["tempor",{"_index":15,"t":{"2":{"position":[[121,6]]},"38":{"position":[[73,6]]},"46":{"position":[[73,6]]}}}],["termin",{"_index":314,"t":{"177":{"position":[[14,8]]}}}],["test",{"_index":184,"t":{"96":{"position":[[149,5]]},"278":{"position":[[100,6],[492,4]]}}}],["testament",{"_index":624,"t":{"624":{"position":[[206,9]]}}}],["testnet",{"_index":598,"t":{"584":{"position":[[12,7],[25,7]]}}}],["that'",{"_index":658,"t":{"692":{"position":[[174,6]]}}}],["there'",{"_index":644,"t":{"680":{"position":[[208,7]]}}}],["they'r",{"_index":482,"t":{"401":{"position":[[179,7]]}}}],["thing",{"_index":504,"t":{"411":{"position":[[330,7]]}}}],["those",{"_index":502,"t":{"411":{"position":[[291,5]]},"480":{"position":[[412,5]]}}}],["though",{"_index":255,"t":{"143":{"position":[[109,6]]}}}],["three",{"_index":169,"t":{"88":{"position":[[25,5]]}}}],["through",{"_index":278,"t":{"159":{"position":[[117,7]]},"267":{"position":[[162,7]]},"389":{"position":[[75,7]]},"640":{"position":[[34,7]]},"648":{"position":[[19,7]]},"656":{"position":[[92,7],[175,7]]}}}],["throughput",{"_index":573,"t":{"531":{"position":[[72,10]]}}}],["time",{"_index":276,"t":{"159":{"position":[[100,5]]},"356":{"position":[[80,4]]},"370":{"position":[[55,4]]},"389":{"position":[[123,5]]},"480":{"position":[[30,5]]}}}],["titan",{"_index":603,"t":{"599":{"position":[[21,5]]}}}],["togeth",{"_index":217,"t":{"110":{"position":[[104,8]]}}}],["token",{"_index":47,"t":{"28":{"position":[[75,5]]}}}],["tool",{"_index":118,"t":{"40":{"position":[[102,5]]},"96":{"position":[[33,4]]}}}],["top",{"_index":168,"t":{"88":{"position":[[21,3]]}}}],["total",{"_index":46,"t":{"28":{"position":[[69,5]]}}}],["track",{"_index":187,"t":{"96":{"position":[[198,7]]},"110":{"position":[[116,5],[268,5]]}}}],["trade",{"_index":587,"t":{"531":{"position":[[394,5]]}}}],["traffic",{"_index":547,"t":{"480":{"position":[[322,7]]}}}],["transact",{"_index":280,"t":{"159":{"position":[[171,12]]},"531":{"position":[[133,11]]},"535":{"position":[[82,11],[130,12]]}}}],["transit",{"_index":240,"t":{"126":{"position":[[208,10]]}}}],["tri",{"_index":496,"t":{"411":{"position":[[144,5]]}}}],["troubl",{"_index":417,"t":{"326":{"position":[[13,7]]}}}],["turn",{"_index":448,"t":{"356":{"position":[[60,7]]}}}],["tutori",{"_index":628,"t":{"640":{"position":[[48,10]]},"680":{"position":[[26,9],[100,9]]}}}],["two",{"_index":212,"t":{"110":{"position":[[22,3],[84,3]]},"196":{"position":[[292,3]]},"515":{"position":[[389,3]]},"523":{"position":[[217,3]]},"531":{"position":[[314,3]]}}}],["type",{"_index":583,"t":{"531":{"position":[[318,6]]}}}],["typic",{"_index":512,"t":{"413":{"position":[[184,7]]}}}],["ubuntu",{"_index":523,"t":{"451":{"position":[[91,6]]}}}],["ui",{"_index":393,"t":{"302":{"position":[[161,3]]}}}],["ullamco",{"_index":76,"t":{"38":{"position":[[176,7]]},"46":{"position":[[176,7]]}}}],["ultrici",{"_index":12,"t":{"2":{"position":[[90,10]]}}}],["understand",{"_index":295,"t":{"167":{"position":[[169,10]]},"205":{"position":[[86,10]]},"480":{"position":[[157,13]]},"648":{"position":[[141,13]]}}}],["unintend",{"_index":326,"t":{"177":{"position":[[292,10]]}}}],["uniqu",{"_index":586,"t":{"531":{"position":[[374,6]]}}}],["unsubscrib",{"_index":275,"t":{"159":{"position":[[0,13],[69,11]]}}}],["unsubscript",{"_index":228,"t":{"110":{"position":[[333,16]]}}}],["until",{"_index":260,"t":{"145":{"position":[[26,5]]}}}],["up",{"_index":341,"t":{"185":{"position":[[123,2]]},"267":{"position":[[178,2]]},"326":{"position":[[53,3]]},"330":{"position":[[110,2],[266,2]]},"370":{"position":[[30,2]]},"389":{"position":[[8,2]]},"599":{"position":[[150,2]]},"656":{"position":[[199,2]]},"670":{"position":[[16,2]]}}}],["updat",{"_index":144,"t":{"48":{"position":[[139,7]]}}}],["upload",{"_index":157,"t":{"58":{"position":[[196,6]]}}}],["upnp",{"_index":452,"t":{"364":{"position":[[164,4]]}}}],["upon",{"_index":505,"t":{"413":{"position":[[28,4]]}}}],["us",{"_index":117,"t":{"40":{"position":[[92,5]]},"302":{"position":[[165,5]]},"428":{"position":[[50,4],[99,4]]},"451":{"position":[[25,5],[87,3]]},"515":{"position":[[9,4]]}}}],["user",{"_index":149,"t":{"58":{"position":[[96,4],[127,5]]},"102":{"position":[[206,5]]},"167":{"position":[[262,6]]},"278":{"position":[[40,5]]},"310":{"position":[[194,5]]},"330":{"position":[[187,6]]},"372":{"position":[[19,4]]},"480":{"position":[[14,5]]},"584":{"position":[[86,5]]},"680":{"position":[[202,5]]}}}],["ut",{"_index":64,"t":{"38":{"position":[[91,2],[125,2],[197,2]]},"46":{"position":[[91,2],[125,2],[197,2]]}}}],["util",{"_index":142,"t":{"48":{"position":[[97,7]]},"320":{"position":[[20,9]]},"383":{"position":[[30,7]]},"480":{"position":[[219,11]]}}}],["valid",{"_index":201,"t":{"100":{"position":[[152,10]]},"102":{"position":[[179,11]]},"110":{"position":[[122,10],[433,10]]},"126":{"position":[[9,9],[126,9],[194,9]]},"137":{"position":[[99,9]]},"143":{"position":[[82,10]]},"328":{"position":[[16,11]]},"624":{"position":[[155,10]]}}}],["validator'",{"_index":270,"t":{"145":{"position":[[211,11]]}}}],["vari",{"_index":638,"t":{"670":{"position":[[123,4]]}}}],["variabl",{"_index":154,"t":{"58":{"position":[[166,10]]}}}],["variou",{"_index":637,"t":{"670":{"position":[[60,7]]}}}],["velit",{"_index":88,"t":{"38":{"position":[[285,5]]},"46":{"position":[[285,5]]}}}],["veniam",{"_index":72,"t":{"38":{"position":[[142,7]]},"46":{"position":[[142,7]]}}}],["veri",{"_index":28,"t":{"6":{"position":[[25,4]]}}}],["via",{"_index":305,"t":{"175":{"position":[[127,3]]},"624":{"position":[[185,3]]}}}],["video",{"_index":627,"t":{"640":{"position":[[42,5]]},"648":{"position":[[90,7],[107,6]]},"656":{"position":[[65,6]]},"680":{"position":[[15,6],[81,6]]}}}],["virtual",{"_index":342,"t":{"196":{"position":[[0,7],[203,9]]}}}],["visit",{"_index":424,"t":{"326":{"position":[[117,5]]}}}],["volupt",{"_index":87,"t":{"38":{"position":[[275,9]]},"46":{"position":[[275,9]]}}}],["vpn",{"_index":332,"t":{"185":{"position":[[29,3]]},"196":{"position":[[24,5],[304,3]]},"267":{"position":[[40,3]]},"656":{"position":[[183,4]]}}}],["wait",{"_index":259,"t":{"145":{"position":[[21,4],[319,7]]}}}],["walk",{"_index":363,"t":{"267":{"position":[[153,4]]},"389":{"position":[[66,4]]}}}],["want",{"_index":435,"t":{"330":{"position":[[153,4]]},"439":{"position":[[9,4]]},"640":{"position":[[0,4]]},"670":{"position":[[44,4]]}}}],["watch",{"_index":631,"t":{"648":{"position":[[75,8]]}}}],["way",{"_index":244,"t":{"137":{"position":[[21,3]]},"167":{"position":[[34,3]]},"515":{"position":[[393,4]]}}}],["we'll",{"_index":426,"t":{"326":{"position":[[151,5]]}}}],["we'v",{"_index":635,"t":{"656":{"position":[[222,5]]}}}],["web",{"_index":161,"t":{"58":{"position":[[241,3]]},"302":{"position":[[157,3]]},"310":{"position":[[7,3]]}}}],["web3",{"_index":376,"t":{"278":{"position":[[289,4]]}}}],["websit",{"_index":279,"t":{"159":{"position":[[134,7]]}}}],["welcom",{"_index":110,"t":{"40":{"position":[[0,7]]},"401":{"position":[[194,7]]},"656":{"position":[[0,7]]},"680":{"position":[[0,7]]}}}],["well",{"_index":209,"t":{"102":{"position":[[194,4]]},"480":{"position":[[295,4]]}}}],["whether",{"_index":128,"t":{"40":{"position":[[209,7]]},"680":{"position":[[161,7]]}}}],["whole",{"_index":537,"t":{"480":{"position":[[103,5]]}}}],["wi",{"_index":389,"t":{"302":{"position":[[93,2],[186,2]]}}}],["wide",{"_index":330,"t":{"185":{"position":[[13,6]]},"310":{"position":[[88,4]]}}}],["wipe",{"_index":519,"t":{"439":{"position":[[128,4]]}}}],["wireguard",{"_index":355,"t":{"196":{"position":[[322,9]]},"267":{"position":[[0,9],[181,9]]}}}],["wish",{"_index":466,"t":{"383":{"position":[[22,4]]}}}],["within",{"_index":286,"t":{"167":{"position":[[67,6]]},"364":{"position":[[178,6]]}}}],["without",{"_index":289,"t":{"167":{"position":[[97,7]]},"278":{"position":[[107,7]]},"411":{"position":[[209,7]]}}}],["wizard",{"_index":147,"t":{"58":{"position":[[10,6]]}}}],["work",{"_index":195,"t":{"100":{"position":[[69,6]]},"110":{"position":[[99,4]]},"167":{"position":[[249,4]]},"175":{"position":[[20,4]]},"599":{"position":[[104,4]]},"648":{"position":[[176,5]]}}}],["workflow",{"_index":140,"t":{"48":{"position":[[29,9]]}}}],["world",{"_index":655,"t":{"692":{"position":[[139,5]]}}}],["written",{"_index":642,"t":{"680":{"position":[[92,7]]}}}],["you'll",{"_index":269,"t":{"145":{"position":[[192,6],[357,6]]},"656":{"position":[[41,6]]},"680":{"position":[[51,6]]}}}],["you'r",{"_index":129,"t":{"40":{"position":[[217,6]]},"680":{"position":[[169,6]]}}}],["you'v",{"_index":636,"t":{"670":{"position":[[5,6],[158,6]]}}}],["zk",{"_index":585,"t":{"531":{"position":[[348,2]]}}}]],"pipeline":["stemmer"]}},{"documents":[],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[],"invertedIndex":[],"pipeline":["stemmer"]}},{"documents":[{"i":3,"t":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","s":"First Blog Post","u":"/blog/first-blog-post","h":"","p":2},{"i":5,"t":"Blog posts support Docusaurus Markdown features, such as MDX. tip Use the power of React to create interactive blog posts. Click me!","s":"MDX Blog Post","u":"/blog/mdx-blog-post","h":"","p":4},{"i":7,"t":"This is the summary of a very long blog post, Use a comment to limit blog post size in the list view. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet","s":"Long Blog Post","u":"/blog/long-blog-post","h":"","p":6},{"i":10,"t":"NODE Mainnet - 0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0 NODE xDai - 0xc60e38C6352875c051B481Cbe79Dd0383AdB7817","s":"Token Addresses","u":"/docs/dao","h":"#token-addresses","p":8},{"i":12,"t":"The Dappnode DAO will be an inclusive hub in which Dappnode’s community will carry on its mission to keep the web decentralized, uncensored and resilient. Active DAO members will have the opportunity to vote on Dappnode’s future projects and on how to expand its array of hardware and software solutions. To get involved in Governance, DAO aspirants will need to make contributions to the ecosystem and help kick-start the NODE economy. Those who provide liquidity in the sanctioned pools (Uniswap and Sushiswap) or commit NODE to Governance Staking on Ethereum Mainnet or xDai will be granted voting powers proportional to their contributions. This way we can ensure that those with a voice are also those with a stake, and are not merely speculating with the token.","s":"Mission & Membership","u":"/docs/dao","h":"#mission--membership","p":8},{"i":14,"t":"DAppnode has tapped Snapshot technology to build its Governance structure. Snapshot is a novel piece of technology that allows off-chain voting for on-chain actions. It removes the prohibitive gas costs of participating in on-chain governance by taking snapshots of members’ NODE currently being staked. Voting and creating proposals with Snapshot is done with a simple crypto wallet signature, no gas needed.","s":"Architecture","u":"/docs/dao","h":"#architecture","p":8},{"i":16,"t":"The first Dappnode project post-launch will be the hotly awaited ValidatorDAO. You can read this Medium article to learn more about how ValidatorDAO is poised to revolutionize the relationship between Validators and Nominators!","s":"DAO Projects","u":"/docs/dao","h":"#dao-projects","p":8},{"i":18,"t":"Docusaurus blogging features are powered by the blog plugin. Simply add Markdown files (or folders) to the blog directory. Regular blog authors can be added to authors.yml. The blog post date can be extracted from filenames, such as: 2019-05-30-welcome.md 2019-05-30-welcome/index.md A blog post folder can be convenient to co-locate blog post images: The blog supports tags as well! And if you don't want a blog: just delete this directory, and use blog: false in your Docusaurus config.","s":"Welcome","u":"/blog/welcome","h":"","p":17},{"i":20,"t":"What is a DAO? A DAO, or Decentralized Autonomous Organization, is an organization represented by rules encoded as a computer program that is transparent, controlled by the organization members, and not influenced by a centralized government. It operates autonomously and can execute actions such as making decisions and managing resources based on pre-defined rules or through a consensus mechanism. What is the purpose and mission of the Dappnode DAO? DappNode's DAO aims to promote and simplify the use of decentralized infrastructure. It aspires to create a more decentralized web by providing tools that make running nodes, DApps, and blockchain-related software more user-friendly and accessible to a wider audience. By establishing a DAO, DappNode ensures that its mission and direction are decided collectively by its community, allowing for a more democratic and transparent decision-making process. The DappNode DAO encourages collaboration, fostering a community that is actively involved in the project's evolution, and ensuring the sustainability and success of the platform in the decentralized space.","s":"Dappnode DAO FAQ","u":"/docs/dao/faq","h":"","p":19},{"i":23,"t":"Token Address on Mainnet - 0xDa007777D86AC6d989cC9f79A73261b3fC5e0DA0 Token Address on xDai - 0xc60e38C6352875c051B481Cbe79Dd0383AdB7817 NODE has a total initial supply of 100,000,000 tokens. These tokens have been distributed in accordance with the following chart:","s":"NODE Basics","u":"/docs/dao/node-basics","h":"#node-basics","p":21},{"i":25,"t":"NODE has been airdropped in a NODEdrop to our community of faithful supporters. Recipients of the NODEdrop include: Dappnode Team Members Dappnode Founders Purchasers of Dappnode hardware Code Contributors Active community members, ranked by our sourcecred algorithm Donors to Dappnode in Gitcoin Grants Rounds (with donations above $1) Eth2 stakers who have self-identified as Dappnode runners by including the word \"Dappnode\" in their graffiti Eth2 stakers present in the Genesis of Eth2 Check your NODEdrop here.","s":"NODEdrop","u":"/docs/dao/node-basics","h":"#nodedrop","p":21},{"i":27,"t":"90% of the entire initial supply of NODE has been allocated to the \"NODEstream\" which is set to flow for a period of 3 years (36 months - i.e. until July 2024). This is essentially a continous stream of NODE that flows out of the \"Reservoir\" and into the \"Claimable\" section of the dashboard. NODEstream distribution can be roughly tracked as follows: Table for Eth Date Month Claimable Held in Reservoir Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time) 0 10% 90% Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time) 9 32.5% 67.5% Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time) 18 55% 45% Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time) 27 77.5% 22.5% Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time) 36 100% 0% Table for xDai Date Month Claimable Held in Reservoir Jul 17 2021, 22:00:00 GMT+0200 (Central European Summer Time) 0 0% 100% Apr 17 2022, 22:00:00 GMT+0200 (Central European Summer Time) 9 25% 75% Jan 17 2023, 22:00:00 GMT+0200 (Central European Summer Time) 18 50% 50% Oct 17 2023, 22:00:00 GMT+0200 (Central European Summer Time) 27 75% 35% Jul 17 2024, 16:00:00 GMT+0200 (Central European Summer Time) 36 100% 0% The NODEstream works on a time-based linear function, meaning the reservoir will gradually hold a smaller percentage of your NODE and thus more NODE is made instantly available from your staking rewards. At the end of the NODEstream The reservoir will no longer hold any NODE and 100% of your staking rewards will be instantly claimable. This chart show how the function works in Etherum network. This chart show how the function works in dao network. In Ethereum 10% was available at the beginning. In xdai is different, initally it was not available any % token. The NODEstream has been designed to encourage long-term participation in the NODE Economy. As the NODE Economy grows and the Dappnode universe expands, our community is awarded even more NODE to use in DAO governance. Recipients of the NODEdrop on xDai Network are granted the NODEstream, whereas on Mainnet the NODEdrop does not include the NODEstream automatically. In order to receive and augment the flow of NODE you must provide liquidity in any of the eligible pools. Some part of the rewards earned from NODEstaking are claimable immediately, where as the other part is allocated to the reservoir for NODEstreaming.","s":"NODEstream","u":"/docs/dao/node-basics","h":"#nodestream","p":21},{"i":29,"t":"Liquidity Mining (LM) launched on Jul 17 2021, 20:00:00 GMT. 5.5% of the total token supply, 5.5 Million NODE, has been allocated to the first LM round of 6 months. NODE reward distribution for the 4 pools available is as follows: Sushiswap NODE/ETH Pool - 40% - 2,200,000 NODE Uniswap NODE/ETH Pool - 40% - 2,200,000 NODE NODE Governance Staking xDai - 10% - 550,000 NODE NODE Governance Staking Mainnet -10% - 550,000 NODE A further 5.5% of the token supply has been reserved for future rounds of LM. At the end of the first round the team will re-assess the Liquidity Mining program, potentially deploying new pools and distribution.","s":"Liquidity Mining","u":"/docs/dao/liquidity-mining","h":"","p":28},{"i":31,"t":"Sushiswap NODE/ETH Pool - 0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8 Uniswap NODE/ETH Pool - 0xee3b01b2debd3df95bf24d4aacf8e70373113315","s":"Liquidity Provision Pools Contract Addresses","u":"/docs/dao/liquidity-mining","h":"#liquidity-provision-pools-contract-addresses","p":28},{"i":33,"t":"Uniswap v2 ETH/NODE LP - 0xee3b01b2debd3df95bf24d4aacf8e70373113315 Sushiswap ETH/NODE LP - 0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8","s":"LP Token Addresses (Mainnet)","u":"/docs/dao/liquidity-mining","h":"#lp-token-addresses-mainnet","p":28},{"i":35,"t":"NODE Governance Staking Mainnet - 0x19992b52338B7B49De9679ae018A7027803dB1Aa NODE Governance Staking xDai - 0xF66823fdc33B9F4C66dB4C3394FF139872C12f16 Uniswap Liquidity Mining - 0x072115DbD5c8b47E971890357d2951d4569F6B27 Sushiswap Liquidity Mining - 0x89F2e26F20Bf66bBFAc947A3b628b4b4724AaA5c","s":"Liquidity Mining Contracts","u":"/docs/dao/liquidity-mining","h":"#liquidity-mining-contracts","p":28},{"i":37,"t":"Round 1 (26 weeks) weekly NODE rewards distribution percentages based on LM supply are as follows: % per week 0.00% 3.80% 3.80% 3.00% 3.00% 2.50% 2.50% 2.50% 2.50% 2.60% 2.80% 3.00% 3.20% 3.40% 3.60% 3.80% 4.00% 4.20% 4.40% 4.60% 4.80% 5.00% 5.20% 5.40% 5.60% 5.80% 5.00% Week 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26","s":"Weekly Distribution","u":"/docs/dao/liquidity-mining","h":"#weekly-distribution","p":28},{"i":39,"t":"\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"","s":"NODEdrop","u":"/docs/dao/node-drop","h":"","p":38},{"i":41,"t":"Welcome to the Dappnode's developer docs! This documentation is your comprehensive guide to using the tools and resources that enable you to create, deploy, and manage your own custom dappnode packages (DNP). Whether you're new to the project or an experienced developer, this documentation will help you navigate the intricacies of developing in the dappnode environment. caution This documentation is for experienced people in the dappnode ecosystem or developers who want to contribute to dappnode by creating new packages. If you're new to dappnode, we recommend starting with the User Documentation.","s":"Welcome to the Developer Documentation!","u":"/docs/dev","h":"","p":40},{"i":43,"t":"We welcome contributions from the community! If you'd like to contribute to Dappnode, please review our [Contributing Guidelines] to understand how you can get involved.","s":"Contributing","u":"/docs/dev","h":"#contributing","p":40},{"i":45,"t":"We're here to help! If you encounter any issues, have questions, or want to provide feedback, feel free to: Join our community on Discord Open an issue on GitHub","s":"Feedback and Support","u":"/docs/dev","h":"#feedback-and-support","p":40},{"i":47,"t":"\"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"","s":"NODEstream","u":"/docs/dao/node-stream","h":"","p":46},{"i":49,"t":"GitHub Actions help automate workflows around your projects on GitHub. For Dappnode packages, we utilize specific GitHub Actions to manage updates and releases.","s":"GitHub Actions for Dappnode Packages","u":"/docs/dev/github-actions","h":"","p":48},{"i":51,"t":"This action checks if there's an available update from the upstream repository. If an update is found, it creates a Pull Request with the new version.","s":"1. Auto Check for Upstream Updates (auto_check.yml)","u":"/docs/dev/github-actions","h":"#1-auto-check-for-upstream-updates-auto_checkyml","p":48},{"i":53,"t":"Filename: auto_check.yml name: Bump upstream version on: schedule: - cron: \"00 */4 * * *\" push: branches: - \"master\" jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: npx @dappnode/dappnodesdk github-action bump-upstream env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PINATA_API_KEY: ${{ secrets.PINATA_API_KEY }} PINATA_SECRET_API_KEY: ${{ secrets.PINATA_SECRET_API_KEY }} Features: Scheduled Runs: The action runs every 4 hours (as per the cron setting). Environment Variables: Uses GITHUB_TOKEN for authentication, and PINATA_API_KEY and PINATA_SECRET_API_KEY for interfacing with the IPFS pinning service Pinata.","s":"Workflow File:","u":"/docs/dev/github-actions","h":"#workflow-file","p":48},{"i":55,"t":"This action builds the Dappnode package and creates a pre-release that's ready to be published.","s":"2. Main Build and Pre-release (main.yml)","u":"/docs/dev/github-actions","h":"#2-main-build-and-pre-release-mainyml","p":48},{"i":57,"t":"Filename: main.yml name: \"Main\" on: pull_request: push: branches: - \"main\" - \"master\" - \"v[0-9]+.[0-9]+.[0-9]+\" paths-ignore: - \"README.md\" jobs: build-test: runs-on: ubuntu-latest name: Build test if: github.event_name != 'push' steps: - uses: actions/checkout@v3 - run: npx @dappnode/dappnodesdk build --skip_save release: name: Release runs-on: ubuntu-latest if: github.event_name == 'push' steps: - uses: actions/checkout@v3 - name: Publish run: npx @dappnode/dappnodesdk publish patch --dappnode_team_preset env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} DEVELOPER_ADDRESS: \"0xf35960302a07022aba880dffaec2fdd64d5bf1c1\" Features: Branch Filters: The action only triggers on the main, master, and version tags (e.g., v1.0.0). Paths Ignore: Ignores changes solely related to README.md. Conditional Runs: Different steps are executed based on the event that triggered the workflow (e.g., push event or pull request).","s":"Workflow File:","u":"/docs/dev/github-actions","h":"#workflow-file-1","p":48},{"i":59,"t":"The setup wizard for Dappnode packages helps automate the package customization and improve its user experience. You can allow users to conveniently edit environment variables, port mappings, and upload files while interacting with a simple web form, right before installing the package.","s":"Wizard Reference","u":"/docs/dev/references/setup-wizard","h":"","p":58},{"i":61,"t":"To add this functionality, create a file setup-wizard.yml in the root of your Dappnode package directory. Both JSON and YAML formats are supported, but YAML makes writing markdown text blocks much easier (its used in the description property). DappnodePackage-my-package.public.dappnode.eth/ ├── build │ ├── ... │ └── Dockerfile ├── avatar-my-package.png ├── dappnode_package.json ├── docker-compose.yml + └── setup-wizard.yml","s":"How to use","u":"/docs/dev/references/setup-wizard","h":"#how-to-use","p":58},{"i":63,"t":"version: \"2\" fields: - id: payoutAddress, target: type: environment name: PAYOUT_ADDRESS service: service1 title: Payout address description: >- Address to send **payouts** too. [More info](https://more.info) Supports markdown and multiline secret: true pattern: \"^0x[a-fA-F0-9]{40}$\" patternErrorMessage: Must be a valid address (0x1fd16a...) enum: - normal - archive - advanced required: true if: { \"mode\": { \"enum\": [\"advanced\"] } }","s":"Example","u":"/docs/dev/references/setup-wizard","h":"#example","p":58},{"i":65,"t":"Identify this setup wizard version. Currently only supports version \"2\" is required type: string value: \"2\"","s":"version","u":"/docs/dev/references/setup-wizard","h":"#version","p":58},{"i":67,"t":"Setup wizard fields. Fields to show in the setup wizard form UI is required type: Array type: object[] All items must be of the type: object with the following properties: Property Type Required Default target object Optional id string Required title string Required description string Required secret boolean Optional false pattern string Optional patternErrorMessage string Optional enum array Optional required boolean Optional if object Optional","s":"fields","u":"/docs/dev/references/setup-wizard","h":"#fields","p":58},{"i":69,"t":"Unique property ID required for internal form parsing, and to use the if conditional block. is required type: string Example: id: payoutAddress","s":"id","u":"/docs/dev/references/setup-wizard","h":"#id","p":58},{"i":71,"t":"Maps the setup wizard field to a package configuration option. Supports: environment: For environment variables portMapping: For port mapping namedVolumeMountpoint: To allow hosting a specific package volume into a different drive or mountpoint allNamedVolumesMountpoint: To allow hosting all package volumes into a different drive or mountpoint fileUpload: To upload user files to the package container environment​ To customize environment variables with user input. Targeted variables must be declared in the package's docker-compose. You can customize the type of input shown in the UI with this field properties secret: Hides input, to collect sensitive data. pattern: To validate input against any Regex expression. enum: Show as a select dropdown menu. It exists two ways of defining environment variables. The first one, where you define one environment var for one service, you the format to do it is the following: target: type: environment name: PAYOUT_ADDRESS service: service1 In case you want to define an environment variable that is used in multiple services you can define it in the next way: target: type: environment name: PAYOUT_ADDRESS service: [service1, service2, service2] name​ The name of the environment variable as declared in the docker-compose. is required type: string Example: name: PAYOUT_ADDRESS service​ In multi-service package, which service should be targeted with this setting. type: string Examples: service: service1 portMapping​ To customize port mappings with user input. Targeted container port must be declared in the package's docker-compose. target: type: portMapping containerPort: 9554/UDP service: service1 containerPort​ Exposed container port to map to. Must follow the format {portNumber} or {portNumber}/{PROTOCOL}, where PROTOCOL must be TCP or UDP in all caps. is required type: string Examples: containerPort: 9554 containerPort: 9554/TCP service​ See service namedVolumeMountpoint​ To allow hosting a specific package volume into a different drive or mountpoint target: type: namedVolumeMountpoint volumeName: blockchain_data volumeName​ Name of the docker volume to allow the user to change its mountpoint. Must have the exact same name as declared in the package's compose volumes section. is required type: string Example: volumeName: blockchain_data allNamedVolumesMountpoint​ To allow hosting all package volumes into a different drive or mountpoint at once. Use this option if your package has multiple heavy volumes whose mountpoint should be changed at once. target: type: allNamedVolumesMountpoint fileUpload​ To allow uploading user files to the package container target: type: fileUpload path: /usr/src/config.json service: service1 path​ Destination path to upload the file to. Must be a valid absolute path in the package container. is required type: string Example: path: /usr/src/config.json service​ See service","s":"target","u":"/docs/dev/references/setup-wizard","h":"#target","p":58},{"i":73,"t":"The Title Schema is required default: \"\" type: string Example: title: Payout address","s":"title","u":"/docs/dev/references/setup-wizard","h":"#title","p":58},{"i":75,"t":"The Description Schema is required default: \"\" type: string Example: description: >- Address to send **payouts** too. [More info](https://more.info) Supports markdown and multiline","s":"description","u":"/docs/dev/references/setup-wizard","h":"#description","p":58},{"i":77,"t":"Display field input as hidden. Use to collect sensitive data. It will automatically activate if the field name contains \"secret\" \"passphrase\" or \"password\". Only available with target environment. is optional default: false type: boolean Example: secret: true","s":"secret","u":"/docs/dev/references/setup-wizard","h":"#secret","p":58},{"i":79,"t":"Enforce this property to satisfy a regex before continuing. Only available with target environment. Use also patternErrorMessage to show a nicer error message when regex validation fails. is optional type: string Example: pattern: \"^0x[a-fA-F0-9]{40}$\"","s":"pattern","u":"/docs/dev/references/setup-wizard","h":"#pattern","p":58},{"i":81,"t":"Error to show if the regex pattern validation fails. Only available with target environment. is optional type: string Examples: patternErrorMessage: Must be a valid address (0x1fd16a...) patternErrorMessage: Must be at least 8 characters long","s":"patternErrorMessage","u":"/docs/dev/references/setup-wizard","h":"#patternerrormessage","p":58},{"i":83,"t":"List valid options. Will automatically display the input as a select menu. Only available with target environment. is optional type: Array type: string[] All items must be of the type: string Examples enum: - normal - archive - advanced","s":"enum","u":"/docs/dev/references/setup-wizard","h":"#enum","p":58},{"i":85,"t":"Enforce this property to be provided before continuing is optional type: boolean Examples required: true","s":"required","u":"/docs/dev/references/setup-wizard","h":"#required","p":58},{"i":87,"t":"Only display the field property if the if schema is valid against the current form data provided by the user. The form data is an object with the structure { [field.id]: JSONSchema }. is optional type: object Examples: if: { \"mode\": { \"enum\": [\"advanced\"] } } if: { \"mode\": { \"enum\": [\"archive\"] } }","s":"if","u":"/docs/dev/references/setup-wizard","h":"#if","p":58},{"i":89,"t":"This page covers the top three functionalities of DappnodeSDK: init, build, and publish. Each command plays a crucial role in the development and deployment process of dappnode packages (DNPs).","s":"Main commands","u":"/docs/dev/sdk/commands","h":"","p":88},{"i":91,"t":"The init command allows you to initialize a new DAppNodePackage (DNP) repository. This is the first step when creating a new DNP. To use the init command, run the following: npx @dappnode/dappnodesdk init The following are all the possible init options: --dir, --directory Change the base directory [string] [default: \"./\"] --compose_file_name Compose file for docker-compose [string] [default: \"docker-compose.yml\"] --silent Silence output to terminal [boolean] --verbose, --debug Show more output to terminal [boolean] -y, --yes Answer yes or the default option to all initializatio n questions [boolean] -f, --force Overwrite previous project if necessary [boolean] -h, --help Show help [boolean] -v, --version Show version number [boolean]","s":"init","u":"/docs/dev/sdk/commands","h":"#init","p":88},{"i":93,"t":"The build command is used to build a new version of a DNP. It generates the IPFS hash for the package. To use the build command, run the following: npx @dappnode/dappnodesdk build The following are all the possible build options: --dir, --directory Change the base directory [string] [default: \"./\"] --compose_file_name Compose file for docker-compose [string] [default: \"docker-compose.yml\"] --silent Silence output to terminal [boolean] --verbose, --debug Show more output to terminal [boolean] -p, --provider Specify an ipfs provider: \"dappnode\" (default), \"infu ra\", \"localhost:5002\" [default: \"dappnode\"] -t, --timeout Overrides default build timeout: \"15h\", \"20min 15s\", \"5000\". Specs npmjs.com/package/timestring [default: \"60min\"] --skip_save For testing only: do not save image to disk [boolean] --skip_upload For testing only: do not upload image from disk [boolean] -h, --help Show help [boolean] -v, --version Show version number [boolean]","s":"build","u":"/docs/dev/sdk/commands","h":"#build","p":88},{"i":95,"t":"The publish command is used to publish a new version of the DNP in an Aragon Package Manager Repository. To use the publish command, run the following: npx @dappnode/dappnodesdk publish The following are all the possible publish options: --dir, --directory Change the base directory [string] [default: \"./\"] --compose_file_name Compose file for docker-compose [string] [default: \"docker-compose.yml\"] --silent Silence output to terminal [boolean] --verbose, --debug Show more output to terminal [boolean] --type Semver update type. Can also be provided with env RELEASE_TYPE=[type] or via TRAVIS_TAG=release (pat ch), TRAVIS_TAG=release/[type] [string] [choices: \"major\", \"minor\", \"patch\"] -p, --provider Specify a provider (overwrittes content_provider a nd eth_provider): \"dappnode\" (default), \"infura\", \"http://localhost:8545\" [string] --eth_provider Specify an eth provider: \"dappnode\" (default), \"in fura\", \"localhost:8545\" [string] [default: \"dappnode\"] --content_provider Specify an ipfs provider: \"dappnode\" (default), \"i nfura\", \"http://localhost:5001\" [string] [default: \"dappnode\"] --upload_to Specify where to upload the release [choices: \"ipfs\", \"swarm\"] [default: \"ipfs\"] -a, --developer_address If there is no existing repo for this DNP the publ ish command needs a developer address. If it is no t provided as an option a prompt will request it [string] -t, --timeout Overrides default build timeout: \"15h\", \"20min 15s \", \"5000\". Specs npmjs.com/package/timestring [string] --github_release Publish the release on the Github repo specified i n the manifest. Requires a GITHUB_TOKEN ENV to aut henticate [boolean] --dappnode_team_preset Specific set of options used for internal DAppNode releases. Caution: options may change without not ice. [boolean] -h, --help Show help [boolean] -v, --version Show version number [boolean]```","s":"publish","u":"/docs/dev/sdk/commands","h":"#publish","p":88},{"i":97,"t":"The DappnodeSDK dappnodesdk is a tool that makes creating and publishing new Dappnode packages as simple as possible. It helps to initialize, build, test, and publish the new package/repo to an APM tracked on the Ethereum Mainnet. We have deployed a public APM (Aragon Package Manager) registry in which anyone can create their own APM repository: public.dappnode.eth","s":"DappnodeSDK","u":"/docs/dev/sdk/overview","h":"","p":96},{"i":99,"t":"DappnodeSDK is usually executed from the command line. The following are all the available commands. info You can run dappnodesdk help to get more information about each command. Usage: dappnodesdk [options] Commands: build Build a new version (only generates the ipfs hash) from_github [repoSlug] Gets an existing DNP Github release (assets) and uploa d it to IPFS increase [type] Increases the version defined in the manifest init Initialize a new DAppNodePackage (DNP) repository next [type] Compute the next release version from local publish [type] Publish a new version of the package in an Aragon Pack age Manager Repository github-action Github actions tooling to be run in CI. Uses a specifi c set of options for internal DAppNode use. Caution: o ptions may change without notice. Options: --dir, --directory Change the base directory [string] [default: \"./\"] --compose_file_name Compose file for docker-compose [string] [default: \"docker-compose.yml\"] --silent Silence output to terminal [boolean] --verbose, --debug Show more output to terminal [boolean] -h, --help Show help [boolean] -v, --version Show version number [boolean]```","s":"Command-line options","u":"/docs/dev/sdk/overview","h":"#command-line-options","p":96},{"i":101,"t":"In this section, you will find an in-depth explanation on how Smooth works. This includes its different components, all states possible of a subscribed validator, and much more! info We recommend reading and understanding the contents of this section before subscribing to Smooth. Smooth's Rewards: Learn how Smooth handles incoming rewards and how they are distributed to validators. Validator States: A detailed explanation of all possible states of a subscribed Smooth validator. Smooth's Oracle and Smart Contract: Learn how the two main components of Smooth, the Oracle and smart contract work together to track validators and distribute rewards.","s":"Deep Dive into Smooth!","u":"/docs/smooth/deep-dive-into-smooth/overview","h":"","p":100},{"i":103,"t":"Receiving and distributing rewards is one of the core functionalities of Smooth. In this section we will explain how rewards are handled by Smooth and how they are distributed to validators, as well as how users can claim their rewards.","s":"Rewards","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"","p":102},{"i":105,"t":"A Reward is considered to be any balance denominated in ETH that is sent to Smooth's address. When recieved, it is shared fairly among all the participants in the pool. There are 2 main sources of rewards in Smooth: Block Proposal rewards: These rewards are generated by validators within the pool. Whenever a validator successfully proposes a block, it sends the block reward to Smooth's address. Donations: This are the rewards that are sent to Smooth's address by anyone who wants to support the project. Smooth only accepts donations in ETH.","s":"Smooth's source of rewards","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"#smooths-source-of-rewards","p":102},{"i":107,"t":"When a validator has an active subscription to the pool (Active or YellowCard state) it is eligible for rewards, meaning that it will receive a given share of each reward that is sent to the pool. Validators in RedCard are considered subscribed, but don't earn rewards until they become active again. Smooth's distributes rewards to the validators as Pending Rewards. These are rewards that are not consolidated yet, meaning that they belong to the validator but they can not be claimed yet, until a valid block proposal is sent to Smooth by that validator. Later on, when a validator sends a valid block proposal to Smooth, all its Pending Rewards are transformed into Accumulated Rewards. These rewards are consolidated and can be claimed by the validator. Therefore, we consider that a validator has 2 types of rewards: Pending Rewards: Rewards that are not consolidated yet. They can not be claimed. Accumulated Rewards: Rewards that are consolidated and can be claimed by the validator. info Dappnode receives a 7% fee of all rewards distributed by Smooth. This fee is automatically deducted from the rewards before they are distributed to validators. This fee serves to support the development and sustainability of Smooth and Dappnode!","s":"How rewards are distributed","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"#how-rewards-are-distributed","p":102},{"i":109,"t":"As a Smooth user, you have a third type of reward: Claimable Rewards. These are the sum of all your validator's Accumulated Rewards with the same withdrawal address that you have not already claimed. Claimable Rewards: Rewards that you can claim as a Smooth user. Sum of all your validator's unclaimed Accumulated Rewards. Smooth's users can claim their rewards by visting Smooth's website and clicking on the Claim All button once logged in. This trigger a transaction that will send all claimable rewards to the user's address. tip Smooth identifies users through an ETH1 address, which serves as the withdrawal address for all your validators. If you have multiple validators associated with distinct withdrawal addresses, you will need to claim your rewards for each of them separately.","s":"How rewards are claimed","u":"/docs/smooth/deep-dive-into-smooth/rewards","h":"#how-rewards-are-claimed","p":102},{"i":111,"t":"Smooth is composed of two main components: the Oracle and the Smart Contract. These two components work together to track validators and distribute rewards fairly. Both are open source and indispensable to the functioning of Smooth. While the Smart Contract serves to track all the events related to the pool onchain (subscriptions, unsubscriptions, block proposals, etc.), the Oracle is responsible of computing the rewards of each validator.","s":"Smooth's architecture","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","h":"","p":110},{"i":113,"t":"Smooth's Smart Contract is deployed on the Ethereum mainnet and is responsible for \"receiving\" all the events related to the pool onchain. This includes subscriptions, unsubscriptions, block proposals, and more. Since it is the Smart Contract the one who holds all the ETH collected by the pool, it is from the Smart Contract where all Smooth users will claim their rewards. Computing and storing all rewards calculations onchain would be almost impossible and very expensive, so merkle trees are used to summarize the state of all validators. This allows the Smart Contract to store a single hash onchain that represents the state of all validators subscribed to the pool. This hash is called the Merkle Root and is computed by the Oracle.","s":"The Smart Contract","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","h":"#the-smart-contract","p":110},{"i":115,"t":"As mentioned before, the Oracle is responsible for computing the rewards of each validator. It does so by computing a merkle tree that summarizes the state of all validators subscribed to the pool. This merkle tree, computed offchain, is summarized into a Merkle Root. caution Oracle works only with finalized data. This means that Oracle will effectively work with data from a few epochs ago. This is done to ensure that the data Oracle processes is non-reversible and no reorgs are possible. Once every 28800 slots (4 days), the Oracle sends a transaction to the Smart Contract with the updated Merkle Root. info It is not untill the Oracle sends the transaction to the Smart Contract with the updated Merkle Root that the rewards are available to be claimed by the validators. This means that if a validator correctly proposes a block, it will not be able to claim its rewards until the Oracle sends the transaction to the Smart Contract with the updated Merkle Root.","s":"The Oracle","u":"/docs/smooth/deep-dive-into-smooth/oracle-sm","h":"#the-oracle","p":110},{"i":117,"t":"Welcome to the Smooth Documentation! Here, you'll find detailed insights and essential information to navigate and maximize your experience with Smooth, an MEV Smoothing Pool designed to enhance rewards for Solo Stakers in the Ethereum network. info Interested in Smooth? Check out Deep Dive into Smooth to get a general idea of how Smooth works, or check the subscription guides to learn how to join!","s":"Welcome to Smooth, Dappnode's MEV Smoothing Pool!","u":"/docs/smooth","h":"","p":116},{"i":119,"t":"Smooth is a MEV Smoothing Pool designed to elevate the Ethereum solo staking experience. By pooling MEV rewards, Smooth offers Solo Stakers the unique opportunity to earn higher rewards consistently, reducing reliance on luck and maximizing the potential of every staked ether. Join Smooth and take your solo staking experience to the next level!","s":"What is Smooth and why should you join it?","u":"/docs/smooth","h":"#what-is-smooth-and-why-should-you-join-it","p":116},{"i":121,"t":"Currently, luck plays a big role in every Solo Staker when it comes to earning rewards. While the average validator will propose 3 blocks per year, some will propose more, some less. A Solo Staker does not have any control over this, and can only hope to get lucky and propose as much blocks as possible to maximize their rewards. Smooth changes this by pooling together the block proposals of all its members, so that every member gets a share of the rewards of every block proposed by the pool. This way, you can stop worrying about luck and start earning rewards consistently!","s":"🎰 Stop Depending on Luck!","u":"/docs/smooth","h":"#slot_machine-stop-depending-on-luck","p":116},{"i":123,"t":"With an average of only 3 block proposals per year, how likely are you to catch a period of high fees? How much does it hurt to see a NFT sale, or a peak in activity and not catch any of the action? In Smooth, block proposals are constant, so no matter what happens in the network, you will always be there to get your share of it!","s":"🚀 Don't miss high fee seasons!","u":"/docs/smooth","h":"#rocket-dont-miss-high-fee-seasons","p":116},{"i":125,"t":"Ever since they arrived, MEV rewards are distributed very unevenly. The vast majority of blocks have very low MEV rewards, while only very few blocks have very high rewards. As a Solo Staker, you have a very low chance of hitting one of these high-reward blocks. The median MEV typically hovers around 0.05 ETH, but certain lottery blocks can reach up to 30, 90, or even 300 ETH! By adding together all our chances of hitting a lottery block, we have a much higher chance of proposing one! In backtesting simulations, rewards of a Smoothing Pool participant are up to 60% higher than those of a Solo Staker! tip For a detailed comparison between Solo Stakers and Smoothing Pool participants' rewards, explore this Smoothing Pool analysis Lido, Centralized Exchanges and other pools with lots of validators consistently hit lottery blocks because of the sheer numbers of validators they have. They naturally split these rewards between all their validators, effectively being at an advantage vs the average Solo Staker. This is a centralizing force, as the rich become richer and bigger operations get bigger rewards. Now, Solo Stakers with few validators don't depend on luck to be at par with the big guys!","s":"💰 Hitting MEV Lottery Blocks","u":"/docs/smooth","h":"#moneybag-hitting-mev-lottery-blocks","p":116},{"i":127,"t":"A Smooth validator can be in multiple states depending on its behavior. In this section we will explain all possible states a validator can have, the consequences of being each state, and how a validator can transition from one state to another.","s":"Smooth Validator States","u":"/docs/smooth/deep-dive-into-smooth/states","h":"","p":126},{"i":129,"t":"The oracle employs a state machine to monitor the status of subscribed validators within Smooth. Various actions trigger state changes, detailed in the following image encompassing all possible transitions. Let's take a look at it: There are 6 different states a validator can have: 🟢 Active: The validator is active and subscribed to the pool, earning rewards over time. 🟡 YellowCard: The validator missed its last block proposal but not two in a row. This validator earns rewards as if it was active. 🔴 RedCard: The validator missed its latest two block proposals in a row. As a penalty, the validator does not earn rewards until its next block is successfully proposed to the pool. In other words, this validator is not receiving Pending Rewards when somebody else contributes to the pool. ⚪ NotSubscribed: The validator is no longer subscribed to the pool, but still tracked by the validator. For example, a validator that unsubscribed. Note that this is still tracked because a validator can unsubscribe but it may still have pending balance to claim. In this state, the validator does not earn rewards. ☠️ Banned: The validator is banned forever from the pool. A validator is banned when it is subscribed to the pool but proposes a block with the wrong fee recipient. ❓Untracked: The validator is not tracked by the pool. It has never subscribed to the pool. And 6 different actions can trigger a state transition: ProposalOk: The validator proposed a valid block with its rewards correctly sent to the smoothing pool address. ProposalMissed: The validator should have proposed a block but missed its proposal. ProposalWrongFee: The validator proposes a block but with a wrong fee recipient. ManualSubscription: The validator manually subscribes to the pool, depositing collateral for its validator index by calling the smart contract function (see event). AutoSubscription: The validator is automatically subscribed to the pool, by setting as fee recipient the smoothing pool address. Unsubscribe: The validator manually unsubscribes to the pool, calling the unsubscribe function from the smart contract (see event).","s":"State Machine Overview","u":"/docs/smooth/deep-dive-into-smooth/states","h":"#state-machine-overview","p":126},{"i":131,"t":"Beyond tracking validator statuses, the state machine ensures fair reward distribution and encourages correct behavior among validators. Validators consistently proposing blocks receive greater rewards compared to those frequently missing proposals, promoting active participation and contribution to the pool.","s":"The purpose of the State Machine","u":"/docs/smooth/deep-dive-into-smooth/states","h":"#the-purpose-of-the-state-machine","p":126},{"i":134,"t":"Details What do I need to do to claim my rewards? Once your pending rewards are transformed into accumulated rewards after your block proposal, a small claim transaction will be required from the withdrawal address to send the ETH rewards to your wallet. Details Is there a fee that Dappnode takes for participating in Smooth? 7% of all the Rewards goes to supporting the development of Dappnode and sustainability of Smooth Details If I want to unsubscribe my validator from Smooth, when is the best time to do it? Unsubscribing a validator from Smooth causes it to lose all its pending rewards. Hence, the ideal moment to exit Smooth is just after your last successful block proposal is reflected in Smooth's Smart Contract. A successful block proposal transfers all pending rewards claimable, allowing you to claim them before unsubscribing. This approach minimizes the pending rewards lost when unsubscribing. Details Does Smooth take my Consensus Layer (CL) rewards? No, Smooth does not take your CL rewards. CL rewards are always sent directly to your withdrawal address. Smooth only takes the execution layer rewards, which are the fees or MEV of the blocks you propose. These are the rewards that are sent to the fee recipient.","s":"FAQ","u":"/docs/smooth/faq-glossary","h":"#faq","p":132},{"i":136,"t":"Reward: Any balance denominated in ETH that is sent to Smooth. Rewards are detected by the oracle and shared fairly among all the participants in the pool. The oracle will detect all types of rewards and distribute them fairly. All rewards are denominated in ETH and other types of tokens such as ERC20 are not considered by the oracle. The vast majority of rewards come from block proposals of Smooth's validators and Donations. Pending rewards: Pending rewards are those to be owned by the validator but not yet consolidated, rendering them unclaimable. Upon a successful block proposal by the validator, these rewards transition into the 'Accumulated rewards' category, becoming claimable. This mechanism ensures that validators can only claim rewards after contributing to the pool, guarding against cheating or exploiting the system. Accumulated rewards: All consolidated rewards your validator has generated, i.e. those claimed and claimable. Claimable rewards: Rewards ready to claim. Claimable rewards are the sum of all your accumulated rewards minus the rewards that have been claimed already. Only the withdrawal address of the validator can claim its rewards.","s":"Glossary","u":"/docs/smooth/faq-glossary","h":"#glossary","p":132},{"i":138,"t":"This is the simplest way to subscribe to Smooth. It consists of changing the fee recipient of your validator to Smooth's address and subscribing automatically when proposing your next block. Before automatically subscribing to Smooth! Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth. Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth.","s":"Automatic Subscription","u":"/docs/smooth/subscribe-to-smooth/automatic","h":"","p":137},{"i":140,"t":"Go to your dappnode's staking brain and change the fee recipient of the validators you want to subscribe to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35). Once Smooth receives the rewards from your validator, it will automatically subscribe your validator, and you will start receiving rewards from other members. Keep the fee recipient set to Smooth's address! It is extremely important that you keep the fee recipient of your validator set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) as long as it is subscribed to Smooth. If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from Smooth and will not be able to participate in it again.","s":"Step 1: Change your fee recipient to Smooth's address.","u":"/docs/smooth/subscribe-to-smooth/automatic","h":"#step-1-change-your-fee-recipient-to-smooths-address","p":137},{"i":142,"t":"Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear. Once the validator proposes a block, it will appear as subscribed. We recommend you familiarize yourself with this website! It is the place where you will manage your validators going forward.","s":"Step 2: Check your subscription status!","u":"/docs/smooth/subscribe-to-smooth/automatic","h":"#step-2-check-your-subscription-status","p":137},{"i":144,"t":"Hello! In this section you will find all the information on how to subscribe your Validators to Smooth. Even though the process is simple, it is important to follow the steps carefully. Before subscribing to Smooth! Only validators with ETH1 withdrawal addresses can be subscribed to Smooth. If you have a validator with a BLS withdrawal address, please update it to an ETH1 withdrawal address before subscribing to Smooth. Ensure that you have control over the ETH1 withdrawal address of the validators you plan to subscribe to Smooth. This address is the one you will need to use when logging into Smooth's website and manage your validators going forward. Only the withdrawal address has the capability to claim rewards generated by your validators from Smooth. You have two options to subscribe to Smooth: Automatic subscription: The simplest way to subscribe, change the fee recipient of your validators to Smooth's address and subscribe automatically when proposing your next block! Manual subscription: Change the fee recipient of your validators to Smooth's address and use the Smooth's website to subscribe right now, without waiting for your validators to propose a block. Start earning rewards right away!","s":"Subscribing to Smooth","u":"/docs/smooth/subscribe-to-smooth/overview","h":"","p":143},{"i":146,"t":"Would you rather not wait until your next proposed block to subscribe and begin earning rewards? You can take a proactive step and opt for manual subscription right away. During this process, you'll change your validator's fee recipient to Smooth's address, just like in the automatic subscription. However, instead of waiting for your next proposed block, you'll immediately start accumulating rewards from Smooth. The manual subscription is done through Smooth's website.","s":"Manual Subscription","u":"/docs/smooth/subscribe-to-smooth/manual","h":"","p":145},{"i":148,"t":"Change the fee recipient of your validator to Smooth's address, just as if you were subscribing automatically. In Dappnode, this process is as simple as changing the fee recipient in your staking brain. This step is extremely important. Make sure you're changing the fee recipient of the validators you are going to manually subscribe and that the fee recipient is correctly set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35). If a subscribed validator proposes a block with an incorrect fee recipient, it will be banned from Smooth and will not be able to participate in it again. Keep the fee recipient set to Smooth's address! It is crucial that you keep the fee recipient of your validator set to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) as long as it is subscribed to Smooth. If, at any point, you change the fee recipient of your validator and propose a block without unsubscribing first, you will be banned from Smooth and will not be able to participate in it again.","s":"Step 1: Change your fee recipient to Smooth's address.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-1-change-your-fee-recipient-to-smooths-address","p":145},{"i":150,"t":"Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear.","s":"Step 2: Log in to Smooth's website.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-2-log-in-to-smooths-website","p":145},{"i":152,"t":"Select the validator you want to subscribe to Smooth by clicking on the \"Subscribe\" button. When clicking on the \"Subscribe\" button, Smooth will check if your validator is registered to any MEV relay. If it is, it will also check if the fee recipient of your validator is set to Smooth's address in each relay. Four different dialogs can appear, depending on the state of your validator and the MEV relays it is registered to. Scenario 1: Validator is not registered to any MEV relay.​ When doing a manual subscription, it is obligatory to be registered in at least one MEV relay. In Dappnode, registering and using a relay is as simple as selecting the desired relay in the \"MEV Boost\" Card at the Stakers UI. Once you have selected at least one relay, you can go back to the Smooth website and click on the \"Subscribe\" button again. Scenario 2: Validator registered to MEV relays but without Smooth's address as fee recipient in any relay.​ Please make sure that you have correctly done the first step of this guide! This dialog means that not a single relay has reflected your fee recipient change to Smooth's address. If running a dappnode, make sure your MEV boost package is running! info It can take up to a few minutes for relays to reflect your fee recipient change. If you have already changed your fee recipient but this alert still appears, please check the \"Troubleshooting\" section down below for more information. Scenario 3: Validator does not have the Smooth's address as fee recipient in some relays.​ If this dialog appears, it means that your validator's fee recipient is set to Smooth in some relays while also being set to an incorrect address in others. This situation likely arises because your validator was registered in a relay it no longer uses, and the fee recipient in that specific relay wasn't updated accordingly. info Relays that you no longer use won't reflect the fee recipient changes you did for each validator in your staking brain. If you have already changed your fee recipient but the warning still appears, please check the \"Troubleshooting\" section down below for more information. Scenario 4: Validator is registered to at least one MEV relay and has the correct fee recipient set.​ This is the dialog you want to see! If you see this dialog, it means that your validator is registered to at least one MEV relay, and that the fee recipient of your validator is set to Smooth's address in all relays it has been registered to. In other words, this means that your validator is ready to subscribe to Smooth!","s":"Step 3: Select your validator.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-3-select-your-validator","p":145},{"i":154,"t":"This step is just a confirmation of the relays your validator has the correct fee recipient set in. Click on \"Next\" to continue the subscription process, we're almost there!","s":"Step 4: Confirm Relays check.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-4-confirm-relays-check","p":145},{"i":156,"t":"This is the last step! Here, you will make the deposit to subscribe your validator to Smooth. The deposit is a one-time upfront payment that will be returned to you as Claimable rewards when proposing your first block to Smooth. The deposit is 0.01 ETH, and it is used to prevent spam and malicious validators from subscribing to Smooth. Once the deposit transaction is processed by the chain, your validator will be subscribed to Smooth and you will start receiving rewards from other members of the pool! caution Since the Oracle operates with only finalized data, it will take up to 35 minutes to process your subscription. Your \"My Validator\" table will be updated instantly, but it may take a while to see how \"Total Subscribers\" counter increases. To know more, visit the Deep Dive into Smooth section.","s":"Step 5: Make the deposit and subscribe!","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#step-5-make-the-deposit-and-subscribe","p":145},{"i":158,"t":"I have changed my fee recipient but the \"Fee recipient warning\" warning still appears! If you have changed your fee recipient to Smooth's address (0xAdFb8D27671F14f297eE94135e266aAFf8752e35) but this warning still appears, it could be because of two reasons: The relays you are registered to are not reflecting the change in the fee recipient yet. It can take up to a few minutes for the relays to reflect your fee recipient update. This is something that is out of Smooth's control. We recommend you to wait a few minutes and try again. The fee recipient is only updated in your current active relays. This means that if you used to be registered to a relay, but you are not using it anymore, the fee recipient of your validator will not be updated in that relay. This is something expected and that it wont affect your validator's subscription to Smooth. If you want to update the fee recipient in the relays you are no longer registered to, you can quickly register and unregister again to the outdated relays to force an update the fee recipient there. To clarify: As long as the fee recipient of your validator is set to Smooth's address in your staking brain, you can continue the subscription process normally.","s":"Troubleshooting.","u":"/docs/smooth/subscribe-to-smooth/manual","h":"#troubleshooting","p":145},{"i":160,"t":"Unsubscribing from Smooth is as simple as subscribing to it. You can unsubscribe from Smooth at any time, it is done through Smooth's website and it only takes one simple transaction. caution When unsubscribing a validator from Smooth, you will lose all pending rewards attached to it. We recommend unsubscribing just after successfully proposing a block, so lost pending rewards are minimized.","s":"Unsubscribing from Smooth.","u":"/docs/smooth/unsubscribe-from-smooth","h":"","p":159},{"i":162,"t":"Go to Smooth's website and log in with your wallet. A list of all the validators with the same withdrawal address as your logged in wallet will appear.","s":"Step 1: Log in to Smooth's website.","u":"/docs/smooth/unsubscribe-from-smooth","h":"#step-1-log-in-to-smooths-website","p":159},{"i":164,"t":"Once logged in, click on the \"Unsubscribe\" button of the validator you want to unsubscribe from Smooth.","s":"Step 2: Click on the \"Unsubscribe\" button of the validator you want to unsubscribe.","u":"/docs/smooth/unsubscribe-from-smooth","h":"#step-2-click-on-the-unsubscribe-button-of-the-validator-you-want-to-unsubscribe","p":159},{"i":166,"t":"Once clicking on the \"Unsubscribe\" button, a dialog will appear warning you that you are about to unsubscribe from Smooth, and that it is recommended to do it when pending rewards are low. Click on \"Claim my rewards\" to continue and follow the dialog instructions. If you have any claimable rewards, a transaction that claims them will be prepared. If no claimable rewards are available, you will jump directly into the unsubscribe transaction. Once the subscription transaction is processed by the chain, your validator will have been unsubscribed sucessfully from Smooth. You can check it by reloading your validator's table. caution After unsubscribing, we recommend to change your validator's fee recipient back to another address as soon as possible, in order to avoid automatically subscribing to Smooth again.","s":"Step 3: Follow the dialog instructions.","u":"/docs/smooth/unsubscribe-from-smooth","h":"#step-3-follow-the-dialog-instructions","p":159},{"i":168,"t":"The local proxy method provides a way to access your Dappnode from within the same local network without any previous configuration required. However, it's essential to understand that due to certain network incompatibilities, this method might not work for all users.","s":"Local Proxy Access to Dappnode","u":"/docs/user/access-your-dappnode/local","h":"","p":167},{"i":170,"t":"🛠 Setup & Recovery: If you're setting up your VPN or recovering from access issues, the local proxy can be really useful. 📡 Same Network: It's crucial to be on the same local network as your Dappnode. ⚠️ Network Limitations: Local proxy access might not always be available due to specific network configurations or restrictions.","s":"When to Use Local Proxy","u":"/docs/user/access-your-dappnode/local","h":"#when-to-use-local-proxy","p":167},{"i":172,"t":"📱 On a device of your choice that's connected to the same network as your Dappnode, open a web browser. 🌐 Type in http://dappnode.local in the address bar. 🛡 If prompted, use your Dappnode credentials to log in or register as a new user if you haven't already. caution If http://dappnode.local doesn't work, there might be network-specific restrictions or configurations preventing access. In such cases, consider other access methods or reach out for support.","s":"Accessing Dappnode via Local Proxy","u":"/docs/user/access-your-dappnode/local","h":"#accessing-dappnode-via-local-proxy","p":167},{"i":174,"t":"⚠️ Access Limitations: When using the local network proxy, you're limited to the Dappnode Admin UI dashboard at dappnode.local and cannot access other features like blockchain clients (Ethereum, Gnosis Chain, etc.). For full feature access, you'd need to configure and use either a VPN or the included Wi-Fi hotspot. Turning Local Proxy Off: If you primarily use VPN features or the included Wi-Fi hotspot and find no use for local network access, you can disable it. Disabling can also be a security measure if you don't want all devices on your network to have access to this UI, even though it's protected by a password. To toggle local network access, navigate to the Wi-Fi sidebar menu on your Dappnode: 🔍 Navigate to the Local Network menu on your Dappnode. 🔧 Toggle the \"Local Network Proxy\" switch.","s":"Limitations & Settings","u":"/docs/user/access-your-dappnode/local","h":"#limitations--settings","p":167},{"i":176,"t":"Dappnode is made to work on a dedicated computer, and its main control panel, the Dappmanager, is accessed from another device via my.dappnode , as it is meant to be installed over an operating system that does not include a graphical interface. Here are four ways you can connect to your Dappnode: 📡 Wifi: A user-friendly way, especially for those with Dappnode pre-installed on their machines. 🔐 VPN: Using either Wireguard or OpenVPN, this method is both secure and versatile. You can connect from inside or outside your local network, but if you're connecting from outside, you might need to adjust some settings. 🔗 Local Proxy (Recovery): This is a backup connection method. It allows you to connect to Dappmanager when you're on the same local network. It's mainly for recovery purposes because of its limitations. 💻 Terminal (Advanced, Recovery): This is for those who know their way around computer commands. It provides complete control but might be complex for some users. info 💡 To ensure you can always access your Dappnode, it's a smart idea to set up and know more than one connection method. In the coming sections, we'll guide you through setting up each of these connection ways.","s":"🌐 Access your Dappnode","u":"/docs/user/access-your-dappnode/overview","h":"","p":175},{"i":178,"t":"Accessing the terminal of your Dappnode, often referred to as the command-line interface (CLI), provides deep control and management capabilities. However, this method is considered advanced and requires familiarity with command line interactions. Incorrect or misguided commands can lead to unintended changes or potential system damage. caution Proceed with caution when using terminal access. Always understand the implications of commands and configurations before executing them.","s":"Terminal Access to Dappnode","u":"/docs/user/access-your-dappnode/terminal","h":"","p":177},{"i":180,"t":"SSH (Secure Shell) allows secure remote access to systems. Ensure your device is connected to the same network as the Dappnode. Open a terminal or command prompt on your device. Type: ssh dappnode@ Replace with your Dappnode's actual IP address. When prompted, use the following credentials: Username: dappnode Password: dappnode.s0 note During the onboarding process in Dappmanager, you are prompted to change the default host password for the \"dappnode\" user. If you have completed this step, the default password dappnode.s0 might no longer work. Always use the password you set during onboarding.","s":"SSH Access","u":"/docs/user/access-your-dappnode/terminal","h":"#ssh-access","p":177},{"i":182,"t":"For accessing Dappnode from outside your local network: Configure port forwarding on your router. Direct external SSH requests (typically port 22) to your Dappnode's internal IP address. For added security, use a strong password or implement SSH keys. To SSH, use: ssh dappnode@ caution Exposing SSH to the internet can be risky. Ensure you adopt robust security practices and are aware of potential vulnerabilities.","s":"External SSH Access","u":"/docs/user/access-your-dappnode/terminal","h":"#external-ssh-access","p":177},{"i":184,"t":"Directly interface with Dappnode using a monitor and keyboard: Connect a monitor via the HDMI/VGA port. Plug in a USB keyboard. Power on or restart the Dappnode machine. When prompted, enter the password: dappnode.s0 (or the one you've set if changed during onboarding).","s":"Physical Terminal Access","u":"/docs/user/access-your-dappnode/terminal","h":"#physical-terminal-access","p":177},{"i":186,"t":"OpenVPN is a widely-accepted VPN protocol known for its reliability and high-security standards. Here's how you can set it up with Dappnode.","s":"OpenVPN Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"","p":185},{"i":189,"t":"There are two primary methods to obtain your VPN credentials, based on your access level to the Dappmanager: Option 1: Via Dappmanager UI​ If you have access to the Dappmanager: Navigate to VPN > OpenVPN. If you don't see any device added to the list: Provide a name for your device. Click on 'Add New Device'. To retrieve the credentials: Click on the 'Get Link' button. Copy the URL displayed. Separate Credentials for Each Device For the best experience and to enable simultaneous access, it's recommended to create a separate device entry in the Dappnode VPN list for each device you intend to use for accessing your Dappnode. While it's technically possible to use the same credentials on multiple devices, doing so can lead to connectivity issues when trying to access the Dappnode from multiple devices at the same time. By setting up distinct credentials for each device, you ensure a smooth, uninterrupted connection for all your devices. Option 2: Via Dappnode Terminal​ If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal: Access the Dappnode terminal, as explained here. Execute the command: dappnode_openvpn. A URL will be displayed on the terminal. Copy it.","s":"1. Get VPN Credentials URL","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#1-get-vpn-credentials-url","p":185},{"i":191,"t":"With the URL you obtained in the previous step, you'll now download the OpenVPN credentials: Open a web browser on any device. Paste the URL you copied into the address bar and navigate to it. You should be taken to a page where the OpenVPN credentials for your Dappnode can be downloaded. Click on the download button or link to download the .ovpn file, which contains your OpenVPN configuration and credentials. caution Ensure that you store credentials securely. The .ovpn file provides direct access to your Dappnode, so treat it with the same caution you'd treat a password.","s":"2. Download OpenVPN Credentials","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#2-download-openvpn-credentials","p":185},{"i":193,"t":"Once you've obtained your OpenVPN credentials, the next step is to install an OpenVPN client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the OpenVPN website.","s":"3. OpenVPN Installation","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#3-openvpn-installation","p":185},{"i":195,"t":"Once you have installed the OpenVPN client on your device, follow the steps below based on your operating system to connect to Dappnode: Android Launch the OpenVPN for Android app. Tap on \"Import file\". Upload the .ovpn file you downloaded earlier. Click on \"Connect\". Allow the app to create a VPN connection. iPhone/iPad Go to the URL you obtained in the previous step. Download the .ovpn file. Click on \"Open in OpenVPN\". Click on \"Add\". Click on \"Connect\" Allow the app to create a VPN connection. macOS Launch Tunnelblick app for macOS. Click on \"VPN Details\" in the top bar menu. Drag and drop the .ovpn file you downloaded earlier in the left side bar. Click on Connect. Windows Launch the OpenVPN for Windows app. Click on \"Import file\". Upload the .ovpn file you downloaded earlier. Allow the app to create a VPN connection. Recent Ubuntu Open Settings>Network. Click on the \"+\" button to add a new VPN connection. Select \"Import from file\". Upload the .ovpn file you downloaded earlier. Click on \"Add\". Toggle the switch button to connect. Other Linux Open the terminal. Navigate to the directory where you have stored your .ovpn file. Execute the command: sudo openvpn Dappnode_VPN.ovpn. Testing Your Connection Once connected, you can directly type http://my.dappnode in your browser to access the Dappmanager.","s":"4. Connecting to Dappnode via OpenVPN","u":"/docs/user/access-your-dappnode/vpn/openvpn","h":"#4-connecting-to-dappnode-via-openvpn","p":185},{"i":197,"t":"Virtual Private Network (VPN) is a robust method for accessing your Dappnode. It ensures a secure and encrypted connection between your device and the Dappnode, allowing you to manage your Dappnode from virtually anywhere. Depending on your needs and preferences, Dappnode offers support for two primary VPN technologies: WireGuard and OpenVPN. note It is not possible to use both Dappnode WiFi hotspot and VPN at the same time. If you want to use VPN, you'll need to disconnect your device from the WiFi hotspot.","s":"VPN Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/overview","h":"","p":196},{"i":200,"t":"WireGuard is a newer, streamlined VPN protocol known for its simplicity, speed, and security. It requires less configuration and is considered more efficient in terms of CPU usage. Learn more","s":"WireGuard (Recommended)","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#wireguard-recommended","p":196},{"i":202,"t":"OpenVPN is a well-established VPN protocol praised for its security and reliability. It's more versatile and can bypass most network restrictions and firewalls. Learn more","s":"OpenVPN","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#openvpn","p":196},{"i":204,"t":"Local Access: Connecting to your Dappnode when you're on the same local network. Generally, this means that your Dappnode machine and the device you're using to access it are connected to the same router. Remote Access: Connecting to your Dappnode from a different network or location. This is one of the major advantages of using a VPN. info VPN provides a balance of security, versatility, and remote access capability. You can choose the VPN technology that best suits your needs and preferences, both fufill the requirements of most users.","s":"Local vs. Remote Access","u":"/docs/user/access-your-dappnode/vpn/overview","h":"#local-vs-remote-access","p":196},{"i":206,"t":"The Dappnode Package manifest defines all the necessary information for a Dappnode to understand this package: IPFS of BZZ hashes to download its docker image Docker related data to configure and run its container Metadata to control how the package is shown in the admin UI.","s":"Dappnode Package (DNP) manifest","u":"/docs/dev/references/manifest","h":"","p":205},{"i":208,"t":"{ \"name\": \"ipfs.dnp.dappnode.eth\", \"version\": \"0.2.0\", \"upstreamVersion\": \"2.6.0-beta\", \"shortDescription\": \"Distributed file system for storing and accessing data.\", \"description\": \"Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you’re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API.\", \"type\": \"service\", \"chain\": \"ethereum\", \"mainService\": \"webserver\", \"dockerTimeout\": \"5min\", \"dependencies\": { \"bitcoin.dnp.dappnode.eth\": \"^0.1.2\", \"swarm.dnp.dappnode.eth\": \"latest\" }, \"requirements\": { \"minimumDappnodeVersion\": \"0.2.0\" }, \"globalEnvs\": { \"all\": \"true\" }, \"architectures\": [\"linux/amd64\", \"linux/arm64\"], \"backup\": [ { \"name\": \"keystore\", \"path\": \"/root/.raiden/secret/keystore\", \"service\": \"validator\" } ], \"changelog\": \"Brief summary of the most relevant changes that the user must known before installing\", \"warnings\": { \"onInstall\": \"You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly.\", \"onUpdate\": \"Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site.\", \"onReset\": \"You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds.\", \"onRemove\": \"You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds.\" }, \"updateAlerts\": [ { \"from\": \"0.1.x\", \"to\": \"0.1.x\", \"message\": \"Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io\" } ], \"disclaimer\": { \"message\": \"This software is experimental, presented “as is” and inherently carries risks.\" }, \"style\": { \"featuredBackground\": \"linear-gradient(to right, #323131, #395353)\", \"featuredColor\": \"white\", \"featuredAvatarFilter\": \"invert(1)\" }, \"exposable\": [ { \"name\": \"Geth JSON RPC\", \"description\": \"JSON RPC endpoint for Geth mainnet\", \"serviceName\": \"beacon_chain\", \"port\": 80 } ], \"author\": \"Dappnode Association (https://github.com/dappnode)\", \"contributors\": [ \"Michael First (https://github.com/developerHanlder)\", \"Michael Second (https://github.com/developerHanlder)\" ], \"categories\": [\"Developer tools\", \"Blockchain\"], \"keywords\": [\"DappnodeCore\"], \"links\": { \"homepage\": \"https://github.com/dappnode/DNP_IPFS#readme\", \"ui\": \"http://ipfs.dappnode:5001/webui\", \"api\": \"http://ipfs.dappnode:5001/api/v0\", \"gateway\": \"http://ipfs.dappnode:8080/ipfs\" }, \"repository\": { \"type\": \"git\", \"url\": \"https://github.com/dappnode/DNP_IPFS.git\", \"directory\": \"packages/react-dom\" }, \"bugs\": { \"url\": \"https://github.com/dappnode/DNP_IPFS/issues\" }, \"license\": \"GPL-3.0\" }","s":"Example","u":"/docs/dev/references/manifest","h":"#example","p":205},{"i":210,"t":"Property Type Required name string Required version string Required upstreamVersion string Optional shortDescription string Optional description string Required type enum Required chain enum Optional mainService string Optional dockerTimeout string Optional dependencies object Optional requirements object Optional globalEnvs object Optional architectures enum[] Optional backup object[] Optional changelog string Optional warnings object Optional updateAlerts object[] Optional disclaimer object Optional style object Optional exposable object[] Optional author string Optional contributors string[] Optional categories enum[] Optional keywords string[] Optional links object Optional repository object Optional bugs object Optional license string Required","s":"Properties reference","u":"/docs/dev/references/manifest","h":"#properties-reference","p":205},{"i":212,"t":"Dappnode Package ENS name. is required type: string Example: \"ipfs.dnp.dappnode.eth\"","s":"name","u":"/docs/dev/references/manifest","h":"#name","p":205},{"i":214,"t":"Dappnode Package semantic version (semver). is required type: string All instances must conform to this regular expression ^((([0-9]+).([0-9]+).([0-9]+)))$ test example: 0.2.0 Example: \"0.2.0\"","s":"version","u":"/docs/dev/references/manifest","h":"#version","p":205},{"i":216,"t":"For Dappnode Packages that only wrap existing software (i.e. Bitcoin node, Ethereum node), the underlying software version can be specified here. It will be shown in the admin UI alongside the field version. is optional type: string Examples: \"2.6.0-beta\" \"any-text\"","s":"upstreamVersion","u":"/docs/dev/references/manifest","h":"#upstreamversion","p":205},{"i":218,"t":"Short Dappnode Package description, 6-8 words sentence briefly describing the purpose of this Dappnode Package. The purpose is to quickly grab users' attention and clearly define its purpose. Markdown is discouraged as it will NOT be rendered on the Dappnode Package store view. is optional type: string Example: \"Distributed file system for storing and accessing data.\"","s":"shortDescription","u":"/docs/dev/references/manifest","h":"#shortdescription","p":205},{"i":220,"t":"Dappnode Package description. Markdown and links are allowed and ecouraged to give users the option to read more information about this Dappnode Package. is required type: string Example: \"Welcome! IPFS is a distributed system for storing and accessing files, websites, applications, and data. If you’re new to IPFS, check our [introductory page](https://ipfs.io/#why) for an easy overview. \\n\\nWith this node you can upload and download files from IPFS using it own fancy web console at [http://ipfs.dappnode:5001/webui](http://ipfs.dappnode:5001/webui). Other Dappnode Packages and external applications can use its API at the endpoint `http://ipfs.dappnode:5001/api`. Go to the [IPFS HTTP API full reference](https://docs.ipfs.io/reference/api/http/) to check all the features of the API.\"","s":"description","u":"/docs/dev/references/manifest","h":"#description","p":205},{"i":222,"t":"Type of this Dappnode Package. It is used to trigger some special features such as core functionality. is required default: \"service\" type: string The value of this property must be equal to one of the known values below. Value Description service Can have ENVs a depend on library Dappnode Packages library Should not have ENVs and cannot depend on service Dappnode Packages dncore Dappnode Packages that are part of the Dappnode core and have special permissions Examples: \"service\" \"dncore\"","s":"type","u":"/docs/dev/references/manifest","h":"#type","p":205},{"i":224,"t":"Indicate that this Dappnode Package is a blockchain node so the admin UI shows its syncing status is optional type: string The value of this property must be equal to one of the known values below. Value Description ethereum Must have an Ethereum JSON RPC exposed internally at port 8545 bitcoin Must have a standard Bitcoin JSON API exposed at the default port (8332). Uses the NPM package bitcoin-core monero Must have a Monero API exposed internally at port 18081. Uses the NPM package monero-rpc Examples: \"ethereum\" \"bitcoin\" \"monero\"","s":"chain","u":"/docs/dev/references/manifest","h":"#chain","p":205},{"i":226,"t":"For multi-service packages, indicate which service is the main one. The root ENS domain of this package will be mapped to this service IP. is optional type: string Examples: \"webserver\" \"backend\" \"service1\"","s":"mainService","u":"/docs/dev/references/manifest","h":"#mainservice","p":205},{"i":228,"t":"Modify the default Docker timeout of 10 seconds. It affects package updates, removals, container restarts, start and stop, updating config environments and port mappings. You can either pass a numerical value in seconds or a string representation parsed with timestring. Available from DAPPMANAGER v0.2.36 is optional type: string Examples: \"5min\" \"60\"","s":"dockerTimeout","u":"/docs/dev/references/manifest","h":"#dockertimeout","p":205},{"i":230,"t":"Dappnode Package dependencies. Must be an object where the keys are the Dappnode Package's ENS. The values must be a semantic range, i.e. '0.2.0', '^0.2.1', '*', 'latest', '/ipfs/QmWwMb3XhuCH6JnCF6m6EQzA4mW9pHHtg7rqAfhDr2ofi8'. is optional type: object with the following properties: Property Type Required Examples: { \"bitcoin.dnp.dappnode.eth\": \"^0.1.2\", \"swarm.dnp.dappnode.eth\": \"latest\" } { \"only-for-dev-1.dappnode.eth\": \"/ipfs/QmYjtig7VJQ6XsnUjqqJvj7QaMcCAwtrgNdahSiFofrE7o\", \"only-for-dev-2.dappnode.eth\": \"/ipfs/zdj7WWeQ43G6JJvLWQWZpyHuAMq6uYWRjkBXFad11vE2LHhQ7\" }","s":"dependencies","u":"/docs/dev/references/manifest","h":"#dependencies","p":205},{"i":232,"t":"Specify requirements to be met before allowing users to install this Dappnode Package. is optional type: object with the following properties: Property Type Required minimumDappnodeVersion string Optional minimumDappnodeVersion​ Minimum Dappnode version that includes all the features necessary to run this Dappnode Package. is optional type: string All instances must conform to this regular expression ^((([0-9]+).([0-9]+).([0-9]+)))$ test example: 0.2.0 Example: \"0.2.0\"","s":"requirements","u":"/docs/dev/references/manifest","h":"#requirements","p":205},{"i":234,"t":"Request the DAPPMANAGER to inject global ENVs to this package's containers is optional type: object with the following properties: Property Type Required all boolean Optional all​ Request the DAPPMANAGER to inject all available global ENVs is optional type: boolean Example: \"true\"","s":"globalEnvs","u":"/docs/dev/references/manifest","h":"#globalenvs","p":205},{"i":236,"t":"Build and distribute this package in multiple architectures using Docker's buildx plugin is optional type: Array type: enum[] All items must be of the type: string The value of this property must be equal to one of the known values below. Value Description linux/amd64 Default architecture, x86-64 linux/arm64 ARM architecture Example: [\"linux/amd64\", \"linux/arm64\"]","s":"architectures","u":"/docs/dev/references/manifest","h":"#architectures","p":205},{"i":238,"t":"Allows users to download and restore a backup of key files of this package. If this property is non-empty array, a new view will be available in the admin UI for this Dappnode Package. The files or directories specified in the array will be bundled in a tarball. As long as the name properties stay the same, their associated paths can change in future versions. Then, when restoring an old backup, the new paths will be associated to files stored under the same name keys. Note: it is recommended to only backup lightweight files such as configs, keys or passwords. is optional type: Array type: object[] All items must be of the type: object with the following properties: Property Type Required name string Required path string Required service string Optional name​ A key identifier of this file or directory. Its purpose is to allow the path to change in the future. is required type: string minimum length: 1 characters Examples: \"keystore\" \"config\" \"keys\" path​ Path to the file or directory to backup. It MUST be an absolute path (do not use the ~ character) for the backup tool to work correctly. is required type: string minimum length: 1 characters Examples: \"/root/.raiden/secret/keystore\" \"/usr/src/app/config.json\" service​ Service to which the path belongs to. Must be equal to the name used in the docker-compose services object is optional type: string minimum length: 1 characters Examples: \"validator\" \"service1\"","s":"backup","u":"/docs/dev/references/manifest","h":"#backup","p":205},{"i":240,"t":"Description of relevant changes of this specific version. Supports markdown and links. is optional type: string Example: \"Brief summary of the most relevant changes that the user must known before installing\"","s":"changelog","u":"/docs/dev/references/manifest","h":"#changelog","p":205},{"i":242,"t":"Very relevant information that MUST be shown to the user BEFORE executing a specific action in the Dappnode Package's lifecycle. is optional type: object with the following properties: Property Type Required onInstall string Optional onUpdate string Optional onReset string Optional onRemove string Optional onInstall​ Will be shown before installing the Dappnode Package. is optional type: string Example: \"You must set the PASSWORD ENV before installing the Dappnode Package in order for the setup to work correctly.\" onUpdate​ Will be shown before updating the Dappnode Package, not in the first installation. is optional type: string Example: \"Your VPN connection will be lost when the VPN finalizes updating. Leave 1-2 minutes after executing the update and then reconnect and refresh this site.\" onReset​ Will be shown before resetting the Dappnode Package. is optional type: string Example: \"You MUST properly close your open channels before resetting this Dappnode Package or you may lose your funds.\" onRemove​ Will be shown before removing the Dappnode Package. is optional type: string Example: \"You MUST properly close your open channels before removing this Dappnode Package or you may lose your funds.\"","s":"warnings","u":"/docs/dev/references/manifest","h":"#warnings","p":205},{"i":244,"t":"Alerts targeted to a specific update jump. is optional type: Array type: object[] All items must be of the type: object with the following properties: Property Type Required Default from string Required to string Optional \"*\" message string Required from​ Semver range, show this message when a user updates this Dappnode Package FROM a version that satisfies this range. is required type: string minimum length: 1 characters Examples: \"0.1.x\" \"^0.2.0\" to​ Semver range, show this message when a user updates this Dappnode Package TO a version that satisfies this range. is optional default: \"*\" type: string minimum length: 1 characters Examples: \"0.1.x\" \"^0.2.0\" \"*\" message​ Alert message to be shown when from and to ranges are satisfied. is required type: string minimum length: 1 characters Example: \"Major update to OpenVPN: This update breaks compatibility with the last VPN version. Please read the migration guide: https://migration020.dappnode.io\" Specific update jump alert.","s":"updateAlerts","u":"/docs/dev/references/manifest","h":"#updatealerts","p":205},{"i":246,"t":"Disclaimer to be shown to the user on install, and will require the user to approve it. is optional type: object with the following properties: Property Type Required message string Required message​ The message shown in the pop-up. Markdown and links are allowed. is required type: string Example: \"This software is experimental, presented “as is” and inherently carries risks.\"","s":"disclaimer","u":"/docs/dev/references/manifest","h":"#disclaimer","p":205},{"i":248,"t":"Graphic information to control the appearance of Dappnode Package related items in the admin UI. is optional type: object with the following properties: Property Type Required featuredBackground string Optional featuredColor string Optional featuredAvatarFilter string Optional featuredBackground​ CSS background property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the Mozilla CSS background reference for valid values. is optional type: string Examples: \"linear-gradient(to right, #323131, #395353)\" \"black\" featuredColor​ CSS color property to be applied to the Dappnode Package card in the Dappnode Package store if featured. Go to the Mozilla CSS color reference for valid values. is optional type: string Examples: \"white\" \"#fff\" featuredAvatarFilter​ CSS filter property to be applied to component (avatar) of the Dappnode Package card in the Dappnode Package store if featured. Go to the Mozilla CSS filter reference for valid values. is optional type: string Examples: \"invert(1)\" \"grayscale(80%);\"","s":"style","u":"/docs/dev/references/manifest","h":"#style","p":205},{"i":250,"t":"Exposable services safe to be in the public internet is optional type: Array type: object[] All items must be of the type: object with the following properties: Property Type Required name string Required description string Optional serviceName string Optional port number Required fromSubdomain string Optional name​ Short human readable name of this exposable service is required type: string minimum length: 1 characters Example: \"Geth JSON RPC\" description​ Description of this exposable service is optional type: string Example: \"JSON RPC endpoint for Geth mainnet\" serviceName​ Docker compose service this exposable service belongs to. Defaults to the first service. is optional type: string minimum length: 1 characters Example: \"beacon_chain\" port​ Port this exposable service listens to is required type: number Examples: 80 5001 8545 Single exposable service item","s":"exposable","u":"/docs/dev/references/manifest","h":"#exposable","p":205},{"i":252,"t":"Main author of this Dappnode Package. Must follow the structure ${name} <${email}> (${githubUserLink}). is optional type: string minimum length: 1 characters Example: \"Dappnode Association (https://github.com/dappnode)\"","s":"author","u":"/docs/dev/references/manifest","h":"#author","p":205},{"i":254,"t":"Contributing authors of this Dappnode Package. is optional type: Array type: string[] All items must be of the type: string minimum length: 1 characters Contributor author. Must follow the structure ${name} <${email}> (${githubUserLink}). Example: [ \"Michael First (https://github.com/developerHanlder)\", \"Michael Second (https://github.com/developerHanlder)\" ]","s":"contributors","u":"/docs/dev/references/manifest","h":"#contributors","p":205},{"i":256,"t":"Categories to organize and group Dappnode Packages in the Dappnode Package store. Only one or two categories maximum should be specified per package. If you feel that any of the current categories represent the nature of your package, please open an issue requesting a new category https://github.com/dappnode/dnp-manifest/issues/new is optional type: Array type: enum[] All items must be of the type: string The value of this property must be equal to one of the known values below. Value Description Blockchain Blockchain nodes, i.e. Bitcoin, Monero Communications Decentralized networking or chat solutions, i.e. Swarm Developer tools Packages that their main purpose is to aid in developing, i.e. testnets ETH2.0 Packages to participate or use the Eth2.0 network Economic incentive Packages that offer an economic incentive or reward to the admin that runs it, i.e. Lightning Network Monitoring Packages that track metrics Payment channels Packages whose main purpose is to manage or control payment channels, i.e. Raiden Storage Decentralized storage solutions, i.e. Swarm Example: [\"Developer tools\", \"Blockchain\"]","s":"categories","u":"/docs/dev/references/manifest","h":"#categories","p":205},{"i":258,"t":"Keywords, relevant and descriptive of this Dappnode Package. They will be shown in the admin UI Dappnode Package store. is optional type: Array type: string[] All items must be of the type: string minimum length: 1 characters Single keyword.","s":"keywords","u":"/docs/dev/references/manifest","h":"#keywords","p":205},{"i":260,"t":"Various links (URLs) useful for the user of this package. All links will be shown in the dedicated view of this package in the admin UI. The predefined links properties below will be shown with concept related icons. Other links will be shown as well but with their plain name instead of an icon. is optional type: object with the following properties: Property Type Required homepage string Optional ui string Optional api string Optional gateway string Optional homepage​ Url to an informative homepage for this Dappnode Package. Should be a README or landing website. is optional type: string Example: \"https://github.com/dappnode/DNP_IPFS#readme\" ui​ Url to this DNP's Dappnode local UI. is optional type: string Example: \"http://ipfs.dappnode:5001/webui\" api​ Url to this DNP's Dappnode local HTTP API endpoint. is optional type: string Example: \"http://ipfs.dappnode:5001/api/v0\" gateway​ Url to this DNP's Dappnode local gateway. is optional type: string Example: \"http://ipfs.dappnode:8080/ipfs\"","s":"links","u":"/docs/dev/references/manifest","h":"#links","p":205},{"i":262,"t":"Dappnode Package's repository. Must be a publicly available url that can be handed directly to a VCS program. is optional type: object with the following properties: Property Type Required type string Required url string Required directory string Optional type​ is required type: string minimum length: 1 characters Example: \"git\" url​ is required type: string minimum length: 1 characters Example: \"https://github.com/dappnode/DNP_IPFS.git\" directory​ is optional type: string Example: \"packages/react-dom\"","s":"repository","u":"/docs/dev/references/manifest","h":"#repository","p":205},{"i":264,"t":"Url to your project’s issue tracker. is optional type: object with the following properties: Property Type Required url string Required url​ is required type: string Example: \"https://github.com/dappnode/DNP_IPFS/issues\"","s":"bugs","u":"/docs/dev/references/manifest","h":"#bugs","p":205},{"i":266,"t":"Dappnode Package's License. is required type: string minimum length: 1 characters Example: \"GPL-3.0\"","s":"license","u":"/docs/dev/references/manifest","h":"#license","p":205},{"i":268,"t":"WireGuard is a modern, high-performance VPN protocol that offers a simple and streamlined approach for securely accessing your Dappnode. This guide will walk you through setting up WireGuard with your Dappnode. You will need: Your dappnode A Wireguard client installed on your usual device (laptop, mobile, etc.)","s":"WireGuard Access to Dappnode","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"","p":267},{"i":271,"t":"There are two primary methods to obtain your VPN credentials: Option 1: Via Dappmanager UI​ If you have access to the Dappmanager: Navigate to VPN > WireGuard. If you don't see any device added to the list: Provide a name for your device. Click on 'Add New Device'. To retrieve the credentials: Click on the 'Get link' button on the credentials column. You will be shown 3 different ways of retrieving the credentials: Download config: it will download a .txt file with the credentials in plaintext Copy config: it will copy the credentials in your clipboard so you can paste them in your wireguard client Show config QR code: it will generate a QR that you can scan with a wireguard mobile client to add the config directly Please, see step 3. Setting up Wireguard client to see how to use this config once you have a client in your device (desktop/laptop/phone) For Local Access Credentials: Click on 'Show Local Credentials'. Copy the local credentials displayed. Option 2: Via Dappnode Terminal​ If you can't access the Dappmanager, you'll need to get the credentials via the Dappnode terminal: Access the Dappnode terminal, as explained here. Execute the command: dappnode_wireguard. The credentials will be displayed directly on the terminal. Copy these credentials. For Local Access Credentials: Execute the command: dappnode_wireguard --local. Copy the local credentials displayed. Local Credentials Explained Local credentials allow you to establish a connection to your Dappnode when you are on the same local network. They are especially useful when remote credentials might not work due to certain network restrictions or configurations. While remote credentials enable access from outside your local network, local credentials ensure a reliable connection within your home or office network. It's recommended to use local credentials when you are in proximity to your Dappnode to guarantee a stable and swift connection. Always remember: Local credentials only work inside your own network. If you're trying to access your Dappnode from a different location or network, you'll need to use the remote credentials. tip Ensure you store these credentials securely. They provide direct access to your Dappnode. Treat them with the same level of caution as you would a password.","s":"1. Get VPN Credentials","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#1-get-vpn-credentials","p":267},{"i":273,"t":"After obtaining your VPN credentials, the next step is to install the WireGuard client. You can download the one that's compatible with the device you are going to use to connect to the Dappnode machine from the WireGuard website.","s":"2. Installing WireGuard Client","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#2-installing-wireguard-client","p":267},{"i":275,"t":"After installing the client: Launch the WireGuard application. Click on 'Add Tunnel' or 'Import Tunnel from File' based on your platform. Import the credentials you obtained in the earlier steps. Once imported, connect to your Dappnode by activating the tunnel. Connection Status You can verify your connection status within the WireGuard application. It will display if the tunnel is active, as well as data transfer rates.","s":"3. Setting Up WireGuard Client","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#3-setting-up-wireguard-client","p":267},{"i":277,"t":"Android Launch the OpenVPN for Android app. Tap on \"+\" icon. Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile. iPhone/iPad Launch the OpenVPN for Android app. Tap on \"Add a tunnel\". Select the option that fits you best to import the credentials: Scan QR code, Import file or Paste from clipboard to an empty profile. Linux Create a file for your credentials: sudo nano /etc/wireguard/wg0.conf Paste your credentials there and save the file (Ctrl+Shift+V, Ctrl+O, Ctrl+X). Activate the tunnel: sudo wg-quick up wg0 Tunnel Deactivation To deactivate the tunnel, execute the command: sudo wg-quick down wg0. macOS In the list of Applications, search for WireGuard and launch it. Click on \"Manage Tunnels\". Click on the \"+\" button. Select \"Add empty tunnel\". Paste the credentials you obtained earlier. Give a name to this profile and click on \"Save\". Click on \"Activate\" to connect to your Dappnode. Windows Launch the OpenVPN for Windows app. Click on \"Add Tunnel\". Paste the credentials you obtained earlier and save. Activate the tunnel. Testing Your Connection Once connected, you can directly type http://my.dappnode in your browser to access the Dappmanager.","s":"4. Connecting to Dappnode via WireGuard","u":"/docs/user/access-your-dappnode/vpn/wireguard","h":"#4-connecting-to-dappnode-via-wireguard","p":267},{"i":279,"t":"Dappnode Cloud is a service that allows users to deploy a Dappnode in a cloud provider so it can be tested without the need for physical hardware. We provide easy pre-configured instances for the main cloud providers (AWS for now, more to come later) to continue to make the deployment of web3 infrastructrure accessible and hassle-free for everyone. It consists of a Dappnode image deployed on a machine instance from a cloud provider, eliminating the need to invest in hardware in order to test Dappnode. tip This allows you to run your decentralized applications more efficiently and cost-effectively, as you can customize your hardware specifications to meet your needs.","s":"What is Dappnode Cloud?","u":"/docs/user/dappnode-cloud/overview","h":"","p":278},{"i":281,"t":"Dappnode Cloud offers numerous advantages over traditional hardware-based setups. By leveraging cloud infrastructure, you can bypass the complexities and limitations associated with physical hardware. Here are the key benefits that make Dappnode Cloud an attractive option:","s":"Why using Dappnode Cloud?","u":"/docs/user/dappnode-cloud/overview","h":"#why-using-dappnode-cloud","p":278},{"i":283,"t":"With Dappnode Cloud, there is no need to purchase an entire new machine every time you need a new Dappnode. This significantly reduces the initial cost barrier, allowing you to test Dappnode before you decide to install it in a physical machine or to quickly deploy a new Dappnode without having to purchase a new machine.","s":"No Initial Hardware Investment 💰","u":"/docs/user/dappnode-cloud/overview","h":"#no-initial-hardware-investment-","p":278},{"i":285,"t":"For short stints, Dappnode Cloud allows you to deploy and also to stop running your Dappnode as soon as you have performed the tasks you wanted to do, with no electronic waste or an unallocated physical machine on your side.","s":"Stop when you want 🧑‍🔧️","u":"/docs/user/dappnode-cloud/overview","h":"#stop-when-you-want-️","p":278},{"i":287,"t":"With Dappnode Cloud, you can easily scale your resources up or down based on your current needs. Whether you're experiencing a lack of storage or you need a few more nodes quickly, you can adjust your cloud resources accordingly without the constraints of physical hardware limitations.","s":"Scalability 📈","u":"/docs/user/dappnode-cloud/overview","h":"#scalability-","p":278},{"i":289,"t":"It is much better to run a physical Dappnode at your place for these 2 main reasons:","s":"Physical or Cloud?","u":"/docs/user/dappnode-cloud/overview","h":"#physical-or-cloud","p":278},{"i":291,"t":"A physical machine has a higher initial cost, but leverages your existing internet connection and consumes less energy than your fridge. This initial cost is pretty much the only cost you will have for the lifetime of the hardware you use. Cloud servers have monthly costs associated with it that never go away, resulting in higher cost in the long term. In summary, you will be better off with a physical machine if you plan to use your Dappnode for a long time, and better off with a Dappnode Cloud if you only want to use the instance for a short period of time.","s":"1. Economics 💲","u":"/docs/user/dappnode-cloud/overview","h":"#1-economics-","p":278},{"i":293,"t":"The networks you will run on your Dapppnode become more resilient to corporate capture, government interference and localized events the more decentralized their nodes are. By running a Node in the cloud it is very likely that there is already a node of that network in the same data center, therefore adding no extra value to the decentralization of the network. If instead you run the same node in a home setup from your home, you are adding a node that is much harder to censor, block, locate and subjugate than a node controlled by a big infrastructure corporation. Remember, \"The Cloud\" is just someone else's computer.","s":"2. Decentralization 🗽","u":"/docs/user/dappnode-cloud/overview","h":"#2-decentralization-","p":278},{"i":295,"t":"Dappnode Cloud offers versatile solutions for various users, providing the flexibility and reliability needed to meet your goals. Here are some of the primary use cases:","s":"Use cases","u":"/docs/user/dappnode-cloud/overview","h":"#use-cases","p":278},{"i":297,"t":"If obtaining hardware is not an option, Dappnode Cloud allows you to run a full node or even host your Ethereum or Gnosis validators without worrying about hardware requirements, internet connectivity, or power outages. This ensures continuous participation in the blockchain network with minimal hassle.","s":"Blockchain participation & Solo Staking ⛓️","u":"/docs/user/dappnode-cloud/overview","h":"#blockchain-participation--solo-staking-️","p":278},{"i":299,"t":"For those considering purchasing their own Dappnode but still uncertain, Dappnode Cloud provides an excellent opportunity to run a temporary Dappnode. This allows you to demo the system without facing the initial cost barrier, helping you make an informed decision.","s":"Testing 🧪","u":"/docs/user/dappnode-cloud/overview","h":"#testing-","p":278},{"i":301,"t":"Dappnode Cloud is an excellent choice for developers who need a reliable and scalable environment to test and deploy dApps. Without the constraints of local hardware, developers can quickly iterate and deploy their applications, leveraging the power of cloud computing to simulate real-world conditions.","s":"Developing 🧑‍💻️","u":"/docs/user/dappnode-cloud/overview","h":"#developing-️","p":278},{"i":303,"t":"If you bought a Dappnode from our store, or installed Dappnode on a computer with a built-in Wi-Fi chip, you can easily connect to the Dappmanager (Dappnode web UI) using the Dappnode's Wi-Fi hotspot. For those who got their hardware elsewhere, there's a chance the Wi-Fi card might not be recognized by the operating system. If this happens, you might need to install the required firmware. Since the steps vary based on the hardware, please contact our support on Discord if you face any issues.","s":"Wi-Fi Access to Dappnode","u":"/docs/user/access-your-dappnode/wifi","h":"","p":302},{"i":305,"t":"📱 On a device of your choice, navigate to the Wi-Fi settings. 🔍 Search and select the network labeled as DappnodeWIFI. 🔑 Enter the password: dappnode. 🌐 Open a browser and go to http://my.dappnode/. caution After connecting for the first time, go to the Wi-Fi section in the left menu of Dappmanager and change the hotspot password to something only you know.","s":"Connecting to Dappnode Wi-Fi","u":"/docs/user/access-your-dappnode/wifi","h":"#connecting-to-dappnode-wi-fi","p":302},{"i":307,"t":"Once in the Wi-Fi section, you'll find two main options: Toggle Wi-Fi: Here, you can turn the Wi-Fi feature on or off. Wi-Fi Credentials: Set a new network name (SSID) and password for your Dappnode's Wi-Fi. We strongly advise you to change the default settings for better security.","s":"Wi-Fi Settings in Dappmanager","u":"/docs/user/access-your-dappnode/wifi","h":"#wi-fi-settings-in-dappmanager","p":302},{"i":309,"t":"Which machine should I choose? All available machines on AWS when launching an instance are suitable for running Dappnode. However, the best choice depends on your specific needs and intentions. Here's a general guide to help you decide: Basic Testing and Development: For basic testing or development purposes, where you don't need high performance or large storage, a smaller instance with 2 vCPUs and 4 GB RAM should be sufficient. This setup allows you to explore Dappnode functionalities without significant resource investment. Running a Node: For running a full node in any network, a more powerful instance is required. We recommend an instance with at least 2 vCPUs and 8 GB RAM, but to handle the heavy computational, an instance with 4 vCPUs, 16 GB RAM would be the perfect option. Evaluate your use case and choose an instance that aligns with your performance and scalability requirements. How much storage do I need? The storage requirements for your Dappnode instance depend largely on your intended use. Here are some guidelines for different scenarios: Dappnode Testing: For basic testing purposes, a minimum of 30 GB of disk space is recommended. This is sufficient for exploring the Dappnode environment and testing small applications without significant data storage needs. Running a Node in Mainnet: If you plan to run a full node in the Ethereum mainnet, you will need approximately 1.4 TB (1304 GiB) Running a Node in Holesky: For running a node in the Holesky testnet, you should allocate around 180 GB (168 GiB) Running a Node in Lukso: If your goal is to run a node in the Lukso network, you will need about 40 GB (38 GiB) Running a Node in Gnosis: To run a node in the Gnosis network, you should provision around 503 GB (469 GiB) tip Regardless of your initial choice, AWS EC2 allows you to scale your storage as needed after the instance is launched. You can easily adjust the storage size through the AWS EC2 UI to meet your growing needs. Is it safe to have those security groups? Why are they needed? Setting the security groups as explained in the Launch an instance section does not automatically open the specified ports. This configuration allows services from your Dappnode to open the specified ports when needed. It's crucial to understand that having these inbound rules does not mean those ports are constantly exposed. SSH (Port 22): Purpose: Allows you to securely connect to your instance via SSH. Why Needed: Essential for remote management and troubleshooting of your instance. HTTP (Port 80): Purpose: Enables HTTP traffic to your instance. Why Needed: Required for accessing web services and interfaces hosted on your Dappnode. HTTPS (Port 443): Purpose: Enables HTTPS traffic, providing secure access to web services. Why Needed: Ensures secure connections to web interfaces and services, protecting data in transit. Wireguard (Port 51820): Purpose: Facilitates Wireguard VPN connections. Why Needed: Necessary for establishing secure VPN connections to your Dappnode instance. General TCP (Ports 1024-65535): Purpose: Allows various TCP services to communicate over a wide range of ports. Why Needed: Ensures that your Dappnode instance can communicate effectively with other nodes and services, enhancing overall performance. General UDP (Ports 1024-65535): Purpose: Allows various UDP services to communicate over a wide range of ports. Why Needed: Similar to TCP, but for UDP traffic, this rule ensures that your Dappnode instance can efficiently handle peer-to-peer connections and other UDP-based communications.\\ tip We recommend including all the ports mentioned in your security group inbound rules. This ensures that your Dappnode instance can perform optimally and access all necessary services. However, if you are an experienced user, you can customize these rules to suit your specific needs. You can control which ports to expose based on your security preferences and operational requirements. Why is it necessary to provide my Telegram user ID if I also provide my bot token? If you want to run commands to your Dappnode via Telegram is it essential to provide your Telegram user ID. Even if you already provide the bot token, anyone with the bot's username could send messages (and running commands so) to your dappnode. This could lead on someone getting the wireguard credentials of your Dappnode and connecting to it. That is why its mandatory to provide it, so your bot only listens to commands given by the account linked to your Telegram user ID. Why do I want to connect via SSH to my Dappnode? Connecting via SSH to your Dappnode allows you to access your instance's terminal directly. Even if you have obtained your Wireguard credentials via Telegram, having SSH access is important for several reasons: Full Control: SSH access gives you complete control over your Dappnode instance, allowing you to perform advanced configurations and manage the system directly. Troubleshooting: In case of potential issues or errors, accessing the terminal via SSH enables you to diagnose and fix problems efficiently. Advanced Management: You can run commands, update software, monitor system performance, and manage services that may not be accessible through the standard Dappnode UI. Having SSH access is crucial for maintaining and managing your Dappnode instance effectively, ensuring you can handle any technical challenges that arise. I've already launched my instance and I'm not getting my Wireguard credentials If you are not receiving your Wireguard credentials immediately after launching your instance, the Dappnode Image might still be installing. If this happens, wait a few minutes and try again. Via SSH: If you encounter this issue, exit your SSH session with the exit command in your instance terminal and reconnect as explained in the guide. Via Telegram Bot: Simply retry the /get_wireguard_credentials command after a short wait. Additionally, ensure that your instance storage has not filled up during the installation. For a testing Dappnode (a Dappnode not intended to run a node in any network), we recommend at least 30 GB of storage.","s":"FAQs & Troubleshooting","u":"/docs/user/dappnode-cloud/providers/aws/faqs","h":"","p":308},{"i":311,"t":"Amazon Web Services (AWS) is a cloud computing platform provided by Amazon. It offers a wide range of services, including computing power, storage options, and networking capabilities, enabling users to build and deploy applications and services efficiently.","s":"AWS","u":"/docs/user/dappnode-cloud/providers/aws/overview","h":"","p":310},{"i":313,"t":"The Dappnode AMI is an image specifically designed for running Dappnode in the AWS environment. It contains all the pre-installed software and configurations required to deploy a fully functional Dappnode instance. By using the Dappnode AMI, users can quickly launch an instance in the cloud without having to manually set up and configure the Dappnode software, simplifying the deployment process and ensuring consistency across different instances. info An Amazon Machine Image (AMI) is a pre-configured template used to create a virtual machine within the AWS cloud.","s":"Dappnode AWS AMI","u":"/docs/user/dappnode-cloud/providers/aws/overview","h":"#dappnode-aws-ami","p":310},{"i":315,"t":"When using Dappnode Cloud on AWS, there are two main charges to consider: Dappnode AMI 📀​ The Dappnode AMI is available for $15 per month. This fee grants you access to the Dappnode image, allowing you to launch as many instances as you need. This cost covers the use of Dappnode's software in the cloud. AWS Machines 🖥​ In addition to the Dappnode AMI fee, you will incur charges for the AWS infrastructure itself. These costs vary based on several factors: Instance Type: The specifications of the machine you choose, such as CPU and memory will affect the pricing. Storage: The amount and type of storage you select for your instance, will also influence the cost. Region: AWS pricing varies by region, so the location where you launch your instance can impact the overall cost. info AWS operates on a pay-as-you-go model, meaning you only pay for the resources you use. Before launching your instance, you can view an estimate of the expected costs on the Dappnode AMI launch page. This estimate provides transparency, helping you plan your budget effectively.","s":"Pricing","u":"/docs/user/dappnode-cloud/providers/aws/overview","h":"#pricing","p":310},{"i":317,"t":"note Ethical Metrics requires the Dappnode Monitoring Service (DMS) and Dappnode Exporter as dependencies.","s":"Ethical Metrics","u":"/docs/user/ethical-metrics/overview","h":"","p":316},{"i":319,"t":"When it comes to monitoring your Dappnode, the Dappnode Monitoring Service (DMS) offers valuable insights into the health and performance of your packages and system. Yet, there's a key thing that DMS can't do: DMS can't notify you when your Dappnode goes offline. This limitation arises because DMS operates from within your Dappnode, so it can't help when it experiences downtime. Ethical Metrics solves this DMS limitation. It is a service that allows for external monitoring of your Dappnode without leaking any identifying information. This way, you will be able to recieve notifications when your Dappnode goes offline. info Ethical Metrics comes from the request of the users to have useful alerts and the strict compromise of Dappnode of preserving privacy for its users. So, how did we manage to overcome the difficulty of monitoring your Dappnode without compromising your privacy? In order to keep your privacy intact, all the communication between your Dappnode and our monitoring servers is done through the TOR network. The TOR network enables anonymous communication by directing Internet traffic through a free, worldwide, volunteered overlay network that consists of more than seven thousand relays. tip In a nutshell, your Dappnode signals that it's alive via a private channel so we don't know where it comes from. If it stops sending this signal, we can assume that it's offline and send an alert to the Email or Telegram associated with that particular Dappnode. This way, your Dappnode's IP address remains hidden and nobody (not even us) can identify which metrics belong to who. To put it simply: Ethical Metrics enables us to monitor a group of Dappnode metrics for you. In the event that your Dappnode goes offline, Ethical Metrics can send notifications to an email address or Telegram handle that you provide during configuration. All this communication occurs via the TOR network, which guarantees the protection of your Dappnode's IP address and the confidentiality of your metrics. info Ethical metrics is one of our newest packages and it is still under constant improvement. Please come back to this page to check for updates.","s":"Introduction","u":"/docs/user/ethical-metrics/overview","h":"#introduction","p":316},{"i":321,"t":"tip We highly recommend utilizing the Telegram channel option in addition to or instead of relying solely on email notifications. Email notifications may sometimes encounter hurdles such as being categorized as spam or getting lost in a cluttered inbox. This could inadvertently lead to missing out on important notifications that require your immediate attention. In contrast, Telegram channels provide a streamlined and efficient way to receive notifications directly to your device, ensuring that you stay informed without any interruptions. In order to setup your Ethical Metrics notification system, you need to follow these steps:","s":"Setting up Ethical Metrics","u":"/docs/user/ethical-metrics/setup","h":"","p":320},{"i":323,"t":"Access Telegram Web: Open Telegram Web using this link and login with your account. Ensure the URL ends with /a/. If not, manually add /a/ after https://web.telegram.org/. Create a Private Channel. Add the DappNode bot (@ethicalMetricsAlerts_bot) to your channel as an administrator. Find Your Channel ID: Copy the channel ID from the URL. It's a 13-digit number following the - in the URL. The ID always starts with -100. Ensure to include the - when copying. Navigate to http://my.dappnode/system/notifications Enable Notifications: Paste the channel ID into the Telegram Channel ID field and toggle the switch ON to start receiving notifications.","s":"Telegram Notifications","u":"/docs/user/ethical-metrics/setup","h":"#telegram-notifications","p":320},{"i":325,"t":"Navigate to http://my.dappnode/system/notifications Introduce the email address where you want to receive the notifications and click on the switch to activate the notifications. Thats it! Your Ethical Metrics will automatically register your TOR instance with the email address you provided. This will happen through the TOR network, preserving your privacy. You should receive a welcome email in the following minutes. caution To send email notifications, it is necessary that you provide an email address. In order to remain private, we recommend you to use an address that can't be linked to your identity. For example, John Doe probably wouldn't want to use \"johndoe@gmail.com\" if he wanted to remain anoymous.","s":"Email Notifications","u":"/docs/user/ethical-metrics/setup","h":"#email-notifications","p":320},{"i":327,"t":"Experiencing trouble when setting your notifications up? Check this FAQ. If your issue isn't listed, please pay us a visit in the Dappnode Discord and we'll be happy to assist you! How can I make sure my Dappnode is registered? Email: Upon registering, an email will be sent to your configured email address. If you don't receive this email, please check your spam folder. Telegram: Once your bot has been set up, you can press the \"Send Test Notification\" button to see if everything is working as expected. How can I test a \"Dappnode down\" notification? There are various ways to test a \"Dappnode down\" notification. The easiest way is to stop your Dappnode temporarily, but you can also test it by stopping the \"Prometheus\" service of your Ethical Metrics package. After an hour, you should receive a \"Dappnode down\" notification in your Email and/or Telegram. How can I unregister from the Ethical Metrics monitoring system? 1. Using the Dappnode Interface: From the active Dappnode, simply navigate to System > Notifications and toggle off Ethical Metrics. This will stop all notifications and halt metric collection from your Dappnode. As long as Ethical Metrics notifications are enabled in the Dappnode UI, your device remains registered in our monitoring system. 2. For Inactive Dappnodes: If your Dappnode is no longer accessible, locate the unregister link in the welcome email you received upon registration. Keep in mind that using this method won't employ our IP hiding measures, but you can enhance security using tools like a VPN. Please keep in mind that if your Dappnode is still up and running with Ethical Metrics notifications turned on, it'll register again by itself. 3. Manual Unregistration: Lost the welcome email? You can also unregister by inputting the following URL into your browser: https://ethical-metrics.dappnode.io/unregister-from-email/?instance=YOUR_INSTANCE.onion%3A9090. Make sure to replace YOUR_INSTANCE with the unique identifier for your Dappnode, excluding \".onion:9090\", which is already included in the provided URL.","s":"Troubleshooting","u":"/docs/user/ethical-metrics/troubleshooting","h":"","p":326},{"i":329,"t":"How can I start validating? These steps will help you set up an Ethereum/Gnosis Chain/LUKSO solo staker validator: Go to the Stakers menu, select the network tab that you want to validate in and select an execution client (Geth, Nethermind, Erigon or Besu), a consensus client (Prysm, Lighthouse, Teku, Nimbus or Lodestar) and Web3Signer. You can optionally select MEV Boost and any relays you choose to run (where applies). Create keystore and deposit files using Ethereum/Gnosis/LUKSO CLI or the Wagyu Keygen tool. Wait until clients are synced and check logs to see that everything is running fine. Import keystore file(s) into Web3Signer. Do the deposit. Make sure to triple-check you're interacting with the right website/contract! Wait until you start attesting. I'm not able to install! / Package not found You'll most likely have to switch your IPFS repository to remote, perform updates and go back to your Local IPFS node: Try switching local/remote in IPFS repository: http://my.dappnode/repository/ipfs Wait a few seconds, then retry downloading/updating your package. Make sure you set your IPFS node to Local for optimal Dappnode performance. I want to install Dappnode, what are the minimum specs I need? Assuming you want to sync only one chain (two clients) you should have at least: 16GB RAM 2TB of FAST storage (NVMe recommended) Intel i3 or i5 processor If you want to run Dappnode as recommended, we suggest the following specs: 32-64GB RAM 4TB NVMe Intel i7 processor VPN/Wireguard isn't working! Are you in the same network as the Dappnode? Use the local proxy access to configure your VPN: http://dappnode.local/ Is UPnP enabled in your router settings? Try restarting your router after applying this setting! Is the port for Wireguard open in your router's port forwarding settings? (UDP 51820) Are you behind a CGNAT? You need to contact your ISP and request an IPv4 static address. Are you connected to another VPN? Please disconnect from this VPN before connecting to your Dappnode's VPN. If you're trying to access with Wireguard through a local network, make sure you're using your local credentials: My Web3Signer status has an odd grey bar in its status, is something wrong? Web3Signer includes 4 containers (services): Web3Signer, Brain, Flyway and Postgres. You can check it yourself in the package view. Whenever one is indicated as Stopped (gray), it means that it was stopped. But in this case - just the flyway service is stopped, which is an expected behavior - it should run only once, while migration of the database. If it’s indicated as grey - that means that whenever it migrated - everything went well, and now there is no need for it to run! My clients are not syncing! It's always a good idea to check the logs first for any specific errors, but here are some of the most common issues: Have you selected both Execution and Consensus clients in the Stakers Menu? If something looks wrong in the dashboard, always check the logs first! The clients might be syncing as expected. Check if the block number and the package's volume size are increasing. This is a common issue for Nethermind. How long do clients take to sync? This is very different for every Dappnode depending on a number of factors: Geographic location Bandwidth ISP limitations Chosen EL and CL clients There is no exact information on how long exactly every client takes to sync, but there are a couple of facts that would be useful: Consensus client usually doesn't take longer than 5 minutes, as long as you enabled checksync when selecting your clients in the Stakers menu. Execution client syncing time depends on many factors, but it might take up to several days in some cases, so if you felt like consensus client synced fast, and execution client is still syncing after several hours - that's ok, it might take some time!","s":"FAQs","u":"/docs/user/faqs","h":"","p":328},{"i":331,"t":"Dappnode has absolutely no hidden telemetry and is completely private by design. We were reluctant of setting up a monitoring service because we did NOT want to collect any data from our users. Because of our community's continuous requests to offer alerts, we came up with a solution that doesn't compromise your privacy. Even if we can't link the metrics from your Dappnode to your identity, we are fully committed to maintain total transparency about the metrics we collect from your Dappnode when using Ethical Metrics. We want you to have a clear understanding of the information that is being monitored. The metrics we collect fall into several categories. Here's an overview of the metrics we gather. info These metrics also help us better allocate resources by knowing what our users are running on their Dappnodes. This way, we can better understand which packages are the most popular and which ones need improvement. note Ethical Metrics is one of our newest packages and it is still under constant improvement. This section will be updated as we add or remove metrics.","s":"Metrics Collected by Ethical Metrics","u":"/docs/user/ethical-metrics/metrics","h":"","p":330},{"i":333,"t":"These are all the metrics related directly to the host machine running your Dappnode. All of these metrics are collected by the Dappnode Exporter package. node_cpu_seconds_total: Total CPU usage in seconds by the node. container_memory_usage_bytes: Memory usage in bytes by containers. container_memory_cache: Memory cache usage by containers. node_memory_MemTotal_bytes: Total memory available in bytes on the node. node_memory_MemFree_bytes: Free memory in bytes on the node. node_memory_Buffers_bytes: Memory used for buffers in bytes on the node. node_memory_Cached_bytes: Cached memory in bytes on the node. node_disk_io_time_seconds_total: Total disk I/O time in seconds on the node. node_disk_reads_completed_total: Total completed disk reads on the node. node_disk_writes_completed_total: Total completed disk writes on the node. container_fs_usage_bytes: Filesystem usage by containers in bytes. node_filesystem_size_bytes: Total size of the filesystem in bytes on the node. node_filesystem_free_bytes: Free space in the filesystem in bytes on the node. container_last_seen: Timestamp of the last seen container. cadvisor_version_info: Information about the cAdvisor version. container_cpu_usage_seconds_total: Total CPU usage in seconds by containers.","s":"Dappnode host metrics","u":"/docs/user/ethical-metrics/metrics","h":"#dappnode-host-metrics","p":330},{"i":335,"t":"The following are all the metrics related to your Dappnode's configuration. These are all stored in your Dappmanager. dappmmanager_staker_config: Your current staking package. dappmanager_ipfs_client_target_local: Wether IPFS client is in local or remote mode. dappmanager_eth_fallback_enabled: Wether the ethereum fallback client is enabled. dappmanager_eth_client_target_local: Wether ethereum client is in local or remote mode. dappmanager_auto_updates_user_packages: Wether auto updates for user packages is enabled. dappmanager_auto_updates_system_packages: Wether auto updates for system packages is enabled. dappmanager_host_info: Details including Docker and Docker Compose versions, kernel version, operating system version, and architecture type.","s":"Dappmanager metrics","u":"/docs/user/ethical-metrics/metrics","h":"#dappmanager-metrics","p":330},{"i":337,"t":"The following metrics are all related directly to the staking packages, including Web3Signer. eth2_slashingprotection_prevented_signings: Number of prevented slashing signings. signing_signers_loaded_count: Count of loaded validators signing in web3signer. signing_bls_signing_duration: Duration of BLS signing. signing_bls_signing_duration_count: Count of BLS signing durations. signing_bls_signing_duration_sum: Sum of BLS signing durations. signing_bls_missing_identifier_count: Count of missing BLS identifier. api_rpc_cons_peers: Number of connected peers to your staking execution clients. api_rpc_exec_peers: Number of connected peers to your staking consensus clients. api_rpc_cons_syncing: Wether your staking execution clients are syncing. api_rpc_exec_syncing: Wether your staking consensus clients are syncing. To sum it up, the metrics we collect give us a peek into how your Dappnode is doing overall, how it allocates resources, memory, disk, and even info related to staking performance. Your privacy is of utmost importance to us. Remember that all this data transmission occurs through the TOR network to protect your privacy. note For any questions or concerns about the metrics collected by Ethical Metrics, feel free to reach out to our support team.","s":"Staking Metrics","u":"/docs/user/ethical-metrics/metrics","h":"#staking-metrics","p":330},{"i":339,"t":"To launch a Dappnode AMI instance, follow these steps:","s":"How to Set Up an Instance","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"","p":338},{"i":341,"t":"Go to the AWS Marketplace.","s":"1. Navigate to AWS Marketplace 🧭","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#1-navigate-to-aws-marketplace-","p":338},{"i":343,"t":"If you already have an AWS account, log in. If not, create an account. For more information on signing up, you can visit the AWS Sign-Up Documentation. In case you end up on another website after signing up, navigate again to the AWS Marketplace.","s":"2. AWS Account 👤","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#2-aws-account-","p":338},{"i":345,"t":"Search \"Dappnode\" in the top search bar and choose the \"Dappnode Cloud - Telegram Credentials - By Dappnode\" option. On our Dappnode AMI page, you can check some information about our image. When you are ready, click \"Continue to Subscribe\". Accept the terms and click \"Continue to Configuration\". Check the region and click \"Continue to Launch\" to proceed with the instance launch. In the \"Choose Action\" dropdown, select \"Launch through EC2\" and click \"Launch\".","s":"3. Subscribe to Dappnode AMI 📀","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#3-subscribe-to-dappnode-ami-","p":338},{"i":347,"t":"This step is only necessary if you are planning to get your Wireguard credentials via Telegram. Create a new bot using the /newbot command via BotFather's chat. It will ask you for a name and username, then generate an authentication token for your new bot. Save this token, as you will need to provide it when launching the AWS instance. You will also need to provide your Telegram user ID. You can get it by sending /start to a bot such as @RawDataBot.","s":"4. Set Up Telegram for Wireguard Credentials (Optional) 💬","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#4-set-up-telegram-for-wireguard-credentials-optional-","p":338},{"i":349,"t":"Once in the EC2 \"Launch an instance\" UI you will have to choose the configuration of your instance. Next steps will explain you what configurations do you need to modify section by section. Name: Give a name to your instance. This name is for you to identify it in the EC2 UI. Application and OS Images (Amazon Machine Image): No changes needed, it comes pre-configurted according to the Dappnode Image. Instance type: Choose an instance type. All selectable options are suitable for running Dappnode. For more context based on your requirements, check the FAQs section. Key Pair: If you already have a key pair linked to your AWS account, you can use it. Alternatively, you can import keys to the EC2 or create a new one. These keys are essential for SSH access to the instance. Losing these keys could result in losing access to your instance. Network Settings: In this section, you will create a security group to allow necessary ports exposure. Follow these steps to ensure your Dappnode instance can perform optimally and access all required services: Click \"Edit\" under Network Settings and ensure the \"Create security group\" option is chosen. To add a new rule to the group, click the \"Add security group rule\" button below. Include the following rules: SSH: Type: SSH HTTP: Type: HTTP HTTPS: Type: HTTPS Wireguard: Type: Custom UDP Port Range: 51820 Source: 0.0.0.0/0 General TCP: Type: Custom TCP Port Range: 1024-65535 Source: 0.0.0.0/0 General UDP: Type: Custom UDP Port Range: 1024-65535 Source: 0.0.0.0/0 For more information about why this Inbound rules are needed and details about each one, visit the FAQs Section. Storage: Define the amount and type of storage for the instance. The storage requirements depend largely on your intended use. For more suggestions and context, refer to the FAQs section. info AWS also offers the possibility of extending storage once launched if needed. Advanced details (optional): No modifications are needed here unless you plan to get your Wireguard credentials via Telegram. If so, provide your userID and botToken in the text area at the end of \"Advanced details\", separated by a comma in the following format: (userID,botToken). Example => 123456789,1234567890:ABCDEFGHIJKLMNOPQRSTUVWXYZ123456 Summary: Finally, review your configuration on the 'Summary' section located on the right and click the \"Launch instance\" button. Once clicked, your instance will be launched.","s":"5. Launch Instance 🚀","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#5-launch-instance-","p":338},{"i":351,"t":"To obtain the Wireguard credentials for your instance, you have two different approaches: Via Telegram Bot Ensure you have completed the optional Telegram setup steps mentioned earlier in the guide. After launching the instance, go to your new bot's chat using the link provided by BotFather. Send any message to your bot. If the configuration is correct, you should receive a message saying ✅ Successfully saved channel ID. Send the command /get_wireguard_credentials in the bot chat. The bot should return your Wireguard credentials. Copy them, as the next step will explain how to use these credentials. Via SSH This approach is for more expiremented users, since you will have to use the terminal. After launching the instance, click the \"Connect\" button in the AWS console. Go to the \"SSH client\" tab where it will provide you with a command like this: ssh -i \"yourKeyPair-aws.pem\" root@yourInstanceDNS Open your terminal and modify the command to use the ubuntu user and add sudo for permissions: sudo ssh -i \"yourKeyPair-aws.pem\" ubuntu@yourInstanceDNS tip Ensure this command is run in the directory where your key pair file is located. Once connected to your instance, run the following command: dappnode_wireguard This command will output your Wireguard credentials. Copy them from your terminal using Ctrl+Shift+C / ⌘+Shift+C. The next step will explain how to use these credentials. info The installation of Dappnode on your instance may take a few minutes. If you try to obtain the credentials before the installation is complete, you may not receive them. If this happens, wait a few minutes and try again. Via SSH: If you encounter this issue, exit your SSH session with the exit command and reconnect as explained above. Via Telegram Bot: Simply retry the /get_wireguard_credentials command after a short wait.","s":"6. Get wireguard credentials 🔐","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#6-get-wireguard-credentials-","p":338},{"i":353,"t":"The setup process for connecting via Wireguard will depend on the operating system you are using. Refer to the Wireguard documentation section specific to your OS for detailed instructions. Once you have installed Wireguard and configured it with the credentials you obtained, you will be able to connect to your Dappnode instance securely.","s":"7. Connect via Wireguard 🔌","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#7-connect-via-wireguard-","p":338},{"i":355,"t":"Once your Wireguard tunnel is active, simply open your web browser and go to http://my.dappnode to begin your journey with Dappnode Cloud!","s":"8. Navigate to Dappnode's UI 🏁","u":"/docs/user/dappnode-cloud/providers/aws/set-up-instance","h":"#8-navigate-to-dappnodes-ui-","p":338},{"i":357,"t":"After connecting your Dappnode to the router and power, and turning it on, it's time to connect to it. tip You don't need a monitor, keyboard, or mouse to use Dappnode. You just need to plug it to your router and you can access it from your laptop or mobile phone's browser!","s":"Access Dappnode via Wi-Fi","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"","p":356},{"i":359,"t":"After a couple of minutes of being turned on, your dappnode will generate a WiFi hotspot From the device you wish to connect with, look for the Wi-Fi network named DappnodeWIFI. Connect using the default password: dappnode.","s":"1. Connect to DappnodeWIFI:","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"#1-connect-to-dappnodewifi","p":356},{"i":361,"t":"Open your web browser. Navigate to: http://my.dappnode/login","s":"2. Access the Dappnode Interface:","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"#2-access-the-dappnode-interface","p":356},{"i":363,"t":"Details How can I change my Dappnode Wi-Fi password? To change the Wi-Fi password: While connected to the Dappnode, go to Wi-Fi Settings Enter your new desired password in both the \"New Password\" and \"Confirm New Password\" fields. Click on \"Change Credentials\". Details I can't access my Dappnode via Wi-Fi You can explore other methods to access your Dappnode here.","s":"Troubleshooting:","u":"/docs/user/getting-started/access-dappnode-via-wifi","h":"#troubleshooting","p":356},{"i":365,"t":"Dappnode offers a seamless plug-and-play experience. For optimal performance and to ensure smooth operation, please connect your Dappnode to your router and enable UPnP settings within the router. Make sure you also connect your Dappnode to a power outlet and you are ready to turn it on.","s":"Connect your dappnode to the router and power","u":"/docs/user/getting-started/connect-dappnode-to-the-router","h":"","p":364},{"i":367,"t":"Enabling UPnP (Universal Plug and Play) on a router allows devices on your network to set up port forwarding rules for themselves automatically. This simplifies device communication and functions, especially for applications that require open ports, like some games and peer-to-peer programs. Here are basic instructions to enable UPnP on most routers: Log into Your Router: Open a web browser on a computer connected to your network. Enter your router's IP address in the address bar. Common addresses include 192.168.1.1, 192.168.0.1, or 10.0.0.1. If you're unsure of your router's IP, you can check your device's network settings or consult the router's manual. You'll be prompted for a username and password. If you haven't changed them, the default details are usually admin/admin, admin/password, or some similar combination. Refer to your router's documentation if you're unsure. Navigate to the UPnP Section: Once logged in, look for a section labeled \"UPnP\", often found under \"Advanced Settings\", \"WAN\", \"NAT\", or similar categories. The exact path can vary based on the router manufacturer and model. Enable UPnP: There should be an option to enable or disable UPnP. Make sure it's set to \"Enable\" or \"On\". Save or apply the changes.","s":"Enable UPnP in your router","u":"/docs/user/getting-started/connect-dappnode-to-the-router","h":"#enable-upnp-in-your-router","p":364},{"i":369,"t":"How can I verify that the ports were successfully opened by UPnP? Access your dappnode support > ports view and execute an API scan of the ports. An alternative is to manually check if the ports have been opened successfully, follow these steps: Use an online port checker tool, like \"YouGetSignal\" or \"Canyouseeme.\" Enter your external IP address and the port number you want to check. Click \"Check.\" If the port is open and accessible from the outside, the tool will confirm it. Alternatively, you can use tools like nmap to scan your own ports from a different network. Why can't I connect my DappNode to the router via Wi-Fi? Currently, Dappnode doesn't support Wi-Fi connections to a router. Ensure your Dappnode is connected directly to the router using an ethernet cable.","s":"Troubleshooting","u":"/docs/user/getting-started/connect-dappnode-to-the-router","h":"#troubleshooting","p":364},{"i":371,"t":"Now that your DAppNode is set up and ready to go, it's time to explore further configurations and features to get the most out of your experience. Here are some of the most common next steps: 🔐 Configure VPN access: Using either Wireguard or OpenVPN, you will be able to connect to your Dappnode from wherever you are in the world. You will be able to access your dappnode outside of the range of the wifi, while on holidays or during your commute! 💰 Start Staking and Earning Rewards: You can start validating Proof-of-Stake networks like Ethereum, Gnosis Chain or LUKSO and earn rewards for securing the network. 🔔 Configure Ethical Metrics: Ethical metrics is a privacy-focused monitoring tool for Dappnode. You will be able to receive alerts related to your Dappnode's performance and health.","s":"Next Steps","u":"/docs/user/getting-started/next-steps","h":"","p":370},{"i":374,"t":"Start by setting up your new account: Input your desired Username. Select a secure password. It should include a combination of characters, numbers, and special symbols for optimal security. Confirm your password to ensure accuracy. Click the Register button.","s":"1. Register as New User","u":"/docs/user/getting-started/register","h":"#1-register-as-new-user","p":372},{"i":376,"t":"Upon successful registration, you'll be provided with a Recovery Token. This token is crucial for: Retrieving your password if forgotten. Regaining account access if needed. To safeguard your token: Click the button or link labeled \"View Recovery Token\". Diligently copy the token and store it in a safe location. caution We recommend that you store your token in both digital (encrypted) and physical forms (noted and stored securely). If you lose access to both your password and token, you will lose access to your account.","s":"2. Secure Your Recovery Token","u":"/docs/user/getting-started/register","h":"#2-secure-your-recovery-token","p":372},{"i":378,"t":"With your account ready and Recovery Token secured: Proceed to the Login page. Input your Username and Password. Press the Login button to dive into your Dappnode account.","s":"3. Logging In","u":"/docs/user/getting-started/register","h":"#3-logging-in","p":372},{"i":380,"t":"Details Want to change your password? Visit Profile Settings to reset it. Details Forgot your password? Go to the Login page and click on \"Forgot your password?\". You'll be prompted to enter the recovery token you saved during registration. Once entered, you'll be able to reset your password. Details Lost your recovery token? If you've lost your recovery token, there is still a chance to regain access to the Dappmanager UI. However, you will require accessing via terminal. Once you are in, you can get your recovery token by running the following command: cat /usr/src/dappnode/DNCORE/admin-recovery-token.txt","s":"Troubleshooting","u":"/docs/user/getting-started/register","h":"#troubleshooting","p":372},{"i":382,"t":"We are aiming to deploy Dappnode Images in more cloud providers in a nearly future. If you are willing to run Dappnode in a specific provider you can open an Issue in Dappnode's GitHub and tell us more about it!","s":"More coming soon","u":"/docs/user/dappnode-cloud/providers/coming-soon","h":"","p":381},{"i":384,"t":"Regardless of how you wish to utilize Dappnode, taking the initiative to contribute to decentralization and earning rewards is commendable. Embark on your desired path and experience the full potential of Dappnode. note Interested in purchasing a Dappnode? Explore our official store.","s":"Choose your path","u":"/docs/user/getting-started/choose-your-path","h":"","p":383},{"i":386,"t":"I have bought a Dappnode or I already installed it","s":"Dappnode is installed","u":"/docs/user/getting-started/choose-your-path","h":"","p":383},{"i":388,"t":"I own a machine where I want to install Dappnode software","s":"I want to install Dappnode","u":"/docs/user/getting-started/choose-your-path","h":"","p":383},{"i":390,"t":"Setting up Dappnode is a straightforward process. This guide will walk you through configuring your Dappnode for the first time.","s":"Setup","u":"/docs/user/getting-started/setup","h":"","p":389},{"i":392,"t":"Before you dive in, choose the source from which Dappnode retrieves its data: Remote Node: Connect your Dappnode to an external Ethereum node. This option is lightweight, as you won't need to host the blockchain data on your machine. Full Node: Have your Dappnode host the complete Ethereum blockchain. This ensures maximum decentralization and independence, but it requires more storage and bandwidth. Why is this important? Dappnode uses smart contracts to publish the dapps that are accessible in the dappstore. For this reason, Dappnode needs access to an Ethereum node to read the contents of said smart contract. Choosing between a remote and a full node directly impacts how decentralized your setup is. Decentralization Benefits: By relying less on third-party services, you enhance security, reduce points of failure, and support the Ethereum network's robustness, but it might not work for you if you have limited storage or bandwidth.","s":"Choose Repository Source","u":"/docs/user/getting-started/setup","h":"#choose-repository-source","p":389},{"i":394,"t":"Dappnode comes with an auto-update feature. This means it will automatically update itself with new releases, ensuring you always have the latest and most secure version. Activate auto-updates to lessen maintenance and better guard against vulnerabilities. tip We strongly recommend activating auto-updates to ensure your Dappnode is always up to date with the latest versions.","s":"Enable/Disable System Auto Updates","u":"/docs/user/getting-started/setup","h":"#enabledisable-system-auto-updates","p":389},{"i":396,"t":"Dappnode can send you notifications about important events, such as your dappnode being offline or high CPU usage. This is a great way to stay on top of your Dappnode's health and performance.","s":"Enable system notifications","u":"/docs/user/getting-started/setup","h":"#enable-system-notifications","p":389},{"i":398,"t":"Beneath the hood, Dappnode operates on a Linux framework, protected by a password, which will be needed to access your Dappnode's terminal To amplify your Dappnode's defense: Change the default Linux machine password for user dappnode. Choose a strong, unique password that's not easily guessable. Remember to store this password in a secure location. If you lose access to this password, you could be locked out of your Dappnode. caution Always save and backup your password. This is crucial for ensuring uninterrupted access to your Dappnode.","s":"Change Host User Password","u":"/docs/user/getting-started/setup","h":"#change-host-user-password","p":389},{"i":400,"t":"Congratulations! Your Dappnode is now configured and ready for use. Dive into the world of decentralized applications and enjoy the self-hosted, decentralized internet experience. With these steps, your Dappnode should be up and running efficiently. Always refer to the official Dappnode documentation or community for any further queries or support. Keep your Dappnode up to date Remember to regularly check for updates and best practices to ensure your Dappnode stays secure and efficient.","s":"All Set!","u":"/docs/user/getting-started/setup","h":"#all-set","p":389},{"i":402,"t":"This section will cover four different approaches to servicing your hardware. The order is by level of difficulty from easiest to hardest. Remember that if you have any questions they're always welcome in our Discord server. info 💡 Keep in mind these have different levels of difficulty, and if you're hesitant about trying them you should find a professional to give you a hand. Hardware is delicate and if mishandled it can cause permanent damage to your Dappnode, so proceed with caution.","s":"Maintenance","u":"/docs/user/hardware/maintenance","h":"","p":401},{"i":404,"t":"One of the key elements to keep your Dappnode's performance optimal is where you place it. There's this myth about air conditioning or cool air being able to lower your devices' temperatures, however constant air flow is much more important than the temperature of the air itself. We recommend picking a place for your Dappnode that will favor this, and where the heat it produces won't stay in the same room and raise the atmosphere temperature. An open room with windows is great for this, so you should avoid closets or small storage rooms. If your Dappnode is still struggling to keep its temperature low, try removing the upper lid. It won't look as pretty, but it'll get the job done!","s":"1. Air Flow","u":"/docs/user/hardware/maintenance","h":"#1-air-flow","p":401},{"i":406,"t":"Dust is the enemy of electronics. It can cause overheating and short circuits, so it's important to keep your Dappnode clean. The best way to do this is by using a can of compressed air (also called air dusters), which you can find in any hardware store. These cans are very helpful to get your Dappnode's insides clean. You can do this by carefully oppening the bottom metal lid. Loosen its four screws and be specially careful when lifting it, as there's a SATA ribbon cable attached to the NUC's board and the metal lid that can be damaged if handled roughly. For diving into the actual cleaning of your Dappnode, try to be in an outside location when performing this dust cleaning process. Keep your Dappnode safe from humidity or extreme direct temperatures. Carefuly place the can of duster in a vertical position for starting the cleaning process. Always point the airstream somewhere other than your device when starting to use it, as these release liquid for a brief period of time sometimes. After you've made sure the duster is working as expected, start blowing at the smaller spaces in the board and gradually moving to the more general area of your hardware without getting the tip of the duster to close to the circuits. Make sure the fans don't have big chunks of dust that prevent them from working properly. When done, put the bottom metal lid back on and screw it back without leaving it too tight.","s":"2. Dust cleaning","u":"/docs/user/hardware/maintenance","h":"#2-dust-cleaning","p":401},{"i":408,"t":"Your CPU has a heatsink right above it that helps dissipate heat. To facilitate this transfer of heat effectively, thermal paste is applied between the CPU's top plate and the heatsink. Over time, the thermal paste can degrade or dry out, leading to reduced thermal conductivity and potentially higher operating temperatures for the CPU. To replace the thermal paste, start by powering down your dappnode, removing the heatsink, and cleaning both the CPU surface and the heatsink thoroughly with rubbing alcohol. Then, apply a small amount of fresh thermal paste onto the center of the CPU (Be careful not to use too much, as excess paste can lead to inefficient heat transfer), reattach the heatsink carefully, and ensure all connections are secure before powering it back on. Monitoring temperatures post-replacement ensures optimal performance and cooling efficiency. You can learn how to monitor it in Temperature section.","s":"3. Thermal Paste Change","u":"/docs/user/hardware/maintenance","h":"#3-thermal-paste-change","p":401},{"i":410,"t":"Keeping a close eye to your Dappnode's temperature is part of the Node Runner's basic good practices. Dappnode provides you with metrics 📊 in the main dashboard to do so. If you want to configure notifications 🔔 for temperature changes, you can find two options: In the DMS Dashboard you'll be able to configure Grafana notifications. You can also set Ethical Metrics up to get email notifications while keeping your privacy. Some additional tips that will contribute to an optimal temperature are: BIOS Adjustments: if you shut your Dappnode down you can access your NUC's BIOS setup with the F2 key while booting. The UI includes different options that you can check in Intel's documentation and tweak according to your preferences. If you're using an 11th Generation NUC, check its ambient temperature recomendations here. If you're using a 12th Generation NUC, check its ambient temperature recomendations here.","s":"Temperature","u":"/docs/user/hardware/temperature","h":"","p":409},{"i":412,"t":"In this section you will find information related to the hardware of the Dappnode's host machine. If you had noticed any issue with it and have tried some steps provided by the Dappnode community and/or staff without success, this section of the Dappnode documentation will help you solving those that are on the hardware side of things. Here are some topics you can check: 🛠️ Maintenance: Some approaches that may be helpful for your dappnode to perform as expected. 🌡️ Temperature: Instructions for keeping track of your dappnode's temperature.","s":"Hardware","u":"/docs/user/hardware/overview","h":"","p":411},{"i":414,"t":"Dappnode packages are built upon Docker containers. The heart of defining how these containers run and interact lies in the docker-compose.yml file. In this guide, we will explain the typical structure of the docker-compose.yml file for a Dappnode package.","s":"Docker compose file","u":"/docs/dev/references/docker-compose","h":"","p":413},{"i":416,"t":"A simple docker-compose.yml file looks like this: version: \"3.5\" services: test.public.dappnode.eth: build: . image: \"test.public.dappnode.eth:0.1.0\" restart: unless-stopped This example illustrates the basic elements, which include the version of the docker-compose file, services, and the service's basic attributes.","s":"Basic Example","u":"/docs/dev/references/docker-compose","h":"#basic-example","p":413},{"i":418,"t":"A more intricate docker-compose.yml file could look like this: version: \"3.5\" services: beacon-chain: build: context: beacon-chain args: UPSTREAM_VERSION: v4.0.7 volumes: - \"beacon-chain-data:/data\" ports: - \"12603:12603/tcp\" - \"12603:12603/udp\" restart: unless-stopped environment: P2P_PORT: 12603 CHECKPOINT_SYNC_URL: \"https://checkpoints.mainnet.lukso.network\" EXTRA_OPTS: \"\" LOG_VERBOSITY: info MIN_SYNC_PEERS: \"0\" MAX_PEERS: \"250\" SUBSCRIBE_ALL_SUBNETS: \"true\" validator: build: context: validator args: UPSTREAM_VERSION: v4.0.7 volumes: - \"validator-data:/data\" restart: unless-stopped environment: LOG_VERBOSITY: info GRAFFITI: validating_from_DAppNode ENABLE_DOPPELGANGER: \"true\" EXTRA_OPTS: \"\" volumes: beacon-chain-data: {} validator-data: {} In the complex example, you'll find: Multiple services (like beacon-chain and validator). Build arguments, such as the relevant UPSTREAM_VERSION. Defined volumes, ports, and environment variables.","s":"Complex Example","u":"/docs/dev/references/docker-compose","h":"#complex-example","p":413},{"i":420,"t":"Environment Variables​ All environment variables (envs) defined in the docker-compose.yml file will be visible in the package config post-installation. Users can modify these. If the package has a setup-wizard, those environment variables not set within it will be hidden by default in the configuration. Users can view these by selecting \"Show advanced config\". The UPSTREAM_VERSION Argument​ The UPSTREAM_VERSION argument is mandatory if you wish to leverage GitHub actions that automatically create PRs when there's a new release in the upstream repository. In the Dockerfile, UPSTREAM_VERSION is usually declared and used like this: ARG UPSTREAM_VERSION FROM consensys/teku:$UPSTREAM_VERSION note The upstreamVersion and upstreamRepo fields need to be defined in the dappnode_package.json file for the GitHub actions to work. Here is an example: { ... \"upstreamVersion\": \"23.8.0\", \"upstreamRepo\": \"ConsenSys/teku\", ... } The EXTRA_OPTS Environment Variable​ EXTRA_OPTS is an environment variable that allows users to add any flags that might not have been included by default. Here's a typical use case for EXTRA_OPTS in the entrypoint script: exec /opt/teku/bin/teku \\ --network=prater \\ ...(omitting other flags) \\ --log-destination=CONSOLE \\ $EXTRA_OPTS","s":"Notable Features","u":"/docs/dev/references/docker-compose","h":"#notable-features","p":413},{"i":423,"t":"8 Gb RAM memory Screen and keyboard (Only for the first installation) Wired connection to the Dappnode","s":"Hardware Recommendations","u":"/docs/user/install/arm","h":"#hardware-recommendations","p":421},{"i":425,"t":"Follow the instructions you can find in Script Installation","s":"Install Dappnode via Script","u":"/docs/user/install/arm","h":"#install-dappnode-via-script","p":421},{"i":427,"t":"In case you have installed Dappnode in a Raspberry using a SD card and you want to add an external SSD you should mount docker data in it. To do this, follow the next steps: Stop Docker service systemctl stop docker Create a new mountpoint for docker data. As an example: mkdir /data Add your partition on the new device to /etc/fstab. You can identify its UUID using the blkid tool. Make sure your device is properly partitioned first. Your line in /etc/fstab should look like this: UUID=b311b983-bda6-4e9f-835c-266d40d64f07 /data/ ext4 defaults 0 0 Mount your SSD drive mount /data Move docker data to the mountpoint mv /var/lib/docker/* /data/ Edit Docker settings to use the alternative location. Edit /etc/docker/daemon.json as follows: { \"data-root\": \"/data\" } Restart docker systemctl start docker","s":"Add an external SSD","u":"/docs/user/install/arm","h":"#add-an-external-ssd","p":421},{"i":429,"t":"Dappnode comes with a set of commands that can be used to manage the system. These commands can be used directly from the command line. tip Go to the Access your Dappnode's terminal section to learn more about how to access the terminal. Below is a list of available commands in Dappnode: dappnode_help: prints out this message dappnode_wifi: get wifi credentials (SSID and password) dappnode_openvpn: get Open VPN credentials dappnode_wireguard: get Wireguard VPN credentials. Use dappnode_wireguard --help for more info dappnode_connect: check connectivity methods available in Dappnode dappnode_status: get status of dappnode containers dappnode_start: start dappnode containers dappnode_stop: stop dappnode containers To run a command, enter it in your Dappnode terminal. For example: dappnode_help I get the error \"command not found\" If you get the error command not found when trying to execute a dappnode command, it means that the command is not available in your system. You need to load the dappndoe profile as follows: source /usr/src/dappnode/DNCORE/.dappnode_profile","s":"Dappnode commands","u":"/docs/user/install/dappnode-commands","h":"","p":428},{"i":432,"t":"Dappnode is a Debian-based OS, which makes it friendly with most available commercial hardware. Depending on what you intend to run in your Dappnode you might need higher specifications, but a great number of available features can be used with the following recommendations: Intel Core i5/i7 32 GB RAM 4 TB NVMe storage As minimum requirements we recommend: Intel Core i3 16 GB RAM 2 TB NVMe or fast SSD storage If you don't have enough technical experience to customize your own hardware, remember you can always get a plug n play Dappnode Home in our online shop.","s":"Specifications & Minimum Requirements","u":"/docs/user/install/overview","h":"#specifications--minimum-requirements","p":430},{"i":434,"t":"Installing Dappnode can be achieved through two primary methods:","s":"Installation Methods","u":"/docs/user/install/overview","h":"#installation-methods","p":430},{"i":436,"t":"Description: This method involves downloading the Dappnode ISO file and using it to directly install Dappnode on your system. Best for: Most users as it provides a comprehensive setup designed specifically for Dappnode.","s":"1. ISO Installation","u":"/docs/user/install/overview","h":"#1-iso-installation","p":430},{"i":438,"t":"Description: If you're already running a Debian-based distribution, you can utilize the Dappnode script to facilitate the installation process. Best for: Users who want to install Dappnode on a cloud server, ARM device (where it's the only option), or those who desire a specific Debian-based distro. note For ARM-based systems, only the script installation method is available. Choose the method that best fits your needs and system setup. Make sure to follow the respective installation instructions carefully for a smooth and successful Dappnode deployment. Continuous Uptime Dappnode is designed to run 24/7. Many features and functions within Dappnode, especially blockchain nodes, rely on continuous uptime to maintain their state, sync, and functionality. For instance: Blockchain Nodes: If you have a synced blockchain node and you turn off Dappnode, the node will lose its sync. This means when you turn it back on, it'll take time to catch up to the latest state, which can be resource-intensive and time-consuming. Validator Nodes: For users staking on certain blockchain networks, continuous uptime is crucial. Being offline might result in missed opportunities or even penalties. Considering these aspects, it's recommended to ensure your Dappnode device remains powered on and running at all times.","s":"2. Script Installation over Debian-based Distribution","u":"/docs/user/install/overview","h":"#2-script-installation-over-debian-based-distribution","p":430},{"i":440,"t":"When you want to perform a clean installation by installing the base operating system and Dappnode. Installing from an ISO will wipe the machine data and install Dappnode over Debian.","s":"ISO Installation","u":"/docs/user/install/iso","h":"","p":439},{"i":442,"t":"You can get the image downloading directly from Dappnode ISO or if you prefer you can build it from the source. Attended VS Unattended ISO Attended ISO: An attended ISO installation involves a manual setup process where the user must be present to make choices, answer prompts, and guide the installation through its various stages. It provides more control over the configuration, allowing for customization based on specific needs. Unattended ISO: The unattended ISO installation is an automated process where pre-defined settings are used to install Dappnode without user intervention. This is ideal for straightforward installations where default configurations are preferred. It speeds up the process and ensures consistency in the setup. Consider your specific requirements and the level of customization you need when deciding between these two installation methods.","s":"Get the ISO","u":"/docs/user/install/iso","h":"#get-the-iso","p":439},{"i":444,"t":"Burn the ISO to an USB stick. To do so we recommend using Balena Etcher for the OS with which you will prepare the USB to boot from your server and install Dappnode. danger If you trigger the installation in a machine containing data, all existing data will be erased.","s":"Burn the ISO in a USB","u":"/docs/user/install/iso","h":"#burn-the-iso-in-a-usb","p":439},{"i":446,"t":"After burning the ISO to the USB stick: Insert the USB stick into the machine where you want to install Dappnode. Reboot the machine. During the boot process, access the boot menu (the key to press varies depending on the machine manufacturer; commonly used keys include F2, F10, F12, ESC, or DEL). Select the USB stick as the boot device. The machine should now boot from the USB, and you'll see the Dappnode installation interface. info Make sure that an Ethernet cable is plugged in to your device during the installation process, otherwise it will fail.","s":"Boot from the USB","u":"/docs/user/install/iso","h":"#boot-from-the-usb","p":439},{"i":448,"t":"If you've chosen the Attended ISO, you'll be presented with a series of prompts asking for configuration details and preferences. Follow the on-screen instructions and provide the necessary input to proceed. If you've opted for the Unattended ISO, the installation will proceed automatically, using predefined settings. Default Credentials If you're using the Unattended ISO, the default credentials are: user: dappnode pass: dappnode.s0","s":"Follow the Installation Prompts","u":"/docs/user/install/iso","h":"#follow-the-installation-prompts","p":439},{"i":450,"t":"Once the installation is complete: Remove the USB stick. Reboot the machine (you might need to do this twice) On startup, Dappnode should be running. You can check it by executing docker ps in the terminal and some of the Dappnode Commands Finally, you can begin the post-installation setup and configuration. info Remember to keep your Dappnode running 24/7 for optimal performance, especially if you are hosting blockchain nodes or other continuous services. Congratulations! You've successfully installed Dappnode using the ISO method. For any further assistance or troubleshooting, always refer to the official Dappnode documentation or community support.","s":"Final Steps","u":"/docs/user/install/iso","h":"#final-steps","p":439},{"i":452,"t":"You can install Dappnode using the installation script. In this case, we recommend you use Ubuntu or Debian as your operating system.","s":"Script installation","u":"/docs/user/install/script","h":"","p":451},{"i":454,"t":"Before installing Dappnode, you need to install some prerequisites: Docker Docker-compose xz To install all the above prerequisites, execute the command below in the terminal of the machine you want to install Dappnode. If you already have the dependencies installed or you want to install them on your own you can skip this step. sudo wget -O - https://prerequisites.dappnode.io | sudo bash","s":"Prerequisites","u":"/docs/user/install/script","h":"#prerequisites","p":451},{"i":456,"t":"To install Dappnode, execute the next script: sudo wget -O - https://installer.dappnode.io | sudo bash","s":"Install Dappnode","u":"/docs/user/install/script","h":"#install-dappnode","p":451},{"i":458,"t":"To finalize the installation once it has finished completing, reboot your machine (you might need to do this twice): shutdown -r now","s":"Reboot","u":"/docs/user/install/script","h":"#reboot","p":451},{"i":460,"t":"If you are experiencing any problem or just want to make sure you are running the latest Dappnode versions, execute this command in the Dappnode terminal. This will update the core packages to the latest versions without erasing any data from your volumes. sudo wget -O - https://installer.dappnode.io | sudo UPDATE=true bash","s":"Restore to the latest version","u":"/docs/user/install/script","h":"#restore-to-the-latest-version","p":451},{"i":462,"t":"This command will uninstall Dappnode components (but not docker et al.). wget -qO - https://uninstaller.dappnode.io | sudo bash","s":"Uninstall","u":"/docs/user/install/script","h":"#uninstall","p":451},{"i":465,"t":"Bitcoin, the first and most well-known cryptocurrency, is a digital asset that introduced the concept of blockchain technology to the world. Created by an anonymous person or group under the pseudonym Satoshi Nakamoto, Bitcoin revolutionized the financial landscape by offering a decentralized and borderless form of value transfer.","s":"Exploring Bitcoin: The Pioneer of Cryptocurrency","u":"/docs/user/packages/bitcoin","h":"#exploring-bitcoin-the-pioneer-of-cryptocurrency","p":463},{"i":467,"t":"Running a Bitcoin node on Dappnode allows you to actively participate in the Bitcoin network’s operations. As a node operator, you help validate transactions, maintain a copy of the blockchain, and contribute to the network’s overall security and resilience. Operating a Bitcoin node not only benefits the network by enhancing its decentralization but also provides you with an opportunity to engage with the technology that powers the cryptocurrency revolution.","s":"Running a Bitcoin Node on Dappnode and Supporting the Network","u":"/docs/user/packages/bitcoin","h":"#running-a-bitcoin-node-on-dappnode-and-supporting-the-network","p":463},{"i":469,"t":"Bitcoin’s journey over the past decade has been marked by remarkable advancements and widespread adoption. As the original cryptocurrency, Bitcoin has demonstrated the potential of blockchain technology to disrupt traditional financial systems. Its decentralized nature, limited supply, and transparent ledger have positioned it as a store of value and a medium of exchange. By running a Bitcoin node on Dappnode, you contribute to the continued success and decentralization of the Bitcoin network.","s":"Bitcoin’s Role in Decentralization: A Decade of Innovation","u":"/docs/user/packages/bitcoin","h":"#bitcoins-role-in-decentralization-a-decade-of-innovation","p":463},{"i":472,"t":"Avalanche is an innovative open-source platform designed for launching decentralized finance applications and enterprise blockchain deployments within a single, highly scalable ecosystem. Developers leveraging Avalanche’s capabilities can effortlessly craft robust, secure applications and tailor-made blockchain networks. This platform empowers them to construct intricate rulesets or build atop existing private or public subnets, ultimately driving the creation of reliable and impactful solutions.","s":"Avalanche: A Revolutionary Consensus Protocol","u":"/docs/user/packages/avalanche","h":"#avalanche-a-revolutionary-consensus-protocol","p":470},{"i":474,"t":"info A guide to running an Avalanche validator node on Dappnode is coming soon. In the meantime, you can find more information on the Avalanche website. By running an Avalanche node on Dappnode, you actively participate in the decentralization of the network. Through this engagement, you contribute to the security and reliability of Avalanche’s consensus model. Engage in AVAX staking to contribute to the security and decentralization of the Avalanche network. Stake your AVAX tokens to become a delegator or validator, and in return, earn rewards for your participation in the Proof of Stake consensus mechanism. With a minimum of 2000 AVAX tokens required to start a validator, AVAX staking presents an opportunity to support the network while earning rewards.","s":"AVAX Staking on Dappnode: Earn Rewards while supporting Avalanche Network","u":"/docs/user/packages/avalanche","h":"#avax-staking-on-dappnode-earn-rewards-while-supporting-avalanche-network","p":470},{"i":477,"t":"Ethereum Classic, a steadfast blockchain, emerged from the Ethereum chain split, committed to upholding the unwavering principles of blockchain immutability. Ethereum Classic champions the preservation of transaction history and decentralized governance.","s":"Introducing Ethereum Classic: Preserving Blockchain Principles","u":"/docs/user/packages/ethclassic","h":"#introducing-ethereum-classic-preserving-blockchain-principles","p":475},{"i":479,"t":"Step into the Ethereum Classic universe and become a steward of its principles. Ethereum Classic’s commitment to blockchain origins offers a space for decentralized ideals to thrive. Through an Ethereum Classic node on Dappnode, you contribute to the preservation of an ecosystem where code remains law and history remains unaltered.","s":"Ethereum Classic on Dappnode: Supporting Decentralization","u":"/docs/user/packages/ethclassic","h":"#ethereum-classic-on-dappnode-supporting-decentralization","p":475},{"i":481,"t":"As a Dappnode user, there are times when having insights into the performance of your packages or your whole system can be incredibly beneficial. This means understanding the condition or \"health\" of your packages, the utilization of your computer resources such as CPU, RAM, and disk space, as well as monitoring network traffic flow. Yet, managing all of these aspects can become complex and tedious, even for those with experience. This is precisely where the Dappnode Monitoring Service (DMS) steps in to simplify matters.","s":"Dappnode Monitoring Service (DMS)","u":"/docs/user/packages/dms","h":"","p":480},{"i":483,"t":"DMS acts as a strong monitoring solution, simplifying the complex task of monitoring your packages and system by automatically collecting all available data and visualizing it for you. But how does it achieve this? DMS primarily comprises two key components: Prometheus and Grafana. Let's break it down Prometheus Integration: DMS seamlessly incorporates Prometheus, a comprehensive monitoring toolkit. Prometheus is responsible of gathering all data coming from other Dappnode packages. This information is the foundation for understanding your package's performance. Grafana Dashboards: To transform raw data coming from Prometheus into meaningful insights, DMS brings in Grafana, renowned for its exceptional data visualization capabilities. Through customizable dashboards, you gain instant access to both real-time and historical perspectives on how your packages are functioning. info 💡 While DMS can monitor data from your installed packages on its own, we highly recommend installing the Dappnode Exporter package as well. This package expands DMS's capabilities to monitor critical Dappnode system metrics, such as network traffic, CPU, RAM, and disk usage. Moreover, it unlocks new Grafana dashboards that visualize this data for your convenience. You can easily find the Dappnode Exporter in your DAppStore. Your Privacy Matters: At Dappnode, we respect your privacy. Rest assured that all the metrics collected by DMS are stored locally, ensuring your information remains private and secure.","s":"How It All Works","u":"/docs/user/packages/dms","h":"#how-it-all-works","p":480},{"i":485,"t":"Locate DMS in your DAppStore, listed among the Featured packages. The installation process is straightforward, much like any other Dappnode package. After installation, you can access DMS Grafana and explore all its dashboards by visiting http://dms.dappnode.","s":"Installing and accessing DMS","u":"/docs/user/packages/dms","h":"#installing-and-accessing-dms","p":480},{"i":487,"t":"As explained in the official Grafana documentation, Grafana simplifies data visualization through organized views known as dashboards. In the context of Dappnode, many packages, especially our staker packages, come equipped with pre-built Grafana dashboards that seamlessly integrate into DMS upon installation. These dashboards are designed to provide specific insights into the performance of the corresponding packages. To explore the range of available Grafana dashboards within DMS, follow these simple steps: Accessing Dashboards: Find the \"Dashboards\" icon on the left-hand side of the DMS interface and hover your mouse over it. Click on \"Browse\" to proceed. Dashboard Folders: In the dashboard browsing view, you'll see different dashboard folders. Each folder contains one or more dashboards related to specific aspects of your Dappnode environment. For instance, let's click on the \"Docker\" dashboard provided by the Dappnode Exporter package. Exploring a Dashboard: That's it! You are now within the chosen dashboard, such as the \"Docker\" dashboard. Here, you'll find valuable information about all your installed packages, including relevant metrics and performance indicators. As you navigate through these Grafana dashboards, it's worth mentioning that the official Grafana documentation provides a wealth of information about dashboards, visualization techniques, and best practices. Exploring this documentation can greatly enhance your ability to interpret and utilize the data presented in DMS dashboards. Whether you're new to Grafana or seeking advanced tips, the official documentation is a valuable resource for maximizing your monitoring experience. info 💡 If you're looking for specific dashboards beyond what comes pre-installed, Grafana's dashboard repository makes it easy to search and import dashboards created by the community. Feel free to check out the different dashboard folders and adjust how things look based on what you like. Grafana offers a bunch of cool features, so have fun exploring and making the dashboards work just right for you!","s":"Monitoring through Dashboards","u":"/docs/user/packages/dms","h":"#monitoring-through-dashboards","p":480},{"i":490,"t":"Monero stands as a privacy-focused cryptocurrency with a core focus on anonymity and transaction fungibility. Monero uses innovative cryptographic techniques to obscure transaction details, making it difficult to trace the sender, receiver, and transaction amount.","s":"Introducing Monero: A Privacy-Centric Cryptocurrency","u":"/docs/user/packages/monero","h":"#introducing-monero-a-privacy-centric-cryptocurrency","p":488},{"i":492,"t":"By running a Monero node in Dappnode, you play a crucial role in supporting the decentralized nature of the Monero ecosystem. You actively contribute to the decentralization of the network, playing a role in shaping a financial ecosystem that values privacy and security.","s":"Monero’s Package on Dappnode","u":"/docs/user/packages/monero","h":"#moneros-package-on-dappnode","p":488},{"i":495,"t":"All Dappnode's packages must be on chain, which means that need a digital signature for verification. This cryptographic signature serves as a stamp of authenticity, enabling users to prove the identity of the package's author and ensuring the integrity of its source. Before installing any package into your Dappnode environment, is essential to ensure that it comes from a trusted author. This measure is vital for safeguarding your Dappnode infrastructure against unauthorized access or potential security breaches.","s":"Dappnode's Packages Signatures","u":"/docs/user/packages/signature","h":"#dappnodes-packages-signatures","p":493},{"i":497,"t":"By default, our software comes with a set of pre-approved keys that have validation by the Dappnode team to ensure their reliability. However, users have the flexibility to manage these trusted keys according to their preferences. If you want to check the addresses trusted by us, or even add an address trusted by yourself, you can do it in the \"System\" tab on the side menu, within the \"Advanced\" module, in the \"Release trusted keys\" section. This feature could be particularly useful when users intend to install Dappnode packages sourced from alternative providers or even when developing their own packages. Nevertheless, it is strongly advised to have caution when modifying trusted keys and to only incorporate new addresses after thorough verification of their credibility.","s":"Release trusted keys","u":"/docs/user/packages/signature","h":"#release-trusted-keys","p":493},{"i":499,"t":"If a user attempts to install a package whose signature fails to match any of the trusted keys listed in the system, installation will be automatically blocked. However, is it possible to bypass this safeguard by toggling the trusted signature switch during the installation process. This one is only displayed if advanced options dropdown menu is active before the installation.","s":"Bypass trusted signature","u":"/docs/user/packages/signature","h":"#bypass-trusted-signature","p":493},{"i":502,"t":"Swarm is a decentralized data storage and distribution technology. Ready to power the next generation of censorship-resistant, unstoppable, serverless dApps. Node operators can stake BZZ to participate in the redistribution of funds, allowing Bee node operators to receive BZZ in return for providing storage and bandwidth. Node operators are rewarded with BZZ tokens, the native ERC-20 token. Beyond earning rewards, the Bee node serves as your personalized gateway to the Swarm network, offering you interactive access to content and dApps hosted on Swarm. The app enables you to: Securely store (upload and download) files on Swarm's decentralized storage. Share files privately and securely with others. Host and manage HTML websites conveniently.","s":"Introduction to Swarm","u":"/docs/user/packages/swarm","h":"#introduction-to-swarm","p":500},{"i":504,"t":"DappNode is a decentralized platform that serves as critical infrastructure for launching and managing decentralized applications (dApps) with an essence of providing users with self-sovereign data management and secure, uncensorable application interfaces. Node operators on DappNode can gain enhanced control over their participation in various blockchain networks and ensure that their activities, whether it be validating transactions, participating in consensus mechanisms, or supporting network security, are conducted in a seamless, autonomous manner. The unique DappNode ecosystem ensures: Seamless deployment and management of decentralized applications and nodes. Enhanced user control over data and privacy. Autonomous and secure participation in various blockchain networks. Simplification of running blockchain nodes, reducing technical barriers for participants.","s":"Introduction to Dappnode","u":"/docs/user/packages/swarm","h":"#introduction-to-dappnode","p":500},{"i":506,"t":"Swarm uses Gnosis Chain, formerly known as xDai, for managing its incentives. Therefore, the Swarm Bee client necessitates a connection to the Gnosis Chain. As such, we recommend installing Nethermind (direct Dappnode install link) as your RPC endpoint.","s":"Gnosis Chain","u":"/docs/user/packages/swarm","h":"#gnosis-chain","p":500},{"i":508,"t":"Step 1: Navigate to the package installer — Install Swarm(direct Dappnode install link). Click Install to initiate the installation. Step 2: Setup optional parameters: Swap RPC Endpoint (Gnosis Chain) — if you installed Nethermind and are running your own node, you can leave the default settings. Otherwise, if you use an external RPC endpoint, this is where you should set it. ENS resolver RPC (Ethereum Mainnet) — As bee can resolve ENS (a special type of blockchain name), it requires an Ethereum mainnet RPC endpoint. Install links are available for a variety of clients, or you can use an Infura RPC endpoint, or alternatively leave it blank to disable the ENS resolver. Initial chequebook deposit (xBZZ) — is the amount of xBZZ the bee node must have deposited to its address in order to deploy the chequebook. You have the option to set this to 0 and deposit BZZ into the chequebook later via the UI. Welcome message — some graffiti that you can admire at Swarm Scan or if you happen to be peering through the logs Full node mode — must be set to true or false, in order to stake and participate in storage incentives, and subsequently be rewarded, it should be set to true Storage data mountpoint — for advanced users; recommended to leave at default.","s":"Installing a Bee node","u":"/docs/user/packages/swarm","h":"#installing-a-bee-node","p":500},{"i":510,"t":"Import your gift code into Metamask or another web3 wallet on Gnosis chain. Remember, the gift code is a private key that holds 12 BZZ and 0.12xDAI. Transfer funds to your Node wallet address, which can be found in the logs or at Swarm UI/Account/Wallet. Visit Account/Staking. Click on 'Stake', input an amount of 10 BZZ, and then press the 'Stake' button.","s":"Engage in Storage Incentives by Staking Your BZZ","u":"/docs/user/packages/swarm","h":"#engage-in-storage-incentives-by-staking-your-bzz","p":500},{"i":514,"t":"One of Dappnode's top features is to offer a user-friendly interface to interact with different packages that contain clients and other applications. This section will go over the basic features you'll find in any Dappnode package. Info​ Version: You'll find both the package's version and its upstream version here. Getting Started: Some of the basic information needed to run the package. URLs: These will offer a number of different options, starting with bundled package UI/Dashboards and related tools such as Launchpads or external documentation. Package Status: Will provide information about the package's status, for example if it's running fine or if it has crashed or in the process of restarting. Pause/Restart Package: Useful for troubleshooting or restarting a stopped package. Remove Volumes: Also known as the \"gray trash bin\", this option will wipe all of the package's data and start syncing from scratch in the case of clients. Remove Package: This would be the \"red trash bin\", and clicking it will give you the option to preserve or delete the associated database. Config​ The package's settings will be available under this tab in both a simple and advanced mode. The advanced mode can be accessed by clicking the lower-right corner of the screen when available. Network​ Service: Some packages may have multiple services running as part of the same container. This option will allow you to adjust each of their network settings separately. Public port mapping: Need to change your package's port mapping? You can change this setting in this field as well as its protocol between TCP and UDP. HTTPs domain mapping: Do you want to expose your package to the internet? You'll be able to add multiple public domains to your package here. This is a great way to share your node's RPC with friends and family! Logs​ This is a great section for finding out something that is not working in your package or to look for both expected and unexpected behavior. Packages with multiple services will give you the option to switch logs in the top \"Service\" bar, something common for consensus clients for example, which usually run one service for the beacon-chain and another one for validator. Whenever you request for support in the Dappnode community, keep these handy! Backup​ This option will be available in packages that generate any kind of local database that includes sensitive information such as validator keystores. You'll have two very self-explainatory options: \"Backup Now\" and \"Restore Backup\". File Manager​ Also handy whenever your package has a database you'll need to access or modify, but without going through a terminal. Download and upload files in an easy way with the File Manager.","s":"Introduction","u":"/docs/user/packages/understanding-dappnode-packages","h":"#introduction","p":511},{"i":516,"t":"Dappnode uses smart contracts to distribute the dappnode packages available in the Dappstore. The smart contracts are deployed in the Ethereum blockchain and the Dappnode client interacts with them to get the list of available packages and to download them. Your dappnode will need a connection to an Ethereum node in order to read the smart contracts and download the packages. There are two ways to establish this connection: Full Node: By running a Full Node, you host the Ethereum blockchain. This ensures maximum control and independence, but requires syncing and maintaining the blockchain's latest state. Remote Node: Using a Remote Node means relying on an external Ethereum node. It's less resource-intensive but demands trust in the node operator. tip To configure your dappnode Ethereum repository go to http://my.dappnode/repository/eth","s":"Ethereum repository","u":"/docs/user/repository/ethereum","h":"","p":515},{"i":518,"t":"When choosing to run your own Ethereum node, you will need to select: Execution client Consensus client Moreover, it is highly recommended to enable these additional options: Use remote during syncing or errors: If enabled, this will auto-switch from your Local node to the Dappnode Remote node under certain conditions. For instance, if your Ethereum node is syncing or if it's unavailable for some reason. Activating this option ensures uninterrupted access to the Dappnode smart contracts even if there's an issue with your Local node. Use checkpointsync: By enabling this, your consensus client will utilize a checkpoint to fast-track the syncing of the Ethereum blockchain, making the process much quicker quicker. caution Making changes here will also modify selections in the Stakers tab. caution Running your own Ethereum node requires a lot of resources. You will need a powerful machine with a lot of storage and a good internet connection. If you don't have a powerful machine, you can use a remote Ethereum node.","s":"Run your own Ethereum node","u":"/docs/user/repository/ethereum","h":"#run-your-own-ethereum-node","p":515},{"i":520,"t":"You can use a remote Ethereum node to connect to the Ethereum network. You will need to trust the node operator. note At the moment, we only support Dappnode official Ethereum node. We are working on a way to allow users to add their own remote Ethereum nodes RPC endpoints. See https://github.com/dappnode/DNP_DAPPMANAGER/issues/1245","s":"Use a remote Ethereum node","u":"/docs/user/repository/ethereum","h":"#use-a-remote-ethereum-node","p":515},{"i":522,"t":"Why did my clients change in the Full Node Repository selection? At the moment, Dappnode only supports running one Ethereum mainnet node. If you change your selection in the Stakers menu, it will also change in the Repository menu.","s":"Troubleshooting","u":"/docs/user/repository/ethereum","h":"#troubleshooting","p":515},{"i":524,"t":"Dappnode leverages IPFS for distributing packages available in the Dappstore. To download these packages, your Dappnode requires a connection to an IPFS node. When it comes to connecting to the IPFS network, you have two primary choices: Run Your Own IPFS Node: By opting for this, you maintain full control, ensuring that you directly access the distributed packages without intermediaries. However, it might require some disk space. Use a Remote Node: This is a convenient option, but it comes with the caveat of needing to trust the remote node operator. It is really useful in case your own IPFS node becomes unreliable or unavailable. tip To configure your dappnode IPFS repository go to http://my.dappnode/repository/ipfs","s":"IPFS repository","u":"/docs/user/repository/ipfs","h":"","p":523},{"i":526,"t":"You can run your own IPFS node to connect to the IPFS network. This is the recommended option for those users who want to have full control over their dappnode. Dappnode comes with an IPFS node preinstalled and configured. You can access the IPFS Web UI while connected to your Dappnode. caution Running your own IPFS node may affect your internet connection. If you don't want to run your own IPFS node, you can use a remote IPFS node. Consider stopping your IPFS node if you are not using it at IPFS Package","s":"Run your own IPFS node","u":"/docs/user/repository/ipfs","h":"#run-your-own-ipfs-node","p":523},{"i":528,"t":"You can use a remote IPFS node gateway to connect to the IPFS network. You will need to trust the node operator. Dappnode provides an Official IPFS gateway by default, but you can choose any other IPFS gateway. IPFS gateways and security Connecting to IPFS remote gateways could entail security risks. For example, the gateway could attempt to serve malicious content to the user. We mitigate this risk by verifying the content downladed with CID technology. If the Dappnode IPFS gateway is not available (we make no uptime guarantees and we offer it on a best-effort basis) the user can set another IPFS gateway in the input field as last resort. Check out all the IPFS gateways available","s":"Use a remote IPFS node","u":"/docs/user/repository/ipfs","h":"#use-a-remote-ipfs-node","p":523},{"i":530,"t":"I can't see the logos of the packages in the Dappstore/Stakers tab. Why? This might be related to an issue with IPFS. Try the following solutions: IPFS Mode: Navigate to the repository. Toggle between local and remote IPFS modes to see which one works. IPFS Package Status: If your IPFS mode is set to local, ensure that the IPFS package is running. Visit IPFS Package to verify its status and click on \"Start\" if it is stopped. If it's restarting, consider updating the IPFS package to its latest version. Post update, remove its volumes to address any potential database migration issues. Gateway Validity: For remote IPFS mode, make sure the gateway URL in the repository is correct. I'm using local IPFS and encountering issues downloading packages. What should I do? This could arise from various factors: Internet Connection: Your connection might be unstable. Consider switching your IPFS node mode to lowpower by accessing IPFS config. Disk Space: Your local IPFS node might be out of storage. Clear the storage by opting for \"Remove volumes\" at IPFS package info. Dappnode Official Gateway as Peer: Ensure that the Dappnode Official Gateway is added as a peer to your local IPFS. You can add it directly by clicking here. Tip: If these solutions don't resolve the issue, switch to the remote IPFS mode at IPFS repository.","s":"Troubleshooting","u":"/docs/user/repository/ipfs","h":"#troubleshooting","p":523},{"i":532,"t":"Rollups are advanced layer-2 scaling solutions designed to increase the throughput of the Ethereum network. By executing and storing transaction data off the main Ethereum chain while keeping a cryptographic commitment on-chain, Rollups enhance scalability and reduce fees. Rollups can be broadly categorized into two types: Optimistic Rollups and zk-Rollups, each with its unique approach and trade-offs. Currently, we support: 🍀 Optimism: An optimistic Layer 2 solution for Ethereum, enhancing speed and efficiency.","s":"Ethereum Rollups: An Overview","u":"/docs/user/rollups/overview","h":"","p":531},{"i":534,"t":"To enable this feature, you need to switch on the rollups module in the top bar of the Dappnode UI (Dappmanager):","s":"Enable rollups","u":"/docs/user/rollups/overview","h":"#enable-rollups","p":531},{"i":536,"t":"Optimism is Ethereum's Layer 2 solution, leveraging Optimistic Rollups to enhance transaction speeds and lower costs. It conducts transactions off-chain, reconciling final states on the main Ethereum chain, all while preserving compatibility with Ethereum smart contracts.","s":"Optimism Rollup","u":"/docs/user/rollups/optimism","h":"","p":535},{"i":538,"t":"Optimism stands out as the inaugural choice in the Rollups suite. Initiating an Optimism node on Dappnode parallels the familiar Stakers Menu, yet with some distinctions: Utilize an op-node client to link with the Optimism Mainnet. Employ op-geth or op-erigon to bridge your op-node to Ethereum's execution layer, echoing the beacon chain/consensus client's role on the mainnet. For archive nodes, op-legacy is essential for transactions predating the Bedrock upgrade. A connection to an Ethereum Mainnet node is required. If your Dappnode already operates one, the Rollups menu will streamline configuration. Otherwise, integrate a public RPC for Ethereum Mainnet connection. For a deeper dive, consult Optimism’s documentation: OP Geth docs Test In Prod - OP Erigon OP Node Operator","s":"Setting Up an Optimism Node","u":"/docs/user/rollups/optimism","h":"#setting-up-an-optimism-node","p":535},{"i":541,"t":"Diva is an Ethereum Liquid Staking protocol powered by Distributed Validator Technology (DVT). It extends Ethereum's Proof of Stake providing new functionality for Stakers and Operators: Liquid Stakers receive divETH, a Liquid Staking Token which generates Ethereum Staking Rewards. Operators run a Distributed Validation node to fulfill staking duties and earn additional Operator Rewards. This package allows you to run a Diva Operator node, and it is available for the Holesky Testnet. The Ethereum mainnet version of this package is still undergoing testing and will be available in the DAppStore soon.","s":"Introduction","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#introduction","p":539},{"i":543,"t":"The first thing you'll need to do is set up a fully-synced node. This can be don through the Stakers Menu in Dappnode by selecting: 1 Execution Client (Geth, Besu, Erigon or Nethermind) 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus) MEV Boost (optional) Installing the Diva package for Dappnode. This can be done by visiting the DAppStore in the Dappnode UI. You'll be asked to set two passwords when going through the installation process, as well as your operator's address and Discord handle (for testnet purposes).","s":"Requirements","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#requirements","p":539},{"i":545,"t":"After successfully installing the Diva package, you'll need to access the package's interface by clicking on UI. This will take you to the Diva app where you'll need to connect your wallet to register your Diva node as an operator. You can register multiple operators using the same wallet. info The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe!","s":"Registering a Dappnode Diva Operator","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#registering-a-dappnode-diva-operator","p":539},{"i":547,"t":"Divascan is a tool developed to monitor Diva nodes and operators. You can enter your operator address to get information on the validators' performances. You can also get more information on the Diva protocol.","s":"Monitoring your Diva nodes","u":"/docs/user/staking/ethereum/dvt-technologies/diva","h":"#monitoring-your-diva-nodes","p":539},{"i":550,"t":"The Obol Network package for Dappnode aims to make it seamless for Dappnode users to integrate and benefit from Obol's Distributed Validator Technology (DVT). A Distributed Validator is one or more logical Ethereum validators being operated across a number of nodes that are all online simultaneously and that all control a subset of the validators' private keys. Each of these nodes need to run an Execution client, a Consensus client, a Distributed Validator client, and a Validator client/Key Manager. The distributed validator clients in these nodes come to consensus on what should be signed before constructing a signature for the validator that will be accepted by the wider Ethereum network. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage, contributing to a stronger and more resilient network. The Obol Dappnode package is available for Ethereum Mainnet and the Holesky Testnet.","s":"Introduction","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#introduction","p":548},{"i":552,"t":"The first thing you'll need to do is set up a fully-synced node. This can be done through the Stakers Menu in Dappnode by selecting: 1 Execution Client (Geth, Besu, Erigon or Nethermind) 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus) MEV Boost (optional) Install the Obol package from the DAppStore.","s":"Requirements","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#requirements","p":548},{"i":554,"t":"It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator Cluster with. You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility. Negligence on behalf of others in your group can put you at risk, however as far as 66% of these nodes are synced the validators will keep performing their duties. Once all participants have synced nodes, you'll need to install the Obol Dappnode package. After Dappnodes are ready, the next steps will take place at Obol's Distributed Validator Launchpad. There's a launchpad for Ethereum Mainnet and another one for the Holesky Testnet. Start by connecting your wallet and selecting the option that best fits your DV's distribution and setup.","s":"First Steps","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#first-steps","p":548},{"i":556,"t":"For creating a new cluster with a group, all operators must have an operator's address, which will submit the necessary information to the launchpad. The first step in the configuration process will be to select the cluster size and to enter the operator's adresses. In this next step, you'll be required to enter your Charon client's ENR, which is a public key that will give your node a unique ID. This ENR can be obtained after installing the Obol Dappnode package under the Info tab. warning The Obol Dappnode package supports up to 5 ENRs. This means that you can participate in 5 different clusters with 5 different ENRs using the same package, however it's important to properly backup the package's database if the generated ENRs are committed to functional clusters. Next, you'll need to specify the amount of validator keys that this cluster will be generating and how these validators will be splitting the rewards. You can read more about the Obol Splits contract and the different options it offers in Obol's documentation. The last step will require that you perform a signature from your operator's address to generate a cluster invite link. You'll need to share this invite link with the rest of the operators so that they can register their ENRs and set everything up for the Distributed Key Generation (DKG) event.","s":"Cluster Configuration","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#cluster-configuration","p":548},{"i":558,"t":"After all operators have successfully submitted their ENRs, the Obol launchpad will generate a \"Definition File URL\" we'll need to load in our Obol Dappnode package's configuration to proceed with the DKG. Copy the URL under the Dappnode tab in the Launchpad, go to your package's configuration section and enter it in the cluster number corresponding to the ENR you submitted in the launchpad. Make sure URL is selected under \"Config Mode\" and apply the configuration. After all operators have completed this step the DKG ceremony will start automatically and each of the operators' keystores will be stored in the Obol package's database. danger Please make sure to create a backup of your Obol package. If you lose your private keys you won't be able to start the DV cluster successfully and may risk your validator deposit becoming unrecoverable. Ensure every operator has their backup secured before activating any validators.","s":"Distributed Key Generation (DKG) Event","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#distributed-key-generation-dkg-event","p":548},{"i":560,"t":"After the DKG has succeeded and all of the operators have backed up their cluster's keys, it's time to move on to the validator's deposits. The launchpad will show you an option to submit a deposit_data.json file. You can get this file if you decompress your Obol package's backup and look for it inside the charon folder corresponding to the cluster number you intend to run. The launchpad will confirm that you have enough balance in your connected wallet to perform the validator deposit and make you go over final checks prior to signing the deposit. Remember that if you have any questions, you can always drop by the Dappnode Discord server to ask for community support.","s":"Adding Validators to an Active Cluster","u":"/docs/user/staking/ethereum/dvt-technologies/obol-network","h":"#adding-validators-to-an-active-cluster","p":548},{"i":563,"t":"SSV is a network of validators that use a decentralized network of operators to run their validators. This package allows you to run an SSV Operator Node. The package is available for Ethereum Mainnet and the Holesky Testnet. A Distributed Validator is one or more logical 32 ETH validators being operated across a number of nodes that are all online simultaneously and that all control a subset of each validator’s private keys. Dividing a validator across a group of nodes allows for fault tolerant validators that can remain online and validating despite a subset of its nodes experiencing an outage. The SSV network allows both users and operators to diversify staking risks, optimize performance, and promote decentralization across the Ethereum consensus layer with a wide range of configuration options.","s":"Introduction","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#introduction","p":561},{"i":565,"t":"The first thing you'll need to do is set up a fully-synced node. This can be don through the Stakers Menu in Dappnode by selecting: 1 Execution Client (Geth, Besu, Erigon or Nethermind) 1 Consensus Client (Prysm, Lighhouse, Lodestar, Teku or Nimbus) MEV Boost (optional) Installing the SSV package for Dappnode. This can be done by visiting the DAppStore in the Dappnode UI and installing the SSV (Ethereum Mainnet) or SSV Holesky package. Plus, you'll need to get the following information: Operator public key: Shown in your SSV package's Info tab after installing it. Operator fee: The fee charged by the operator per each managed validator. You can find more info about this in the SSV documentation. Keep in mind this fee can be changed later on if needed.","s":"Requirements","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#requirements","p":561},{"i":567,"t":"After successfully installing the SSV package, an operator must register it to the SSV Network in order to be discoverable by validators. You'll be able to do so in the SSV network web app. info The wallet address used to register the operator is the only address that will hold management permissions for it, so make sure you keep it safe! Make sure to connect your Web3 wallet with the WebApp, and that the address corresponds with the one you want to manage your Operators with. If you are connecting for the first time, you should see a screen like the image below. Select Join as Operator. In the following screen, select Register Operator. The next screen will ask you to input the Operator's public key and provide a confirmation of the Operator owner address. As mentioned earlier, this Operator's public key is shown in your SSV package's Info tab after installing it. caution Please verify once more that the owner address correspond to the wallet address you want to manage your operators with. Click Next when ready. In the following screen you'll be asked to set the Operator Fee, which is the fee charged by the operator per each managed validator. You can find more info about this in the SSV documentation. Keep in mind this fee can be changed later on if needed. Enter a number and click Next when ready. This confirmation screen presents a recap of the information input so far. Double check everything and click Register Operator when ready. This will generate a blockchain transaction you'll need to confirm to complete the Operator registration. Once the transacion goes through your Operator is successfully registered, and stakers could now choose it to operate their validators. warning In SSV you may or you may not be an operator in the cluster where you'll be validating. Keep this in mind for good security practices when splitting validator keys.","s":"Registering a Dappnode SSV Node as an Operator","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#registering-a-dappnode-ssv-node-as-an-operator","p":561},{"i":569,"t":"If you want to run the dkg service, make sure the operator is registered in the SSV network and check the service is not stopped in the SSV Info Tab. Add your node as a DKG endpoint in the SSV App Operator Config. You must set: http://:14515. Make sure your 14515 port is open in your router setup. info You can get your public IP bu clicking on the avatar in the upper-right corner of the Dappnode UI. It's important that you understand that the requirements of the DV node runner are not the same as a Solo Stakers'. This technology facilitates the creation of Distributed Validators between a group of independent people. This means you are placing significant trust in the participants you'll run this Distributed Validator with. You need to ensure every operator in the Cluster is competent and trustworthy before sharing this responsibility. If you have any questions, don't hesitate to drop by the Dappnode Discord server.","s":"Exposing your DKG service","u":"/docs/user/staking/ethereum/dvt-technologies/ssv-network","h":"#exposing-your-dkg-service","p":561},{"i":572,"t":"StakeWise is an LSD network service that allows anyone to benefit from the yields available on the Ethereum Beacon Chain. StakeWise runs secure and stable institutional-grade infrastructure, combined with unique tokenomics, to provide the highest possible staking yields for its users. As a liquid staking platform, users are free to un-stake at any time or utilise their staked ETH capital to earn enhanced yields throughout DeFi. There is no minimum ETH requirement to stake with StakeWise and the platform fees are the lowest seen across the industry.","s":"StakeWise Overview","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","h":"#stakewise-overview","p":570},{"i":574,"t":"Solo and Pooled Staking: StakeWise allows users the flexibility to choose between solo staking and joining a staking pool. Tokenized Staking Rewards: StakeWise tokenizes staking rewards, which users can trade, providing liquidity and flexibility. Comprehensive Dashboard: Users have access to a detailed dashboard that displays staking performance, rewards, and other essential metrics. Transparent Fee Structure: StakeWise prides itself on transparent fees with no hidden charges, ensuring users retain maximum rewards. Integrated with DappNode: Easy setup, monitoring, and management of StakeWise directly from your DappNode interface. Active Community Engagement: StakeWise boasts an active community, ensuring users get timely support and updates.","s":"Package Key Features","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","h":"#package-key-features","p":570},{"i":576,"t":"Package Installation: Go to the DappNode Admin UI. In the 'Packages' section, search for the StakeWise package. Click 'Install'. Once installed, StakeWise should appear in your installed packages list. Setting up the Environment: Ensure you have connected your DappNode to the Ethereum network. For best results, secure a stable and fast internet connection for your DappNode. Beginning the Staking Process: Navigate to the StakeWise dashboard in the DappNode UI. Decide between solo staking or joining a staking pool. Specify the amount of ETH you wish to stake. Follow the on-screen instructions to initiate your staking. Funding your Staking: Transfer your chosen ETH amount to the provided staking address. Be sure to safely store and remember this address. Monitoring and Management: With staking active, use the StakeWise dashboard on DappNode to oversee performance, track rewards, and manage other staking aspects. Staking on Ethereum 2.0, though potentially profitable, isn't without risks. While StakeWise makes the process user-friendly, it's vital to understand all potential implications and prioritize your investments' security. For more in-depth insights and assistance, consider exploring StakeWise's official documentation and joining the discussions on DappNode's community forums.","s":"First Steps to Start Staking with StakeWise and Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/stakewise","h":"#first-steps-to-start-staking-with-stakewise-and-dappnode","p":570},{"i":579,"t":"Rocketpool is a decentralized Ethereum staking solution that allows users to earn rewards by staking their Ether (ETH). It's designed to be inclusive, allowing those without the full 32 ETH required for an Ethereum validator to be able to participate. Rocketpool achieves this through its innovative \"minipool\" concept, which facilitates pooled staking among multiple participants.","s":"Rocketpool Overview","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","h":"#rocketpool-overview","p":577},{"i":581,"t":"Decentralized Staking: The Rocketpool package ensures that staking remains decentralized by using your Dappnode's local Ethereum node, safeguarding the core principles of the Ethereum network. Rocketpool also operates on smart contracts, ensuring that operations are transparent, auditable, and free from centralized control. Minipools: Users can start a minipool with as little as 16 or 8 ETH, allowing for broader participation in Ethereum's block creation. Integrated with DappNode: Easy setup, monitoring, and management of Rocketpool directly from your Dappnode interface.","s":"Package Key Features","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","h":"#package-key-features","p":577},{"i":583,"t":"Package Installation: In your Dappnode's UI, navigate to the DAppStore. Find the Rocketpool package. Click 'Install'. Once installed, the Rocketpool package should appear in your installed packages list. Setting up the Environment: Ensure you're running a full, synced Ethereum node (Execution client + Consensus client). If you are not running a full Ethereum node yet, go to the Stakers Menu, select your clients and apply the configuration to start syncronization. Starting a Minipool: Navigate to the Rocketpool package dashboard. Choose the amount of ETH you wish to stake. Remember, you can start a minipool with as little as 16 or 8 ETH. Follow the on-screen instructions to initialize your minipool. Funding your Minipool: Send the amount of ETH you’ve chosen to the provided address. Make sure you keep track of this address, as it will be the address of your minipool. Monitoring and Management: Once your minipool is active, you can monitor its performance, rewards, and other details with Dappnode's DMS. It's essential to remember that while Rocketpool simplifies the staking process, it's crucial to understand the risks involved. Always make sure to do thorough research and ensure the security of your investments.","s":"First Steps to Start a Minipool with Rocketpool and Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/rocketpool","h":"#first-steps-to-start-a-minipool-with-rocketpool-and-dappnode","p":577},{"i":585,"t":"The Holesky testnet is a testnet for the Ethereum ecosystem, serving as a sandbox for users and developers alike. Dappnode paves an easy pathway for enthusiasts to operate a node on the Holesky testnet, ensuring practical experience without the risks associated with the mainnet.","s":"Holesky Testnet","u":"/docs/user/staking/ethereum/solo/holesky","h":"","p":584},{"i":587,"t":"You can locate the Holesky testnet under the Holesky tab in the Stakers Menu. If you want to run Holesky testnet validators, you'll also need to select Web3Signer Holesky.","s":"Navigating to Holesky in Dappnode","u":"/docs/user/staking/ethereum/solo/holesky","h":"#navigating-to-holesky-in-dappnode","p":584},{"i":589,"t":"Hands-on Experience: Running a validator on the Holesky testnet offers invaluable practical knowledge. It mimics the mainnet processes, providing a comprehensive understanding of node operation. Risk-free Exploration: As it's a testnet, you're not staking real ETH. This provides an opportunity for experimentation without the financial stakes of the main Ethereum network. tip If you're new to Ethereum or wish to familiarize yourself with node operation intricacies, starting with the Holesky testnet is highly recommended. It's the perfect platform for hands-on learning in a risk-free environment.","s":"Why Run a Holesky Testnet Node?","u":"/docs/user/staking/ethereum/solo/holesky","h":"#why-run-a-holesky-testnet-node","p":584},{"i":591,"t":"If you're interested in getting 32 HolETH for running a test validator, you can get it in the Holesky PoW Faucet. Make sure you understand how the faucet works before doing your request, as it will temporarily impact your computer's performance in the claiming process.","s":"Holesky Faucet","u":"/docs/user/staking/ethereum/solo/holesky","h":"#holesky-faucet","p":584},{"i":594,"t":"Stakehouse’s mission is to bring the benefits of ETH staking to the mainstream user. To do this Blockswap developed a public benefit infrastructure favoring solo stakers. Those who are most important to the Ethereum blockchain now have access to the Stakehouse middle layer which is like ETH staking with superpowers. Not only are solo stakers empowered, but anybody who touches staked ETH or its peripheries can benefit from a protocol that creates multichain ETH without a bridge, doesn’t pool users’ assets, doesn’t collect a commission, doesn’t require a particular node, and doesn’t use an oracle.","s":"Stakehouse Overview","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","h":"#stakehouse-overview","p":592},{"i":596,"t":"Integration with Web3Signer: When being a node operator, you can import your keystores into Web3Signer and select Stakehouse under the \"Staking Protocol\" field. Web3Signer takes care of the rest! Staking Inclusion: Users can run a validator for 4 ETH or provide liquidity with as little as 0.001 ETH, to earn Ethereum consensus rewards. The users of LSD Networks can range from DAOs to node operators to general users who have ETH to stake.","s":"Package Key Features","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","h":"#package-key-features","p":592},{"i":598,"t":"Setup your LSD: Go to Stakehouse's LSD wizard and click \"Deposit\" under \"Node Operator\". Follow the steps to generate your key. Make the initial 4 ETH deposit. Import your keystore file into Web3Signer: When you import your keystore, make sure you select Stakehouse under \"Staking protocol\". This will automatically set your Fee Recipient address and point it to your LSD. Pay special attention to this, since failing to properly configure the Fee Recipient may incurr in penalties for the Node Runner. Staking, though lucrative, also comes with inherent risks. Stakehouse simplifies the process but doesn't eliminate the risks. It's essential to conduct thorough research and always prioritize safety. For further guidance and details, refer to Stakehouse's official documentation, or drop by Dappnode's Discord server for support.","s":"First Steps to become a Node Runner with Stakehouse and Dappnode","u":"/docs/user/staking/ethereum/lsd-pools/stakehouse","h":"#first-steps-to-become-a-node-runner-with-stakehouse-and-dappnode","p":592},{"i":600,"t":"Ethereum stands as a titan in the realm of smart contract platforms. Its monumental shift from Proof of Work (PoW) to Proof of Stake (PoS) has opened up opportunities for individuals to participate in Ethereum's block production by staking ETH. Dappnode simplifies your journey to becoming a Solo Staker and start earning. You will need to do 3 main tasks, broken down below: Install the necessary packages on Dappnode Create validator keys Deposit ETH into the Ethereum deposit contract","s":"Ethereum mainnet","u":"/docs/user/staking/ethereum/solo/mainnet","h":"","p":599},{"i":602,"t":"Dappnode makes it super simple to install everything you need to run a validator. Via the Stakers UI you will be able to install the following packages: Execution Client (Choose one): Geth, Nethermind, Erigon, or Besu. Consensus Client (Choose one): Prysm, Lighthouse, Teku, Nimbus, or Lodestar. Choosing the right Execution Client Erigon is an execution client that focuses on retrieving and storing more data than the default options of other clients. This is useful to run historical queries or to use apps that require tracing/archive nodes like Otterscan or Trueblocks. Make sure you have at least 3 TB free in your hard drive to run Erigon. Checkpoint Sync is your friend for syncing Consensus Clients Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of \"checkpoint sync\". Make sure to toggle the \"use checksync\" option when installing your consensus client, and you can change at any point from one to another with barely any downtime. After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs. MEV BOOST MEV Boost is an extra piece of software not belonging to the core Ethereum stack. It allows your validator to receive blocks that have been created by special \"block builders\" that try to extract MEV from the network, and receive extra rewards for including them in the chain when it's your turn to propose a block. However, it is very new technology and can be risky to use.","s":"1. Install the necessary packages on Dappnode","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#1-install-the-necessary-packages-on-dappnode","p":599},{"i":604,"t":"info This guide will use the Wagyu keygen tool to generate your validator keys. There are other options like a command-line tool by the Ethereum Foundation, but they are harder to use. What are all these keys? 🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the chain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them. 🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever. 🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 32 ETH while your validator is active, and all your balance above 0 ETH when you exit the validator set. You need to keep this address safe as it's where your ETH will go, and cannot be changed. Download the latest release of the Wagyu Key Gen from here. Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the program. You will be given 2 options, either create a new mnemonic or import an existing mnemonic, and you will be able to choose the network for which you are generating the keys. The GUI is very user friendly and explains all steps along the way. You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place. To ensure that you have copied it somewhere, it will ask you to type it again. Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent. Select a folder where to save the keys Wait for the keys to be generated And you are done! You will find your keys in the folder you selected. You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page. tip 💡 *Want to learn more about Ethereum keys and key generation?*💡Learn more Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to the Web3signer that you installed during step 1. Return to the Dappnode UI and navigate to the Stakers > Ethereum menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page. Then click on the Import Keystores button on the lower part of the Web3Signer UI. Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores. You are now ready to fund these validator accounts and start validating!","s":"2. Creating the keys for your validator","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#2-creating-the-keys-for-your-validator","p":599},{"i":606,"t":"The final step is to fund your validator with the 32 ETH necessary to register as a validator and start receiving validation work! To do this, you will need to send 32 ETH to the Ethereum deposit contract. We will be using the official Ethereum launchpad for this. Navigate to the launchpad Read all the advisories... they contain important information that will help you understand the whole process! Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections: We continue until the \"Upload Deposit Data\" section. Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called deposit_data-*.json The moment to do the deposit is here! Connect your wallet (yes, the one that has the 32 ETH!). And follow the steps to send the 32 ETH to the deposit contract! warning You will be prompted to review the deposit address in the next step. PLEASE DO SO! MAKE SURE YOU ARE SENDING THE 32 ETH TO THE RIGHT DEPOSIT ADDRESS! After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the beaconcha.in explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the Dappnode Web3signer UI, where you uploaded the keystores. [PENDING SCREENSHOT]","s":"3: Deposit ETH into the Ethereum deposit contract","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#3-deposit-eth-into-the-ethereum-deposit-contract","p":599},{"i":608,"t":"Considering MEV Boost? It allows your validator node to propose different relays when it's its turn. However, before diving in, a thorough understanding of the relays and any local regulations is paramount. Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.","s":"Additional Opportunities: MEV Boost","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#additional-opportunities-mev-boost","p":599},{"i":610,"t":"Once you want to finish your staking journey, you will need to withdraw your ETH from the Beacon Chain. This process consists of exiting the validator from the Dappnode UI. Ethereum withdrawals are state changes in the execution layer This means that once you reach the end of the Beacon Chain's exit queue, your 32 ETH will show up in your withdrawal address as a state change in the blockchain, and not as a deposit. You can find more info here.","s":"Withdrawing my ETH","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#withdrawing-my-eth","p":599},{"i":612,"t":"Navigate to the Stakers > Ethereum menu and click on the Upload Keystores button on the Web3Signer card. Once you are in the Web3Signer UI, select the validators you want to exit and click on the Exit Validator button on the top right part of the UI. Follow the instructions and type \"I want to exit\", followed by Exit. Now the message to exit will be broadcasted to the network. Withdrawal queue Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the Beacon Chain Explorer. Please be patient as the Beacon Chain exit queue can get long and wait times might take up to several weeks. Voilà! Your ETH will appear on your withdrawal address!","s":"Opening your Web3Signer UI.","u":"/docs/user/staking/ethereum/solo/mainnet","h":"#opening-your-web3signer-ui","p":599},{"i":615,"t":"Dappnode makes it extremely simple to stake and validate Proof-of-Stake chains such as Ethereum, Gnosis Chain and LUKSO. Not only do you contribute to the network's security, but you also earn handsome rewards. Dappnode offers you the best UX, through our Stakers UI, with which you can run a validator node in a few simple steps and without ever needing command line or technical knowledge.","s":"Decentralize Proof-of-Stake chains and earn","u":"/docs/user/staking/overview","h":"#decentralize-proof-of-stake-chains-and-earn","p":613},{"i":617,"t":"You can run all the infrastructure for Ethereum, Gnosis Chain and LUKSO in 4 steps through the Stakers UI: Apart from installing the nodes, you will need to generate the keys for the validator and deposit (or \"stake\"!) your crypto. Please refer to each section for Ethereum, Gnosis Chain and LUKSO for step-by-step guides.","s":"The Stakers UI","u":"/docs/user/staking/overview","h":"#the-stakers-ui","p":613},{"i":619,"t":"Yes! Thanks to LSDs AND DVT tech, you don't need 32 ETH to stake. Or you can stake in Gnosis Chain or LUKSO, which have more affordable cost for a solo validator. For more information on LSDs and DVT and how you can stake Ethereum without 32 ETH, please check their dedicated pages on the side menu under Ethereum > LSD Pools or Ethereum > DVT.","s":"Can I stake without 32 ETH?","u":"/docs/user/staking/overview","h":"#can-i-stake-without-32-eth","p":613},{"i":621,"t":"Staking is the act of allocating a portion of your cryptocurrency holdings as collateral to participate in: Validating Blocks: Confirming transaction records and adding them to the blockchain. Securing the Chain: Ensuring the network remains resistant to malicious intentions. Earning Rewards: As a validator, you get paid for your services in the form of more cryptocurrency.","s":"What is Staking?","u":"/docs/user/staking/overview","h":"#what-is-staking","p":613},{"i":623,"t":"Simplicity is our mantra! We've streamlined the staking process, so all you need to do is: Select your desired blockchain. Dive into our comprehensive documentation for step-by-step guidance. Begin your staking journey. Happy Staking!","s":"Why Stake with Dappnode?","u":"/docs/user/staking/overview","h":"#why-stake-with-dappnode","p":613},{"i":625,"t":"Gnosis Chain stands as a sentinel, functioning as a canary chain for Ethereum. It's operated and nurtured by the GnosisDAO community. With over 10% of its validators being home stakers via Dappnode, it's a testament to its popularity and accessibility.","s":"Gnosis Chain","u":"/docs/user/staking/gnosis-chain/solo","h":"","p":624},{"i":627,"t":"Staking on the Gnosis Chain is both easy and economical. All it takes is 1 GNO to kickstart your journey as a Gnosis Chain validator. This low barrier to entry ensures that anyone, regardless of their financial position, can participate actively in the network as a block proposer. You will need to do 3 main tasks, broken down below: Install the necessary packages on Dappnode Create validator keys for Gnosis Chain Deposit GNO into the Gnosis Beacon Chain deposit contract","s":"Joining the Gnosis Chain as a Validator","u":"/docs/user/staking/gnosis-chain/solo","h":"#joining-the-gnosis-chain-as-a-validator","p":624},{"i":629,"t":"Similar to Ethereum mainnet, Dappnode makes it very easy to set up you Gnosis Chain validator. Here's what the Stakers UI looks like for Gnosis Chain: Execution Client (Choose one): Nethermind Xdai (Available now) Gnosis Erigon (Coming soon!) Consensus Client (Choose one): Lighthouse Gnosis Teku Gnosis Lodestar Gnosis Web3Signer Gnosis Checkpoint Sync is your friend for syncing Consensus Clients Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of \"checkpoint sync\". Make sure to toggle the \"use checksync\" option when installing your consensus client, and you can change at any point from one to another with barely any downtime. After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.","s":"1. Install the necessary packages on Dappnode","u":"/docs/user/staking/gnosis-chain/solo","h":"#1-install-the-necessary-packages-on-dappnode","p":624},{"i":631,"t":"info This guide will use the Gnosis Wagyu keygen tool to generate your validator keys. This is a fork of the Wagyu Keygen tool for Ethereum mainnet. What are all these keys? 🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the Gnosis Chain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them. 🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals have been activated, as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever. 🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 1 GNO while your validator is active, and all your balance above 0 GNO when you exit the validator set. You need to keep this address safe as it's where your GNO will go, and cannot be changed. Download the latest release of the Gnosis Wagyu Key Gen from here. Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the Gnosis Wagyu keygen tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way. You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place. To ensure that you have copied it somewhere, it will ask you to type it again. Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent. Select a folder where to save the keys. Wait for the keys to be generated. And you are done! You will find your keys in the folder you selected. You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page. tip 💡 *Want to learn more about Ethereum keys and key generation?*💡Learn more Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer Gnosis, the package that you installed during step 1. Return to the Dappnode UI and navigate to the Stakers > Gnosis Chain menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page. Then click on the Import Keystores button on the lower part of the Web3Signer Gnosis UI. Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores. You are now ready to fund these validator accounts and start validating!","s":"2. Creating validator keys for Gnosis Chain","u":"/docs/user/staking/gnosis-chain/solo","h":"#2-creating-validator-keys-for-gnosis-chain","p":624},{"i":633,"t":"The final step is to fund your validator with 1 GNO necessary to register as a validator and start receiving validation work! To do this, you will need to send 1 GNO to the Gnosis Chain deposit contract. Navigate to the Gnosis Chain deposit launchpad Under the Deposit tab, you'll find a box where you can import the deposit_data.json file you generated in Step 2. You can find it in the same folder you chose when generating the keys. The app will validate the json file and list the number of validator deposits you are making and the required GNO to deposit. Click Deposit to continue. Check that you understand the risks and ensure you are interacting with the correct contract before proceeding. The moment to do the deposit is here! Connect your wallet with the GNO's you'll be depositing, and follow the steps to send the GNOs to the deposit contract! warning Please review the deposit address in the next step! MAKE SURE YOU ARE SENDING YOUR GNO FUNDS TO THE RIGHT DEPOSIT ADDRESS! After the deposit is gone, you will be able to check the progress of your deposit by searching for your validator key in the Gnosis Beacon Chain Explorer, which is a fork of the Ethereum Beaconcha.in explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the upper, right corner of the Dappnode Web3signer Gnosis UI, where you uploaded the keystores. Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.","s":"3: Deposit GNO into the Gnosis Chain deposit contract","u":"/docs/user/staking/gnosis-chain/solo","h":"#3-deposit-gno-into-the-gnosis-chain-deposit-contract","p":624},{"i":635,"t":"Once you want to finish your staking journey, you will need to withdraw your GNO from the Gnosis Chain. This is a 2 step process of exiting the validator from the Dappnode UI and claiming the GNO from the deposit contract. Gnosis Chain withdrawals ≠ Ethereum withdrawals Because the native token of Gnosis Chain is xDAI (you pay fees in it), but the staking token is GNO, withdrawals work differntly than in the Ethereum chain and do not happen automatically. You must claim your withdrawn tokens from the Deposit Contract. More info here.","s":"Withdrawing my GNO","u":"/docs/user/staking/gnosis-chain/solo","h":"#withdrawing-my-gno","p":624},{"i":637,"t":"warning Make sure that your validator have a 0x01 type withdrawal address before exiting your validator or you will lose your funds. In the consensus explorer, if your withdrawal address shows as an address that starts with a 0x00 it means that your withdrawal address needs to be upgraded to a 0x01, please refer to the guide in the Gnosis Chain documentation. If your validator already shows a 0x01 address, you DON'T need to follow these steps. Navigate to the Stakers > Gnosis Chain menu and click on the Upload Keystores button on the Web3Signer card. Once you are in the Web3Signer UI, select the validators you want to exit and click on the Exit Validator button on the top right part of the UI. Follow the instructions and type \"I want to exit\", followed by Exit. Now the message to exit will be broadcasted to the network. Withdrawal queue Your validator will not exit immediately. It will be queued to exit and you can track when it's due in the Gnosis Beacon Chain Explorer. Even then, you will need to claim your GNO from the deposit contract as per the next step.","s":"1. Exit the validator from the Dappnode UI","u":"/docs/user/staking/gnosis-chain/solo","h":"#1-exit-the-validator-from-the-dappnode-ui","p":624},{"i":639,"t":"As soon as your withdrawal has been processed by the Beacon Chain, you will be able to claim your GNO from the deposit contract. You can claim from any of your wallets that hold xDAI to pay gas fees. Go to the Gnosis Chain Deposit Contract page in Gnosisscan.io and navigate to the Write as Proxy tab, Connect your wallet with the Connect to Web3 button and then locate the 3. claimWithdrawal function. Type your withdrawal address in the field and click Write. A transaction should trigger on your wallet. Approve it and wait for it to be included in a block. Voilà! Your GNO will appear on your withdrawal address!","s":"2. Claim your GNO from the deposit contract","u":"/docs/user/staking/gnosis-chain/solo","h":"#2-claim-your-gno-from-the-deposit-contract","p":624},{"i":641,"t":"info Want to learn more about Dappnode through video tutorials? Check out our Dappnode Driving School! Every now and then we get together in our Dappnode Discord Community to offer live workshops on how to achieve different features and tricks with your Dappnode. These sessions are uploaded to our YouTube channel, so you can watch them at your own pace. Here are a few past editions you might find interesting!","s":"Crash Course","u":"/docs/user/videos-and-tutorials/crash-course","h":"","p":640},{"i":649,"t":"info We recommend going through Initial Setup of Dappnode Driving School before watching these videos, as these videos expect you to have a basic understanding of how your Dappnode works and how to access it. Once you have your Dappnode up and running, you can start configuring it to suit your needs. Here are some videos to help you with that:","s":"2. Configuring your Dappnode","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":648},{"i":651,"t":"Your Dappnode uses two technologies in order to stay decentralized and permissionless. In this video we'll go through Ethereum and IPFS and how do they work in Dappnode.","s":"🧬 2.1 Repositories","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":648},{"i":653,"t":"This video is about Dappnode Monitoring Service, a tool that will make it easy to monitor your Dappnode's health and activity.","s":"🧮 2.2 Dappnode Monitoring Service (DMS)","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":648},{"i":655,"t":"Ethical Metrics is Dappnode's private solution to notify you through Email and Telegram when there's unexpected behavior in your Dappnode.","s":"🌡 2.3 Ethical Metrics","u":"/docs/user/videos-and-tutorials/driving-school/configuration","h":"","p":648},{"i":657,"t":"Welcome to Dappnode Driving School! Here you'll find a series of videos that will guide you through the initial setup process. From booting Dappnode from ISO and accessing it through VPN, to setting up your Ethereum node, we've got you covered.","s":"1. Initial Dappnode Setup","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"","p":656},{"i":659,"t":"The first step you will need to take when your hardware is ready for installing Dappnode. If you have experience installing Linux you'll know what this is about, but if you don't there's nothing to worry about, as most of the process is automated.","s":"🖥️ 1.1 Booting from the Dappnode ISO","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#️-11-booting-from-the-dappnode-iso","p":656},{"i":661,"t":"The most common way to interact with your dappnode is through a web browser in another computer. This means that Dappnode works as a server, and doesn't have a traditional graphic interface as regular personal computers do, so if you're sitting in front of a login prompt wondering what's next you're doing great so far!","s":"🌐 1.2 Accessing the Dappnode User Interface or Dashboard","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-12-accessing-the-dappnode-user-interface-or-dashboard","p":656},{"i":663,"t":"Now that you're inside your Dappnode we gotta make sure no unauthorized users have access! There are four kinds of security credentials in Dappnode and we'll go through each one of them in this video.","s":"🔒 1.3 Setting up Dappnode Security","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-13-setting-up-dappnode-security","p":656},{"i":665,"t":"The best way to remotely and safely access your Dappnode is through VPN. Discover the options that Dappnode has to offer for VPNs in this Dappnode Driving School lesson!","s":"🔗 1.4 Configuring your Dappnode VPN","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-14-configuring-your-dappnode-vpn","p":656},{"i":667,"t":"This is what you came here for! Let's start syncing your clients to get your nodes up and running. Whether you want them for better privacy while exploring web3 or because you're interested in validating, syncing your node is a must in your Dappnode journey.","s":"🔄 1.5 Syncing your clients/An overview on node running","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-15-syncing-your-clientsan-overview-on-node-running","p":656},{"i":669,"t":"Now that everything is working as expected, here's some information on what keeps Dappnode running the way it's meant to. This video is also great if you're looking into putting your own hardware together, since it goes through the minimum requirements to run Dappnode.","s":"💾 1.6 Understanding your Dappnode's Hardware","u":"/docs/user/videos-and-tutorials/driving-school/initial-setup","h":"#-16-understanding-your-dappnodes-hardware","p":656},{"i":671,"t":"When you've set up your Dappnode, you might want to connect various applications to your blockchain node. This process can vary depending on which blockchain you've selected. Below is a guide on how to do this:","s":"How to Connect to My Blockchain Node","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"","p":670},{"i":673,"t":"If you've selected an Ethereum mainnet node in Repository > Ethereum or Stakers > Ethereum, here's how to connect: The Execution client you have selected will expose its RPC at: http://fullnode.dappnode:8545 Do note that this domain is only accessible when you're connected to Dappnode either via WiFi or VPN. If you intend to use the RPC externally (i.e., without needing to connect to Dappnode), you'll need to refer to our tutorial on How to expose an RPC externally.","s":"Ethereum Mainnet Node","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#ethereum-mainnet-node","p":670},{"i":675,"t":"For blockchain nodes other than Ethereum mainnet: Identify the specific network for your node, e.g., lukso, gnosis, or prater. The endpoint for these nodes will be: http://.fullnode.dappnode:8545 Replace with your specific blockchain network name. Ensure that the node is correctly set in Stakers > .","s":"Other Nodes in Stakers tab","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#other-nodes-in-stakers-tab","p":670},{"i":677,"t":"To connect your node to Metamask: You will need to provide the Chain ID of the blockchain you're connecting to. Chain IDs for various blockchains can be found at Chainlist. In Metamask, navigate to Settings > Networks > Add Network. Input the RPC URL (http://.fullnode.dappnode:8545) and the Chain ID from Chainlist.","s":"Connecting to Metamask","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#connecting-to-metamask","p":670},{"i":679,"t":"Your node needs to be fully synced to function correctly. This ensures that the latest state of the blockchain and its transactions are available for your applications. Always ensure the safety and privacy of your Dappnode by not unnecessarily exposing ports or services that might be targets for malicious actors.","s":"Important Reminders","u":"/docs/user/videos-and-tutorials/guides/connect-node","h":"#important-reminders","p":670},{"i":681,"t":"Welcome to the Videos and Tutorials section! Here, you'll find a curated list of videos and written tutorials designed to help you get the most out of Dappnode. Whether you're a beginner or an advanced user, there's something here for everyone.","s":"Videos and Tutorials","u":"/docs/user/videos-and-tutorials/overview","h":"","p":680},{"i":683,"t":"In this section, you will find comprehensive written guides that provide step-by-step instructions on various topics related to Dappnode. These documents are a valuable resource for anyone looking to deepen their understanding and enhance their Dappnode experience. 🔗 How to connect a wallet to my node","s":"Tutorial docs","u":"/docs/user/videos-and-tutorials/overview","h":"#tutorial-docs","p":680},{"i":685,"t":"The Dappnode Driving School is a set of video tutorials that will help you understand the basics about setting up your Dappnode for the first time. These videos are made for newcommers and non-technical users, but if you have questions don't hesitate to drop by our Dappnode Discord Community, where the community will be happy to provide as much help as you need.","s":"Dappnode Driving School","u":"/docs/user/videos-and-tutorials/overview","h":"#dappnode-driving-school","p":680},{"i":687,"t":"🖥️ Booting from the Dappnode ISO 🌐 Accessing the Dappnode User Interface (UI)/Dashboard 🔒 Setting up Dappnode Security 🔗 Configuring your Dappnode VPN 🔄 Syncing your clients/An overview on node running 💾 Understanding your Dappnode's Hardware","s":"I. Initial Dappnode Setup","u":"/docs/user/videos-and-tutorials/overview","h":"#i-initial-dappnode-setup","p":680},{"i":689,"t":"🛠️ Coming soon...","s":"II. Configuring your Dappnode","u":"/docs/user/videos-and-tutorials/overview","h":"#ii-configuring-your-dappnode","p":680},{"i":691,"t":"🔧 Coming soon...","s":"III. Dappnode Troubleshooting","u":"/docs/user/videos-and-tutorials/overview","h":"#iii-dappnode-troubleshooting","p":680},{"i":693,"t":"LUKSO is the next-gen blockchain designed with creative industries in mind. Imagine a digital realm where the spirit of Ethereum meets the world of fashion, art, and design. That's LUKSO for you!","s":"LUKSO","u":"/docs/user/staking/lukso/solo","h":"","p":692},{"i":695,"t":"Universal Profiles (UPs), supported by the ERC-725 standard, are LUKSO's magic trick. They act like digital passports in the LUKSO universe, ensuring that every creation and transaction carries the unique signature of its creator.","s":"What Makes LUKSO Special?","u":"/docs/user/staking/lukso/solo","h":"#what-makes-lukso-special","p":692},{"i":697,"t":"LUKSO shares more than just roots with Ethereum. It uses the same trusted tools to run its network. Some of the main Ethereum clients are also compatible with LUKSO. For becoming a validator in LUKSO, you'll need to: Install the necessary LUKSO packages on Dappnode. Create validator keys for LUKSO. Deposit LYX into the LUKSO Consensus Chain deposit contract.","s":"Joining LUKSO as a validator","u":"/docs/user/staking/lukso/solo","h":"#joining-lukso-as-a-validator","p":692},{"i":699,"t":"Similar to Ethereum mainnet, Dappnode makes it very easy to set up your LUKSO validator. Here's what the Stakers UI looks like for LUKSO: Execution Clients (Choose one): Lukso Geth Lukso Erigon (Coming soon to Dappnode) Consensus Clients (Choose one): Prysm Lukso Teku Lukso -Web3Signer LUKSO Checkpoint Sync is your friend for syncing Consensus Clients Execution clients take a long time to sync. Hence, once you start staking with one you will most likely stick with it. However, you can switch consensus clients at any time thanks to the magic of \"checkpoint sync\". Make sure to toggle the \"use checksync\" option when installing your consensus client, and you can change at any point from one to another with barely any downtime. After syncing your consensus client, the execution client starts its synchronization process. This can take a few hours, so patience is essential. For clarity or troubleshooting, consult your execution client's logs.","s":"1. Install the necessary LUKSO packages on Dappnode.","u":"/docs/user/staking/lukso/solo","h":"#1-install-the-necessary-lukso-packages-on-dappnode","p":692},{"i":701,"t":"info This guide will use the LUKSO Wagyu Keygen Tool to generate your validator keys. This is a fork of the Wagyu Keygen tool for Ethereum mainnet. What are all these keys? 🔒 Validator keys will be online (stored in your Dappnode) and signing the blocks of the LUKSO blockchain. You will create them from a mnemonic phrase, which is important to keep safe as it's the only way to regenerate these validator keys if you lose them. 🛡️ The damage of getting your mnemonic phrase compromised has been reduced dramatically since withdrawals are already activated in LUKSO (Shapella upgrade), as you can create the keystores with a set withdrawal address and nobody can change that after, even if they get to your mnemonic phrase. Nevertheless, if you lose the keystore and the mnemonic, you will not be able to sign an exit message and you will be forced to validate forever. 🔑 Withdrawal address this brings us to the withdrawal address, which is the address that will receive all the balance above 32 LYX while your validator is active, and all your balance above 32 LYX when you exit the validator set. You need to keep this address safe as it's where your LYX will go, and cannot be changed. Download the latest release of the LUKSO Wagyu Keygen Tool from here. Disconnect from the internet, so it will be harder to have any leaks on the information you use, and open the LUKSO Wagyu Keygen Tool. You will be given 2 options, either create a new mnemonic or import an existing mnemonic. The GUI is very user friendly and explains all steps along the way. You will be shown your Mnemonic Phrase. Keep it safe, as it is used to recreate the validator keys! We recommend copying it in an encrypted volume or in paper stored in a safe place. To ensure that you have copied it somewhere, it will ask you to type it again. Choose 1) How many keys you want to create, 2) the password to protect the keys and 3) the Withdrawal Address where your Consensus Layer profits will be sent. Select a folder where to save the keys. Wait for the keys to be generated. And you are done! You will find your keys in the folder you selected. You are now done with the key generation process, and your generated keys and deposit data are in the folder/directory chosen, and displayed at the top of the final page. tip 💡 *Want to learn more about Ethereum keys and key generation?*💡Learn more Now that you’ve generated your deposit data and keystores, go ahead and upload your keystores to Web3Signer LUKSO, the package that you installed during step 1. Return to the Dappnode UI and navigate to the Stakers > LUKSO menu. Your Web3Signer will have a link saying Upload Keystores . If it doesn’t, make sure that you have waited enough time since step 1 for all the packages to be installed (around 5 minutes) and refresh the page. Then click on the Import Keystores button on the lower part of the Web3Signer LUKSO UI. Here browse for the keystore file(s) you generated in the previous step and enter them along with the password you chose to secure your keystores. You are now ready to fund these validator accounts and start validating in LUKSO!","s":"2. Creating validator keys for LUKSO","u":"/docs/user/staking/lukso/solo","h":"#2-creating-validator-keys-for-lukso","p":692},{"i":703,"t":"The final step is to fund your validator with the 32 LYX necessary to register as a validator and start receiving validation work! To do this, you will need to send 32 LYX to the LUKSO deposit contract. We will be using the official LUKSO launchpad for this. Navigate to the LUKSO launchpad Read all the advisories... they contain important information that will help you understand the whole process! Because we are using Dappnode and we take care of the infrastructure and the software installation, we can skip the next sections: We continue until the \"Upload Deposit Data\" section. Here we will upload the deposit data that we generated in the previous step. You can find it in the folder you chose when generating the keys. It will be a file called deposit_data-*.json The moment to do the deposit is here! Connect your wallet with the 32 LYX and make sure you're in the LUKSO network. And follow the steps to send the 32 LYX to the deposit contract! warning Please review your deposit address! MAKE SURE YOU ARE SENDING THE 32 LYX TO THE RIGHT DEPOSIT ADDRESS! After the deposit is done, you will be able to check the progress of your deposit by searching for your validator key in the LUKSO Consensus Explorer. You can get a direct link to this by clicking on the View in Beaconcha.in button in the upper, right corner of the Dappnode Web3signer LUKSO UI, where you uploaded the keystores","s":"3: Deposit LYX into the LUKSO deposit contract","u":"/docs/user/staking/lukso/solo","h":"#3-deposit-lyx-into-the-lukso-deposit-contract","p":692},{"i":705,"t":"info This step is only necessary if your validator doesn't have a withdrawal address configured. In the consensus explorer, it shows as an address that starts with a 0x00 and needs to be upgraded to a 0x01. If your validator already shows a 0x01 address, you DON'T need to follow these steps. Step 1: Open the LUKSO Wagyu Keygen tool and click \"Use existing recovery phrase\", then you'll need to select \"Generate your BLS to Execution change\" option. Type in your seed phrase and follow the steps to generate a JSON file you'll need in step 3. Make sure you are offline during this step! Step 2: You'll have to locate your LUKSO consensus client's container IP. If you're using Prysm, you can find it here under the service box in the upper part, and if you're using Teku, you'll be able to find it here in the same location. Step 3: Open a terminal window where you'll need to input: curl -X 'POST' \\ '/eth/v1/beacon/pool/bls_to_execution_changes' \\ -H 'accept: */*' \\ -H 'Content-Type: application/json' \\ -d '' Where is your LUKSO consensus client's container IP, and the JSON file you generated in step 1. Step 4: After successfully broadcasting the message, check your validator in the LUKSO Consensus Explorer, where you should now be able to see a 0x01 withdrawal address. Remember: Embarking on the staking journey requires diligence. Always keep abreast of developments and make informed decisions.","s":"3. Adding a Withdrawal Address to your LUKSO validator","u":"/docs/user/staking/lukso/solo","h":"#3-adding-a-withdrawal-address-to-your-lukso-validator","p":692}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/3",[0,7.183,1,7.819,2,7.183,3,6.849,4,7.183,5,5.774,6,5.774,7,5.774,8,6.56,9,6.56,10,6.56,11,6.56,12,6.56,13,6.56,14,5.774,15,6.56,16,6.56,17,5.774]],["t/5",[18,7.643,19,5.973,20,3.158,21,6.618,22,4.817,23,3.716,24,3.918,25,7.307,26,3.654,27,1.472,28,4.073,29,7.307,30,3.158,31,4.682,32,3.434,33,7.307,34,2.153,35,7.307,36,7.307,37,7.307,38,2.797]],["t/7",[0,7.989,1,8.437,2,7.989,3,7.618,4,7.989,5,6.892,6,6.892,7,6.892,8,7.83,9,7.83,10,7.83,11,7.83,12,7.83,13,7.83,14,6.892,15,7.83,16,7.83,17,6.892,18,2.495,19,1.95,27,0.34,34,0.871,39,1.283,40,0.981,41,0.981,42,1.688,43,1.688,44,1.082,45,1.283,46,0.923,47,1.004]],["t/10",[48,2.764,49,3.981,50,7.786,51,5.509,52,7.786]],["t/12",[28,2.933,48,2.02,49,2.437,51,3.372,53,0.465,54,6.684,55,4.44,56,5.263,57,7.301,58,2.676,59,4.196,60,4.44,61,2.473,62,2.876,63,2.632,64,4.767,65,4.196,66,2.337,67,3.699,68,3.578,69,6.613,70,4.196,71,3.838,72,4.44,73,3.372,74,2.933,75,3.128,76,3.284,77,3.838,78,4.964,79,4.767,80,1.37,81,1.828,82,4.07,83,3.699,84,2.473,85,5.263,86,2.085,87,4.767,88,4.77,89,1.791,90,3.47,91,5.263,92,2.632,93,4.001,94,4.001,95,3.838,96,2.703,97,1.655,98,4.196,99,5.263,100,2.59,101,1.738,102,5.263,103,5.263,104,5.263,105,2.994]],["t/14",[30,2.725,48,1.744,53,0.557,67,4.432,69,7.47,78,5.607,80,1.641,96,2.334,106,5.319,107,9.749,108,4.794,109,3.514,110,4.598,111,6.305,112,5.71,113,2.441,114,3.776,115,3.748,116,4.04,117,6.305,118,7.47,119,4.286,120,3.054,121,3.054,122,4.04,123,3.665,124,3.054,125,3.587,126,3.748,127,5.71,128,3.587,129,4.598]],["t/16",[19,4.948,53,0.663,71,5.474,130,3.58,131,4.27,132,7.506,133,7.506,134,9.211,135,4.684,136,6.798,137,7.506,138,4.568,139,2.58,140,7.506,141,6.798,142,7.506,143,4.462,144,1.81,145,7.506]],["t/18",[18,9.065,19,5.761,20,2.463,21,6.983,22,3.756,23,2.897,24,3.055,27,1.148,28,3.176,146,5.16,147,4.155,148,3,149,2.431,150,4.94,151,4.811,152,4.542,153,4.155,154,3.651,155,5.697,156,4.542,157,5.16,158,4.806,159,7.71,160,7.71,161,6.504,162,5.697,163,5.697,164,4.331,165,5.697,166,3.114,167,3.312,168,5.16,169,3.555,170,2.897,171,2.156,172,5.16,173,4.542,174,3.756]],["t/20",[24,2.358,27,0.886,30,1.9,48,1.216,53,0.67,54,7.393,58,3.266,60,5.419,62,2.403,63,4.175,66,1.952,67,3.09,75,2.613,77,3.206,78,2.989,79,3.982,81,2.636,89,1.496,101,2.121,113,1.702,115,2.613,139,2.609,175,5.818,176,6.403,177,3.709,178,5.121,179,4.396,180,2.555,181,3.342,182,4.685,183,2.274,184,3.982,185,3.505,186,1.683,187,1.876,188,4.883,189,1.952,190,2.613,191,2.163,192,2.898,193,2.817,194,1.784,195,2.097,196,3.505,197,3.09,198,1.979,199,3.709,200,3.709,201,2.898,202,2.743,203,2.274,204,1.307,205,3.342,206,1.952,207,2.45,208,1.319,209,2.989,210,1.423,211,3.982,212,4.396,213,3.342,214,2.817,215,3.342,216,2.817,217,4.396,218,1.645,219,3.709,220,4.396,221,4.396,222,4.396,223,4.396,224,3.709,225,3.09,226,2.989,227,2.989]],["t/23",[48,2.096,49,3.508,50,6.86,51,4.854,52,6.86,105,5.93,228,3.089,229,5.758,230,4.14,231,5.758,232,7.574,233,3.613,234,6.038,235,2.382,236,6.86]],["t/25",[20,2.532,48,1.621,53,0.898,58,3.995,66,2.601,67,5.522,74,3.266,98,4.671,237,5.859,238,8.027,239,5.859,240,3.405,241,3.747,242,4.671,243,5.859,244,4.671,245,4.454,246,4.671,247,5.859,248,5.859,249,5.859,250,5.859,251,5.859,252,4.942,253,4.942,254,4.118,255,2.753,256,8.863,257,3.268,258,4.671,259,3.754,260,4.671,261,4.671,262,4.942,263,3.983,264,5.859,265,2.566,266,2.349]],["t/27",[27,0.458,34,0.669,41,1.321,48,2.241,49,1.052,51,3.162,53,0.201,54,3.043,58,1.156,72,1.917,78,1.545,87,3.457,89,0.773,90,1.498,92,1.136,96,1.413,97,0.715,98,1.811,105,1.293,120,1.101,139,1.312,156,3.043,185,6.67,191,1.118,219,1.917,230,1.242,231,1.727,233,1.084,235,0.715,236,3.457,238,3.457,240,1.321,241,1.084,267,3.457,268,2.058,269,2.784,270,7.787,271,0.676,272,4.163,273,1.811,274,1.293,275,1.917,276,4.935,277,4.163,278,1.657,279,1.545,280,2.272,281,4.935,282,1.351,283,2.272,284,2.272,285,1.242,286,6.98,287,4.701,288,1.023,289,1.456,290,2.058,291,1.351,292,3.22,293,1.101,294,3.817,295,5.237,296,7.058,297,3.457,298,7.787,299,8.367,300,8.367,301,8.367,302,3.717,303,4.25,304,2.784,305,3.817,306,3.817,307,2.901,308,2.272,309,2.272,310,3.817,311,5.782,312,3.457,313,2.272,314,2.272,315,3.817,316,3.817,317,2.272,318,2.272,319,3.817,320,5.237,321,2.058,322,3.817,323,3.817,324,2.058,325,2.133,326,1.917,327,2.697,328,1.156,329,2.058,330,2.683,331,1.917,332,2.058,333,2.272,334,1.727,335,3.457,336,2.079,337,1.889,338,1.657,339,1.597,340,2.086,341,2.272,342,1.495,343,1.657,344,1.175,345,1.811,346,1.351,347,1.811,348,2.058,349,1.811,350,2.272,351,1.242,352,2.272,353,1.136,354,1.351,355,1.084,356,2.272,357,2.058,358,2.446,359,1.219,360,2.272,361,1.657]],["t/29",[48,2.804,49,2.291,51,3.171,70,3.945,78,4.754,90,4.61,92,4.408,93,3.761,94,3.761,96,2.588,105,3.979,130,3.336,131,2.815,181,3.761,229,3.761,231,5.316,233,3.336,235,1.556,242,3.945,252,6.842,269,3.609,277,4.174,295,4.482,296,4.174,297,4.482,304,5.1,336,2.084,337,1.894,338,3.609,362,6.334,363,7.346,364,4.948,365,4.948,366,8.11,367,4.948,368,3.945,369,3.012,370,6.334,371,6.334,372,6.993,373,6.993,374,3.761,375,4.948,376,4.948,377,4.948,378,3.088,379,2.704,380,2.033]],["t/31",[92,4.936,93,6.402,94,6.402,370,8.939,381,7.628,382,7.628]],["t/33",[93,6.338,94,6.338,381,7.551,382,7.551,383,8.337,384,9.811,385,9.811]],["t/35",[48,2.577,49,3.54,51,4.899,78,6.332,90,6.141,93,5.811,94,5.811,96,3.448,362,8.436,386,7.644,387,7.644,388,7.644,389,7.644]],["t/37",[34,1.512,48,1.42,191,2.526,231,3.901,233,2.448,235,1.614,252,4.33,255,3.372,274,2.92,296,4.33,303,3.384,304,3.743,307,3.901,312,4.648,321,4.648,332,4.648,337,1.964,363,4.648,368,4.091,369,3.124,390,7.175,391,7.492,392,5.132,393,3.384,394,5.132,395,8.272,396,8.272,397,8.957,398,5.132,399,5.132,400,5.132,401,5.132,402,5.132,403,5.132,404,5.132,405,5.132,406,5.132,407,5.132,408,7.175,409,5.132,410,5.132,411,5.132,412,5.132,413,2.526,414,3.743,415,4.33,416,3.608,417,5.132,418,4.648,419,4.648,420,5.132,421,4.091,422,3.901,423,5.132,424,4.648,425,5.132,426,4.33,427,5.132,428,5.132]],["t/39",[0,4.25,1,4.25,2,7.259,3,4.052,4,4.25,5,4.25,6,4.25,7,4.25,14,4.25,17,4.25,154,3.416,429,4.828,430,4.828,431,4.828,432,7.645,433,4.828,434,4.497,435,4.828,436,4.828,437,4.828,438,4.052,439,4.828,440,6.672,441,4.828,442,4.828,443,4.828,444,4.828,445,4.828,446,4.828,447,4.828,448,4.828,449,4.828,450,4.828,451,4.497,452,4.828,453,4.828,454,4.828,455,4.828,456,4.828,457,4.828,458,4.828,459,4.828,460,4.828,461,4.828,462,4.828,463,4.828,464,4.828,465,4.828,466,4.052,467,4.828,468,4.828,469,4.828,470,4.828,471,4.828,472,4.828,473,4.828,474,3.326,475,4.828,476,4.828]],["t/41",[27,1.18,30,3.396,53,0.872,71,4.273,82,3.266,83,4.118,84,2.753,86,2.322,171,2.217,189,2.601,190,3.483,198,2.637,203,3.031,208,1.758,379,3.202,380,3.641,477,3.656,478,5.176,479,5.306,480,4.899,481,4.118,482,2.979,483,3.266,484,3.983,485,2.099,486,4.273,487,4.273,488,3.638,489,5.522,490,2.637,491,5.306,492,3.031,493,2.979,494,4.942,495,2.601]],["t/43",[53,0.715,58,4.115,77,5.902,82,5.739,477,5.05,496,6.827,497,4.047,498,6.152,499,7.33,500,3.982]],["t/45",[58,3.924,84,3.626,89,2.625,171,2.92,266,3.094,501,6.988,502,5.865,503,5.445,504,5.423,505,7.715,506,6.151,507,4.944,508,5.627,509,4.944,510,3.522,511,5.423]],["t/47",[0,4.25,1,4.25,2,7.259,3,4.052,4,4.25,5,4.25,6,4.25,7,4.25,14,4.25,17,4.25,154,3.416,429,4.828,430,4.828,431,4.828,432,7.645,433,4.828,434,4.497,435,4.828,436,4.828,437,4.828,438,4.052,439,4.828,440,6.672,441,4.828,442,4.828,443,4.828,444,4.828,445,4.828,446,4.828,447,4.828,448,4.828,449,4.828,450,4.828,451,4.497,452,4.828,453,4.828,454,4.828,455,4.828,456,4.828,457,4.828,458,4.828,459,4.828,460,4.828,461,4.828,462,4.828,463,4.828,464,4.828,465,4.828,466,4.052,467,4.828,468,4.828,469,4.828,470,4.828,471,4.828,472,4.828,473,4.828,474,3.326,475,4.828,476,4.828]],["t/49",[53,0.681,71,5.627,84,3.626,115,5.568,189,3.426,485,2.061,511,7.09,512,6.151,513,6.988,514,5.423,515,5.245,516,3.859,517,3.797,518,4.696]],["t/51",[30,3.431,115,4.718,265,3.477,336,3.344,380,3.261,517,4.689,519,4.953,520,6.328,521,4.424,522,5.789,523,7.189,524,4.831,525,3.73]],["t/53",[23,2.693,27,1.477,34,3.083,109,2.952,115,4.359,158,4.468,204,2.7,271,1.575,369,4.464,393,3.492,492,2.74,511,3.723,520,5.847,525,2.489,526,5.296,527,2.649,528,7.334,529,7.334,530,7.334,531,5.296,532,4.797,533,4.797,534,4.797,535,4.468,536,4.026,537,3.078,538,1.839,539,4.797,540,4.026,541,4.026,542,3.601,543,6.187,544,4.797,545,7.334,546,5.296,547,7.334,548,5.296,549,3.863,550,4.026,551,4.468,552,3.013,553,3.078,554,5.296,555,2.32,556,5.296]],["t/55",[30,3.568,53,0.729,109,4.601,115,4.906,192,5.442,485,2.205,518,5.024,557,5.611,558,4.696,559,5.802]],["t/57",[23,2.272,27,1.309,34,2.478,109,4.27,115,2.656,158,3.769,168,4.046,187,1.906,191,2.198,204,2.658,207,2.49,307,3.396,344,2.311,513,4.046,518,3.955,523,4.046,524,2.719,525,2.099,527,4.207,532,7.618,533,5.886,534,5.886,535,3.769,536,4.94,537,3.777,538,2.66,539,5.886,540,4.94,541,4.94,542,3.037,543,3.769,544,4.046,559,4.568,560,4.467,561,4.033,562,4.467,563,4.467,564,6.499,565,4.74,566,7.66,567,6.499,568,3.697,569,6.499,570,4.046,571,4.046,572,4.046,573,4.046,574,4.467,575,4.046,576,4.74,577,5.886,578,4.467,579,1.691,580,4.046,581,3.258,582,4.418]],["t/59",[31,4.447,53,0.613,62,3.792,84,3.261,113,2.686,126,4.125,149,2.961,164,5.275,208,2.632,484,4.717,485,2.569,492,3.59,512,5.532,550,5.275,583,3.124,584,5.061,585,5.854,586,3.868,587,5.532,588,3.792,589,5.275,590,3.721,591,4.878,592,3.792,593,3,594,2.045]],["t/61",[20,2.587,22,3.946,27,1.206,30,2.587,34,3.221,53,0.528,81,2.079,109,3.336,148,3.152,149,2.554,151,3.735,327,3.271,485,1.599,583,3.587,595,7.969,596,4.366,597,3.558,598,4.069,599,7.969,600,5.05,601,5.05,602,5.05,603,2.521,604,3.479,605,5.986,606,3.271,607,2.9,608,5.05,609,5.986,610,5.421,611,5.05,612,5.986,613,5.421,614,3.097,615,3.946]],["t/63",[20,2.569,22,3.918,34,2.924,139,2.043,144,1.433,228,2.977,413,2.925,474,3.708,492,3.074,525,2.793,527,2.972,555,2.603,606,3.248,616,3.533,617,5.382,618,3.918,619,1.817,620,5.382,621,4.738,622,5.013,623,6.691,624,3.187,625,5.382,626,5.382,627,4.738,628,5.575,629,4.518,630,5.382,631,5.382,632,5.382,633,5.382,634,4.738,635,5.382,636,5.392,637,5.013,638,4.738,639,4.335,640,1.852,641,4.177]],["t/65",[20,3.464,122,5.136,259,5.136,413,4.716,525,4.504,583,3.608,584,5.845,619,2.45,640,2.497,642,3.139,643,4.878]],["t/67",[73,4.987,173,4.605,235,1.817,340,3.157,474,3.605,583,3.503,584,5.676,591,4.061,606,3.157,607,3.77,616,4.626,618,3.809,619,2.879,622,4.873,627,4.605,629,4.391,634,4.605,636,3.927,640,3.154,642,3.849,644,2.162,645,5.357,646,3.702,647,2.675,648,2.838,649,5.29]],["t/69",[27,1.569,474,5.879,581,5.68,591,5.474,603,3.281,607,3.773,617,7.054,619,2.381,640,2.935,642,3.05,650,5.135,651,5.92,652,7.054,653,2.821]],["t/71",[20,0.977,27,0.765,100,1.87,113,2.695,130,1.078,144,0.916,149,2.097,171,0.855,193,3.692,208,1.928,216,1.448,235,1.195,271,0.672,288,1.017,340,1.235,344,2.981,484,3.342,485,2.231,492,4.32,516,1.9,527,3.701,550,5.291,555,4,565,4.687,579,1.438,583,1.017,584,1.648,588,3.149,589,4.38,590,2.636,600,3.205,607,1.095,614,2.981,616,2.258,618,5.328,619,2.687,620,4.452,621,5.123,627,1.802,629,1.718,636,1.536,640,1.795,642,2.517,644,0.846,648,1.042,653,2.327,654,0.865,655,4.916,656,4.916,657,3.596,658,4.879,659,3.799,660,5.872,661,4.916,662,4.916,663,3.512,664,3.911,665,5.219,666,2.74,667,3.596,668,1.314,669,2.047,670,1.906,671,0.964,672,1.718,673,1.906,674,1.906,675,0.94,676,1.906,677,1.13,678,1.41,679,1.095,680,1.925,681,2.26,682,1.41,683,2.505,684,1.078,685,3.799,686,2.047,687,5.762,688,2.26,689,1.448,690,2.26,691,2.26,692,1.41,693,1.802,694,1.718,695,2.26,696,2.26,697,2.26,698,2.162,699,4.916,700,3.799,701,1.906,702,1.047,703,1.523,704,2.047,705,1.906,706,3.799,707,2.26,708,1.906]],["t/73",[34,2.408,228,2.725,619,2.499,622,8.18,623,6.894,640,2.546,642,3.201,647,3.785,653,2.96,709,6.894]],["t/75",[20,3.304,22,5.04,34,2.744,139,2.628,228,2.549,606,5.091,619,2.337,623,6.449,624,4.099,625,6.923,626,6.923,640,2.382,642,2.994,647,3.54,653,2.769,709,6.449]],["t/77",[27,1.422,66,3.133,173,5.626,216,4.523,336,2.973,353,3.53,492,3.651,527,3.53,616,5.27,618,4.653,619,2.158,627,7.068,628,4.961,647,3.268,648,1.936,649,4.798,653,2.556,663,3.857,664,4.295,670,5.954,671,3.011,710,4.404,711,5.365,712,7.058,713,3.367]],["t/79",[27,1.422,144,1.702,336,2.973,340,3.857,492,3.651,593,3.051,607,3.419,618,4.653,619,2.158,629,5.365,630,6.392,631,6.392,632,6.392,633,6.392,634,5.626,642,2.764,648,1.936,653,2.556,673,7.479,714,6.392,715,6.392,716,4.015,717,7.058,718,5.147,719,4.102,720,5.365]],["t/81",[41,4.323,144,2.209,228,2.48,336,3.133,340,4.065,416,5.228,492,3.848,618,4.904,619,2.274,629,5.654,634,7.302,635,6.737,642,2.913,648,2.04,653,2.694,673,6.275,718,5.425,720,5.654,721,4.766]],["t/83",[46,3.958,73,4.641,144,1.747,336,3.051,353,3.622,492,3.747,618,4.775,619,2.999,636,4.924,637,6.11,638,5.774,639,3.958,642,3.529,646,4.641,648,2.471,653,2.623,664,4.408,675,3.013,677,3.622,710,4.52]],["t/85",[89,2.781,593,3.533,607,3.959,619,2.499,628,5.745,640,2.546,648,2.241,649,5.556,653,2.96,714,7.402,716,4.65]],["t/87",[34,3.242,89,2.213,110,4.743,122,4.167,144,1.569,208,1.952,591,5.915,607,3.15,616,3.866,619,1.988,636,5.721,638,5.184,639,3.554,641,5.915,645,4.787,648,1.783,653,2.356,671,3.59,672,4.943,709,5.486,710,4.058,722,6.503,723,6.503]],["t/89",[53,0.663,109,4.183,218,2.809,327,4.102,345,5.984,379,4.102,478,4.102,485,2.005,486,5.474,559,5.276,724,4.568,725,5.984,726,4.568,727,7.506,728,6.332,729,3.817,730,3.694,731,5.474,732,4.948,733,5.984]],["t/91",[27,0.968,30,2.077,34,1.416,71,3.504,84,3.218,113,1.86,130,2.292,139,1.652,149,2.05,151,4.274,191,2.364,204,1.429,230,2.626,235,2.154,340,4.361,345,6.935,380,2.814,486,4.995,504,3.377,521,2.678,525,3.218,538,1.669,540,3.652,541,3.652,579,1.818,608,4.053,614,3.543,615,3.168,642,2.682,647,3.695,648,1.878,649,6.499,667,4.274,730,3.37,734,2.733,735,3.83,736,3.83,737,3.83,738,3.83,739,5.206,740,3.543,741,3.83,742,3.83,743,4.805,744,5.777,745,4.352,746,4.805,747,4.053,748,4.805,749,3.504,750,4.805,751,3.168,752,2.678,753,3.652,754,3.83,755,2.53]],["t/93",[27,1.279,34,1.275,53,0.561,84,2.984,89,2.16,109,5.14,139,1.487,149,1.846,151,3.962,167,3.69,191,2.13,204,1.287,235,1.997,340,4.11,380,1.778,421,3.45,485,1.156,486,3.156,525,3.534,540,3.289,541,3.289,553,3.69,568,3.612,570,3.919,579,1.638,590,2.321,614,3.285,615,2.853,642,2.487,647,4.271,648,1.187,649,6.269,667,3.962,730,3.125,734,2.462,735,3.45,736,3.45,737,3.45,738,3.45,739,4.827,740,3.285,741,3.45,742,3.45,753,3.289,754,3.45,755,2.279,756,1.895,757,3.45,758,3.919,759,2.773,760,4.327,761,4.327,762,4.327,763,3.919,764,5.356,765,3.919,766,3.919,767,3.919,768,3.919,769,3.651,770,3.919,771,4.327,772,2.773,773,4.316,774,4.327]],["t/95",[27,1.216,34,1.427,53,0.708,80,0.791,84,2.277,89,2.728,109,1.694,139,1.045,149,1.297,151,3.023,189,1.35,191,1.496,204,0.904,228,1.014,235,1.524,271,0.904,293,1.473,340,3.301,380,1.249,421,2.424,451,2.565,478,1.661,485,0.812,486,3.533,493,1.546,511,2.137,516,1.52,517,1.496,518,3.676,521,1.694,524,1.85,525,2.838,540,2.311,541,2.311,542,3.293,543,2.565,553,3.51,559,5.635,571,2.753,572,2.753,573,2.753,579,1.833,590,1.63,614,2.506,615,2.004,619,1.481,640,0.947,642,3.419,647,4.167,648,1.889,649,5.45,651,2.311,667,3.023,678,1.897,730,2.972,734,1.73,735,2.424,736,2.424,737,2.424,738,2.424,739,3.683,740,2.506,741,2.424,742,2.424,747,2.565,753,2.311,754,2.424,755,1.601,758,2.753,759,4.821,763,4.388,764,4.087,765,2.753,766,2.753,767,2.753,768,2.753,769,2.565,770,2.753,775,2.565,776,2.565,777,3.04,778,1.63,779,3.04,780,3.04,781,3.04,782,3.04,783,3.293,784,2.217,785,3.04,786,3.04,787,4.844,788,3.04,789,4.844,790,2.753,791,3.04,792,3.04,793,3.04,794,3.04,795,3.04,796,3.04,797,2.217,798,4.844,799,3.04,800,3.04,801,1.948,802,3.04,803,2.565,804,3.04,805,1.332,806,3.04]],["t/97",[30,3.694,49,3.084,53,0.588,81,2.313,84,3.13,97,2.095,109,3.712,126,3.959,189,2.957,203,3.445,230,3.64,291,3.959,379,3.64,380,3.511,485,2.283,521,3.712,559,6.007,568,3.789,728,7.209,734,3.789,775,5.618,807,6.66,808,9.435,809,4.268,810,6.66,811,4.857,812,6.66]],["t/99",[27,1.143,34,1.097,53,0.329,84,3.231,109,3.163,115,3.373,139,1.951,149,1.589,151,3.541,180,2.164,187,1.589,189,1.653,191,1.833,193,2.386,203,1.926,204,1.687,230,2.035,235,1.171,271,1.107,336,1.569,340,3.758,345,2.969,380,2.825,485,0.995,486,4.139,493,1.894,511,4.833,518,3.454,521,3.163,525,4.098,553,3.298,559,3.989,579,2.148,608,3.141,614,2.936,615,2.455,619,2.102,642,2.222,647,2.628,648,1.886,649,5.227,651,2.831,667,3.541,678,2.324,684,2.707,728,5.8,729,1.894,730,4.291,735,2.969,736,2.969,737,2.969,738,2.969,739,4.314,740,2.936,741,2.969,742,2.969,753,2.831,754,2.969,755,1.961,756,1.631,757,2.969,759,2.386,775,3.141,803,3.141,805,1.631,813,2.716,814,2.716,815,1.493,816,1.511,817,2.831,818,3.724,819,3.724,820,2.386,821,3.141,822,3.724,823,3.373,824,4.524,825,1.961,826,3.724,827,3.724,828,3.724,829,3.724,830,2.969,831,3.724,832,3.373]],["t/101",[135,3.437,138,4.585,139,1.893,144,2.332,233,3.594,241,2.627,288,3.391,291,3.274,325,3.257,337,3.287,344,2.849,495,2.445,500,2.71,561,2.9,593,2.381,604,3.201,679,2.668,734,4.286,815,2.209,833,2.413,834,4.989,835,7.534,836,4.292,837,5.727,838,5.104,839,4.786,840,4.187,841,4.04,842,4.017,843,5.508,844,3.01,845,5.122,846,4.478,847,3.831,848,4.017]],["t/103",[144,1.844,169,4.77,208,2.294,233,4.443,288,3.441,327,4.178,337,3.845,355,3.647,680,2.994,836,4.135,842,5.575,849,5.197,850,4.653,851,4.349]],["t/105",[20,2.587,71,4.366,92,3.986,120,2.9,124,3.86,144,1.922,228,2.988,253,6.723,293,3.86,337,3.915,413,2.946,561,3.152,603,3.774,624,3.21,756,2.622,811,4.366,836,3.538,841,4.804,852,3.479,853,4.069,854,5.421,855,5.254,856,5.421,857,3.735,858,5.05,859,3.946,860,3.558,861,5.05,862,3.836,863,4.55]],["t/107",[20,1.861,53,0.558,66,3.329,92,3.163,124,3.064,144,2.505,170,2.189,224,3.632,233,3.577,279,4.3,328,3.216,337,4.108,353,2.153,355,3.017,357,3.899,359,2.309,413,2.118,415,3.632,478,2.353,593,1.861,603,2.664,619,1.316,624,2.309,729,2.189,815,1.726,836,3.669,838,2.559,839,2.399,841,2.309,851,4.702,852,3.676,855,4.17,857,2.686,864,2.686,865,3.899,866,3.272,867,3.899,868,2.686,869,2.559,870,5.271,871,7.485,872,3.272,873,3.272,874,3.632,875,4.808,876,3.632,877,3.75,878,4.305,879,2.926]],["t/109",[26,2.615,32,2.458,38,2.002,80,1.361,144,1.753,194,2.122,208,2.71,228,3.165,259,3.351,287,6.094,337,3.994,576,3.814,619,1.599,624,2.804,683,3.448,702,2.422,703,2.097,729,2.659,836,3.71,841,3.898,851,5.4,875,5.526,879,3.555,880,4.736,881,6.132,882,5.302,883,4.567,884,2.915,885,4.736,886,5.229,887,2.858,888,2.804,889,2.804,890,5.229,891,4.412,892,3.448,893,4.412,894,4.169]],["t/111",[92,3.13,124,3.031,144,1.979,180,3.637,207,3.488,233,2.985,291,4.878,325,2.705,327,3.42,337,3.141,510,2.856,561,3.295,582,4.254,597,3.72,603,2.636,667,3.905,679,3.975,729,3.182,836,3.643,837,6.238,845,5.579,846,4.878,847,4.173,848,4.564,858,5.279,859,4.125,864,3.905,879,4.254,895,6.257,896,5.667,897,5.667,898,5.279,899,4.564]],["t/113",[27,1.088,40,3.139,49,2.501,92,4.251,97,1.698,113,2.091,124,2.616,139,1.856,144,1.793,177,4.556,180,4.32,207,3.01,208,1.621,216,3.46,241,2.576,293,2.616,330,3.796,337,2.845,355,2.576,379,2.951,582,3.671,596,3.938,603,2.275,680,2.115,757,5.925,836,2.398,838,4.418,839,3.01,841,2.896,845,3.671,846,5.442,847,4.656,851,3.072,864,3.37,896,7.698,897,4.891,899,3.938,900,3.442,901,5.4,902,5.4,903,5.4,904,6.732,905,4.891,906,4.891,907,4.105,908,4.105]],["t/115",[92,2.322,101,1.533,124,2.249,125,2.641,144,2.066,180,4.551,218,1.738,279,4.543,325,2.889,328,3.398,336,1.956,337,2.997,369,2.826,466,3.529,493,2.361,517,3.853,593,2.007,596,6.246,603,1.956,624,4.198,671,3.34,703,1.862,729,2.361,734,2.641,815,1.862,838,2.76,839,2.588,845,6.62,846,4.654,847,3.981,851,3.802,889,4.198,899,3.386,904,8.559,905,6.052,906,6.052,909,3.529,910,4.643,911,2.641,912,3.386,913,2.76,914,4.643,915,4.643,916,4.643,917,4.643,918,4.643,919,4.643,920,4.205,921,3.061]],["t/117",[92,3.153,97,1.983,138,3.837,257,2.623,265,3.613,266,2.528,282,3.748,285,3.446,325,2.725,337,2.413,342,1.91,346,3.748,477,3.934,480,3.262,482,3.206,490,2.838,508,4.598,586,3.514,756,2.762,815,2.528,816,2.559,833,2.762,836,4.608,844,3.446,864,3.934,922,2.69,923,4.598,924,5.026,925,3.934,926,3.934,927,3.837,928,4.793,929,5.319,930,4.157,931,5.319]],["t/119",[68,4.386,92,4.187,96,3.44,97,2.03,121,3.126,257,2.684,337,3.204,346,3.835,359,3.46,378,4.026,508,4.706,586,4.667,650,4.254,684,3.078,836,4.367,924,5.144,925,5.225,927,5.657,932,6.452,933,3.227,934,4.905,935,4.135,936,4.254,937,6.452,938,5.443,939,5.844,940,4.905]],["t/121",[67,5.445,86,2.273,92,3.874,100,2.823,122,3.676,124,4.75,139,1.972,144,1.384,183,2.968,257,3.222,274,3.264,275,4.84,337,3.594,359,4.154,393,3.782,579,2.171,603,3.955,604,3.335,731,4.184,733,4.574,734,3.264,820,3.676,836,2.547,848,4.184,857,3.58,924,4.574,927,4.714,935,3.676,938,6.534,941,4.574,942,2.917,943,4.84,944,4.361,945,3.135,946,5.737,947,5.737,948,3.335,949,4.84]],["t/123",[66,3.107,115,4.16,124,4.272,273,5.579,274,3.981,275,5.903,342,2.12,393,4.614,603,3.715,604,4.067,698,3.981,836,3.107,857,4.367,877,3.5,943,5.903,950,7.987,951,5.104,952,6.998,953,6.998,954,6.998,955,6.998,956,5.579,957,5.903,958,4.919,959,3.444]],["t/125",[26,1.897,40,4.849,88,2.157,92,3.881,120,2.787,123,2.204,124,1.837,143,3.42,144,1.872,154,2.43,161,3.199,170,1.928,185,4.587,186,1.451,233,1.809,257,3.47,267,3.434,293,2.787,337,3.598,351,2.072,514,2.666,603,3.699,604,2.204,680,2.253,749,2.766,755,1.997,784,2.766,836,3.087,844,2.072,848,2.766,868,2.366,912,2.766,913,3.42,925,4.338,927,5.078,934,4.374,935,2.43,938,3.199,941,3.023,943,3.199,951,4.196,960,3.792,961,3.792,962,3.434,963,4.587,964,5.865,965,6.952,966,3.792,967,3.023,968,3.434,969,3.792,970,2.883,971,6.952,972,3.023,973,2.062,974,3.792,975,3.792,976,3.434,977,3.434,978,3.792,979,2.114,980,3.792,981,3.792,982,3.434,983,3.434,984,3.792,985,3.023,986,3.023,987,3.199,988,3.434,989,3.792,990,3.792,991,5.754,992,1.866,993,2.072,994,3.792,995,3.792]],["t/127",[123,4.363,144,2.404,288,3.379,680,2.939,683,4.948,729,3.817,734,4.27,836,3.332,838,6.177,850,4.568,993,4.102,996,5.706,997,7.506,998,5.984,999,4.462]],["t/129",[34,2.173,66,2.611,82,1.629,92,4.819,115,2.79,121,1.415,124,4.169,144,2.548,167,1.698,228,1.565,235,0.919,240,3.419,261,2.329,271,0.869,279,1.986,291,3.496,302,1.263,327,2.565,337,3.015,339,2.054,344,2.428,353,1.461,355,1.394,359,3.612,368,3.742,537,1.698,576,3.423,579,1.106,582,3.191,603,3.487,653,1.058,679,2.274,684,1.394,698,2.67,734,1.662,836,2.611,838,4.385,839,4.614,844,1.597,845,1.986,846,2.79,847,2.387,851,1.662,853,1.986,855,1.926,860,1.737,862,1.872,865,2.646,867,2.646,870,3.299,877,2.942,908,3.568,921,1.926,945,1.597,998,3.742,1000,2.465,1001,1.353,1002,1.512,1003,2.054,1004,1.823,1005,2.922,1006,2.329,1007,1.662,1008,4.471,1009,1.986,1010,4.693,1011,2.465,1012,2.922,1013,2.922,1014,3.58,1015,5.185,1016,1.737,1017,4.962,1018,2.329,1019,4.251,1020,2.922,1021,2.646,1022,2.922,1023,2.922,1024,2.922,1025,2.922,1026,2.929,1027,1.486,1028,2.646,1029,2.922,1030,2.922]],["t/131",[66,3.03,82,3.804,88,3.883,92,3.413,101,2.253,120,3.306,124,4.205,144,2.302,200,5.757,219,5.757,233,3.256,291,4.057,337,3.322,355,3.256,603,2.875,838,4.057,935,4.373,996,5.188,1001,3.161,1008,5.188,1031,5.757,1032,6.825,1033,6.825,1034,4.978,1035,6.825,1036,6.825,1037,6.825]],["t/134",[20,1.778,53,0.54,80,1.07,113,1.592,120,1.992,121,3.915,124,3.915,128,2.34,144,1.475,171,1.556,187,1.755,195,1.962,224,3.469,225,4.298,228,2.039,240,2.39,287,2.999,293,1.992,302,1.778,337,3.981,415,3.469,438,3.126,478,2.247,593,1.778,603,3.405,624,2.205,640,1.281,703,1.649,836,4.277,841,2.205,844,4.417,846,2.444,847,2.091,851,4.153,855,4.031,870,5.682,874,3.469,875,3.126,877,3.651,883,3.342,889,2.205,925,2.566,959,2.024,1009,2.796,1015,5.682,1038,3.278,1039,3.278,1040,2.34,1041,3.469,1042,2.444,1043,3.278,1044,3.469,1045,2.999,1046,2.635,1047,3.469,1048,2.999,1049,2.999,1050,2.891,1051,3.918,1052,6.611,1053,2.127]],["t/136",[24,2.333,82,2.425,88,3.626,92,3.188,101,1.436,105,2.475,120,2.107,124,3.088,144,2.229,196,3.468,225,3.058,228,1.451,233,2.075,253,3.67,278,3.173,287,6.058,293,3.088,337,4.16,558,2.475,603,2.685,619,1.949,672,3.307,756,1.905,784,3.173,836,1.931,841,2.333,845,5.128,851,5.03,852,2.528,853,2.957,854,5.773,855,2.868,857,2.715,858,5.377,868,2.715,870,4.48,871,5.773,875,5.734,881,3.67,883,2.377,884,2.425,885,3.94,942,2.212,962,3.94,998,3.468,1054,6.374,1055,4.35,1056,4.35,1057,3.94,1058,3.307,1059,3.173,1060,3.94,1061,4.35,1062,4.35,1063,2.044,1064,4.35]],["t/138",[27,1.06,80,1.37,100,2.59,101,1.738,124,2.549,144,2.374,183,2.723,189,2.337,228,3.366,240,3.059,337,2.014,353,3.652,497,2.632,517,2.59,579,1.992,593,3.156,603,2.217,680,2.061,684,2.511,756,2.305,836,4.37,839,5.487,841,3.916,851,2.994,877,2.632,883,5.199,887,2.876,888,2.822,891,7.073,935,3.372,945,2.876,1065,4.767,1066,4.196,1067,3.699,1068,2.037,1069,3.838,1070,3.699]],["t/140",[41,3.245,61,3.573,67,3.924,86,2.212,96,2.066,120,2.704,124,2.704,130,2.663,144,2.343,171,2.113,198,2.513,228,2.884,240,5.396,271,2.261,337,2.91,353,2.792,355,3.627,579,2.877,603,2.351,703,2.238,805,2.445,836,3.839,839,4.82,841,4.637,869,3.318,877,4.643,1015,3.924,1017,4.709,1068,2.161,1071,4.243,1072,6.414,1073,4.45,1074,2.513,1075,3.795]],["t/142",[46,3.825,124,3.39,128,5.017,144,2.329,189,3.107,228,2.334,495,3.107,603,2.948,702,3.241,703,2.806,839,3.901,841,3.753,883,3.825,887,4.819,888,4.729,1068,3.414,1069,5.104,1076,5.503,1077,5.579,1078,5.579,1079,4.614]],["t/144",[27,1.241,80,1.081,86,1.646,100,2.044,101,1.371,124,2.984,126,2.469,144,2.38,183,2.149,189,1.844,218,1.555,228,3.222,235,1.306,240,3.581,288,1.87,337,2.358,351,2.27,353,3.081,359,2.227,497,2.077,517,2.044,538,1.442,579,2.331,592,3.367,593,2.663,603,2.595,648,1.139,679,2.012,680,1.627,684,1.981,756,1.819,805,1.819,816,1.686,833,1.819,836,4.176,839,5.501,841,4.356,851,2.363,864,3.844,877,3.081,883,4.741,887,3.367,888,2.227,891,6.194,945,2.27,992,2.044,1026,2.592,1065,3.762,1066,3.311,1067,2.92,1068,1.608,1069,3.029,1070,2.92,1074,1.87,1080,4.154,1081,3.311,1082,3.311,1083,2.592,1084,3.504]],["t/146",[86,2.425,121,2.964,124,3.917,125,3.481,194,2.483,218,2.29,228,2.04,240,3.556,279,4.16,337,3.095,343,4.462,353,3.06,359,3.281,361,4.462,538,2.125,579,2.316,592,3.344,603,3.406,684,3.857,836,2.717,839,3.41,841,4.336,864,5.652,875,4.651,877,3.06,882,4.462,887,3.344,922,3.45,1026,5.046,1083,5.046,1084,5.162,1085,6.119,1086,4.878,1087,3.556,1088,4.878]],["t/148",[41,2.842,53,0.432,61,3.259,81,1.698,96,1.81,120,3.359,124,3.359,126,2.907,130,2.333,144,2.233,218,1.83,228,2.924,240,5.872,271,2.396,353,2.446,488,2.264,538,1.698,579,3.318,603,2.921,732,3.224,805,2.142,836,3.577,839,4.887,841,4.702,869,4.122,877,5.053,921,3.224,1015,3.437,1017,5.85,1026,3.051,1068,1.893,1071,3.717,1072,5.85,1073,3.898,1074,2.201,1075,3.324,1089,2.114,1090,4.125]],["t/150",[46,4.38,128,5.453,144,1.933,228,2.673,702,3.711,841,4.298,883,4.38,887,4.38,888,5.14,1068,3.103,1076,5.001]],["t/152",[27,1.071,32,2.498,38,2.034,53,0.367,81,1.446,96,0.933,121,1.221,123,1.466,125,1.435,126,1.499,130,1.203,139,1.431,144,2.234,171,1.575,204,1.238,228,2.452,240,5.286,255,1.185,257,1.049,261,2.01,265,2.703,271,2.031,274,1.435,288,1.874,328,3.138,339,2.926,344,1.304,369,1.535,413,1.241,482,1.282,485,0.674,497,2.658,516,1.261,517,1.241,538,0.876,558,1.435,579,2.584,644,0.944,675,2.211,680,2.416,698,2.368,703,1.011,729,2.117,805,1.104,815,1.669,816,1.689,836,3.032,838,1.499,839,3.806,841,3.662,864,1.573,869,1.499,877,4.548,882,1.839,884,2.32,887,1.378,907,1.917,913,1.499,921,1.662,925,5.26,973,0.904,993,1.378,1014,2.533,1026,1.573,1034,1.839,1047,4.484,1068,0.976,1071,1.917,1076,3.85,1089,1.799,1090,2.127,1091,5.161,1092,7.327,1093,1.917,1094,6.185,1095,5.588,1096,1.917,1097,2.521,1098,1.839,1099,2.926,1100,1.839,1101,1.714,1102,1.499,1103,1.917,1104,2.926,1105,2.744,1106,2.419,1107,2.127,1108,2.521,1109,2.01,1110,2.521,1111,2.284,1112,1.917,1113,1.573]],["t/154",[38,3.038,144,1.914,218,2.971,240,4.614,271,2.36,501,7.189,538,2.757,684,3.786,716,4.516,864,4.953,877,3.97,1034,5.789,1092,5.789,1114,5.579]],["t/156",[27,1.034,67,3.608,81,1.782,86,2.034,92,2.567,114,2.108,121,3.476,124,2.486,130,2.448,139,1.764,144,2.161,186,1.964,218,2.685,229,3.901,266,2.058,287,3.743,288,2.31,292,4.33,293,2.486,302,2.218,324,4.648,335,4.648,337,2.746,355,2.448,493,2.61,517,2.526,538,1.782,603,2.162,671,2.19,680,2.01,698,2.92,703,2.058,824,4.091,836,4.185,839,4.993,845,3.489,864,3.203,889,2.752,911,2.92,929,4.33,930,3.384,973,1.839,1009,3.489,1027,4.555,1102,3.051,1115,5.132,1116,4.648,1117,3.608,1118,5.132,1119,4.091,1120,4.33,1121,4.091,1122,5.132,1123,3.743,1124,3.289]],["t/158",[27,1.284,41,2.528,66,1.931,96,1.61,121,2.107,122,2.788,144,1.537,171,1.646,183,2.25,218,1.628,228,2.126,240,5.901,271,1.293,285,2.377,328,2.212,339,3.058,495,1.931,517,4.351,579,2.855,637,3.67,679,2.107,716,2.475,749,3.173,836,1.931,841,4.045,864,3.977,869,3.789,877,5.078,882,3.173,913,3.789,973,1.559,1014,3.879,1047,5.377,1071,3.307,1072,3.67,1076,3.977,1083,2.715,1091,4.937,1092,6.962,1102,3.789,1113,4.707,1125,3.307,1126,4.845,1127,2.586,1128,4.35,1129,2.868,1130,4.35,1131,3.468,1132,3.173,1133,3.94,1134,4.35,1135,4.35]],["t/160",[121,3.279,124,3.279,125,3.851,126,5.132,144,1.633,194,2.747,302,2.926,337,3.305,438,5.146,493,3.442,495,3.005,603,2.851,680,2.651,836,4.221,839,3.773,841,3.63,862,4.338,870,6.069,887,3.699,889,3.63,1015,7.039,1042,4.024,1050,4.758,1136,6.131]],["t/162",[46,4.38,128,5.453,144,1.933,228,2.673,702,3.711,841,4.298,883,4.38,887,4.38,888,5.14,1068,3.103,1076,5.001]],["t/164",[32,3.918,38,3.191,144,2.011,171,3.155,703,3.343,836,3.702,888,4.471,1015,6.897]],["t/166",[32,2.538,38,2.845,114,2.219,144,1.302,218,2.021,228,1.801,235,1.698,240,3.139,265,2.365,287,5.421,292,4.556,336,2.275,337,3.504,353,2.701,354,3.21,493,2.746,495,3.3,579,2.044,703,2.98,716,3.072,734,3.072,836,3.773,839,3.01,851,4.229,864,3.37,869,3.21,870,3.796,877,2.701,882,5.421,889,4.558,963,4.305,999,3.21,1015,6.749,1053,2.794,1076,3.37,1094,6.732,1101,3.671,1113,3.37,1137,3.287,1138,4.891,1139,4.891,1140,5.4,1141,5.4,1142,3.56,1143,4.891]],["t/168",[53,0.634,89,2.443,100,3.533,208,2.155,210,2.325,282,4.268,325,3.104,342,2.714,500,3.533,640,2.237,654,2.748,702,3.325,751,4.734,805,3.145,825,4.719,860,4.268,970,5.458,1144,5.237,1145,5.098,1146,2.845,1147,5.458,1148,7.18]],["t/170",[27,1.31,34,2.907,44,4.167,53,0.574,210,2.724,271,1.934,336,2.739,342,2.988,488,3.012,503,3.78,516,3.252,583,2.927,654,2.489,702,3.897,732,4.287,825,4.912,959,3.2,973,2.331,1144,6.137,1146,2.577,1147,4.943,1149,4.743,1150,3.102,1151,6.503,1152,5.89,1153,5.184]],["t/172",[20,2.645,24,3.281,27,1.232,34,2.668,53,0.714,62,3.344,208,1.836,210,2.618,228,2.04,285,3.344,325,2.645,342,2.449,380,2.514,493,3.111,510,2.793,516,3.06,557,4.16,619,1.871,654,2.342,682,3.818,702,2.833,783,4.16,801,3.921,852,3.556,884,3.41,888,3.281,972,4.878,1091,3.637,1119,4.878,1145,3.481,1153,4.878,1154,3.011,1155,2,1156,3.818,1157,7.324,1158,4.16,1159,3.111,1160,5.542,1161,4.301]],["t/174",[23,3.994,27,1.729,34,2.314,44,4.3,53,0.693,80,1.215,97,1.469,114,1.918,170,2.374,171,1.767,206,2.073,210,3.066,241,3.201,289,2.992,342,2.868,351,2.552,488,2.162,490,3.02,496,3.939,644,2.511,654,1.787,677,3.356,713,2.227,825,4.986,833,2.045,898,3.939,1081,3.722,1144,5.728,1146,1.85,1150,3.201,1154,2.298,1162,2.992,1163,4.669,1164,2.102,1165,2.458,1166,2.714,1167,5.521,1168,5.521,1169,5.1,1170,3.078,1171,4.229,1172,5.66,1173,1.691,1174,3.939,1175,3.174,1176,4.3,1177,4.669,1178,2.775]],["t/176",[27,0.797,34,2.629,44,2.535,53,0.7,80,1.03,88,3.379,89,1.346,100,3.901,101,1.306,113,1.531,139,1.36,180,3.452,183,3.073,186,1.514,192,2.608,194,1.605,197,2.78,208,1.782,209,2.689,210,1.923,241,1.887,266,1.586,271,2.121,288,1.78,325,1.71,334,3.007,342,1.799,482,2.011,488,2.75,514,2.78,552,2.25,561,2.083,594,1.75,597,2.351,639,2.162,680,1.549,702,1.832,729,2.011,730,1.946,740,2.046,778,2.121,815,1.586,825,3.755,846,2.351,931,3.337,942,2.011,945,2.162,959,1.946,973,2.128,999,2.351,1001,1.832,1063,1.859,1093,3.007,1123,4.332,1144,2.885,1145,4.058,1146,2.353,1149,5.202,1150,1.887,1154,1.946,1155,3.026,1173,1.433,1179,3.337,1180,3.955,1181,3.53,1182,3.955,1183,3.582,1184,3.337,1185,2.885,1186,2.885,1187,2.162,1188,2.407,1189,3.153,1190,3.007,1191,4.332,1192,2.885,1193,2.608,1194,3.955,1195,2.468,1196,3.007,1197,3.007]],["t/178",[27,1.251,31,3.98,53,0.548,89,2.113,183,3.213,187,2.65,189,2.757,210,2.644,378,3.875,493,4.153,500,3.056,552,3.533,579,2.35,593,2.684,639,3.394,640,1.935,654,2.377,730,4.769,740,4.224,814,5.956,852,3.61,929,5.239,959,3.056,1063,2.918,1070,4.365,1077,4.951,1090,5.239,1145,3.533,1198,3.875,1199,5.625,1200,6.21,1201,4.721,1202,6.21,1203,4.529,1204,4.365,1205,5.625]],["t/180",[27,1.511,53,0.756,101,1.807,113,2.118,198,2.463,208,1.642,210,1.771,218,2.048,228,1.825,235,1.721,271,1.627,325,2.365,339,3.846,342,1.657,510,2.498,538,1.9,579,2.071,619,1.673,647,3.473,657,3.414,702,2.534,713,4.392,730,2.693,740,2.83,801,5.484,959,2.693,1016,3.252,1063,2.571,1087,4.359,1154,3.691,1155,1.789,1159,2.782,1173,2.717,1181,3.252,1195,3.414,1206,5.701,1207,5.471,1208,3.113,1209,5.471,1210,4.362,1211,5.471,1212,4.956,1213,3.607,1214,3.991,1215,6.327,1216,6.793]],["t/182",[27,1.629,53,0.54,101,2.02,154,3.921,198,2.754,210,1.981,214,3.921,228,2.04,342,1.853,378,3.818,426,5.162,493,3.111,524,3.724,588,4.419,651,4.651,654,2.342,689,3.921,713,2.919,825,3.222,967,4.878,1069,4.462,1173,2.929,1191,4.462,1206,7.616,1213,4.034,1217,4.16,1218,3.818,1219,5.162,1220,6.119,1221,2.645,1222,6.119,1223,3.556,1224,5.542,1225,5.542,1226,4.878,1227,4.301,1228,6.119,1229,5.542]],["t/184",[27,1.41,28,3.901,53,0.779,271,2.081,552,3.981,579,2.648,588,3.825,680,2.741,713,3.338,778,3.753,801,4.484,1001,3.241,1002,4.562,1053,3.62,1087,4.067,1155,2.288,1215,5.903,1216,6.338,1230,7.439,1231,6.998,1232,5.104,1233,5.579,1234,4.757,1235,4.067,1236,4.757]],["t/186",[53,0.701,271,2.36,692,4.953,863,6.034,951,5.789,973,2.845,1150,3.786,1173,2.875,1188,4.831,1237,6.328,1238,4.831,1239,5.396,1240,6.328,1241,5.396]],["t/189",[27,1.188,30,1.693,32,1.841,34,1.154,38,2.257,46,3.223,53,0.785,80,1.02,89,1.333,101,1.294,148,2.063,154,2.511,170,1.992,187,1.672,191,1.928,210,2.987,255,1.841,266,1.571,271,1.165,302,1.693,380,1.61,413,1.928,483,2.184,490,1.763,495,1.739,503,2.277,527,1.959,586,2.184,644,1.466,648,1.617,679,1.898,683,3.888,698,2.229,702,2.731,710,3.68,729,3.606,730,1.928,734,2.229,740,4.082,778,3.803,836,1.739,850,2.384,893,3.305,894,4.701,922,1.672,940,2.978,973,1.404,1040,2.229,1096,2.978,1127,2.329,1145,2.229,1146,2.337,1150,3.383,1154,4.871,1155,1.928,1159,4.522,1181,4.69,1188,2.384,1201,2.978,1242,2.857,1243,2.329,1244,2.978,1245,1.814,1246,3.68,1247,3.428,1248,3.305,1249,3.548,1250,2.754,1251,2.857,1252,3.305,1253,2.663,1254,3.548]],["t/191",[32,2.715,38,2.211,53,0.687,62,3.157,89,1.966,101,1.907,149,3.32,210,1.87,214,3.702,228,1.927,490,2.6,493,3.957,496,4.873,510,2.637,538,2.006,654,2.211,663,3.157,702,2.675,713,2.756,724,3.516,751,3.809,900,2.675,922,2.465,992,2.843,1154,2.843,1156,3.605,1158,3.927,1159,4.788,1173,2.092,1188,5.356,1243,3.434,1245,2.675,1246,3.605,1247,4.523,1255,4.958,1256,4.061,1257,5.777,1258,7.048,1259,7.048]],["t/193",[27,1.485,53,0.651,538,2.56,557,5.012,594,2.172,680,2.887,684,3.517,703,2.956,887,4.029,1001,3.414,1068,2.854,1154,3.628,1155,2.41,1159,3.749,1164,3.318,1188,6.017,1236,5.012,1243,4.382,1255,3.882,1260,5.377]],["t/195",[30,2.892,32,2.578,34,1.05,38,3.619,53,0.315,106,3.006,113,2.59,131,3.806,148,3.523,149,4.034,151,2.224,186,1.364,187,1.52,191,1.754,210,1.154,235,1.121,380,1.464,490,1.604,510,3.054,536,2.709,538,1.905,568,2.027,590,3.588,594,1.05,619,1.09,675,1.482,677,1.782,703,2.2,726,2.169,730,1.754,740,1.843,751,2.349,844,1.948,900,1.65,1053,1.843,1063,1.675,1068,1.38,1074,3.011,1106,2.071,1150,3.871,1154,1.754,1155,3.212,1156,2.224,1158,3.73,1164,1.604,1176,2.284,1178,2.118,1181,2.118,1188,4.938,1243,2.118,1247,2.071,1255,4.272,1258,7.762,1261,4.969,1262,5.826,1263,5.712,1264,3.227,1265,4.969,1266,3.564,1267,3.564,1268,2.709,1269,3.006,1270,2.599,1271,4.374,1272,3.564,1273,3.564,1274,2.841,1275,2.505,1276,3.564,1277,2.841]],["t/197",[20,2.532,27,1.582,53,0.872,80,2.045,101,1.934,108,3.405,113,2.268,143,3.483,171,2.217,189,2.601,210,1.897,302,2.532,342,1.775,597,3.483,679,2.838,702,2.713,734,3.333,922,2.5,933,2.93,993,3.202,1016,3.483,1145,3.333,1150,4.517,1154,3.866,1155,1.915,1169,5.972,1173,2.122,1185,5.73,1187,3.202,1188,3.566,1226,4.671,1242,4.273,1278,7.115,1279,3.483,1280,4.454,1281,5.859,1282,4.118,1283,4.454]],["t/200",[138,4.568,139,3.166,347,5.984,640,2.338,654,2.873,692,4.684,817,5.706,852,4.363,944,5.706,1150,3.58,1173,2.719,1187,4.102,1238,4.568,1284,7.506,1285,5.706,1286,6.798,1287,5.984,1288,5.102,1289,5.276]],["t/202",[138,4.696,139,3.22,169,4.815,213,5.865,342,2.337,692,4.815,1146,3.057,1150,3.681,1153,6.151,1173,2.795,1188,4.696,1189,6.151,1239,5.245,1290,7.715,1291,6.509,1292,7.715]],["t/204",[27,1.582,53,0.783,80,1.525,89,1.993,108,3.405,166,3.202,208,1.758,210,3.066,328,2.979,342,2.38,344,3.031,488,3.638,597,3.483,640,1.825,680,2.295,702,3.638,756,2.566,784,4.273,815,2.349,825,4.136,853,3.983,987,4.942,1001,2.713,1040,3.333,1070,4.118,1150,4.228,1154,2.883,1155,2.898,1173,2.122,1189,4.671,1208,4.469,1217,3.983,1282,4.118,1293,3.031,1294,4.671,1295,5.859]],["t/206",[53,0.783,167,4.102,183,3.651,193,4.523,204,2.099,207,3.934,485,2.59,500,3.473,553,4.102,614,4.586,644,2.641,654,2.701,663,3.857,668,4.102,671,3.011,752,3.934,757,5.626,803,5.954,816,2.864,1162,4.523,1255,3.716,1296,5.626,1297,7.058]],["t/208",[23,1.143,27,0.762,34,3.117,39,1.709,48,0.622,49,1.041,53,0.566,59,1.792,62,1.228,75,1.336,97,0.707,114,0.923,116,1.44,130,1.072,135,1.403,144,0.542,149,2.089,151,1.403,153,1.639,187,0.959,203,1.163,206,0.998,208,0.675,210,1.224,233,1.804,246,1.792,255,1.056,263,1.528,265,1.657,271,0.668,325,0.972,326,1.896,354,1.336,380,0.923,413,1.106,477,1.403,478,1.228,482,1.143,485,1.534,497,1.124,510,1.726,517,2.826,521,1.253,525,1.777,527,2.449,537,1.306,542,1.528,553,3.337,555,1.657,565,1.639,579,0.851,583,1.012,588,1.228,590,1.205,592,1.228,593,2.482,594,1.114,598,2.571,606,2.067,619,1.156,628,1.58,640,0.7,644,0.841,671,1.614,689,1.44,713,1.072,719,2.198,784,1.639,887,1.228,892,1.482,900,1.751,911,1.279,921,1.482,993,1.228,1009,1.528,1042,2.248,1050,1.58,1059,1.639,1063,1.777,1068,0.87,1102,1.336,1113,1.403,1150,2.336,1155,0.735,1166,1.306,1188,1.368,1193,1.482,1218,1.403,1238,1.368,1245,1.041,1247,2.198,1255,1.183,1260,1.639,1298,2.036,1299,2.875,1300,1.896,1301,2.036,1302,2.036,1303,2.036,1304,2.108,1305,2.036,1306,2.036,1307,2.036,1308,1.368,1309,1.792,1310,2.036,1311,2.036,1312,1.896,1313,2.036,1314,4.365,1315,2.493,1316,2.036,1317,1.639,1318,2.036,1319,2.036,1320,2.036,1321,2.036,1322,2.036,1323,2.036,1324,2.036,1325,2.036,1326,2.036,1327,2.036,1328,1.792,1329,2.036,1330,2.036,1331,1.279,1332,2.036,1333,2.036,1334,1.896,1335,1.639,1336,2.036,1337,2.036,1338,1.792,1339,1.792,1340,1.709,1341,2.036,1342,2.036,1343,2.758,1344,3.015,1345,2.571,1346,1.896,1347,2.248,1348,2.036,1349,2.036,1350,3.425,1351,1.896,1352,1.792,1353,2.036,1354,1.896,1355,1.896,1356,1.896,1357,1.368,1358,2.036,1359,2.036,1360,2.036,1361,2.036,1362,2.036,1363,2.036,1364,2.036,1365,2.036,1366,2.036,1367,2.493,1368,2.424,1369,2.036,1370,2.036,1371,1.896,1372,2.036,1373,2.036,1374,3.425,1375,3.425,1376,3.425,1377,1.709,1378,1.896,1379,2.248,1380,2.036,1381,2.036,1382,2.036,1383,2.036,1384,1.709,1385,2.036,1386,2.036,1387,2.036,1388,2.036,1389,2.036,1390,2.036,1391,2.036,1392,1.896,1393,2.036,1394,2.036]],["t/210",[114,1.918,153,3.405,246,3.722,521,2.602,525,2.194,527,2.335,606,2.552,607,2.262,619,2.051,636,5.837,640,3.039,642,4.133,645,6.004,648,3.062,689,2.992,993,2.552,1059,3.405,1113,2.914,1193,3.078,1245,2.162,1300,3.939,1303,4.229,1319,4.229,1321,4.229,1327,4.229,1328,3.722,1333,4.229,1349,4.229,1354,3.939,1358,4.229,1378,3.939,1390,4.229,1392,3.939]],["t/212",[53,0.736,485,2.227,527,4.17,619,2.549,640,2.597,642,3.265,653,3.02,1298,7.551,1395,6.646]],["t/214",[53,0.657,152,5.93,303,4.904,307,5.654,485,1.987,525,3.495,568,4.232,619,2.274,640,2.317,642,2.913,653,3.318,674,6.275,776,6.275,1299,6.963,1396,6.737,1397,4.065,1398,6.737,1399,8.296]],["t/216",[48,2.44,53,0.618,75,5.242,97,2.201,266,2.806,278,5.104,485,1.869,525,4.144,602,5.903,616,4.16,619,2.14,642,2.741,644,2.619,648,1.919,653,2.535,668,4.067,678,4.367,759,4.484,1162,4.484,1301,6.338,1302,6.338,1400,6.998,1401,5.104,1402,6.998,1403,6.998]],["t/218",[22,4.254,47,3.835,53,0.821,149,2.753,193,4.135,197,6.533,208,1.936,210,2.089,233,3.078,261,5.144,368,5.144,416,4.536,485,2.483,606,3.526,619,1.973,642,2.527,648,1.77,653,2.337,671,2.753,900,3.877,1057,5.844,1063,3.032,1132,4.706,1404,4.536,1405,6.452,1406,6.452,1407,6.452,1408,6.452,1409,5.443,1410,6.452,1411,6.452]],["t/220",[22,3.514,23,2.711,27,1.484,48,1.475,53,0.745,62,2.913,113,2.064,135,3.326,139,1.832,149,3.143,208,1.6,210,1.726,233,2.543,265,3.227,380,2.19,477,3.326,485,2.255,553,5.292,590,2.859,606,2.913,619,1.63,640,1.661,642,2.088,648,1.462,653,1.931,671,2.274,816,2.163,887,2.913,900,2.469,1063,2.505,1068,2.064,1166,3.098,1218,3.326,1245,2.469,1255,2.807,1304,4.106,1305,4.828,1306,4.828,1307,4.828,1308,3.244,1309,4.25,1310,4.828,1311,4.828,1312,4.497,1313,4.828,1314,6.417,1315,3.514,1316,4.828,1317,3.888,1318,4.828,1412,5.331,1413,3.624]],["t/222",[23,3.066,24,3.233,27,1.214,53,0.88,327,3.295,358,3.864,485,2.559,542,5.444,555,4.196,576,4.397,606,3.295,607,2.921,619,2.448,640,1.879,642,2.361,643,5.472,647,2.792,653,2.184,680,2.361,849,5.444,993,4.376,1106,3.505,1238,3.67,1414,5.84,1415,4.583,1416,8.008,1417,8.008,1418,4.807]],["t/224",[27,1.518,48,1.524,53,0.486,97,2.701,206,2.445,340,3.01,485,2.294,588,4.693,598,5.122,606,3.01,607,2.668,619,1.684,642,2.157,643,5.226,644,2.061,647,2.551,648,1.511,651,5.727,653,1.995,680,2.157,689,5.503,849,3.744,1003,3.872,1106,3.201,1162,3.53,1238,3.352,1240,4.391,1314,5.727,1368,4.828,1401,6.733,1415,4.187,1419,4.391,1420,2.954,1421,4.989,1422,5.508,1423,7.534,1424,7.36,1425,5.508]],["t/226",[485,2.447,555,4.348,561,3.917,589,5.654,596,5.425,619,2.274,621,5.93,642,2.913,648,2.04,653,2.694,680,2.913,686,6.737,1213,4.904,1320,6.737,1395,5.93,1419,5.93,1426,6.275,1427,7.438]],["t/228",[86,2.597,116,4.2,174,4.321,304,4.781,336,2.761,485,1.751,492,3.391,517,4.162,588,3.582,589,4.983,614,3.391,619,2.004,642,3.312,643,3.989,647,3.035,648,1.798,652,5.937,653,2.374,663,3.582,764,5.529,948,3.81,977,5.937,1131,5.225,1181,3.896,1234,4.456,1322,5.937,1377,6.429,1428,4.607,1429,5.937,1430,5.937,1431,6.555,1432,6.555,1433,6.555]],["t/230",[34,2.988,53,0.732,235,1.998,278,4.634,485,1.697,537,4.818,607,4.015,619,2.534,640,1.979,643,3.867,645,4.716,648,1.742,653,2.301,666,3.541,993,3.472,1221,2.746,1299,4.83,1323,5.754,1324,5.754,1325,5.754,1395,5.065,1396,5.754,1434,4.189,1435,6.353,1436,6.353,1437,8.288,1438,6.353,1439,6.353,1440,6.353,1441,6.353]],["t/232",[23,3.089,53,0.797,113,2.351,152,4.842,204,1.806,208,1.823,235,1.91,241,2.897,303,4.004,307,4.617,485,2.15,525,2.854,568,3.455,593,2.625,594,1.79,607,3.898,619,2.759,640,2.507,642,3.151,645,3.455,648,2.475,653,2.915,674,5.124,752,3.385,759,3.892,1299,6.117,1326,7.288,1397,3.319,1398,5.501,1399,7.288,1442,6.074,1443,3.455]],["t/234",[235,2.201,336,2.948,524,5.367,542,5.995,607,4.272,619,2.952,628,4.919,640,2.18,645,3.981,648,2.648,649,5.995,653,2.535,663,3.825,666,3.901,1181,5.242,1444,8.818,1445,8.818]],["t/236",[27,1.31,73,4.167,109,3.625,146,5.89,233,3.102,485,1.737,606,3.554,607,3.15,619,2.852,636,4.421,642,2.547,643,5.678,646,4.167,647,3.012,648,1.783,653,2.356,680,2.547,683,4.287,1106,3.78,1238,3.958,1328,7.437,1329,7.621,1330,7.621,1415,4.943,1446,6.503,1447,6.503,1448,6.503,1449,6.503,1450,5.89]],["t/238",[24,1.895,27,1.098,34,1.041,41,2.054,47,2.1,53,0.312,70,4.345,73,4.264,113,2.11,144,0.852,149,3.644,151,4.152,174,3.593,197,2.483,203,1.828,208,1.06,235,1.111,255,3.127,259,2.264,325,1.527,336,1.488,380,2.239,466,2.686,485,1.456,495,1.569,525,1.66,527,4.042,555,3.277,565,6.704,579,2.063,607,3.624,614,1.828,619,2.721,621,2.817,640,2.518,642,3.345,644,1.322,645,3.786,646,2.264,648,1.825,653,2.41,667,2.205,702,2.524,708,2.981,713,1.685,721,4.793,759,2.264,872,2.686,892,3.593,900,1.636,921,2.329,1016,2.1,1162,2.264,1193,5.328,1221,3.494,1255,1.86,1331,2.01,1332,3.2,1415,2.686,1443,3.786,1451,4.937,1452,3.2,1453,3.2,1454,3.533,1455,2.577,1456,3.533,1457,1.969,1458,3.2,1459,4.524,1460,3.533]],["t/240",[20,3.244,22,4.948,39,5.706,208,2.252,516,3.754,525,3.527,579,3.486,593,3.244,594,2.211,606,4.102,619,2.295,642,2.939,648,2.058,653,2.719,1238,4.568,1245,3.476,1334,6.332,1335,6.718]],["t/242",[40,2.288,53,0.84,115,2.34,116,3.792,130,1.878,187,2.525,208,1.181,235,1.238,255,1.85,271,1.17,325,1.702,354,2.34,413,1.937,485,2.469,510,2.702,516,1.969,517,3.5,542,2.676,583,1.772,593,4.11,594,2.095,607,2.867,619,2.724,640,1.226,642,3.724,645,2.239,648,2.668,653,2.865,666,2.194,668,4.929,713,1.878,816,1.598,911,2.239,921,2.595,1042,3.518,1050,2.767,1102,2.34,1150,2.823,1155,1.287,1335,2.871,1336,5.36,1337,5.36,1338,3.138,1339,3.138,1340,2.992,1341,3.565,1342,5.36,1343,4.316,1344,4.718,1345,4.023,1346,4.993,1347,3.518,1348,5.36,1461,3.936]],["t/244",[34,2.196,53,0.554,73,2.73,135,2.659,208,1.884,235,1.34,255,3.502,340,3.431,482,2.167,485,1.677,497,2.131,516,3.139,517,4.513,525,3.502,607,3.041,618,2.809,619,2.899,640,2.731,642,3.592,645,3.571,646,2.73,647,2.907,648,2.044,653,2.7,668,2.476,715,6.75,719,5.096,721,4.776,776,5.295,784,3.107,1009,2.896,1103,5.666,1139,5.685,1150,2.032,1188,2.593,1260,3.107,1299,4.772,1350,5.685,1351,3.594,1352,3.397,1353,3.859,1434,5.78,1443,4.24,1459,5.067]],["t/246",[22,4.321,59,5.225,75,3.896,113,2.538,208,2.538,235,2.062,263,4.456,594,1.931,607,4.097,619,2.863,640,3.083,642,3.312,645,3.729,648,1.798,653,2.374,668,4.916,719,5.443,973,2.349,1245,3.035,1354,5.529,1355,5.529,1356,5.529,1357,3.989,1462,5.529,1463,6.555]],["t/248",[23,3.734,53,0.831,144,1.771,183,2.149,207,2.315,235,1.306,326,3.504,485,2.513,575,5.579,592,2.27,607,4.202,611,3.504,619,2.652,640,1.294,642,3.559,643,4.469,644,1.555,645,2.363,646,2.662,648,2.58,653,2.66,816,1.686,837,3.157,900,3.4,1068,2.843,1076,2.592,1100,5.355,1162,2.662,1184,3.504,1198,4.582,1359,5.579,1360,3.762,1361,3.762,1362,3.762,1363,5.579,1364,3.762,1365,5.579,1366,3.762,1464,9.087,1465,6.16,1466,5.355,1467,7.343,1468,4.154,1469,6.16,1470,4.154,1471,4.154,1472,4.154]],["t/250",[49,2.025,73,2.802,130,2.086,235,1.375,255,3.007,527,3.784,555,4.294,588,4.135,598,4.35,606,4.135,607,3.1,614,2.262,619,2.998,640,2.761,642,3.745,645,3.64,646,4.1,647,2.025,648,2.539,653,3.016,667,2.729,689,5.932,721,4.1,755,3.369,809,2.802,872,3.324,907,3.324,1223,2.542,1315,2.883,1367,4.218,1368,4.1,1369,5.795,1370,3.961,1371,3.689,1404,3.074,1421,3.961,1443,3.64,1459,4.35,1473,2.729,1474,4.373,1475,4.373,1476,4.373,1477,3.961,1478,4.373]],["t/252",[53,0.809,110,5.425,153,5.425,235,2.34,255,3.495,485,1.987,527,3.72,561,3.917,619,2.274,642,2.913,648,2.04,653,2.694,721,4.766,892,4.904,1372,6.737,1373,6.737,1443,4.232,1459,5.057,1479,5.057,1480,6.737]],["t/254",[34,2.518,53,0.588,73,4.268,82,3.712,110,4.857,130,3.177,153,6.232,235,2.095,246,5.31,255,3.13,485,1.779,527,3.331,619,2.885,642,3.347,646,4.268,648,1.827,653,2.412,721,4.268,1374,7.739,1375,7.739,1376,7.739,1377,5.063,1443,3.789,1459,4.528,1479,4.528,1480,6.032]],["t/256",[27,0.824,48,1.132,53,0.538,58,2.081,63,3.047,73,2.622,76,3.802,120,1.982,122,2.622,176,3.452,177,3.452,183,2.117,189,1.817,197,4.282,203,3.152,204,1.217,206,3.231,278,6.591,291,2.432,337,1.566,342,2.205,380,1.681,393,2.698,478,3.978,485,2.626,497,2.047,503,2.378,506,3.262,510,1.868,524,2.491,561,3.208,606,2.236,607,1.982,619,2.225,636,2.782,642,1.603,643,4.43,646,2.622,648,1.122,653,1.482,679,1.982,680,2.386,705,3.452,759,2.622,797,4.443,900,1.895,933,2.047,985,3.262,1002,2.117,1059,5.881,1106,2.378,1116,5.518,1162,2.622,1238,2.491,1345,4.142,1401,2.984,1415,3.111,1424,3.262,1481,2.622,1482,3.262,1483,4.092,1484,4.092,1485,3.452,1486,4.092,1487,2.622,1488,6.092,1489,5.518,1490,5.139,1491,4.092,1492,2.281,1493,4.092,1494,3.541]],["t/258",[53,0.791,73,4.601,255,3.374,485,2.394,606,3.924,619,2.987,642,3.51,644,2.687,646,4.601,648,1.969,668,4.173,721,4.601,900,3.325,907,5.458,1162,4.601,1335,5.237,1378,7.56,1443,4.085,1459,4.881]],["t/260",[27,0.89,47,2.627,53,0.739,169,2.758,207,2.463,208,1.326,235,1.39,485,2.034,527,2.21,607,3.688,619,2.841,640,1.377,642,3.851,644,3.132,645,2.514,648,2.75,653,3.031,668,4.425,816,1.794,825,4.009,887,2.415,1004,2.758,1088,3.523,1106,2.569,1162,2.832,1179,3.728,1245,3.876,1247,5.172,1314,5.787,1315,2.914,1317,3.223,1380,6.895,1381,4.003,1382,4.003,1383,4.003,1384,5.787,1385,4.003,1495,4.003,1496,3.728,1497,5.44,1498,4.42,1499,4.42,1500,4.42,1501,7.613]],["t/262",[53,0.507,151,4.833,181,4.361,235,1.804,255,3.64,336,2.417,521,3.198,607,3.752,619,3.158,640,3.055,642,3.957,645,3.264,648,2.405,653,3.176,666,3.198,721,4.963,1053,2.968,1247,5.097,1386,5.196,1387,5.196,1388,5.196,1389,5.196,1443,4.407,1459,5.266,1502,5.737,1503,4.574,1504,5.737]],["t/264",[235,2.34,503,4.323,607,4.437,619,3.035,640,3.092,642,3.587,645,4.232,648,2.04,653,2.694,1247,5.769,1391,6.737,1505,7.438,1506,7.438]],["t/266",[53,0.708,255,3.766,619,2.45,640,2.497,642,3.139,653,2.903,666,4.467,721,5.136,1392,6.761,1393,7.259,1394,7.259,1443,4.56,1459,5.448]],["t/268",[53,0.846,80,1.791,126,4.091,194,2.793,210,2.228,271,2.046,482,3.499,594,2.028,692,4.294,813,5.019,898,5.805,933,3.442,951,5.019,973,2.466,1049,5.019,1150,3.283,1154,3.386,1164,3.098,1173,2.493,1187,5.236,1285,5.231,1507,6.882,1508,3.141,1509,6.233,1510,6.233,1511,5.805]],["t/271",[26,1.347,27,1.293,32,1.266,34,0.794,38,2.13,46,1.472,53,0.707,80,1.144,89,1.495,100,1.326,101,1.451,113,1.043,148,2.314,149,1.149,154,1.726,166,1.472,170,1.37,174,4.664,187,1.875,210,2.702,213,2.048,214,1.726,245,2.048,255,1.266,266,1.08,271,0.801,274,2.5,325,1.899,340,2.402,342,2.298,344,2.273,380,1.107,413,1.326,483,1.501,488,1.247,490,1.213,493,1.37,495,1.196,497,1.347,527,1.347,538,0.936,644,1.008,648,1.205,654,1.031,668,1.566,679,1.305,698,3.166,702,2.035,703,1.08,710,3.473,713,1.285,730,2.162,740,3.322,756,1.18,778,2.985,825,4.967,850,2.675,860,1.601,900,1.247,922,1.875,940,2.048,959,1.326,970,2.048,973,0.965,1053,2.273,1127,1.601,1145,1.533,1146,1.067,1147,2.048,1150,2.096,1153,2.147,1154,3.16,1155,1.82,1159,5.275,1164,2.89,1173,0.976,1181,3.308,1186,1.965,1187,3.509,1190,2.048,1191,1.965,1208,3.166,1239,1.831,1242,1.965,1243,1.601,1244,3.34,1245,1.247,1246,4.414,1253,1.831,1255,2.314,1256,1.893,1259,2.44,1511,2.272,1512,2.694,1513,2.694,1514,2.694,1515,2.44,1516,3.98,1517,2.147,1518,2.694,1519,3.707,1520,2.147,1521,2.694,1522,2.694,1523,2.272,1524,2.272,1525,2.694,1526,1.533]],["t/273",[27,1.512,53,0.663,538,2.607,557,5.102,594,2.211,680,2.939,684,3.58,887,4.102,1001,3.476,1068,2.906,1150,3.58,1154,3.694,1155,2.454,1159,3.817,1164,3.379,1187,5.034,1243,4.462,1255,3.952,1260,5.474]],["t/275",[38,2.451,53,0.565,66,3.698,131,3.643,148,3.371,149,2.732,169,3.995,191,3.151,226,4.353,538,2.224,594,1.886,671,2.732,703,2.567,710,3.995,860,3.806,1003,5.855,1048,4.67,1074,4.168,1155,3.027,1159,3.256,1164,2.882,1187,4.553,1243,3.806,1263,4.867,1304,4.643,1527,8.273,1528,4.867,1529,6.403]],["t/277",[30,1.61,32,1.75,34,1.672,38,3.168,46,2.035,53,0.329,66,3.053,106,4.787,131,4.374,148,3.62,149,3.28,187,1.589,189,1.653,210,1.206,245,4.314,527,1.862,568,2.119,619,1.139,648,1.556,675,2.86,703,1.493,730,1.833,772,4.406,973,1.334,1040,3.228,1053,1.926,1074,3.461,1105,2.455,1155,2.248,1156,2.324,1159,4.435,1181,2.214,1187,2.035,1188,4.185,1243,3.373,1256,5.817,1261,6.227,1262,4.674,1263,4.314,1264,3.373,1265,3.373,1271,4.524,1274,2.969,1275,4.833,1277,2.969,1304,2.076,1413,2.532,1452,6.227,1497,3.141,1515,5.14,1516,5.14,1517,4.524,1527,7.885,1530,4.787,1531,5.481,1532,3.724,1533,3.724,1534,3.724,1535,3.724,1536,3.724,1537,5.675,1538,5.675,1539,5.675,1540,5.675,1541,2.532]],["t/279",[26,2.666,53,0.804,63,2.666,74,4.705,80,2.197,81,1.851,89,3.098,113,2.852,119,3.624,139,2.532,167,3.098,192,3.514,204,1.585,208,1.6,210,1.726,354,3.169,379,4.613,484,3.624,507,3.416,516,2.666,555,2.335,561,2.807,568,4.191,654,2.04,716,3.033,805,2.335,873,4.052,912,3.888,935,3.416,942,2.711,992,2.623,1001,2.469,1288,3.624,1304,2.971,1308,3.244,1397,4.026,1542,4.883,1543,3.624,1544,3.416,1545,4.052,1546,5.331,1547,4.828,1548,4.828,1549,4.828,1550,4.25,1551,4.25]],["t/281",[44,4.523,53,0.783,74,4.942,81,2.451,191,3.473,202,4.404,266,2.83,583,3.177,648,1.936,892,4.653,933,3.53,945,3.857,987,5.954,1196,5.365,1221,3.051,1291,5.954,1430,6.392,1542,5.198,1543,4.798,1552,5.954,1553,4.961,1554,5.147,1555,7.058]],["t/283",[53,0.881,80,2.236,113,2.599,119,4.564,215,5.104,230,3.669,244,6.848,268,6.081,302,2.902,379,3.669,380,4.102,568,3.82,593,2.902,594,1.978,805,2.941,936,4.427,1001,4.386,1132,4.897,1542,3.601,1543,4.564,1556,6.714,1557,5.353,1558,5.353]],["t/285",[53,0.818,113,2.932,171,2.866,204,2.252,379,4.14,948,4.402,1001,3.508,1142,4.994,1270,5.524,1404,5.324,1508,3.458,1542,4.062,1543,5.149,1559,7.574,1560,6.038,1561,6.86,1562,7.574,1563,7.574]],["t/287",[44,4.447,48,1.92,53,0.613,74,3.868,80,2.283,122,4.447,139,2.385,190,5.214,191,3.415,487,5.061,488,3.214,489,4.878,805,3.04,913,4.125,973,2.487,1105,4.575,1111,6.285,1132,5.061,1192,5.061,1494,4.033,1542,4.704,1543,4.717,1564,5.275,1565,5.854,1566,6.939,1567,6.285]],["t/289",[53,0.736,204,2.479,413,4.103,561,4.39,604,4.846,1079,5.497,1125,6.338,1543,5.668,1568,6.081]],["t/291",[27,1.779,39,4.422,41,4.545,53,0.69,74,3.243,119,6.698,171,2.202,230,4.273,273,4.638,302,3.38,347,4.638,604,3.381,678,3.63,892,3.835,934,5.944,944,4.422,1001,3.621,1021,5.269,1067,4.089,1068,2.252,1084,4.908,1155,1.902,1223,3.381,1397,3.179,1404,4.089,1542,4.193,1543,5.315,1553,4.089,1568,5.702,1569,5.269,1570,5.818,1571,5.818,1572,5.269,1573,5.818,1574,3.835,1575,5.818,1576,4.638]],["t/293",[40,3.289,48,2.784,63,3.838,65,4.511,78,3.847,139,2.638,154,4.917,166,3.092,180,3.289,183,2.927,202,3.531,204,2.589,342,2.638,582,3.847,583,2.547,603,2.384,604,3.289,643,3.444,671,2.414,702,3.554,825,2.979,868,3.531,876,4.773,884,3.154,941,4.511,1088,4.511,1520,6.118,1526,3.219,1542,4.115,1577,5.658,1578,7.674,1579,5.658,1580,5.658,1581,5.125,1582,5.125,1583,4.511,1584,5.658,1585,5.658,1586,5.125,1587,5.658]],["t/295",[27,1.554,53,0.681,76,4.815,80,2.008,89,2.625,208,2.315,266,3.094,682,4.815,933,3.859,1004,4.815,1189,6.151,1239,5.245,1242,5.627,1542,4.138,1551,6.151,1588,6.509,1589,6.988]],["t/297",[28,3.868,48,1.92,53,0.613,74,4.889,97,2.183,101,2.291,113,2.686,120,3.362,144,1.674,204,2.063,206,3.081,342,2.102,351,3.792,438,5.275,640,2.162,648,1.903,657,4.33,716,3.948,805,3.04,949,5.854,1155,2.269,1165,3.654,1166,4.033,1223,4.033,1243,4.125,1542,3.721,1547,6.285,1590,5.854]],["t/299",[53,0.859,68,4.839,81,2.472,84,3.345,88,4.05,89,2.422,113,2.756,119,4.839,188,5.411,204,2.117,230,3.89,244,5.675,805,3.118,816,2.889,852,4.137,1014,4.332,1063,3.345,1542,3.817,1557,5.675,1591,7.118,1592,6.447,1593,7.118,1594,7.118,1595,6.447]],["t/301",[28,3.868,53,0.613,74,3.868,80,1.806,180,4.033,205,5.275,379,4.794,478,4.794,492,3.59,568,3.948,581,5.061,783,4.717,805,3.04,825,3.654,976,6.285,1132,5.061,1239,4.717,1304,3.868,1542,4.704,1553,4.878,1567,6.285,1592,6.285,1596,5.532,1597,6.939,1598,5.854,1599,5.275]],["t/303",[20,2.606,27,1.214,53,0.794,62,3.295,74,4.463,80,1.57,88,3.43,180,3.505,186,2.308,191,2.967,198,2.714,497,3.016,503,3.505,509,3.864,519,3.763,538,2.094,594,2.359,640,1.879,644,2.257,900,2.792,958,4.238,964,5.086,1063,2.833,1100,4.397,1155,1.971,1167,6.32,1168,6.32,1169,4.583,1181,3.584,1564,4.583,1595,5.461,1600,5.461,1601,5.086,1602,6.029,1603,6.029,1604,6.029,1605,6.029,1606,4.583,1607,5.461]],["t/305",[34,2.898,53,0.57,130,3.078,271,1.919,288,2.904,302,2.789,342,1.954,490,2.904,493,3.281,510,2.946,579,2.442,675,2.684,677,3.227,713,3.994,783,4.386,1068,3.241,1123,4.706,1126,4.905,1154,3.175,1155,2.11,1156,4.026,1167,5.885,1168,5.885,1169,4.905,1181,3.835,1235,3.75,1269,5.443,1277,5.144,1541,4.386,1608,5.443,1609,5.844]],["t/307",[23,3.333,198,2.95,266,2.628,271,2.515,288,2.95,342,1.985,380,2.693,527,3.278,561,3.451,579,2.481,647,3.035,648,1.798,679,3.175,703,2.628,713,3.127,833,2.871,922,2.797,1159,3.333,1167,7.2,1168,7.2,1170,4.321,1173,2.374,1176,4.2,1568,4.781,1610,5.937,1611,5.529,1612,5.937]],["t/309",[26,1.088,27,0.438,28,0.667,45,0.91,48,1.889,49,1.008,53,0.748,58,1.872,62,1.635,75,0.712,80,2.032,84,0.563,88,1.238,89,1.627,97,0.377,101,1.579,105,1.238,113,2.177,131,2.43,139,0.412,147,0.873,161,1.836,167,0.696,170,0.609,171,0.824,178,2.934,180,0.696,183,1.547,186,0.458,189,1.896,190,0.712,191,1.071,194,0.883,197,3.953,204,2.219,208,1.104,210,1.934,213,0.91,215,0.91,227,0.814,230,0.654,241,0.571,266,0.48,269,0.873,271,0.356,282,1.294,288,0.539,327,0.654,328,0.609,331,1.01,336,0.504,342,1.115,344,0.619,348,1.084,351,1.189,353,0.599,355,0.571,361,0.873,369,1.324,371,1.084,378,0.747,413,1.071,416,0.842,422,0.91,426,1.01,474,1.867,478,1.189,482,1.107,483,1.667,484,0.814,489,0.842,492,0.619,495,1.634,499,1.084,500,0.589,502,0.91,503,1.265,510,0.993,514,1.53,516,1.088,517,0.589,552,1.238,555,2.617,568,2.721,583,0.539,588,3.857,594,0.641,604,0.696,624,0.642,639,1.189,640,1.331,644,0.814,648,0.328,654,0.833,657,0.747,671,0.929,682,1.358,689,1.395,693,2.385,694,2.798,704,1.084,718,0.873,719,0.696,730,2.353,732,1.435,740,1.547,752,1.667,756,1.31,759,1.395,773,0.814,778,3.016,783,1.479,805,0.953,811,0.873,820,1.395,842,2.182,850,1.324,866,0.91,869,0.712,884,1.213,909,0.91,912,1.587,913,0.712,926,0.747,945,1.635,951,0.873,958,0.842,973,0.429,979,1.213,993,1.189,998,0.955,1001,1.008,1002,0.619,1004,1.358,1014,0.729,1038,0.955,1040,0.681,1046,1.395,1053,1.126,1063,1.023,1067,0.842,1074,0.539,1083,1.358,1087,0.696,1095,1.084,1102,0.712,1104,1.53,1109,0.955,1125,0.91,1127,0.712,1146,0.474,1150,1.038,1155,1.839,1159,1.872,1165,1.146,1166,1.739,1173,2.037,1175,0.814,1187,2.614,1192,0.873,1195,0.747,1201,0.91,1206,4.78,1208,0.681,1214,0.873,1237,1.735,1240,0.955,1241,0.814,1243,0.712,1245,0.555,1250,1.53,1251,0.873,1282,0.842,1288,1.479,1293,1.126,1294,0.955,1304,0.667,1317,2.684,1339,0.955,1371,1.01,1397,4.63,1404,0.842,1413,0.814,1434,1.435,1443,0.681,1473,0.747,1477,1.084,1481,1.917,1487,0.767,1494,3.269,1508,2.183,1544,1.917,1550,0.955,1551,0.955,1558,2.385,1564,0.91,1565,1.01,1586,1.084,1589,1.084,1596,0.955,1613,1.084,1614,1.084,1615,2.103,1616,1.971,1617,2.991,1618,4.744,1619,2.182,1620,2.176,1621,1.836,1622,1.084,1623,1.197,1624,1.197,1625,1.197,1626,1.197,1627,1.01,1628,1.197,1629,3.68,1630,1.395,1631,1.197,1632,1.197,1633,1.294,1634,1.197,1635,1.197,1636,1.197,1637,1.197,1638,1.01,1639,1.836,1640,1.971,1641,1.197,1642,2.385,1643,1.197,1644,1.01,1645,0.873,1646,1.971,1647,1.971,1648,0.955,1649,0.955,1650,1.654,1651,0.712,1652,3.065,1653,2.798,1654,1.084,1655,1.084,1656,0.767,1657,1.197,1658,0.91,1659,1.197,1660,1.197,1661,1.084,1662,0.873,1663,1.197,1664,1.197,1665,1.01,1666,1.01,1667,1.01,1668,1.084,1669,1.197,1670,1.197]],["t/311",[28,3.934,62,3.857,89,2.401,109,3.934,180,5.153,208,2.118,226,4.798,241,3.367,342,2.138,379,3.857,483,3.934,555,4.246,648,1.936,933,3.53,1070,4.961,1237,5.626,1288,4.798,1304,3.934,1434,4.653,1494,4.102,1542,3.785,1544,4.523,1671,7.479]],["t/313",[27,1.532,30,2.413,53,0.858,75,4.52,101,1.843,131,3.176,167,4.419,192,5.013,201,3.68,204,1.66,208,1.675,218,2.089,271,1.66,327,3.051,344,2.888,346,3.318,379,4.155,492,2.888,516,2.792,594,1.645,640,1.739,654,3.31,663,3.051,805,2.445,815,2.238,860,3.318,935,3.577,973,2,1001,3.521,1026,3.483,1132,4.071,1278,5.056,1397,4.726,1542,4.077,1544,4.872,1558,4.45,1671,4.709,1672,6.893,1673,4.071,1674,5.582]],["t/315",[24,2.25,27,1.488,34,1.829,47,2.494,53,0.805,75,2.494,80,1.092,84,1.972,89,1.428,98,3.345,113,1.624,119,5.922,131,4.644,166,2.293,167,2.439,182,3.06,184,3.8,186,1.606,190,2.494,191,2.065,198,1.889,202,2.618,210,1.358,277,3.539,328,2.134,336,1.767,393,2.766,421,3.345,516,2.098,561,2.209,593,1.814,619,1.898,675,1.745,679,2.032,724,2.554,725,3.345,815,1.682,852,2.439,877,3.104,912,3.06,1001,2.874,1067,2.949,1068,1.624,1129,2.766,1131,3.345,1289,2.949,1293,2.171,1397,4.761,1494,3.607,1542,3.328,1544,5.583,1606,4.718,1648,3.345,1658,3.189,1672,6.507,1675,4.948,1676,2.949,1677,3.189,1678,4.196,1679,3.189,1680,3.539,1681,3.345,1682,6.207,1683,2.766,1684,5.621,1685,3.345,1686,4.718,1687,3.539,1688,6.207,1689,4.196]],["t/317",[53,0.856,555,3.58,640,2.546,993,4.466,1002,4.228,1016,4.858,1492,4.555,1690,5.237,1691,5.556,1692,6.515]],["t/319",[26,1.441,27,0.58,44,2.974,53,0.848,58,2.963,61,1.354,84,1.354,89,0.98,100,2.284,113,1.115,125,1.639,139,0.99,143,1.713,147,2.101,170,1.465,186,1.103,189,1.279,194,1.883,198,2.089,208,1.393,214,1.846,228,1.943,259,2.974,265,1.262,342,2.023,351,1.575,354,1.713,483,2.587,485,1.24,497,1.441,507,1.846,517,1.418,519,1.798,524,1.754,555,2.033,582,1.959,585,2.431,586,1.606,624,3.125,654,1.103,680,1.128,711,2.19,724,1.754,778,2.489,805,2.033,815,1.861,816,1.169,842,2.101,856,2.61,860,1.713,872,2.19,892,1.9,923,2.101,933,1.441,935,1.846,942,3.397,948,1.675,956,2.297,1002,4.049,1014,1.754,1039,4.645,1063,1.354,1087,1.675,1092,2.101,1101,1.959,1103,3.528,1109,2.297,1123,2.101,1146,1.839,1175,1.959,1213,3.06,1218,1.798,1221,1.245,1223,1.675,1253,3.961,1279,1.713,1345,1.959,1457,1.606,1479,3.155,1481,1.846,1492,4.772,1508,1.315,1523,2.431,1574,1.9,1642,2.297,1652,2.974,1690,4.693,1691,4.979,1693,2.431,1694,2.19,1695,2.101,1696,2.61,1697,5.326,1698,2.297,1699,2.61,1700,2.297,1701,3.262,1702,2.881,1703,3.528,1704,2.101,1705,3.546,1706,2.881,1707,2.61,1708,2.881,1709,4.915,1710,2.431,1711,2.881,1712,2.881,1713,2.881,1714,2.881,1715,2.881,1716,2.881,1717,4.641,1718,2.881,1719,2.61,1720,2.61,1721,1.846,1722,2.297,1723,2.297,1724,2.61,1725,2.881,1726,2.61]],["t/321",[24,2.954,26,2.755,80,1.434,89,1.874,100,2.71,101,1.819,123,3.201,235,1.732,285,3.01,354,3.274,355,2.627,361,4.017,495,2.445,502,4.187,515,3.744,538,1.913,580,4.989,583,2.479,640,1.716,648,1.511,805,2.413,816,2.235,820,3.53,1008,4.187,1050,3.872,1053,2.849,1063,2.588,1074,2.479,1088,4.391,1120,4.646,1154,2.71,1201,4.187,1285,4.187,1288,3.744,1345,5.122,1409,4.646,1455,4.017,1479,5.122,1492,3.07,1652,4.828,1677,4.187,1690,3.53,1701,6.796,1727,4.187,1728,4.391,1729,4.989,1730,5.508,1731,4.989,1732,5.508,1733,5.508,1734,5.508,1735,5.508,1736,5.508]],["t/323",[27,1.102,30,2.365,53,0.483,62,4.099,86,2.972,101,2.476,148,3.949,210,1.771,235,1.721,241,2.61,320,4.956,338,3.991,355,2.61,419,4.956,474,6.019,483,3.05,490,2.463,510,2.498,616,3.252,755,2.881,833,2.397,959,2.693,1026,3.414,1146,2.168,1176,3.506,1178,3.252,1245,2.534,1246,4.68,1247,4.974,1256,3.846,1279,3.252,1345,6.773,1652,5.484,1653,4.159,1656,3.506,1701,5.272,1737,4.362,1738,5.471,1739,5.471,1740,5.471,1741,3.991,1742,4.956]],["t/325",[27,1.511,38,2.094,66,2.429,89,2.552,171,3.239,194,2.221,228,3.07,235,1.721,342,1.657,353,2.736,354,3.252,355,3.578,477,3.414,490,2.463,493,2.782,495,2.429,624,2.934,653,1.982,752,3.05,958,3.846,1091,3.252,1102,3.252,1178,3.252,1245,2.534,1253,3.72,1279,3.252,1397,2.99,1479,6.557,1492,3.05,1690,3.506,1701,6.015,1704,3.991,1705,3.33,1709,6.327,1721,4.806,1742,4.956,1743,4.956,1744,5.471,1745,4.616,1746,5.471,1747,5.471,1748,5.471,1749,5.471,1750,5.471,1751,5.471]],["t/327",[27,1.199,32,1.398,34,0.876,41,1.729,46,1.626,53,0.866,61,2.237,66,1.321,81,1.653,89,1.012,100,2.343,147,2.169,150,1.906,166,1.626,170,1.513,203,1.539,204,0.884,210,0.963,216,1.906,228,0.992,235,0.936,241,1.419,255,1.398,259,1.906,265,2.085,271,1.416,274,1.692,325,1.286,339,2.091,355,2.839,413,1.464,477,2.971,483,1.658,485,0.795,489,2.091,490,1.339,497,2.977,503,1.729,509,1.906,549,2.169,552,1.692,555,1.303,568,3.871,624,1.595,644,1.113,650,1.961,654,1.138,664,1.81,669,2.694,698,1.692,703,1.193,855,1.961,869,1.768,884,1.658,926,1.856,948,3.46,973,2.133,1000,2.509,1002,2.463,1004,1.856,1014,1.81,1026,1.856,1050,2.091,1058,3.619,1063,2.797,1089,2.058,1091,4.044,1105,3.924,1112,2.261,1120,2.509,1124,1.906,1129,1.961,1133,5.391,1145,1.692,1150,1.419,1154,1.464,1156,1.856,1170,1.961,1173,1.077,1174,2.509,1176,1.906,1197,2.261,1210,2.371,1213,1.961,1245,1.377,1247,2.767,1479,5.668,1492,4.425,1652,3.051,1653,2.261,1679,2.261,1686,2.261,1690,4.769,1701,6.28,1721,1.906,1752,2.974,1753,2.694,1754,2.509,1755,2.509,1756,2.509,1757,2.371,1758,2.169,1759,2.694,1760,2.694,1761,2.694,1762,2.694,1763,2.974,1764,2.974,1765,2.371,1766,3.619,1767,2.509,1768,2.974,1769,2.974,1770,2.974,1771,2.974,1772,2.974,1773,2.974,1774,2.974]],["t/329",[27,0.98,30,0.758,31,1.123,34,0.516,40,1.019,41,2.362,44,1.123,45,1.332,47,1.042,48,0.845,53,0.487,80,1.058,81,1.411,84,0.824,86,1.211,114,0.72,121,2.673,130,1.458,144,0.98,149,0.748,166,0.958,169,1.094,171,1.841,187,2.076,194,0.711,195,2.321,198,0.789,203,0.907,204,1.641,210,0.989,228,0.584,235,0.551,241,0.836,257,2.023,265,2.655,266,0.703,271,1.641,279,2.077,289,1.123,302,1.321,325,0.758,328,1.554,339,1.232,342,1.231,344,0.907,369,1.067,414,1.278,483,1.703,485,1.085,488,1.882,495,1.357,497,0.877,503,1.776,510,0.8,516,0.877,517,0.862,521,1.703,522,1.278,524,1.067,538,0.609,549,1.278,553,2.827,555,1.339,557,1.191,588,1.67,592,0.958,593,0.758,594,0.9,597,1.042,603,0.738,648,0.481,654,0.671,658,1.155,663,0.958,666,0.977,675,2.295,677,2.032,679,0.849,680,1.197,682,1.907,694,1.332,698,0.997,701,1.479,702,0.812,703,0.703,718,1.278,755,1.609,769,2.578,813,1.278,816,0.711,824,1.397,825,2.905,861,2.578,888,2.179,913,1.042,920,1.587,922,0.748,925,1.094,927,1.067,931,1.479,948,2.362,959,1.504,973,1.095,992,0.862,993,1.67,996,1.332,999,1.042,1003,2.148,1007,0.997,1014,1.067,1019,2.768,1027,1.554,1052,1.587,1068,1.183,1069,1.278,1071,1.332,1074,0.789,1078,1.397,1083,2.535,1089,1.756,1092,1.278,1099,1.232,1101,1.191,1102,1.042,1126,2.323,1127,2.415,1129,2.015,1144,1.278,1146,0.694,1150,2.321,1155,0.999,1157,1.587,1158,1.191,1159,0.891,1161,1.232,1164,3.869,1178,1.817,1187,1.67,1199,1.587,1208,0.997,1217,2.077,1234,1.191,1283,1.332,1293,0.907,1331,1.739,1352,2.436,1367,1.155,1377,1.332,1419,2.436,1420,3.887,1443,0.997,1466,2.229,1494,1.019,1508,1.395,1607,1.587,1619,2.229,1644,1.479,1651,1.042,1658,2.323,1665,1.479,1667,1.479,1676,1.232,1680,2.578,1719,1.587,1754,1.479,1758,2.229,1775,1.753,1776,1.753,1777,1.019,1778,2.077,1779,1.191,1780,1.332,1781,1.232,1782,1.479,1783,1.191,1784,1.332,1785,1.278,1786,3.139,1787,1.753,1788,1.332,1789,1.332,1790,1.587,1791,1.397,1792,1.753,1793,1.753,1794,1.753,1795,1.753,1796,1.587,1797,1.753,1798,1.753,1799,1.753,1800,2.436,1801,2.768,1802,2.768,1803,1.587,1804,1.753,1805,3.056,1806,1.587,1807,1.094,1808,1.753,1809,1.753,1810,1.753,1811,1.753,1812,1.397,1813,1.587,1814,1.753,1815,1.753,1816,3.056,1817,1.753,1818,1.753,1819,1.753,1820,3.056,1821,3.056,1822,1.753,1823,1.587,1824,1.332,1825,1.753,1826,1.753,1827,1.397,1828,2.323,1829,1.753,1830,1.479,1831,1.155,1832,1.753,1833,1.753,1834,1.587,1835,1.753,1836,1.397,1837,1.753,1838,1.753]],["t/331",[27,0.915,53,0.748,76,2.834,80,1.182,84,2.134,95,3.312,100,2.235,116,2.91,123,2.639,148,2.391,171,2.489,182,3.312,190,2.699,204,1.35,208,1.974,216,4.954,229,3.452,269,3.312,271,1.35,288,2.044,346,2.699,351,2.482,485,1.757,500,3.236,517,2.235,524,2.764,555,1.989,585,5.548,671,1.937,680,2.576,708,3.831,711,3.452,716,2.583,815,1.821,816,1.843,933,2.271,956,3.62,973,2.357,1002,3.402,1014,2.764,1016,2.699,1059,3.312,1103,3.452,1123,3.312,1161,3.192,1195,2.834,1241,3.087,1245,2.103,1253,3.087,1279,2.699,1309,3.62,1457,2.531,1492,5.522,1568,4.796,1658,3.452,1662,3.312,1673,3.312,1690,4.214,1703,3.452,1705,2.764,1726,4.113,1745,3.831,1839,4.541,1840,4.541,1841,4.541,1842,4.113,1843,4.113,1844,4.541,1845,4.113,1846,4.113]],["t/333",[27,0.872,45,3.289,48,2.805,53,0.561,135,2.7,204,1.287,207,2.412,216,2.773,227,2.942,229,7.245,302,1.871,336,1.823,485,1.156,507,4.069,525,2.034,601,3.651,657,2.7,663,4.822,773,5.113,816,1.756,817,6.707,1001,2.004,1009,2.942,1053,2.239,1195,3.962,1289,4.463,1377,5.717,1492,3.539,1681,7.352,1692,3.45,1847,4.327,1848,4.327,1849,9.775,1850,4.327,1851,6.349,1852,4.327,1853,4.327,1854,4.327,1855,4.327,1856,4.327,1857,4.327,1858,4.327,1859,4.327,1860,4.327,1861,4.327,1862,7.521,1863,4.327,1864,4.327,1865,4.327,1866,4.327,1867,3.919,1868,4.327,1869,4.327,1870,4.327]],["t/335",[96,2.052,97,2.381,122,3.553,186,2.122,198,2.496,207,3.091,208,1.664,235,1.744,241,2.645,483,4.803,485,2.302,517,3.725,525,4.049,553,3.223,614,3.915,619,1.695,641,5.32,654,2.122,667,3.46,825,3.985,844,3.03,900,2.568,1063,3.557,1164,3.879,1181,3.296,1208,4.306,1328,4.42,1492,3.091,1871,5.545,1872,5.545,1873,8.777,1874,5.545,1875,5.545,1876,5.545,1877,5.545,1878,6.385,1879,5.545,1880,5.545,1881,5.545]],["t/337",[20,1.814,53,0.37,96,3.376,144,1.012,187,2.648,190,2.494,194,1.703,195,2.961,207,3.459,216,3.977,235,1.32,241,2.001,242,3.345,259,2.689,269,3.06,285,2.293,342,1.271,351,2.293,485,1.121,504,2.949,506,3.345,507,2.689,671,1.79,755,3.889,773,2.852,815,1.682,881,5.236,972,3.345,973,1.504,1008,3.189,1016,2.494,1053,2.171,1066,6.507,1074,1.889,1096,3.189,1119,3.345,1155,2.029,1164,3.674,1175,2.852,1413,2.852,1420,3.328,1492,4.55,1508,1.915,1526,2.387,1648,3.345,1650,4.718,1681,3.345,1690,2.689,1705,3.777,1709,3.539,1724,3.8,1786,3.531,1873,5.621,1882,4.196,1883,4.196,1884,6.124,1885,4.196,1886,7.387,1887,3.539,1888,4.196,1889,7.387,1890,4.196,1891,4.196,1892,4.196,1893,4.196,1894,4.196,1895,4.196,1896,4.196,1897,4.196,1898,4.196,1899,4.196,1900,4.196]],["t/339",[53,0.759,131,4.891,235,2.704,538,2.986,1397,4.698,1672,6.854]],["t/341",[1068,3.435,1544,5.686,1901,8.037]],["t/343",[30,3.077,139,2.447,338,5.192,480,3.682,490,3.204,682,4.442,816,2.889,869,4.231,884,3.968,887,3.89,888,3.817,973,3.655,999,4.231,1124,4.562,1544,6.236,1656,5.712,1884,6.84,1901,6.447]],["t/345",[38,3.699,53,0.853,115,3.664,131,5.498,167,3.583,194,2.502,265,3.559,347,4.914,558,3.507,648,1.69,654,2.359,675,2.564,676,5.2,716,5.172,724,3.752,726,3.752,816,2.502,839,3.436,863,4.686,1158,4.19,1159,3.135,1204,4.333,1293,4.204,1397,3.369,1541,5.524,1542,3.306,1639,5.2,1652,3.95,1672,4.914,1684,5.583]],["t/347",[24,3.381,27,1.27,30,2.725,80,2.147,86,2.498,89,2.806,105,4.692,131,3.587,208,1.892,380,3.388,474,3.934,527,3.153,538,2.19,551,5.319,624,3.381,730,3.103,752,3.514,756,2.762,772,4.04,778,4.423,1067,4.432,1159,3.206,1187,3.446,1214,4.598,1397,3.446,1485,5.319,1544,4.04,1652,5.285,1653,6.987,1902,6.305,1903,6.305,1904,4.286,1905,6.305]],["t/349",[27,0.816,30,2.245,32,1.903,34,0.719,38,2.314,39,3.079,53,0.458,80,1.746,89,0.83,101,1.337,113,0.944,131,3.44,139,1.785,148,2.133,166,1.333,167,3.018,178,4.82,191,1.201,192,1.608,193,1.563,204,0.725,210,1.681,234,1.945,235,1.633,241,1.164,259,1.563,265,1.069,266,0.978,271,1.204,282,1.45,288,3.45,338,1.779,342,1.227,380,1.664,484,3.53,498,1.855,527,2.597,538,1.407,555,1.069,579,0.923,587,1.945,588,3.304,592,1.333,600,2.058,602,2.058,619,2.545,639,2.214,640,1.618,644,1.516,648,1.424,653,0.884,654,1.988,675,1.015,680,1.586,684,1.164,693,3.229,694,3.948,703,2.082,729,1.241,734,1.388,752,1.36,756,1.774,778,1.308,815,0.978,816,0.99,844,2.838,850,1.485,859,3.424,884,1.36,894,1.945,911,1.388,933,1.22,942,1.241,993,1.333,1001,1.13,1042,2.408,1067,1.715,1074,1.098,1106,1.418,1124,1.563,1159,1.241,1173,1.881,1187,2.214,1198,1.522,1206,3.948,1221,2.899,1245,1.13,1250,1.715,1293,2.095,1304,1.36,1317,4.41,1397,4.814,1413,1.659,1428,1.715,1434,3.424,1457,1.36,1481,3.874,1494,3.514,1508,1.114,1544,2.595,1576,1.945,1613,2.21,1616,2.21,1639,4.381,1640,2.21,1644,2.058,1646,3.668,1647,3.668,1651,1.45,1652,1.563,1656,1.563,1671,2.058,1683,1.608,1753,4.703,1806,2.21,1831,1.608,1906,1.945,1907,2.44,1908,3.417,1909,3.668,1910,1.855,1911,2.44,1912,5.193,1913,2.21,1914,2.44,1915,2.058,1916,2.44,1917,2.44,1918,2.21,1919,2.44,1920,2.44,1921,2.44]],["t/351",[26,1.597,27,1.649,32,1.5,34,1.484,38,1.222,53,0.282,89,1.714,101,1.663,121,1.546,131,2.865,139,1.097,147,2.328,148,1.681,149,1.362,151,1.992,166,1.745,204,1.497,208,1.511,235,1.004,254,2.244,344,1.652,355,2.402,380,1.312,474,1.992,482,1.623,502,2.427,503,1.856,510,1.457,536,2.427,538,2.166,583,1.437,593,1.38,594,1.484,624,2.701,648,0.876,654,1.222,679,1.546,684,2.402,703,1.28,719,2.927,730,4.372,739,2.427,740,3.226,772,2.046,778,3.797,815,1.28,850,3.796,862,2.046,869,1.898,909,2.427,913,2.994,958,2.244,1034,2.328,1046,3.227,1049,3.673,1068,1.95,1083,3.143,1102,2.994,1117,2.244,1127,2.994,1155,1.646,1159,4.164,1164,1.437,1187,3.408,1195,3.143,1206,6.225,1221,1.38,1243,2.994,1245,1.478,1246,3.143,1263,2.427,1275,3.54,1312,2.693,1339,2.545,1345,2.17,1397,4.211,1404,2.244,1418,2.545,1428,2.244,1485,4.248,1519,2.693,1544,2.046,1652,3.996,1653,5.858,1654,2.891,1666,2.693,1667,2.693,1668,4.561,1777,1.856,1909,2.891,1922,3.192,1923,2.545,1924,3.192,1925,5.036,1926,5.036,1927,3.192,1928,3.192,1929,3.192,1930,3.192]],["t/353",[27,1.422,53,0.623,186,2.701,218,2.641,288,3.177,480,3.651,516,3.53,583,3.177,594,2.079,654,2.701,703,2.83,778,3.785,844,3.857,993,3.857,1063,3.317,1137,4.295,1155,2.899,1159,3.589,1173,2.556,1187,5.298,1198,4.404,1243,4.195,1397,3.857,1906,5.626]],["t/355",[53,0.701,62,4.338,66,3.524,147,5.789,343,5.789,510,3.623,703,3.183,1068,3.073,1156,4.953,1187,4.338,1277,6.328,1527,6.696,1542,4.257,1931,4.953]],["t/357",[26,3.622,27,1.459,28,4.037,53,0.796,80,2.345,170,3.683,210,2.345,302,3.131,1002,3.747,1146,2.87,1155,2.946,1156,4.52,1170,4.775,1217,6.125,1230,6.11,1232,5.282,1510,6.56,1511,6.11,1932,6.56,1933,7.243]],["t/359",[27,1.485,53,0.804,123,4.285,342,2.233,527,3.687,647,3.414,713,3.517,756,3.229,1007,4.194,1102,4.382,1154,3.628,1155,2.978,1167,5.182,1168,5.182,1169,5.604,1170,4.86,1185,5.377,1609,6.677,1834,6.677,1934,5.377]],["t/361",[62,4.748,490,3.91,510,3.966,1156,5.421,1935,8.687]],["t/363",[38,2.395,53,0.858,210,2.657,266,2.509,271,1.861,380,3.762,579,3.465,597,3.72,616,3.72,713,4.814,778,3.356,844,4.485,979,3.488,1068,2.422,1098,4.564,1114,4.398,1145,3.56,1155,2.046,1159,3.182,1167,6.832,1168,6.832,1235,3.637,1253,4.254]],["t/365",[28,3.901,53,0.852,81,2.43,101,2.311,186,2.678,271,2.081,483,3.901,497,3.5,558,3.981,586,3.901,731,5.104,836,3.107,860,4.16,933,3.5,1089,3.025,1155,2.883,1170,4.614,1217,5.995,1232,5.104,1508,3.195,1651,4.16,1812,5.579,1936,5.903,1937,6.998]],["t/367",[58,1.983,62,2.131,81,1.354,113,1.51,178,3.109,180,2.266,181,2.964,191,1.919,201,2.571,228,2.358,241,1.86,265,1.708,266,1.564,271,2.341,288,2.645,327,2.131,342,2.142,349,3.109,353,1.95,480,2.017,483,4.707,488,2.721,490,1.755,510,2.682,522,2.844,565,2.844,579,2.224,588,3.211,639,2.131,640,1.215,647,1.806,648,1.069,701,3.289,703,1.564,713,1.86,731,2.844,772,2.499,801,2.499,813,2.844,844,2.131,888,3.151,922,1.664,973,1.397,1007,2.218,1026,2.433,1059,2.844,1069,2.844,1089,1.685,1137,2.373,1146,1.545,1154,2.892,1155,1.275,1156,2.433,1158,2.651,1160,3.532,1172,3.289,1186,2.844,1198,2.433,1213,3.874,1214,2.844,1217,5.351,1232,2.844,1235,2.266,1304,2.173,1457,2.173,1466,2.844,1606,2.964,1608,3.289,1615,2.741,1649,4.684,1650,4.467,1687,3.289,1812,7.076,1813,7.129,1828,2.964,1938,3.899,1939,3.899,1940,3.899,1941,3.899,1942,3.899,1943,5.876,1944,3.899,1945,2.964,1946,3.899,1947,3.899,1948,3.289,1949,3.899,1950,3.899,1951,3.532]],["t/369",[20,3.023,27,1.634,34,1.458,38,1.894,47,2.941,53,0.778,101,1.634,122,3.171,171,1.873,187,2.111,203,4.196,210,2.264,228,1.65,235,1.556,265,3.553,342,1.499,344,2.56,510,3.702,538,1.718,588,5.539,755,2.605,778,2.654,862,4.481,1026,3.088,1053,2.56,1114,3.478,1155,2.652,1161,3.478,1167,4.916,1168,4.916,1191,3.609,1213,3.262,1217,5.514,1218,3.088,1235,2.876,1253,3.364,1314,3.761,1517,5.575,1528,3.761,1812,3.945,1910,5.316,1952,3.478,1953,4.948,1954,4.948,1955,4.948,1956,4.948,1957,4.482,1958,4.174]],["t/371",[23,2.594,27,1.027,34,2.429,53,0.789,86,2.831,96,2.644,97,1.604,114,2.096,144,1.23,198,2.296,203,2.639,207,2.843,210,2.313,266,2.045,271,1.517,285,2.788,302,2.205,337,2.734,342,2.164,355,2.433,359,3.831,374,3.877,538,1.771,558,2.902,586,2.843,654,3.156,684,2.433,973,1.828,979,2.843,992,2.51,1002,2.639,1068,1.975,1087,2.965,1103,3.877,1146,2.021,1150,2.433,1155,1.668,1165,2.686,1173,1.847,1185,3.72,1187,2.788,1188,3.104,1191,3.72,1434,3.363,1492,3.982,1508,2.328,1599,3.877,1633,3.032,1690,4.578,1694,3.877,1705,3.104,1828,3.877,1959,5.101,1960,5.101,1961,5.101,1962,3.877,1963,4.303]],["t/374",[32,3.345,38,2.724,86,2.821,101,2.35,241,3.396,271,2.117,380,2.924,664,4.332,675,2.961,713,4.252,721,4.562,755,3.748,973,2.551,1091,4.231,1098,5.192,1114,5.004,1173,3.228,1214,5.192,1414,5.192,1651,4.231,1656,4.562,1948,6.005,1964,7.118,1965,7.118]],["t/376",[32,2.753,38,2.242,47,3.483,80,1.525,89,1.993,105,5.908,166,3.202,210,2.869,225,4.118,493,2.979,495,2.601,591,4.118,597,4.67,713,3.747,732,3.863,900,4.104,922,2.5,1016,3.483,1042,4.67,1058,4.454,1149,5.73,1173,2.122,1244,4.454,1245,2.713,1246,3.656,1280,4.454,1473,3.656,1543,3.983,1608,4.942,1656,5.034,1741,4.273,1765,4.671,1966,5.859,1967,5.306,1968,4.671,1969,4.671]],["t/378",[32,3.626,53,0.681,105,4.39,558,4.39,664,4.696,713,3.681,724,4.696,930,5.087,1149,5.627,1173,2.795,1204,5.423,1214,5.627,1656,6.003,1737,7.468,1757,6.151]],["t/380",[38,2.137,105,5.282,171,2.113,204,1.66,210,2.462,235,1.756,271,1.66,579,2.113,640,1.739,644,2.089,703,3.049,713,4.429,724,3.397,730,2.747,740,2.888,772,3.577,778,2.994,801,3.577,844,4.726,922,3.244,964,4.709,1014,3.397,1050,5.345,1068,2.161,1087,3.245,1124,3.577,1149,7.084,1181,3.318,1235,4.419,1236,3.795,1346,6.414,1531,4.45,1737,4.45,1765,4.45,1967,5.056,1970,7.603,1971,5.582,1972,5.582,1973,5.582]],["t/382",[53,0.813,70,5.984,89,3.134,139,3.166,167,4.363,198,3.379,199,6.332,204,2.232,379,4.102,503,4.363,510,3.426,511,5.276,516,3.754,1542,4.025,1974,7.506,1975,7.506,1976,7.506]],["t/384",[53,0.863,63,3.591,82,4.002,121,3.478,230,3.924,244,5.724,337,2.748,359,3.85,378,4.481,515,4.881,565,5.237,586,4.002,900,3.325,928,5.458,979,4.002,1016,4.268,1098,5.237,1166,4.173,1638,6.057,1934,5.237,1977,7.18,1978,5.724,1979,4.481]],["t/386",[53,0.775,594,2.587,884,4.893,1600,7.951]],["t/388",[53,0.767,75,5.164,171,3.288,594,2.56,1001,4.023]],["t/390",[53,0.851,130,3.86,194,3.284,218,3.029,271,2.406,302,3.498,482,4.115,654,3.097,973,2.9,1509,7.33,1980,6.827]],["t/392",[20,2.041,27,0.951,44,3.026,48,2.527,53,0.807,63,3.953,80,1.761,97,2.715,101,1.559,135,2.947,139,1.623,143,2.807,205,3.59,206,3.003,210,2.19,325,2.041,555,2.069,559,3.319,583,2.126,593,2.041,640,1.471,648,1.295,657,4.221,671,2.886,840,3.59,846,4.021,847,3.44,859,3.113,880,4.277,926,2.947,930,3.113,936,3.113,944,3.59,1001,2.187,1053,2.443,1074,2.126,1075,3.21,1112,3.59,1125,3.59,1155,1.544,1166,3.932,1173,1.71,1195,2.947,1208,3.848,1218,2.947,1226,3.765,1244,3.59,1293,3.499,1458,4.277,1482,3.765,1494,3.932,1554,3.444,1685,3.765,1728,3.765,1830,5.707,1981,3.765,1982,3.026,1983,4.722,1984,4.722,1985,4.277]],["t/394",[23,3.281,26,3.227,53,0.739,66,3.717,101,2.764,156,5.144,328,3.281,353,3.227,380,2.651,495,2.865,517,4.84,518,3.927,525,3.934,537,4.866,672,4.905,942,3.281,959,4.12,973,2.312,1060,5.844,1173,2.337,1229,5.844,1568,4.706,1611,5.443,1679,4.905,1878,7.841,1986,6.452,1987,5.844]],["t/396",[24,4.062,53,0.818,100,3.727,123,4.402,198,3.409,582,5.149,624,4.062,726,4.61,817,5.758,951,5.524,1074,3.409,1289,5.324,1455,5.524,1508,3.458,1694,5.758,1697,6.038,1701,5.324,1988,5.524]],["t/398",[53,0.839,80,1.536,101,1.948,166,3.225,186,2.258,198,3.553,208,1.771,210,2.88,285,3.225,493,3.001,557,4.011,579,2.233,647,2.732,650,3.89,713,4.86,732,3.89,740,3.052,772,3.781,900,2.732,959,2.904,1001,2.732,1042,3.507,1173,2.137,1175,4.011,1193,3.89,1219,4.978,1252,4.978,1274,6.293,1293,3.052,1526,3.357,1564,4.485,1989,5.9,1990,5.9,1991,5.9,1992,5.9,1993,5.9,1994,5.9,1995,5.9]],["t/400",[20,2.645,27,1.232,53,0.885,58,3.111,61,2.875,63,4.044,101,2.02,156,4.878,204,1.819,258,4.878,265,2.68,374,4.651,480,3.165,517,3.011,538,2.125,558,3.481,586,3.41,654,2.342,657,3.818,930,4.034,959,3.011,973,2.898,992,3.011,1040,3.481,1173,2.216,1198,3.818,1223,3.556,1227,4.301,1288,5.497,1304,3.41,1455,4.462,1526,3.481,1599,4.651,1979,3.818,1996,5.542,1997,6.119,1998,5.542,1999,6.119]],["t/402",[34,1.844,53,0.552,61,2.941,74,4.574,288,2.817,344,4.245,354,3.72,477,3.905,488,2.898,493,3.182,504,4.398,509,4.01,555,2.741,725,4.988,815,2.509,833,2.741,940,6.238,959,3.079,1041,5.279,1049,4.564,1093,4.757,1127,3.72,1203,4.564,1204,4.398,1413,4.254,1503,4.988,1526,3.56,1574,4.125,1707,7.433,1759,5.667,1766,4.757,2000,6.257,2001,6.257,2002,5.279,2003,6.257,2004,6.257,2005,6.257,2006,6.257]],["t/404",[53,0.648,61,3.446,116,3.394,123,3.078,125,3.013,139,1.821,198,2.384,272,4.468,495,2.352,510,2.418,519,3.305,535,4.468,581,3.863,604,3.078,680,2.074,702,2.453,956,4.222,963,4.222,1007,3.013,1014,3.224,1038,4.222,1074,2.384,1079,4.835,1112,5.575,1127,3.148,1143,4.797,1154,2.606,1221,2.289,1271,4.222,1455,3.863,1494,3.078,1508,2.418,1572,4.797,1651,3.148,1679,4.026,1767,4.468,1988,3.863,2007,4.797,2008,5.296,2009,8.224,2010,4.468,2011,3.863,2012,6.903,2013,5.296,2014,4.797,2015,4.797,2016,5.296,2017,8.413,2018,5.296,2019,5.296,2020,5.296,2021,5.296,2022,4.026,2023,4.797]],["t/406",[26,1.838,27,1.131,40,2.136,53,0.602,61,2.64,74,3.131,81,1.276,84,1.727,86,2.702,90,2.422,100,1.808,125,2.09,139,1.263,166,2.008,170,1.868,198,1.654,214,2.355,218,2.102,227,2.498,273,2.929,290,3.328,302,1.588,325,2.428,329,3.328,331,3.1,334,2.793,518,2.236,519,2.293,756,1.609,805,2.46,820,2.355,833,1.609,842,2.68,900,1.702,908,2.793,930,2.422,941,2.929,959,1.808,1040,2.09,1041,3.1,1073,2.929,1074,1.654,1075,2.498,1079,2.422,1082,2.929,1089,2.428,1093,2.793,1101,3.818,1119,2.929,1127,2.184,1129,2.422,1136,3.328,1146,1.456,1154,1.808,1190,2.793,1191,2.68,1203,2.68,1212,3.328,1236,2.498,1334,3.1,1338,2.929,1343,2.68,1344,2.929,1404,2.583,1414,2.68,1473,2.293,1508,1.677,1561,3.328,1723,2.929,1729,3.328,1918,3.328,1958,3.1,2009,5.087,2012,2.793,2023,6.176,2024,6.819,2025,3.674,2026,3.674,2027,5.617,2028,6.94,2029,3.674,2030,7.635,2031,3.674,2032,3.674,2033,5.617,2034,6.819,2035,3.674,2036,5.617,2037,2.793,2038,3.674,2039,3.674,2040,3.674,2041,3.328,2042,5.617,2043,3.674,2044,3.674,2045,3.674,2046,3.1,2047,3.674,2048,2.929,2049,3.674,2050,3.1,2051,3.674,2052,3.674,2053,3.674]],["t/408",[19,2.994,27,0.915,28,3.666,53,0.401,84,2.134,86,1.799,101,2.171,116,2.91,138,2.764,143,2.699,186,1.738,254,3.192,285,2.482,288,2.044,302,1.963,378,2.834,592,2.482,593,1.963,597,2.699,604,2.639,726,2.764,912,3.312,934,3.452,936,2.994,945,2.482,1002,3.402,1038,3.62,1048,4.796,1082,3.62,1101,3.087,1105,2.994,1155,1.485,1173,1.645,1201,4.999,1210,5.243,1256,6.323,1288,3.087,1289,5.958,1466,4.796,1508,2.073,1581,4.113,1645,3.312,1651,2.699,1683,2.994,2010,3.831,2012,5.877,2015,7.003,2028,3.831,2037,3.452,2054,8.996,2055,4.541,2056,8.996,2057,4.541,2058,4.541,2059,4.541,2060,4.541,2061,3.62,2062,4.541,2063,4.541,2064,4.541,2065,4.541,2066,4.541,2067,4.541,2068,4.541,2069,4.541,2070,4.541]],["t/410",[26,2.335,27,1.351,34,1.977,48,1.292,53,0.592,61,3.153,82,2.602,89,1.589,171,1.767,198,2.102,210,1.512,234,3.722,241,2.227,265,3.44,266,2.69,271,1.388,289,4.3,344,2.415,358,2.992,480,2.415,488,3.107,561,2.458,579,1.767,583,2.102,644,1.747,648,1.84,654,2.568,679,2.262,756,2.939,833,2.045,922,1.992,973,1.673,1105,3.078,1192,3.405,1221,2.018,1227,3.282,1282,3.282,1344,3.722,1479,3.174,1492,3.74,1615,3.282,1651,2.775,1677,3.549,1690,2.992,1691,3.174,1701,5.521,1705,2.842,1827,3.722,2012,6.913,2041,4.229,2071,4.669,2072,4.669,2073,3.722,2074,6.71,2075,4.669,2076,4.229,2077,3.549,2078,4.669,2079,4.669,2080,4.669,2081,6.71,2082,6.71,2083,6.71,2084,4.669]],["t/412",[34,2.382,53,0.8,58,3.111,61,2.875,74,4.507,84,3.8,88,3.481,89,2.082,198,3.64,207,3.41,225,4.301,265,2.68,266,2.453,288,3.64,291,3.637,480,3.165,503,3.556,538,2.125,657,3.818,805,2.68,816,2.483,832,5.542,833,2.68,1001,2.833,1049,4.462,1127,3.637,1129,4.034,1137,3.724,1270,4.462,1508,2.793,1695,4.462,1699,5.542,1762,5.542,1987,5.542,2012,6.147,2085,6.119,2086,5.542]],["t/414",[31,4.641,53,0.796,110,5.282,149,3.844,193,4.641,204,2.154,482,3.683,485,2.407,614,5.074,615,5.94,663,4.924,850,4.408,967,5.774,1058,5.506,1601,6.11,2087,7.243,2088,7.243]],["t/416",[34,2.045,109,3.868,126,4.125,149,3.743,167,4.033,241,3.31,525,4.122,555,3.842,614,4.538,615,4.575,653,2.513,667,4.33,948,4.033,1007,3.948,1234,4.717,1615,6.166,1915,5.854,2007,6.285,2089,6.285,2090,6.939,2091,6.939,2092,6.939,2093,6.939,2094,6.939]],["t/418",[24,2.435,34,2.497,109,4.309,114,3.696,139,1.561,144,2.17,149,1.937,193,2.91,262,3.831,303,2.994,492,4,525,2.134,550,3.452,555,2.881,588,3.594,614,2.349,615,2.994,628,4.623,653,1.645,658,5.588,671,2.806,683,2.994,815,2.637,833,1.989,922,1.937,948,3.822,1007,2.583,1196,3.452,1234,4.471,1335,3.312,1908,5.548,1915,5.548,2089,4.113,2095,4.113,2096,5.765,2097,5.956,2098,7.003,2099,6.576,2100,6.576,2101,4.541,2102,4.541,2103,4.541,2104,4.541,2105,4.541,2106,4.541,2107,5.956,2108,6.576,2109,4.541,2110,4.541,2111,4.541,2112,4.541,2113,4.541,2114,4.541,2115,4.113]],["t/420",[19,2.725,27,1.236,30,1.786,34,2.842,47,2.457,80,1.076,88,2.351,113,1.6,115,3.648,148,2.176,149,2.619,174,4.046,193,3.933,208,2.197,241,1.972,266,1.657,271,1.229,325,1.786,340,2.259,353,2.067,380,1.698,485,1.64,492,4.478,511,4.314,518,2.515,519,2.579,520,3.295,521,2.304,542,2.81,550,6.581,583,1.86,584,3.014,594,1.218,610,3.743,613,3.743,614,2.138,615,2.725,616,2.457,639,2.259,647,2.842,653,1.497,654,1.582,665,3.743,675,1.719,682,2.579,711,3.142,813,3.014,860,2.457,888,2.216,967,3.295,1016,2.457,1241,2.81,1300,5.178,1428,2.905,1553,2.905,1655,3.743,1934,3.014,2097,3.743,2098,7.339,2107,7.339,2115,5.559,2116,4.133,2117,4.133,2118,4.133,2119,6.137,2120,4.133,2121,4.133,2122,6.137,2123,4.133,2124,3.142,2125,4.133,2126,4.133,2127,4.133,2128,4.133,2129,4.133]],["t/423",[53,0.722,130,3.899,416,5.745,594,2.408,1155,2.672,1230,6.894,1618,6.894,1619,5.961,1681,6.515,2130,5.961,2131,8.172]],["t/425",[235,2.732,594,2.56,833,3.805,1137,5.287,2124,6.604]],["t/427",[27,1.562,30,1.974,34,1.945,53,0.403,81,1.586,86,1.809,130,2.178,148,3.477,166,2.495,171,1.728,203,2.362,235,2.077,259,2.926,271,1.358,303,4.353,380,2.713,538,1.586,555,2,587,5.264,594,1.345,596,3.33,614,5.133,647,2.114,653,1.654,659,3.01,660,5.57,671,4.314,682,2.849,684,2.178,814,3.33,948,3.838,1007,2.598,1089,1.974,1100,3.33,1154,3.249,1218,2.849,1234,3.104,1343,3.33,1910,3.471,2050,3.852,2132,4.566,2133,4.566,2134,5.98,2135,7.756,2136,6.603,2137,4.566,2138,6.603,2139,6.603,2140,4.566,2141,4.566,2142,4.566,2143,4.566,2144,4.566,2145,4.566,2146,4.566,2147,4.566,2148,4.566,2149,4.566,2150,4.566]],["t/429",[26,2.234,27,1.543,46,2.442,53,0.871,80,1.163,84,2.099,86,1.77,138,2.719,139,2.234,187,1.906,189,1.983,198,2.011,204,1.328,210,2.104,235,1.405,265,1.957,271,1.328,285,2.442,288,2.011,328,2.272,336,3.227,510,2.039,522,4.74,653,1.618,663,4.186,713,2.131,718,4.74,719,2.597,730,4.948,740,3.963,814,3.258,815,1.791,859,2.945,942,2.272,948,2.597,1003,3.14,1053,2.311,1063,3.054,1068,1.73,1106,2.597,1127,2.656,1145,2.542,1150,3.1,1155,1.461,1159,3.895,1185,3.258,1187,2.442,1235,2.597,1254,4.046,1519,5.482,1531,3.561,1610,4.046,1887,3.769,2151,6.499,2152,4.467,2153,4.467,2154,4.467,2155,4.467,2156,4.467,2157,4.467,2158,4.467,2159,4.467]],["t/432",[23,2.746,27,1.088,53,0.75,74,4.143,80,1.406,81,1.875,170,2.746,191,2.657,204,1.606,209,3.671,235,1.698,336,3.131,369,3.287,413,2.657,422,4.105,484,3.671,495,3.3,516,2.701,586,3.01,640,1.682,731,3.938,747,4.556,755,2.843,849,5.053,934,4.105,959,2.657,993,2.951,1232,3.938,1250,3.796,1251,3.938,1443,3.072,1494,4.32,1520,4.305,1526,3.072,1618,6.27,1619,5.421,1627,6.27,1800,4.305,1801,6.732,1802,6.732,1803,4.891,1807,3.37,1906,4.305,1952,3.796,1988,3.938,2134,4.891,2160,4.305,2161,5.4,2162,5.4,2163,4.105,2164,5.4]],["t/434",[53,0.751,194,3.453,594,2.507,679,4.122,1145,4.841,1242,6.206,2165,6.783]],["t/436",[27,1.512,53,0.88,77,5.474,89,2.554,149,3.202,208,2.252,346,4.462,481,5.276,516,3.754,583,3.379,594,2.211,606,4.102,1040,4.27,1053,3.883,1063,3.527,1145,4.27,1255,3.952,2166,4.948]],["t/438",[23,1.911,28,2.094,48,2.299,53,0.803,68,2.555,80,0.978,81,1.305,88,2.138,96,1.391,101,1.241,121,1.82,123,2.184,144,0.906,171,1.422,190,2.234,191,3.402,204,2.056,206,3.43,208,1.715,218,1.406,225,2.641,233,1.793,235,1.182,302,2.988,327,3.123,328,1.911,336,1.583,342,1.138,346,2.234,351,2.054,379,2.054,488,1.74,495,1.668,515,2.555,516,1.879,537,2.184,583,1.691,594,2.276,606,2.054,648,1.031,716,3.933,732,2.477,836,1.668,838,3.396,852,2.184,860,2.234,884,2.094,950,3.403,970,2.856,973,1.347,1008,2.856,1011,3.17,1016,2.234,1040,3.251,1042,2.234,1063,2.685,1082,2.996,1089,1.624,1098,2.741,1101,2.555,1137,2.287,1145,3.251,1146,2.264,1154,2.812,1170,3.767,1186,2.741,1293,1.944,1397,2.054,1420,3.708,1450,5.175,1530,3.17,1542,2.015,1569,3.403,1574,2.477,1576,2.996,1645,2.741,1662,2.741,1676,2.641,1697,2.996,1721,2.408,1728,2.996,1767,3.17,2124,4.344,2160,4.555,2167,3.758,2168,3.403,2169,6.262,2170,3.403,2171,3.403,2172,2.996]],["t/440",[53,0.822,171,2.893,186,2.926,191,3.762,594,3.081,671,3.262,945,4.178,1001,3.54,1063,3.592,1508,3.49,2028,6.449,2160,6.094,2166,5.04,2173,6.923]],["t/442",[27,0.973,53,0.607,77,3.525,80,1.79,81,1.678,89,1.644,101,1.596,109,2.694,113,1.871,139,1.661,143,2.873,167,2.809,183,2.5,191,2.378,192,3.186,193,3.097,194,1.961,208,2.064,215,3.674,218,2.996,263,3.285,271,1.437,482,2.458,484,4.675,512,3.853,516,3.439,583,3.096,594,2.822,640,1.506,647,2.238,654,2.632,679,2.341,745,4.377,783,3.285,801,3.097,805,2.117,852,2.809,859,3.186,935,3.097,940,3.674,945,2.641,973,1.732,988,4.377,1004,3.016,1026,3.016,1044,4.077,1053,2.5,1145,2.749,1255,2.545,1282,4.834,1287,3.853,1980,4.077,2166,6.315,2174,7.251,2175,7.251,2176,4.833,2177,4.833]],["t/444",[27,1.459,53,0.639,495,3.216,576,5.282,594,2.655,663,3.958,671,3.844,678,4.52,1001,3.354,1138,6.56,1233,7.183,1574,4.775,1906,5.774,2077,5.506,2166,4.775,2178,6.56,2179,5.282,2180,7.243,2181,7.243,2182,6.56,2183,6.56]],["t/446",[27,1.109,53,0.665,81,1.913,171,2.084,210,1.783,218,2.82,241,2.627,552,3.134,594,2.53,675,2.291,677,2.755,698,3.134,720,4.187,815,2.209,922,2.35,992,2.71,993,3.01,1001,4.275,1087,4.379,1089,2.381,1154,3.708,1221,3.257,1232,4.017,1233,7.36,1606,4.187,1757,4.391,1951,4.989,1957,4.989,1958,4.646,2076,4.989,2077,7.018,2166,3.631,2178,4.989,2179,6.263,2184,5.508,2185,4.646,2186,5.508,2187,5.508,2188,5.508,2189,5.508,2190,5.508,2191,4.646]],["t/448",[27,1.661,53,0.557,89,2.145,208,1.892,235,1.983,263,4.286,271,1.875,353,3.153,488,2.92,594,1.858,647,3.819,654,2.413,664,3.837,752,3.514,801,4.04,844,3.446,922,2.69,1086,5.026,1137,3.837,1159,4.194,1204,5.797,1215,5.319,1236,5.607,1282,4.432,1429,5.71,1495,5.71,1831,4.157,1904,4.286,2130,4.598,2166,6.059,2174,5.71,2175,7.47,2192,5.71]],["t/450",[19,3.68,20,2.413,27,1.124,48,1.544,53,0.858,58,2.839,61,2.623,80,1.453,116,3.577,187,2.382,204,2.261,206,2.478,265,2.445,343,4.071,374,4.243,480,2.888,555,2.445,583,2.513,594,2.548,614,2.888,654,2.137,657,3.483,703,2.238,716,3.176,730,2.747,740,2.888,815,2.238,862,3.577,911,3.176,959,2.747,1001,2.585,1104,3.924,1145,3.176,1186,4.071,1195,3.483,1198,3.483,1233,4.45,1236,3.795,1508,2.548,1526,3.176,1651,3.318,1756,4.709,1979,3.483,1996,5.056,2166,3.68,2170,5.056,2179,4.071,2185,4.709,2193,5.056,2194,5.582,2195,5.582]],["t/452",[27,1.942,53,0.715,186,3.097,495,3.593,536,6.152,594,2.84,682,5.05,1063,3.803,2124,6.152,2160,6.452]],["t/454",[34,1.947,53,0.751,80,1.72,171,3.217,187,2.819,254,4.644,538,2.295,593,2.856,594,3.097,614,4.398,667,4.123,730,3.251,740,3.418,830,5.267,884,3.683,993,3.611,1001,3.06,1106,3.84,1275,5.976,2196,8.501,2197,6.607,2198,5.574,2199,5.267,2200,6.607,2201,5.267]],["t/456",[34,2.384,53,0.715,187,3.453,594,2.384,684,3.86,830,6.452,1275,6.776,2124,6.152,2199,6.452,2201,6.452,2202,7.33]],["t/458",[80,2.107,594,2.384,703,3.245,911,4.604,992,3.982,1001,3.748,1195,5.05,2185,6.827,2193,7.33,2203,6.827,2204,8.093,2205,8.093]],["t/460",[34,2.028,53,0.77,81,2.39,171,2.604,187,2.936,204,2.046,485,1.838,489,4.837,517,3.386,525,4.1,537,5.071,658,4.537,671,2.936,730,3.386,740,3.56,805,3.014,830,5.486,849,4.678,1089,2.975,1275,6.133,1661,6.233,2183,6.233,2199,5.486,2201,5.486,2202,6.233,2206,6.882]],["t/462",[34,2.361,53,0.708,434,6.761,614,4.146,730,3.944,837,6.092,1275,5.633,2199,6.389,2201,6.389,2207,8.014,2208,8.014,2209,8.014,2210,8.014]],["t/465",[30,2.975,63,3.442,108,4,130,3.283,141,6.233,169,4.294,206,3.055,591,4.837,643,4.188,821,5.805,933,3.442,1048,5.019,1238,4.188,1401,6.364,1457,3.836,1481,4.41,1496,5.805,1599,5.231,1710,5.805,1741,5.019,1743,6.233,2211,5.231,2212,5.805,2213,6.882,2214,6.882,2215,6.882,2216,5.231,2217,6.882,2218,6.882]],["t/467",[28,3.625,48,2.581,53,0.574,63,3.252,65,5.184,66,2.887,68,4.421,82,3.625,84,3.056,89,2.213,108,3.78,113,2.518,120,3.15,144,1.569,186,3.571,204,1.934,206,2.887,342,1.97,889,3.487,926,4.058,1173,2.356,1246,4.058,1401,6.804,1554,4.743,1648,5.184,1662,4.743,2211,4.943,2219,8.415,2220,5.486,2221,6.503]],["t/469",[44,4.01,48,1.731,53,0.552,63,4.104,82,3.488,108,3.637,136,5.667,182,4.564,204,1.861,206,2.778,225,4.398,231,4.757,342,1.895,378,3.905,639,3.42,643,3.808,716,3.56,900,2.898,945,3.42,982,5.667,985,4.988,1063,2.941,1225,5.667,1256,4.398,1401,6.679,1552,5.279,1931,3.905,2046,5.279,2211,4.757,2216,4.757,2222,6.257,2223,6.257,2224,6.257,2225,6.257,2226,6.257,2227,5.667,2228,6.257,2229,6.257,2230,6.257]],["t/472",[63,2.994,76,3.735,83,4.208,109,3.336,131,3.405,206,3.538,226,5.418,334,4.55,342,1.813,346,3.558,379,3.271,478,3.271,510,2.733,659,3.946,678,3.735,809,3.836,859,3.946,860,3.558,907,4.55,1070,4.208,1173,2.168,1226,4.772,1239,4.069,1279,3.558,1304,4.442,1553,4.208,1596,4.772,1685,4.772,1727,4.55,2095,5.421,2231,5.421,2232,5.05,2233,5.986,2234,5.986,2235,5.421,2236,5.986,2237,5.986,2238,5.986,2239,5.421,2240,5.421,2241,5.986,2242,5.986,2243,5.986,2244,5.986,2245,4.55]],["t/474",[20,2.26,48,2.011,53,0.642,63,3.636,66,2.322,68,3.555,82,4.052,86,2.072,96,3.343,105,4.136,120,3.521,139,1.798,144,2.015,194,2.122,195,3.468,196,4.169,204,2.162,263,3.555,337,2.782,342,2.531,359,3.898,482,2.659,640,1.629,815,2.097,816,2.122,833,2.291,868,3.263,887,2.858,942,2.659,1117,3.676,1142,3.448,1173,2.633,1239,3.555,1443,2.975,1687,4.412,1962,3.975,2220,6.132,2231,8.179,2235,4.736,2246,5.229,2247,9.031,2248,5.229,2249,5.229]],["t/477",[63,3.687,78,5.012,95,5.377,97,3.11,114,3.029,206,4.044,889,3.953,986,5.877,1704,5.377,2250,8.251,2251,7.372,2252,7.372,2253,7.372,2254,7.372,2255,6.219,2256,7.372,2257,7.372,2258,6.677]],["t/479",[48,1.888,53,0.603,63,3.413,82,3.804,83,4.797,95,4.978,97,3.002,194,2.77,206,3.03,227,4.64,245,5.188,349,5.441,538,2.37,868,4.259,933,3.413,1044,5.757,1704,4.978,1721,5.562,2227,6.181,2250,7.861,2255,5.757,2258,6.181,2259,6.825,2260,6.825,2261,6.825,2262,6.825,2263,6.825]],["t/481",[24,3.281,53,0.714,88,3.481,169,3.818,180,3.556,189,2.717,190,3.637,201,4.034,208,1.836,227,4.16,272,5.162,302,2.645,328,3.111,342,1.853,351,3.344,485,2.16,500,3.011,515,4.16,538,2.125,555,2.68,581,4.462,586,3.41,773,4.16,868,3.818,923,4.462,957,5.162,1002,4.183,1063,2.875,1196,4.651,1289,4.301,1508,2.793,1558,4.878,1619,4.462,1642,4.878,1691,4.16,1694,4.651,2172,4.878,2264,5.162,2265,6.119,2266,6.119,2267,6.119,2268,6.119]],["t/483",[24,1.936,34,1.064,53,0.721,72,3.046,76,2.253,101,1.192,164,2.744,169,2.253,194,1.465,201,2.38,210,1.169,216,3.551,289,4.322,302,1.561,327,1.973,336,1.521,342,1.094,353,1.806,380,1.483,481,2.538,485,2.301,495,1.603,500,1.777,594,1.633,597,2.146,666,2.012,671,3.675,679,1.749,773,2.454,815,1.448,816,2.249,817,2.744,825,1.901,833,1.581,837,2.744,874,3.046,899,2.633,900,1.672,923,2.633,942,2.818,957,3.046,1002,4.222,1006,2.878,1063,2.604,1070,3.895,1105,2.38,1171,3.27,1173,1.308,1196,2.744,1219,3.046,1221,1.561,1279,2.146,1289,2.538,1351,3.046,1492,3.089,1508,1.648,1560,2.878,1564,2.744,1598,3.046,1619,2.633,1642,2.878,1691,5.856,1692,4.418,1705,3.373,1721,2.313,1727,2.744,1761,7.392,1845,3.27,1982,2.313,2073,6.031,2165,2.878,2168,3.27,2269,3.046,2270,6.109,2271,3.61,2272,2.454,2273,3.27,2274,3.27,2275,3.61,2276,3.27,2277,3.61,2278,3.61,2279,2.744,2280,3.61,2281,3.61,2282,3.61,2283,3.27,2284,3.61,2285,3.27,2286,3.61,2287,3.61,2288,3.27,2289,3.27,2290,3.61,2291,3.046,2292,3.61]],["t/485",[23,3.817,46,4.102,53,0.663,166,4.102,210,2.43,218,2.809,289,4.81,485,2.461,594,2.714,604,4.363,979,4.183,1124,4.81,1691,6.262,1980,6.332,1982,4.81,2073,5.984,2293,7.506]],["t/487",[23,1.44,24,1.519,26,1.416,30,1.224,34,0.834,38,1.752,47,2.72,53,0.508,58,1.44,81,1.589,89,1.96,126,1.683,139,0.973,150,4.238,176,2.389,190,1.683,191,1.394,192,3.017,194,1.857,201,1.867,207,1.579,210,0.917,235,0.891,241,1.351,257,1.178,263,1.925,265,1.24,266,1.136,285,1.548,289,6.666,325,1.224,336,1.193,344,2.368,346,1.683,380,1.163,480,3.421,485,1.939,487,2.065,488,2.119,490,1.275,492,1.465,506,2.258,507,1.815,515,1.925,516,2.88,521,1.579,538,0.984,552,1.611,557,1.925,586,1.579,592,1.548,594,1.697,614,2.368,639,1.548,663,1.548,671,1.953,680,1.109,698,1.611,729,1.44,815,1.136,816,1.857,833,2.005,850,1.724,860,2.72,909,2.153,922,1.953,923,2.065,924,2.258,926,1.767,933,1.416,942,2.327,945,1.548,968,2.565,979,3.686,992,1.394,1002,1.465,1006,2.258,1007,2.604,1031,2.389,1040,1.611,1058,2.153,1074,1.275,1146,1.122,1186,2.065,1192,2.065,1204,1.991,1227,1.991,1238,1.724,1269,2.389,1270,2.065,1308,1.724,1335,2.065,1397,1.548,1419,2.258,1434,1.867,1492,1.579,1497,2.389,1503,2.258,1508,2.089,1541,1.925,1601,2.389,1676,1.991,1691,4.496,1692,2.258,1693,3.861,1695,2.065,1831,1.867,1908,2.389,1932,2.565,1979,3.594,2010,2.389,2073,6.782,2172,2.258,2270,4.145,2272,1.925,2273,2.565,2294,2.832,2295,2.258,2296,3.648,2297,2.832,2298,2.832,2299,2.565,2300,2.832,2301,2.832,2302,2.832,2303,2.832,2304,2.832,2305,2.832,2306,2.832]],["t/490",[27,1.446,81,2.494,355,3.425,844,3.924,849,4.881,889,5.239,1424,7.144,1683,4.734,1705,4.37,1710,6.057,1963,6.057,2211,5.458,2232,6.057,2299,6.503,2307,5.724,2308,7.18,2309,7.18,2310,6.057,2311,7.18,2312,7.18,2313,7.18,2314,7.18]],["t/492",[20,3.131,48,2.004,53,0.639,63,4.506,66,3.216,82,4.037,83,6.334,204,2.154,342,2.194,643,4.408,731,6.572,732,4.775,733,7.183,985,5.774,1173,2.623,1424,7.183,1705,4.408,2216,5.506,2315,7.243]],["t/495",[53,0.721,80,1.617,101,2.696,114,2.551,129,5.956,153,5.956,198,2.796,202,3.875,208,1.864,210,2.011,282,3.692,328,3.158,378,3.875,483,3.462,485,2.181,492,3.213,551,5.239,593,2.684,594,1.83,666,3.462,672,4.721,859,4.094,879,4.222,942,3.158,1173,2.249,1174,5.239,1741,4.529,1745,5.239,1968,4.951,2272,4.222,2310,5.239,2316,5.625,2317,6.21,2318,6.21,2319,3.98,2320,5.625,2321,5.625,2322,6.21]],["t/497",[23,2.693,27,1.067,53,0.648,75,3.148,89,1.802,101,1.749,144,1.277,148,2.789,171,2.004,189,2.352,192,3.492,208,2.201,228,2.805,234,4.222,242,4.222,265,2.32,271,1.575,288,2.384,351,4.008,380,2.176,478,2.895,485,1.959,493,2.693,518,3.224,594,1.561,639,2.895,647,2.453,677,2.649,859,3.492,860,3.148,942,2.693,1063,2.489,1078,4.222,1221,3.925,1239,3.601,1250,3.723,1270,3.863,1282,3.723,1428,3.723,1462,4.468,1588,4.468,1611,4.468,1612,4.797,1777,3.078,1910,4.026,2274,4.797,2316,4.797,2319,6.11,2323,4.797,2324,5.296,2325,4.222,2326,4.222,2327,5.296]],["t/499",[46,3.64,66,2.957,129,6.232,208,1.999,218,2.493,353,3.331,485,1.779,593,2.879,594,2.933,603,2.805,639,3.64,648,1.827,676,5.618,677,3.331,680,2.608,705,5.618,710,4.156,720,5.063,734,3.789,1063,3.13,1087,3.871,1176,4.268,1178,3.959,1221,2.879,1291,5.618,1968,5.31,2319,5.476,2328,6.032,2329,6.66]],["t/502",[28,2.742,31,3.152,48,2.432,63,3.483,89,1.674,96,1.821,105,3.962,108,2.859,113,1.904,120,2.383,149,2.971,164,3.739,186,3.094,189,2.184,205,5.294,210,1.593,233,2.346,337,2.665,342,1.49,355,2.346,359,2.638,424,4.455,483,2.742,558,2.798,590,2.638,657,4.345,671,2.099,684,2.346,756,2.155,797,5.896,840,3.739,857,3.069,879,3.344,887,2.688,900,2.278,933,2.46,1031,4.149,1107,4.149,1117,3.457,1173,2.522,1255,2.59,1262,3.344,1279,2.924,1296,6.445,1347,2.924,1384,3.739,1494,4.699,1830,4.149,2212,4.149,2330,4.919,2331,4.455,2332,4.919,2333,4.919,2334,4.919,2335,5.875,2336,4.455,2337,4.455,2338,4.919,2339,4.919]],["t/504",[20,2.126,48,2.237,53,0.714,63,4.043,64,4.455,66,2.184,83,3.457,89,1.674,101,2.299,120,4.259,131,2.798,144,1.186,175,6.307,183,3.602,186,1.883,189,3.589,195,2.346,196,3.921,202,3.069,204,1.463,205,3.739,206,3.589,208,2.09,226,3.344,258,3.921,342,2.449,379,2.688,487,3.587,552,2.798,650,3.243,671,2.971,879,3.344,889,2.638,926,4.345,936,3.243,945,3.806,1004,4.345,1173,2.928,1251,3.587,1304,4.506,1557,3.921,1705,2.994,1936,5.875,2061,3.921,2283,4.455,2288,4.455,2340,4.919,2341,4.919,2342,4.919,2343,4.919]],["t/506",[24,3.785,27,1.422,51,4.523,53,0.623,114,3.642,189,3.133,214,4.523,495,3.133,594,2.612,797,6.466,876,5.954,1155,2.307,1164,3.177,1165,4.668,1238,4.295,1245,3.268,1315,4.653,1368,4.523,1490,5.954,1778,4.798,2335,5.954,2344,7.058,2345,7.058]],["t/508",[27,1.147,34,2.676,38,1.432,48,1.908,49,2.637,53,0.33,96,1.385,97,1.791,114,1.537,120,1.812,173,2.982,194,1.518,204,1.112,206,1.661,208,1.123,228,1.247,230,3.112,255,1.758,262,3.156,271,2.466,303,2.466,336,1.576,337,1.432,354,3.385,379,2.044,413,1.841,477,2.334,485,0.999,490,1.684,495,1.661,527,1.871,538,1.978,583,1.684,594,2.676,619,1.144,628,4.003,639,2.044,640,1.165,641,2.629,644,1.4,647,2.637,648,1.562,660,3.156,671,1.596,719,2.174,778,2.006,790,3.388,797,2.728,873,2.844,888,2.006,958,2.629,1027,3.506,1164,1.684,1165,1.97,1166,2.174,1172,3.156,1218,2.334,1245,2.637,1296,2.982,1315,5.081,1338,5.496,1368,5.314,1395,5.496,1414,2.728,1490,3.156,1494,3.31,1517,2.982,1650,2.844,1683,2.466,1778,2.543,1910,2.844,2191,3.156,2335,4.804,2346,3.741,2347,3.741,2348,3.741,2349,6.244,2350,3.741,2351,3.741,2352,6.894,2353,5.694,2354,3.741,2355,3.741]],["t/510",[32,3.032,38,2.47,48,1.785,96,3.099,114,2.651,128,4.763,228,2.152,245,6.364,304,4.706,330,4.536,418,5.844,522,4.706,664,3.927,797,4.706,888,3.46,999,3.835,1048,4.706,1074,2.904,1124,4.135,1165,3.398,1221,2.789,1279,3.835,1296,6.675,1347,3.835,1526,3.671,1545,4.905,1683,4.254,1757,5.144,2356,8.372,2357,5.844,2358,6.452,2359,6.452,2360,6.452]],["t/514",[20,1.013,23,1.991,24,2.1,27,0.472,31,1.501,38,1.499,40,1.362,53,0.346,58,1.191,61,1.101,80,1.313,86,1.999,89,0.797,100,1.927,113,0.907,114,0.963,116,2.51,126,1.393,143,1.393,144,0.945,148,1.234,149,2.153,169,1.462,171,0.887,172,2.122,174,1.545,189,1.739,194,0.951,195,1.118,198,1.055,203,1.212,204,1.753,207,1.306,208,0.703,209,1.593,210,1.268,218,0.877,241,1.118,258,1.868,266,1.57,271,1.5,285,1.281,288,1.763,325,1.013,336,2.125,342,1.186,344,2.026,358,1.501,480,1.212,485,2.502,520,1.868,524,1.426,525,2.371,552,1.333,555,2.873,579,1.482,588,2.14,589,3.835,590,1.256,592,1.281,597,2.999,616,1.393,639,2.14,641,2.753,648,2.064,653,1.418,658,1.545,663,2.14,666,3.655,670,1.977,671,1,679,1.135,680,1.976,682,1.462,683,3.326,689,1.501,692,1.462,693,1.868,694,1.781,702,1.085,726,2.383,729,1.191,740,1.212,755,1.234,756,1.026,805,1.026,809,2.51,813,1.709,815,0.94,816,2.048,820,1.501,825,1.234,833,2.21,857,1.462,861,3.304,888,2.1,892,1.545,894,1.868,922,2.798,933,1.959,945,1.281,948,1.362,992,1.153,996,1.781,999,1.393,1003,2.753,1007,1.333,1068,1.516,1104,1.647,1126,2.977,1129,1.545,1146,0.928,1158,1.593,1164,2.271,1178,1.393,1192,1.709,1193,3.326,1218,1.462,1223,1.362,1234,2.662,1238,1.426,1247,1.362,1255,1.234,1304,1.306,1308,1.426,1317,1.709,1331,1.333,1368,1.501,1413,2.662,1420,1.256,1426,3.304,1428,1.647,1451,2.122,1453,2.122,1457,1.306,1615,2.753,1704,1.709,1777,1.362,1790,2.122,1823,2.122,1824,3.835,1828,1.781,1988,2.856,2011,1.709,2096,1.501,2130,1.709,2173,2.122,2361,2.343,2362,1.593,2363,2.343,2364,2.343,2365,3.916,2366,3.916,2367,2.343,2368,2.343,2369,1.868,2370,2.343,2371,1.868,2372,2.343,2373,2.122,2374,3.916,2375,2.122,2376,2.343]],["t/516",[26,2.446,27,1.397,31,3.133,46,2.672,48,2.736,53,0.817,80,1.273,97,2.912,100,2.406,101,1.614,135,3.051,183,2.53,186,1.871,190,2.907,204,1.454,206,3.079,213,3.717,233,2.333,328,2.487,336,2.921,354,2.907,379,2.672,485,2.153,521,2.725,537,2.842,640,1.523,654,1.871,657,3.051,679,2.369,838,2.907,846,4.79,847,4.098,944,3.717,1068,1.893,1146,1.938,1155,2.267,1164,2.201,1166,4.031,1208,3.945,1218,3.051,1255,3.651,1420,2.622,1482,3.898,1662,3.566,1728,3.898,1981,3.898,1982,3.133,2171,4.429,2319,3.133,2377,4.89,2378,4.89,2379,4.89]],["t/518",[27,1.524,28,3.566,48,2.645,53,0.565,66,1.942,80,1.666,81,2.222,97,2.787,101,1.444,170,2.224,187,1.866,190,2.599,195,3.052,204,1.903,206,1.942,210,1.416,218,1.637,257,1.819,266,1.754,291,2.599,351,2.39,483,4.218,493,3.254,495,1.942,503,2.542,515,2.973,519,2.729,579,1.655,581,3.189,604,2.542,640,1.362,648,1.755,675,2.662,718,3.189,825,3.369,846,2.599,847,2.224,970,3.324,983,5.795,1001,2.963,1087,2.542,1125,3.324,1146,1.733,1155,1.43,1164,3.406,1178,2.599,1208,4.305,1223,2.542,1252,3.689,1293,2.262,1397,2.39,1420,4.058,1428,3.074,1457,2.437,1494,2.542,1677,3.324,1727,3.324,1777,2.542,1800,3.486,1827,3.486,1878,3.689,2289,3.961,2380,3.961,2381,4.373,2382,3.486,2383,6.398]],["t/520",[20,2.975,27,1.386,48,2.788,53,0.608,80,1.791,97,3.169,100,3.386,113,2.664,148,3.623,186,2.634,208,2.065,325,2.975,342,2.084,698,3.915,1016,4.091,1045,5.019,1155,2.25,1208,4.964,1315,4.537,1368,4.41,1979,4.294,2319,4.41,2384,6.882]],["t/522",[20,3.215,48,2.534,49,3.445,53,0.657,97,2.34,204,2.212,257,3.094,521,5.106,579,3.756,675,3.81,677,4.581,680,2.913,1045,5.425,1164,3.348,1166,4.323]],["t/524",[26,2.666,27,1.484,48,2.644,53,0.745,80,1.388,101,1.76,164,4.052,183,2.758,186,2.04,204,1.585,210,1.726,227,3.624,233,3.514,336,2.245,342,1.615,485,2.255,521,2.971,553,5.744,640,2.295,648,1.462,654,2.04,679,2.582,682,3.326,773,3.624,783,3.624,805,2.335,868,3.326,942,3.746,1053,2.758,1068,2.064,1086,4.25,1152,4.828,1155,2.408,1166,3.098,1208,4.191,1242,3.888,1255,2.807,1553,3.747,1662,3.888,1796,4.828,1982,3.416,2319,3.416,2380,4.828,2385,5.331,2386,5.331,2387,5.331]],["t/526",[27,1.59,48,2.818,53,0.785,62,3.225,88,3.357,170,3.001,171,2.987,183,3.052,204,2.645,208,1.771,210,1.91,342,1.787,485,1.576,493,3.001,495,2.62,553,6.222,644,2.208,648,1.618,654,2.258,852,3.43,942,3.001,945,3.225,948,3.43,1131,4.704,1155,2.908,1166,3.43,1208,3.357,1223,3.43,2388,5.9]],["t/528",[27,1.04,48,1.994,53,0.636,80,1.344,81,1.793,89,1.757,108,3.002,186,1.977,208,2.163,265,2.262,271,1.536,285,2.822,336,3.035,342,1.564,553,6.049,616,3.07,647,2.392,653,1.871,664,3.143,840,5.478,879,3.511,933,2.583,999,3.07,1009,3.511,1040,2.938,1121,4.117,1155,2.356,1173,2.61,1208,4.1,1293,2.672,1357,4.386,1384,7.911,1523,4.357,1528,3.926,1979,3.223,2169,4.677,2319,3.309,2328,4.677,2389,5.164,2390,5.164,2391,5.164,2392,5.164,2393,5.164,2394,5.164,2395,5.164]],["t/530",[19,2.391,26,1.813,27,0.73,38,2.128,48,1.538,53,0.491,76,3.47,81,1.259,86,1.437,101,1.836,116,3.563,143,2.155,144,0.875,148,1.909,154,2.324,170,1.844,174,2.391,204,1.078,207,2.021,210,1.174,227,2.465,228,1.209,235,1.14,266,1.454,271,1.078,285,1.982,325,1.567,378,2.263,485,2.4,490,1.632,502,2.756,503,4.408,517,2.736,521,3.77,525,1.704,537,2.108,553,6.106,641,6.066,658,3.666,680,1.42,698,3.163,773,2.465,815,1.454,825,4.306,852,3.232,948,2.108,1003,3.908,1004,2.263,1034,2.645,1053,1.876,1086,2.891,1089,1.567,1109,2.891,1124,2.324,1127,2.155,1146,1.437,1155,1.818,1176,2.324,1178,3.305,1208,3.848,1223,2.108,1234,2.465,1247,2.108,1253,2.465,1255,1.909,1352,2.891,1384,5.764,1494,3.232,1528,2.756,1650,4.227,1665,3.059,1680,3.059,1777,2.108,1824,2.756,1843,3.284,1979,3.47,2349,3.284,2396,3.626,2397,3.626,2398,3.626,2399,3.626]],["t/532",[20,2.497,34,1.702,61,2.715,76,4.856,95,4.213,97,2.768,114,3.197,122,3.702,187,2.465,342,1.75,346,3.434,413,3.83,561,3.042,619,1.766,639,3.157,650,3.809,671,2.465,679,2.798,729,2.938,824,4.605,877,2.889,889,3.098,900,2.675,926,4.856,936,3.809,1049,4.213,1051,4.987,1287,4.605,1288,3.927,1565,4.873,1596,4.605,1651,3.434,1731,5.232,2310,4.873,2400,7.836,2401,5.777,2402,5.777,2403,7.048,2404,5.777,2405,5.232,2406,5.777]],["t/534",[23,4.156,53,0.722,80,2.127,483,4.555,644,3.059,726,4.974,1158,5.556,1178,4.858,1181,4.858,2323,7.402,2400,6.515]],["t/536",[76,4.404,97,2.788,114,3.642,119,4.798,413,3.473,561,3.716,838,4.195,846,4.195,847,3.589,889,4.754,911,4.015,926,4.404,1051,4.523,1260,5.147,1287,5.626,1553,4.961,1651,4.195,1704,5.147,2011,5.147,2061,5.626,2400,5.626,2403,6.392,2407,5.365,2408,7.058]],["t/538",[48,2.635,49,4.007,53,0.6,97,2.136,186,2.6,187,2.026,230,2.596,257,1.976,282,2.823,285,2.596,479,4.302,480,2.457,515,3.229,568,2.702,638,3.786,640,1.48,654,1.818,677,3.397,680,1.86,733,3.786,783,3.229,809,3.043,884,2.647,889,2.547,893,4.007,930,3.131,1000,4.007,1051,3.043,1077,3.786,1155,2.221,1164,2.138,1245,2.199,1285,3.61,1294,3.786,1367,4.478,1368,3.043,1651,4.713,1779,4.617,1945,3.61,2096,3.043,2191,4.007,2272,3.229,2307,3.786,2400,5.415,2407,3.61,2409,4.749,2410,4.749,2411,10.027,2412,4.302,2413,4.749,2414,4.749,2415,3.464,2416,4.749,2417,4.749,2418,4.749,2419,3.786,2420,4.749,2421,4.749,2422,4.749]],["t/541",[28,3.05,48,2.075,49,2.534,89,1.862,90,5.642,96,3.57,97,2.692,105,3.113,108,3.18,113,2.118,144,1.809,186,3.524,204,2.23,233,3.578,257,3.12,327,2.99,336,3.159,337,2.871,355,2.61,359,2.934,380,2.248,485,2.004,525,2.571,568,3.113,692,3.414,756,2.397,1014,3.33,1142,3.607,1487,3.506,1630,3.506,1677,4.159,1913,4.956,1962,4.159,1982,3.506,2407,4.159,2423,5.979,2424,4.616,2425,5.471,2426,5.471,2427,4.956,2428,5.471]],["t/543",[48,1.544,53,0.763,80,1.453,125,3.176,130,2.663,169,3.483,187,2.382,194,3.086,195,2.663,197,3.924,218,2.089,228,1.862,255,3.573,257,2.322,271,2.261,485,1.491,509,3.577,594,2.24,644,2.089,648,1.531,675,2.322,677,2.792,679,2.704,713,2.663,842,4.071,922,3.244,925,3.483,973,2,1068,2.161,1099,3.924,1124,3.577,1164,3.423,1367,3.68,1420,2.994,1487,3.577,1673,4.071,1695,4.071,1778,3.795,1779,3.795,1780,4.243,1781,3.924,1783,3.795,1784,4.243,1785,4.071,1904,3.795,1982,3.577,2423,4.45,2429,5.056,2430,4.709,2431,4.709]],["t/545",[27,1.653,38,2.395,48,1.731,61,2.941,80,2.136,81,2.173,121,3.031,128,5.21,186,3.505,189,2.778,210,2.026,228,2.737,330,4.398,485,1.672,552,3.56,594,1.844,644,2.342,666,3.488,683,4.125,702,2.898,815,2.509,862,4.01,922,3.501,1089,2.705,1091,5.443,1155,2.046,1262,4.254,1418,4.988,1473,3.905,2423,7.3]],["t/547",[48,2.135,139,2.652,144,1.861,186,3.585,203,3.991,228,2.573,478,4.217,692,4.815,816,3.802,1002,3.991,1235,4.484,1508,3.522,2423,7.468,2432,7.715]],["t/550",[48,2.489,49,2.103,53,0.683,65,3.62,80,1.182,81,1.577,82,2.531,97,2.432,108,2.639,113,1.758,123,2.639,129,3.312,139,2.261,144,2.505,183,2.349,186,1.738,187,1.937,189,2.016,195,3.137,199,3.831,204,1.35,208,1.363,211,4.113,233,4.043,336,1.913,342,2.342,485,1.757,489,3.192,593,1.963,680,1.778,729,2.309,755,2.391,863,3.452,942,2.309,1164,3.815,1221,1.963,1248,3.831,1279,2.699,1481,2.91,1487,2.91,1554,3.312,1590,3.831,1630,2.91,1721,2.91,1884,3.192,1936,3.831,1952,4.623,2240,4.113,2272,3.087,2424,3.831,2433,4.796,2434,3.831,2435,4.113,2436,5.956,2437,4.541,2438,4.113,2439,4.113,2440,4.113,2441,4.113,2442,4.541]],["t/552",[48,1.799,53,0.574,80,1.693,125,3.7,130,3.102,187,2.775,194,2.639,195,3.102,255,3.954,257,2.705,271,1.934,485,1.737,594,1.916,648,1.783,675,2.705,677,3.252,922,2.775,925,4.058,973,2.331,1099,4.571,1164,3.788,1367,4.287,1420,3.487,1673,4.743,1695,4.743,1778,4.421,1779,4.421,1780,4.943,1781,4.571,1783,4.421,1784,4.943,1785,4.743,1982,4.167,2430,5.486,2433,4.743]],["t/554",[48,2.153,49,2.126,53,0.585,61,2.158,80,1.726,86,1.819,97,1.444,101,1.516,108,2.669,120,3.211,121,2.224,128,2.612,143,2.729,144,2.055,186,1.757,204,1.365,233,4.064,257,1.91,260,3.66,328,2.335,485,1.227,494,3.873,500,2.259,519,2.865,538,1.595,558,2.612,583,2.067,593,1.985,594,1.353,640,1.43,648,1.259,675,1.91,680,1.798,684,2.19,702,2.126,703,1.841,857,2.865,899,3.349,922,2.828,927,2.794,999,2.729,1040,2.612,1074,2.067,1079,4.37,1107,3.873,1146,1.819,1155,1.501,1357,2.794,1420,3.555,1481,4.248,1487,2.942,1508,2.096,1530,3.873,1621,3.873,1630,2.942,1645,3.349,1723,3.66,1981,3.66,2245,3.49,2319,2.942,2362,4.507,2427,4.158,2433,3.349,2434,3.873,2443,3.873,2444,4.835,2445,4.158,2446,4.158,2447,4.591,2448,4.591,2449,3.873,2450,4.591,2451,4.591]],["t/556",[20,1.67,27,0.778,30,1.67,45,2.936,48,1.069,53,0.515,80,1.519,95,2.817,120,1.871,129,2.817,130,1.843,135,2.411,139,1.328,144,1.407,186,2.233,218,1.446,228,1.946,233,1.843,271,1.149,327,2.111,328,1.964,337,1.478,344,3.637,380,1.587,414,5.128,474,2.411,480,1.998,485,1.878,538,2.442,582,2.626,594,1.138,640,1.818,648,1.059,650,2.547,654,1.478,666,2.153,675,1.607,684,2.783,702,1.789,752,2.153,756,3.432,759,2.475,809,2.475,815,1.549,816,1.568,847,1.964,857,2.411,922,3,933,1.932,973,2.091,986,4.651,1009,2.626,1074,1.739,1091,2.296,1113,2.411,1146,1.531,1193,2.547,1221,3.039,1235,3.391,1243,2.296,1245,2.702,1343,2.817,1413,2.626,1457,2.153,1481,2.475,1508,1.763,1683,2.547,1758,2.817,1777,2.245,1824,2.936,2291,3.259,2362,2.626,2415,2.817,2431,5.931,2433,5.128,2434,3.259,2444,6.451,2452,3.259,2453,3.863,2454,3.499,2455,8.011,2456,5.835,2457,3.08]],["t/558",[30,2.018,53,0.592,66,2.073,80,1.215,81,2.33,86,2.659,101,1.542,144,1.618,149,1.992,174,3.078,186,3.286,288,2.102,353,2.335,485,1.247,497,2.335,538,1.622,593,2.018,641,3.282,654,3.006,666,4.378,675,1.942,729,2.374,755,2.458,756,2.045,862,4.3,868,2.914,900,2.162,1027,2.374,1042,2.775,1068,1.808,1089,2.9,1112,3.549,1173,1.691,1193,4.424,1195,2.914,1197,3.549,1204,3.282,1221,2.018,1235,2.714,1246,2.914,1247,4.565,1279,2.775,1331,2.656,1357,2.842,1457,3.74,1466,3.405,1777,2.714,1824,3.549,1887,3.939,2182,4.229,2295,3.722,2362,5.339,2433,6.262,2443,3.939,2444,4.894,2452,5.66,2455,6.077,2457,5.349,2458,4.669,2459,4.669,2460,4.669]],["t/560",[20,2.397,53,0.49,58,2.82,81,1.926,128,3.155,144,1.337,149,3.229,150,3.553,186,2.122,204,1.649,265,2.429,302,2.397,340,3.03,504,3.898,509,3.553,648,1.521,666,3.091,755,2.92,853,3.769,882,4.044,911,3.155,945,3.03,959,2.729,973,1.987,1007,3.155,1027,4.382,1068,2.147,1101,3.769,1114,3.898,1146,2.197,1155,1.813,1190,4.215,1193,3.656,1221,2.397,1250,3.898,1268,4.215,1508,2.531,1526,3.155,1574,3.656,1884,3.898,1904,3.769,2050,4.678,2163,4.215,2295,4.42,2362,5.145,2433,4.044,2444,4.044,2452,4.678,2454,5.022,2457,4.42,2461,5.545,2462,5.545,2463,5.022,2464,5.545,2465,5.545]],["t/563",[27,0.997,48,2.439,49,2.291,63,3.497,96,1.832,97,2.2,113,3.14,123,2.876,139,1.701,144,2.393,183,2.56,186,3.374,195,2.36,200,4.174,204,2.079,208,1.485,233,2.36,293,2.397,336,2.084,342,2.457,485,1.868,489,3.478,597,2.941,648,1.357,654,1.894,680,1.938,729,2.516,755,2.605,1051,3.171,1221,2.139,1237,3.945,1248,4.174,1279,2.941,1357,3.012,1434,3.262,1481,3.171,1487,3.171,1508,2.259,1590,4.174,1630,3.171,1651,2.941,1721,3.171,1807,3.088,1952,4.916,2435,4.482,2436,6.334,2438,4.482,2439,4.482,2440,4.482,2441,4.482,2466,6.466,2467,4.948,2468,4.948]],["t/565",[48,1.322,49,2.212,53,0.702,61,2.245,80,2.071,97,1.502,125,2.718,130,2.279,139,1.642,144,1.152,186,3.044,187,2.038,189,2.121,194,1.939,195,2.279,235,1.502,255,3.205,257,1.987,271,1.42,393,3.149,480,2.471,485,1.822,579,1.808,594,2.344,644,1.788,648,1.31,666,2.663,668,2.776,675,1.987,677,2.389,729,2.429,809,3.061,815,2.735,816,1.939,833,2.092,873,3.631,877,3.978,922,2.91,925,2.981,973,1.712,1099,3.358,1124,3.061,1164,3.07,1221,2.065,1367,3.149,1420,2.562,1630,3.061,1673,3.484,1675,3.808,1695,3.484,1766,3.631,1777,2.776,1778,3.247,1779,3.247,1780,3.631,1781,3.358,1783,3.247,1784,3.631,1785,3.484,1982,3.061,2429,4.326,2430,4.03,2466,7.315,2469,4.777]],["t/567",[27,0.628,38,2.352,61,2.887,62,1.705,80,1.287,81,1.718,89,1.062,128,3.495,130,1.488,139,1.7,144,1.838,167,1.814,171,1.872,186,3.797,189,3.104,194,1.266,206,1.385,228,2.704,235,1.556,257,1.298,263,2.121,265,1.367,271,0.928,302,1.349,330,2.193,342,1.498,354,1.855,393,2.057,480,1.614,485,0.834,493,1.587,497,1.561,508,2.276,558,3.495,579,1.181,594,1.457,664,3.01,666,1.739,668,1.814,675,2.057,680,1.222,684,2.931,698,1.775,703,1.983,729,1.587,755,1.643,756,1.367,809,3.169,815,2.464,816,1.266,833,1.367,862,3.169,873,2.372,877,3.073,889,1.673,909,2.372,922,2.983,986,2.487,992,1.535,1039,2.487,1089,2.138,1091,4.53,1106,1.814,1113,1.947,1114,4.319,1155,1.617,1173,1.13,1195,1.947,1221,2.656,1227,2.193,1235,1.814,1262,2.121,1263,2.372,1293,1.614,1418,2.487,1473,1.947,1528,2.372,1545,2.372,1675,2.487,1758,2.276,1765,2.487,1766,3.76,1777,1.814,1827,2.487,1904,3.362,2130,5.558,2295,3.943,2431,4.172,2444,2.276,2449,2.632,2466,6.464,2470,3.12,2471,3.12,2472,4.946,2473,3.12,2474,3.12,2475,3.12]],["t/569",[38,1.757,48,1.834,53,0.585,80,1.195,81,2.302,101,1.516,108,2.669,120,2.224,143,2.729,144,1.599,148,2.418,170,2.335,171,1.738,174,3.027,186,2.978,204,1.971,233,3.162,257,1.91,260,3.66,265,2.011,271,1.365,328,2.335,342,1.391,494,3.873,500,2.259,504,3.227,509,2.942,510,2.096,555,2.904,583,2.067,588,2.509,592,2.509,593,1.985,611,3.873,640,1.43,644,1.718,702,2.126,809,4.248,815,2.658,857,2.865,899,3.349,922,1.959,927,2.794,948,2.669,1074,2.067,1079,3.027,1089,2.865,1091,2.729,1146,1.819,1213,3.027,1217,3.121,1262,3.121,1268,3.49,1315,3.027,1481,2.942,1574,3.027,1621,3.873,1645,3.349,1777,2.669,1981,3.66,2002,3.873,2022,3.49,2245,3.49,2319,2.942,2369,3.66,2443,3.873,2444,3.349,2445,4.158,2446,4.158,2457,5.285,2466,6.202,2476,4.591,2477,4.591,2478,4.591,2479,4.591]],["t/572",[89,1.939,90,3.756,96,3.621,97,1.792,113,2.206,114,2.341,202,3.555,204,1.694,208,2.314,226,5.241,293,3.735,302,2.463,336,2.4,342,1.726,359,3.055,507,3.651,555,2.496,640,1.775,650,3.756,734,3.241,811,4.155,877,2.849,926,3.555,1173,2.064,1443,3.241,1524,4.806,1554,4.155,1867,5.16,1948,4.806,2096,3.651,2480,7.372,2481,4.542,2482,8.738,2483,5.697,2484,5.697,2485,5.697,2486,5.697,2487,5.697,2488,5.697,2489,5.697,2490,5.697,2491,5.697,2492,5.697,2493,5.16]],["t/574",[20,2.165,53,0.623,58,3.586,66,3.131,89,1.704,90,3.302,92,3.527,96,3.587,101,2.329,105,4.012,110,3.653,113,1.939,143,2.977,182,5.144,189,2.223,208,2.803,210,1.621,282,2.977,289,4.519,302,2.165,337,3.392,481,3.52,508,3.653,517,2.464,552,2.849,583,2.254,710,3.125,711,3.807,844,2.737,877,3.527,927,4.292,1002,2.591,1053,2.591,1293,2.591,1308,3.048,1482,3.992,1492,2.791,1508,2.286,1588,5.95,1675,3.992,1679,3.807,2220,4.225,2272,3.405,2405,4.536,2480,7.88,2494,5.008,2495,5.008,2496,5.008]],["t/576",[27,0.771,38,1.465,46,2.092,53,0.74,58,1.946,66,1.699,81,1.329,89,1.302,92,1.914,96,3.642,97,1.822,101,1.264,139,1.316,143,2.275,189,2.572,198,1.723,208,1.149,209,2.602,215,2.909,218,2.168,228,1.932,230,2.092,235,1.204,271,1.138,288,1.723,289,3.713,291,2.275,293,2.807,337,1.465,342,1.159,343,2.791,378,3.615,480,1.98,485,2.083,490,1.723,492,1.98,500,1.883,508,4.226,594,2.297,644,2.168,703,1.535,759,2.452,805,1.676,834,3.466,852,2.224,900,1.772,923,2.791,927,2.329,973,1.372,979,2.133,1002,1.98,1040,2.177,1048,2.791,1068,1.482,1076,2.388,1081,3.051,1089,1.654,1137,2.329,1146,1.517,1155,1.894,1162,2.452,1173,2.099,1205,3.466,1223,2.224,1347,2.275,1357,2.329,1473,2.388,1508,1.747,1524,3.229,1526,2.177,1541,2.602,1550,3.051,1576,3.051,1683,3.82,1754,3.229,1756,3.229,1800,3.051,1831,2.523,1934,2.791,1979,2.388,2130,2.791,2172,3.051,2320,3.466,2480,7.067,2497,3.827,2498,3.827,2499,3.051,2500,3.466,2501,3.827,2502,3.827,2503,3.827]],["t/579",[55,5.529,63,3.278,76,4.09,88,3.729,92,3.278,96,3.466,97,2.66,113,3.274,120,4.097,144,1.581,194,2.66,208,1.967,293,4.097,337,2.509,346,3.896,359,3.515,640,2.042,683,4.321,805,2.871,939,5.937,1146,2.597,1166,3.81,1496,5.529,1645,4.781,1807,4.09,2165,5.225,2232,5.529,2504,7.135,2505,5.529]],["t/581",[27,1.164,48,1.598,53,0.687,63,3.892,86,2.289,96,2.881,97,2.448,101,2.569,113,2.236,120,2.798,182,4.213,183,2.989,185,4.605,186,2.979,189,2.565,198,2.6,208,1.734,293,2.798,342,1.75,416,4.061,422,4.391,485,1.543,507,3.702,552,3.287,583,2.6,603,2.433,825,3.042,846,3.434,847,2.938,849,3.927,1002,2.989,1053,2.989,1308,3.516,1721,3.702,1968,4.605,2245,4.391,2255,4.873,2272,3.927,2407,4.391,2504,7.424,2505,6.565,2506,5.777,2507,4.873,2508,5.777]],["t/583",[34,1.177,38,1.528,46,2.182,48,1.655,61,1.877,66,1.773,77,2.912,81,2.078,86,2.842,89,1.359,96,2.214,97,1.882,101,1.975,187,1.704,189,1.773,195,1.905,198,2.693,201,2.633,204,1.779,218,1.495,228,2.392,230,2.182,235,1.256,257,1.661,271,1.187,282,2.374,289,2.559,291,2.374,293,3.475,337,1.528,416,2.807,422,3.036,485,2.279,488,1.849,490,2.693,492,2.066,500,1.965,594,2.347,624,2.141,644,1.495,654,1.528,675,1.661,677,1.997,703,2.399,732,2.633,833,1.749,844,2.182,959,1.965,973,1.431,1002,3.095,1068,1.546,1076,2.492,1089,2.586,1137,2.43,1146,2.37,1164,3.229,1166,3.477,1173,1.446,1293,2.066,1347,2.374,1357,2.43,1420,2.141,1466,2.912,1508,1.823,1526,3.403,1550,3.184,1683,3.944,1691,2.715,1831,2.633,1934,2.912,1982,2.559,2130,2.912,2326,3.184,2504,6.72,2505,7.555,2507,3.369,2509,3.993,2510,3.184,2511,3.617]],["t/585",[48,1.969,49,3.296,53,0.628,83,5.004,97,2.239,101,2.35,186,2.724,208,2.136,478,3.89,586,3.968,805,3.118,879,4.839,892,4.693,1227,5.004,1308,4.332,1357,4.332,1487,6.236,1630,5.712,2512,7.118,2513,7.118,2514,7.118,2515,7.118,2516,7.118]],["t/587",[80,1.99,144,1.844,166,4.178,171,2.893,204,2.273,257,3.18,675,3.18,677,3.823,922,3.262,1457,4.261,1487,5.969,1630,6.701,1777,4.443,1786,4.349]],["t/589",[26,2.773,48,2.094,49,2.568,68,3.769,86,2.197,89,2.575,96,2.802,97,2.381,138,3.375,144,1.337,186,2.897,204,1.649,218,2.075,226,3.769,293,2.686,342,1.68,380,2.278,481,3.898,488,3.505,491,5.022,492,2.868,495,2.462,500,2.729,507,4.85,561,2.92,586,3.091,805,2.429,933,2.773,979,3.091,1077,4.42,1078,4.42,1146,2.999,1227,3.898,1355,4.678,1357,4.606,1487,5.522,1503,6.034,1598,4.678,1622,5.022,1630,4.85,1727,4.215,1934,4.044,2216,4.215,2517,5.545,2518,5.022,2519,5.545]],["t/591",[81,2.494,144,1.732,204,2.135,218,2.687,325,3.104,488,3.325,500,3.533,524,4.37,568,4.085,593,3.104,820,4.601,851,4.085,928,5.458,1089,3.104,1096,5.458,1508,3.278,1630,4.601,1685,5.724,1760,6.503,1807,4.481,2520,7.18,2521,6.503,2522,8.961,2523,7.18]],["t/594",[27,1.132,30,2.429,48,1.555,60,4.741,88,3.197,92,2.811,96,3.212,97,1.768,202,3.507,206,2.495,208,2.292,210,1.82,216,3.601,257,3.177,293,4.51,478,3.072,640,1.751,692,3.507,805,2.462,809,3.601,821,4.741,845,3.821,927,4.649,992,2.766,1051,3.601,1074,2.53,1554,6.329,1720,5.09,2014,5.09,2239,5.09,2279,4.272,2412,5.09,2524,5.62,2525,5.62,2526,5.62,2527,4.741,2528,5.62,2529,5.62,2530,5.62,2531,5.62,2532,5.62,2533,5.62,2534,7.422,2535,5.62]],["t/596",[48,2.237,54,4.878,55,5.162,89,2.082,90,4.034,96,3.352,97,1.924,121,2.964,123,3.556,144,1.476,186,3.095,195,2.919,204,1.819,208,2.718,293,4.387,337,2.342,342,1.853,359,3.281,369,3.724,616,3.637,675,2.545,692,3.818,756,2.68,1074,2.754,1331,3.481,1434,4.034,1457,3.41,1786,5.153,2037,4.651,2272,4.16,2291,5.162,2481,4.878,2507,5.162,2527,5.162,2536,6.119]],["t/598",[20,2.053,38,1.818,48,1.879,81,2.359,96,2.514,149,2.026,186,1.818,198,2.138,201,3.131,218,1.777,228,1.584,230,2.596,235,1.494,240,3.948,260,3.786,271,1.412,282,2.823,293,2.301,353,2.375,369,2.891,374,3.61,480,2.457,509,3.043,538,1.649,583,2.138,584,3.464,654,1.818,675,1.976,692,2.964,720,3.61,756,2.08,844,2.596,877,3.397,942,2.415,959,2.337,1011,4.007,1027,3.454,1068,1.839,1074,3.057,1075,3.229,1081,3.786,1089,2.053,1146,1.882,1161,3.338,1198,2.964,1221,2.053,1268,3.61,1331,3.864,1343,3.464,1356,4.007,1357,4.134,1409,4.007,1414,3.464,1457,3.786,1549,4.302,1574,3.131,1686,3.61,1786,2.702,1979,2.964,2061,3.786,2326,3.786,2481,6.321,2500,4.302,2511,4.302,2527,5.73,2537,6.792,2538,4.749,2539,4.749,2540,4.302,2541,4.302]],["t/600",[30,2.515,53,0.69,68,3.955,80,1.514,86,2.305,96,2.894,97,2.459,120,2.818,144,1.403,201,3.835,226,3.955,257,2.42,274,3.31,293,3.788,325,2.515,359,3.12,485,1.554,510,2.656,561,3.063,594,1.714,603,2.451,752,3.243,846,3.458,847,3.976,868,3.63,927,3.541,973,2.085,1027,3.976,1105,3.835,1106,3.381,1221,2.515,1560,4.638,1931,3.63,1962,5.944,2307,4.638,2407,4.422,2521,5.269,2542,5.818,2543,5.269,2544,5.818,2545,5.818,2546,5.818,2547,5.818,2548,5.818,2549,5.269]],["t/602",[27,1.442,30,1.407,40,1.892,41,1.892,48,0.901,53,0.287,75,1.935,80,0.847,81,2.193,86,2.026,96,1.205,97,1.024,108,1.892,112,2.948,113,1.26,114,1.337,121,2.477,124,1.577,126,1.935,139,1.119,144,1.233,157,2.948,187,3.523,195,3.711,204,1.878,218,1.218,235,1.024,241,1.553,257,1.354,274,1.852,282,1.935,302,2.21,337,1.246,342,0.986,355,2.439,380,1.337,485,0.87,507,2.086,549,2.374,579,1.232,592,1.779,594,1.861,603,2.66,640,1.014,644,1.218,647,1.507,648,1.402,659,2.146,671,1.389,680,2.803,703,1.305,778,1.746,849,2.213,872,2.475,888,1.746,900,1.507,913,1.935,925,3.941,999,1.935,1043,2.595,1075,2.213,1089,2.21,1099,3.595,1104,2.288,1127,1.935,1146,1.29,1164,4.32,1170,2.146,1176,2.086,1178,1.935,1224,2.948,1244,2.475,1262,2.213,1293,3.267,1367,2.146,1414,2.374,1420,4.171,1582,4.632,1627,2.746,1698,2.595,1758,2.374,1778,2.213,1779,4.294,1780,2.475,1781,2.288,1782,2.746,1783,2.213,1784,2.475,1785,2.374,1836,2.595,1945,2.475,1963,2.746,1998,2.948,2179,2.374,2285,2.948,2371,2.595,2382,4.077,2415,2.374,2550,3.255,2551,3.255,2552,3.255,2553,3.255,2554,3.255,2555,2.595,2556,2.595,2557,2.746,2558,2.746,2559,2.746,2560,2.746,2561,3.255,2562,3.255]],["t/604",[26,1.109,27,1.147,30,2.461,32,1.042,34,2.031,38,0.849,40,1.289,53,0.33,61,2.278,66,1.66,80,0.577,81,0.77,86,0.879,97,1.525,100,1.84,101,0.732,114,0.911,125,2.127,138,1.35,139,1.285,144,1.934,150,2.396,171,1.415,181,1.686,195,1.058,203,1.934,208,0.665,209,1.507,218,0.83,228,2.299,254,2.628,255,2.278,257,0.922,266,1.499,271,1.112,274,1.262,293,2.349,302,0.959,303,1.462,342,0.672,351,1.212,355,1.058,358,1.421,380,0.911,413,1.84,414,1.617,482,1.128,485,0.592,490,0.998,495,0.985,510,1.012,514,1.559,518,1.35,537,1.289,538,1.977,558,1.262,579,1.415,590,2.005,594,1.102,603,0.934,619,0.678,644,1.399,648,1.025,658,1.462,668,1.289,671,1.595,675,1.555,677,1.109,678,1.384,710,1.384,713,1.784,719,1.289,724,2.276,726,1.35,730,1.091,749,1.617,751,1.462,756,3.213,772,1.421,814,1.617,815,0.889,816,0.9,820,1.421,833,0.971,850,1.35,853,2.542,855,1.462,866,1.686,869,1.318,883,3.474,900,1.732,911,1.262,936,1.462,992,2.386,1018,1.768,1027,1.902,1042,2.223,1046,2.396,1051,1.421,1068,1.448,1074,2.182,1079,1.462,1083,2.333,1087,1.289,1089,0.959,1102,1.318,1117,1.559,1146,1.482,1173,0.803,1175,1.507,1203,1.617,1221,4.046,1223,1.289,1235,1.289,1245,1.027,1246,2.333,1255,1.168,1280,1.686,1283,1.686,1293,1.934,1331,4.384,1340,1.686,1347,1.318,1473,3.552,1583,2.981,1656,1.421,1676,1.559,1700,1.768,1703,1.686,1722,1.768,1786,2.758,1788,2.842,1789,1.686,1791,1.768,1807,1.384,1831,1.462,1884,2.628,1904,1.507,1923,1.768,1952,1.559,2011,1.617,2048,1.768,2163,1.686,2276,2.008,2279,1.686,2296,1.768,2325,1.768,2499,1.768,2510,1.768,2534,1.768,2563,6.188,2564,4.538,2565,1.871,2566,1.871,2567,1.871,2568,1.871,2569,3.154,2570,1.871,2571,1.871,2572,1.871,2573,1.871,2574,1.871,2575,1.617]],["t/606",[27,1.184,32,1.832,38,1.492,47,2.318,53,0.519,75,2.318,80,1.015,81,1.354,84,1.832,86,1.545,97,1.848,121,1.889,128,2.218,135,2.433,144,1.899,149,1.664,150,2.499,202,2.433,214,2.499,218,1.459,228,1.96,235,1.226,265,1.708,266,2.356,279,2.651,288,2.645,293,4.091,325,1.685,355,1.86,490,1.755,497,1.95,498,2.964,500,1.919,538,2.734,590,3.792,592,2.131,594,1.149,598,2.651,624,3.792,644,1.459,663,2.131,671,2.507,680,1.527,684,2.803,716,2.218,744,3.289,751,2.571,752,2.173,756,2.574,801,2.499,816,1.582,833,1.708,847,2.988,870,2.741,908,2.964,911,2.218,979,2.173,1027,4.934,1045,2.844,1074,1.755,1089,1.685,1091,2.318,1113,2.433,1155,1.275,1221,2.54,1245,1.806,1331,2.218,1347,2.318,1541,2.651,1786,2.218,1807,5.27,1979,2.433,2037,2.964,2198,3.289,2264,3.289,2362,3.995,2575,2.844,2576,3.532,2577,3.532,2578,3.532,2579,3.289,2580,4.957,2581,3.899]],["t/608",[48,1.873,61,3.181,81,2.351,96,2.506,113,2.621,124,3.279,144,1.633,188,5.146,344,3.502,478,3.699,500,3.331,593,2.926,640,2.109,816,2.747,825,3.564,852,3.934,925,4.224,930,4.463,959,3.331,1092,6.297,1099,4.758,1146,2.682,1170,4.463,1526,3.851,1931,4.224,1969,5.396,1978,5.396,2326,5.396,2582,6.769,2583,6.769,2584,5.71]],["t/610",[53,0.544,80,1.605,96,2.282,97,1.939,114,2.532,139,2.119,144,1.487,171,2.333,187,2.63,206,2.737,218,2.307,228,2.056,266,2.472,293,3.936,328,3.135,338,4.496,340,3.369,579,3.075,644,2.307,703,3.258,815,2.472,833,2.7,838,4.83,883,4.968,935,3.95,972,4.914,973,2.209,1027,3.135,1046,5.207,1051,3.95,1807,3.847,1931,3.847,2096,5.207,2203,5.2,2585,6.164,2586,5.2]],["t/612",[32,3.401,34,1.531,38,2.77,41,3.02,97,1.635,114,2.973,121,2.517,144,2.009,171,2.739,228,1.733,235,2.276,257,2.162,291,3.089,293,2.517,302,2.246,342,1.574,358,3.33,361,3.79,391,4.707,490,2.339,497,2.599,590,2.787,592,2.84,619,1.589,644,2.709,675,2.162,677,2.599,703,2.084,719,3.02,726,3.163,883,3.956,973,1.862,979,2.897,992,2.557,1046,6.575,1076,3.243,1083,3.243,1100,3.79,1137,3.163,1146,2.059,1147,3.95,1331,2.957,1658,3.95,1786,4.118,2096,4.638,2586,6.106,2587,4.384,2588,4.707,2589,5.197,2590,4.707]],["t/615",[24,3.433,48,1.771,53,0.735,80,1.667,81,2.224,82,3.569,96,3.083,97,2.014,114,3.422,126,4.952,144,2.009,194,2.598,204,1.904,257,2.663,337,2.451,359,3.433,538,2.224,644,2.396,730,3.151,805,2.804,814,4.67,913,3.806,933,3.202,1040,3.643,1073,5.104,1165,3.371,1173,2.319,1251,4.67,1633,3.806,1962,4.867,1985,5.799,2518,5.799,2591,6.403,2592,6.403]],["t/617",[48,1.873,80,1.762,96,2.506,97,2.716,114,3.547,127,6.131,144,1.633,194,2.747,202,4.224,204,2.013,257,2.816,288,3.047,369,4.12,482,3.442,497,3.385,538,3.302,594,1.994,644,2.533,729,3.442,756,2.965,1027,3.442,1165,4.546,1198,4.224,1221,2.926,1633,5.132,2593,6.769]],["t/619",[34,2.418,80,1.629,92,3.13,96,3.39,97,2.88,114,2.571,119,4.254,139,2.821,144,1.509,170,3.182,265,2.741,293,3.975,497,3.13,677,3.13,724,3.808,744,5.279,805,2.741,816,2.54,927,3.808,1165,3.295,1179,5.279,1270,4.564,1457,3.488,1633,3.72,1807,5.121,2424,7.725,2481,7.3,2555,4.988,2594,6.257,2595,6.257]],["t/621",[96,2.526,101,2.253,114,2.804,120,3.306,139,2.346,144,2.093,154,4.373,206,3.03,269,4.978,330,4.797,337,2.612,342,2.067,359,3.66,555,2.989,591,4.797,603,2.875,889,3.66,1028,6.181,1114,4.797,1121,5.441,1173,2.472,1614,6.181,1721,4.373,2211,6.598,2269,5.757,2331,6.181,2596,6.825,2597,6.825,2598,6.825]],["t/623",[80,1.936,96,3.674,206,3.302,218,2.784,343,5.425,480,3.848,481,5.228,538,3.181,675,3.094,930,4.904,1098,5.425,1285,5.654,1286,6.737,1755,6.275,1931,4.642,2541,6.737,2599,7.438,2600,6.737]],["t/625",[53,0.634,58,3.651,97,2.258,114,3.682,123,4.173,144,1.732,186,2.748,210,2.325,257,2.987,304,5.237,327,3.924,778,3.85,945,3.924,1146,3.551,1165,3.781,1520,5.724,1846,6.503,2307,5.724,2601,7.18,2602,7.18,2603,7.18,2604,7.18,2605,7.18]],["t/627",[30,2.551,53,0.521,66,2.62,80,1.536,96,2.184,101,1.948,114,3.902,120,2.858,121,2.858,124,2.858,144,1.904,255,2.773,274,3.357,342,1.787,485,1.576,561,3.107,594,1.738,597,3.507,603,2.486,752,3.289,811,4.303,847,3.001,963,4.704,1027,4.014,1105,3.89,1106,3.43,1165,5.001,1221,2.551,1249,5.344,1308,3.591,1489,5.344,1557,4.704,1560,4.704,1638,4.978,1931,3.682,2046,4.978,2096,3.781,2216,4.485,2549,5.344,2606,5.757,2607,5.9]],["t/629",[27,0.867,40,2.502,41,2.502,49,1.994,51,2.759,53,0.38,81,2.197,86,2.506,96,1.593,97,1.354,114,2.599,121,3.064,144,1.038,187,3.526,195,4.2,218,1.611,257,1.791,271,1.28,282,2.559,302,2.734,336,1.813,549,3.14,579,1.629,594,1.268,644,1.611,648,1.181,680,3.237,703,1.726,888,2.309,913,2.559,942,2.189,973,1.543,992,2.118,999,2.559,1007,2.449,1043,3.432,1075,2.926,1089,1.861,1104,3.026,1142,2.838,1164,4.394,1165,5.01,1176,2.759,1178,2.559,1241,2.926,1293,3.272,1308,2.62,1420,4.721,1649,3.432,1698,3.432,1778,2.926,1779,2.926,1782,3.632,1783,2.926,1785,3.14,1786,2.449,1836,3.432,1945,3.272,2179,3.14,2371,3.432,2382,5.042,2415,3.14,2555,3.432,2556,3.432,2557,3.632,2558,3.632,2559,3.632,2560,3.632]],["t/631",[26,1.097,27,0.969,30,2.444,32,1.031,34,2.02,38,0.84,40,1.275,49,1.016,53,0.327,61,2.261,66,1.645,80,0.571,81,0.762,86,0.869,97,1.166,100,1.824,101,0.724,114,1.522,125,2.108,138,1.335,139,1.274,144,1.926,150,2.375,171,1.402,195,1.047,203,2.489,208,0.658,209,1.491,218,0.821,228,2.286,254,2.605,255,2.657,257,0.913,266,1.486,271,1.102,274,1.248,302,0.948,303,1.446,351,1.199,355,1.047,358,1.406,380,0.901,413,1.824,414,1.6,482,1.116,485,0.99,490,0.988,495,0.974,510,1.002,514,1.542,518,1.335,537,1.275,538,1.963,558,1.248,579,1.402,590,1.987,594,1.092,603,0.924,619,0.671,644,1.387,648,0.602,658,1.446,668,1.275,671,1.581,675,1.541,677,1.097,678,1.369,710,1.369,713,1.768,719,1.275,724,2.255,726,1.335,749,1.6,751,1.446,756,3.003,772,1.406,815,0.88,816,0.89,820,1.406,833,0.961,850,1.335,853,2.519,855,1.446,866,1.668,869,1.304,883,3.453,900,1.716,911,1.248,936,1.446,992,2.367,1018,1.749,1027,1.884,1042,2.203,1046,2.375,1051,1.406,1068,1.435,1074,2.166,1079,1.446,1083,2.312,1087,1.275,1089,0.948,1102,1.304,1117,1.542,1146,1.468,1165,3.843,1173,0.795,1175,1.491,1203,1.6,1221,3.977,1223,1.275,1235,1.275,1245,1.016,1246,2.312,1255,1.155,1280,1.668,1283,1.668,1293,1.135,1331,4.363,1340,1.668,1347,1.304,1473,3.528,1583,1.749,1656,1.406,1676,1.542,1700,1.749,1703,1.668,1722,1.749,1786,2.737,1788,4.298,1789,3.657,1791,1.749,1831,1.446,1884,2.605,1904,1.491,1923,1.749,1952,1.542,2011,1.6,2048,1.749,2163,1.668,2279,1.668,2296,1.749,2325,1.749,2499,1.749,2510,1.749,2534,1.749,2563,6.156,2564,4.507,2565,1.851,2566,1.851,2567,1.851,2568,1.851,2569,3.126,2570,1.851,2571,1.851,2572,1.851,2573,1.851,2574,1.851,2575,1.6,2606,3.509,2608,1.851]],["t/633",[31,2.293,32,1.682,38,2.107,46,1.956,47,2.127,53,0.316,61,1.682,80,0.932,81,2.33,86,1.418,96,1.325,97,1.126,101,1.182,114,2.756,128,2.036,144,2.071,149,2.349,150,2.293,188,2.721,214,2.293,228,1.836,235,1.126,255,2.587,265,2.411,266,1.435,325,1.547,355,1.707,413,1.761,478,1.956,490,1.611,497,1.79,498,2.721,500,1.761,538,2.616,590,1.919,592,3.009,593,1.547,598,2.433,624,3.597,640,1.715,644,1.339,684,1.707,702,1.657,716,2.036,752,1.995,755,1.884,756,2.411,816,1.452,833,2.411,847,3.411,911,2.036,922,2.349,959,1.761,979,3.068,1027,5.14,1034,2.61,1045,2.61,1074,1.611,1089,1.547,1091,2.127,1113,2.233,1155,1.17,1165,3.966,1221,2.38,1245,1.657,1262,2.433,1331,2.036,1347,3.272,1357,2.178,1457,1.995,1526,2.036,1541,2.433,1777,2.08,1786,2.036,1931,2.233,1969,2.853,1978,2.853,2022,2.721,2096,2.293,2362,2.433,2369,2.853,2463,3.241,2575,2.61,2578,3.241,2579,3.019,2580,4.644,2584,3.019,2606,5.929,2608,3.019,2609,3.241,2610,3.579,2611,3.579]],["t/635",[34,1.714,51,3.728,53,0.514,80,1.514,96,2.894,97,2.459,105,5.024,114,3.879,139,2,144,1.403,171,2.202,218,2.177,266,2.333,325,2.515,353,2.91,413,2.863,538,2.02,644,2.177,703,2.333,815,2.333,847,3.976,851,4.448,877,2.91,883,5.161,958,4.089,1027,3.976,1046,3.728,1165,4.65,1686,4.422,1931,3.63,2203,4.908,2336,5.269,2606,6.441,2612,5.818,2613,5.818]],["t/637",[32,2.95,34,1.255,38,2.403,80,1.94,81,1.48,86,1.688,114,3.062,144,2.212,170,2.167,171,2.376,195,2.032,228,2.924,235,2.344,257,1.772,291,2.533,328,2.167,340,3.431,342,1.291,351,2.328,358,2.73,361,3.107,393,2.809,480,2.204,482,2.167,490,1.918,497,2.131,538,2.18,590,2.285,592,2.328,593,1.842,619,1.919,644,2.349,675,1.772,677,2.131,684,2.032,703,1.708,719,2.476,726,2.593,847,2.167,851,2.424,883,4.494,884,2.375,979,3.499,992,2.097,1027,2.167,1042,2.533,1046,6.236,1089,1.842,1100,3.107,1113,2.659,1137,2.593,1146,1.688,1147,3.239,1165,3.924,1198,2.659,1331,2.424,1347,2.533,1786,3.571,2096,2.73,2419,3.397,2586,3.594,2587,3.594,2588,3.859,2606,3.107,2614,6.75,2615,3.859]],["t/639",[32,2.696,38,2.196,51,3.676,114,3.182,118,5.196,128,4.989,166,3.135,218,2.147,228,2.583,241,2.737,274,3.264,327,3.135,330,4.033,490,2.582,576,4.184,601,6.534,603,2.417,616,3.41,619,1.754,724,3.492,847,3.939,851,4.407,877,2.869,883,4.792,889,3.077,1027,3.939,1068,2.221,1076,3.58,1083,3.58,1142,3.782,1144,4.184,1155,2.532,1165,3.021,1462,4.84,1545,4.361,1686,4.361,1777,3.335,2096,3.676,2590,5.196,2606,5.649,2616,5.737,2617,5.737]],["t/641",[23,3.281,53,0.868,58,3.281,138,3.927,139,2.218,171,2.442,194,2.619,265,2.826,266,2.587,285,3.526,344,3.338,509,4.135,587,5.144,590,3.46,659,4.254,815,2.587,833,2.826,848,4.706,913,3.835,928,4.905,933,3.227,992,3.175,1256,4.536,1345,4.386,1666,5.443,2165,5.144,2618,4.254,2619,5.144,2620,4.905,2621,6.452,2622,6.452,2623,5.844,2624,6.452,2625,5.844,2626,6.452]],["t/649",[53,0.846,80,1.791,84,3.234,86,2.727,194,2.793,204,2.046,210,2.228,230,3.761,266,2.759,325,2.975,495,3.055,500,3.386,583,3.098,593,2.975,654,2.634,659,4.537,703,2.759,815,2.759,973,2.466,1068,2.664,1129,4.537,1294,5.486,1615,4.837,2618,6.317,2620,5.231,2625,6.233]],["t/651",[27,1.569,53,0.832,63,3.895,97,2.45,108,4.527,194,3.161,325,3.366,354,4.629,553,4.527,679,3.773,1068,3.015,1197,5.92,1455,5.68,2618,5.135,2627,7.788]],["t/653",[53,0.722,66,3.628,81,2.838,198,3.679,203,4.228,555,3.58,1002,5.016,1308,4.974,1694,6.213,2618,5.388]],["t/655",[53,0.708,76,5.001,194,3.253,198,3.608,519,5.001,996,6.092,1279,4.764,1479,5.448,1492,4.467,1652,5.136,1690,5.136,1696,7.259,2373,7.259]],["t/657",[48,1.969,53,0.787,97,2.239,194,3.617,210,2.305,218,2.664,230,3.89,266,2.854,271,2.117,477,4.442,482,3.62,583,3.204,659,4.693,725,5.675,833,3.118,922,3.037,973,2.551,1150,3.396,2077,5.411,2166,4.693,2192,6.447,2600,6.447,2618,4.693,2620,5.411]],["t/659",[53,0.669,74,4.222,80,1.972,121,3.669,130,3.613,170,3.852,218,2.835,512,6.038,519,4.727,538,2.63,558,4.309,586,4.222,594,2.729,922,3.232,949,6.39,1123,5.524,1274,6.038,2628,7.574]],["t/661",[3,5.146,31,4.338,53,0.762,62,3.699,100,3.331,152,5.396,180,5.019,194,2.747,325,2.926,328,3.442,488,3.999,552,3.851,684,3.229,801,4.338,999,4.024,1096,5.146,1156,4.224,1161,4.758,1184,5.71,1552,5.71,1574,4.463,1737,5.396,1828,5.146,1988,4.937,2212,5.71,2449,5.71,2629,6.769,2630,6.769,2631,6.769]],["t/663",[53,0.809,81,2.583,194,3.019,208,2.232,210,2.408,488,3.445,680,2.913,729,3.782,992,3.66,1068,2.88,1089,3.215,1093,5.654,1159,3.782,1173,2.694,1190,5.654,1197,5.654,2321,6.737,2375,6.737,2618,4.904,2632,7.438]],["t/665",[53,0.891,100,3.797,194,3.131,210,2.498,648,2.116,659,5.087,933,3.859,1040,4.39,1150,4.468,1208,4.39,1473,4.815,2620,5.865,2633,7.715,2634,7.715]],["t/667",[48,2.52,53,0.651,86,2.921,144,1.778,171,2.79,204,2.192,266,2.956,487,5.377,488,3.414,928,5.604,973,2.642,979,4.109,1006,5.877,1164,3.318,1420,4.885,1545,5.604,1568,5.377,1705,4.487,1842,6.677,1931,4.6]],["t/669",[53,0.791,61,3.374,74,4.002,100,3.533,194,2.914,204,2.665,325,3.104,488,3.325,640,2.237,816,2.914,848,5.237,992,3.533,1007,4.085,1039,5.724,1129,4.734,1146,2.845,1183,6.503,1241,4.881,1443,4.085,1723,5.724,1758,5.237,1988,5.237,2618,4.734]],["t/671",[48,2.115,53,0.675,171,2.893,206,4.135,218,2.861,271,2.273,482,3.887,675,3.18,973,2.739,993,4.178,1004,4.77,1106,4.443,1155,2.499,1236,6.332,1304,4.261,1606,5.811]],["t/673",[27,1.242,34,2.394,48,1.705,49,2.855,53,0.717,80,2.115,97,2.859,187,2.63,210,1.996,257,2.564,278,4.496,488,2.855,521,3.436,675,3.38,689,5.207,778,3.306,805,2.7,922,2.63,1016,3.664,1150,2.94,1155,2.972,1164,2.775,1185,4.496,1198,3.847,1218,5.071,1236,4.19,1241,4.19,1250,4.333,1368,5.825,1426,5.2,2619,4.914,2635,6.164]],["t/675",[34,2.062,48,2.805,49,3.241,97,2.201,101,2.311,206,3.915,257,2.911,259,4.484,271,2.081,342,3.07,516,4.41,527,3.5,577,6.338,921,4.614,1165,3.685,1210,5.579,1315,4.614,1633,4.16,2636,6.998,2637,6.338]],["t/677",[34,2.557,48,1.888,80,1.777,89,2.322,114,3.921,148,3.594,206,3.854,271,2.029,342,2.629,474,5.956,488,3.161,490,3.072,522,4.978,664,4.154,1004,4.259,1155,2.838,1247,3.967,1368,4.373,2357,7.861,2637,6.181,2638,8.68]],["t/679",[48,1.987,53,0.634,80,1.869,101,2.959,206,3.188,327,3.924,336,3.024,537,4.173,555,3.145,588,3.924,618,4.734,689,4.601,838,4.268,889,3.85,921,4.734,959,3.533,1121,5.724,1304,4.002,1420,3.85,1673,5.237,1705,4.37,2540,6.503,2639,7.18,2640,7.18]],["t/681",[46,3.924,53,0.634,84,3.374,208,2.155,266,3.593,285,3.924,288,3.232,346,4.268,477,4.481,487,5.237,488,3.325,519,4.481,639,3.924,833,3.145,922,3.063,1126,5.458,1548,6.503,2618,5.908,2619,7.144,2641,7.18,2642,6.503,2643,7.18]],["t/683",[34,2.079,48,1.953,53,0.783,89,2.401,128,4.015,190,4.195,207,3.934,288,3.177,480,3.651,481,4.961,482,3.589,500,3.473,538,3.079,586,3.934,811,5.147,833,3.091,926,4.404,1004,4.404,1007,4.015,1137,4.295,1155,2.307,1693,5.954,2086,6.392,2642,6.392,2644,7.058]],["t/685",[53,0.836,58,4.368,80,1.748,84,4.037,89,2.285,130,3.203,170,3.414,208,2.015,271,2.554,302,2.902,334,5.104,466,5.104,500,3.304,504,4.72,509,4.303,604,3.902,659,4.427,973,2.406,1251,4.897,1268,5.104,1615,4.72,1755,5.664,2002,5.664,2618,5.663,2619,5.353,2620,5.104,2645,6.714]],["t/687",[34,3.137,48,1.92,53,0.892,74,3.868,198,3.124,204,2.063,208,2.083,210,2.247,271,2.063,500,3.415,552,3.948,654,2.656,973,2.487,1150,3.31,1173,2.513,1309,5.532,1420,3.721,2077,5.275,2166,4.575,2646,6.939,2647,6.939]],["t/689",[34,2.614,942,4.512,1142,5.85]],["t/691",[34,2.614,942,4.512,1142,5.85]],["t/693",[97,2.361,206,3.332,346,5.475,557,5.102,684,3.58,1551,5.984,1599,5.706,1633,5.475,1741,5.474,1766,5.706,2493,6.798,2543,6.798,2567,6.332,2648,7.506,2649,7.506,2650,7.506,2651,7.506,2652,7.506]],["t/695",[20,3.187,59,5.877,101,2.434,129,5.377,349,7.262,650,4.86,889,3.953,973,2.642,1240,5.877,1531,5.877,1633,4.382,1741,5.377,2245,5.604,2269,6.219,2337,6.677,2556,5.877,2623,6.677,2653,7.372,2654,7.372,2655,7.372,2656,7.372]],["t/697",[27,1.31,30,2.811,53,0.574,80,1.693,97,2.647,114,2.672,139,2.235,144,2.03,195,3.102,203,3.364,204,1.934,342,1.97,485,1.737,561,3.424,594,1.916,596,4.743,702,3.012,752,3.625,847,3.307,857,4.058,868,4.058,922,2.775,1027,4.279,1164,2.927,1221,2.811,1260,4.743,1633,6.221,2319,4.167,2657,5.486]],["t/699",[27,0.89,40,2.569,41,2.569,49,2.047,53,0.569,81,2.239,86,2.555,96,1.636,97,1.39,121,3.124,144,1.066,187,3.571,195,4.245,218,1.654,257,1.838,271,1.314,282,2.627,302,2.787,549,3.223,579,1.673,594,1.302,644,1.654,648,1.212,680,3.278,703,1.772,888,2.37,913,2.627,942,2.248,973,1.584,999,2.627,1007,2.514,1043,3.523,1075,3.005,1089,1.91,1104,3.107,1142,2.914,1164,4.426,1176,2.832,1178,2.627,1241,3.005,1293,3.336,1308,2.69,1367,2.914,1420,4.772,1633,5.703,1649,3.523,1698,3.523,1779,3.005,1781,3.107,1783,3.005,1786,2.514,1836,3.523,1945,3.36,2179,3.223,2371,3.523,2382,5.141,2415,3.223,2555,3.523,2556,3.523,2557,3.728,2558,3.728,2559,3.728,2560,3.728]],["t/701",[26,1.086,27,0.962,30,2.427,32,1.02,34,2.009,38,0.831,40,1.262,49,1.005,53,0.324,61,2.243,66,1.631,80,0.565,81,0.754,86,0.86,97,1.155,100,1.807,101,0.717,125,2.09,138,1.321,139,1.263,144,1.918,150,2.354,171,1.39,195,1.036,203,2.905,206,0.964,208,0.652,209,1.476,218,0.812,228,2.273,254,2.582,255,2.243,257,0.903,266,1.473,271,1.092,274,1.235,302,0.938,351,1.186,355,1.036,358,1.391,380,0.892,413,1.807,414,1.583,482,1.104,485,0.981,490,0.977,495,0.964,510,0.991,514,1.526,518,1.321,537,1.262,538,1.95,558,1.235,579,1.39,590,1.97,594,1.082,603,0.914,619,0.664,644,1.375,648,0.595,658,1.431,668,1.262,671,1.567,675,1.528,677,1.086,678,1.355,710,1.355,713,1.752,719,1.262,724,2.235,726,1.321,749,1.583,751,1.431,756,2.986,772,1.391,815,0.871,816,0.881,820,1.391,833,0.951,850,1.321,853,2.497,855,1.431,866,1.65,869,1.29,883,3.432,884,1.21,900,1.701,911,1.235,936,1.431,992,2.349,1018,1.731,1027,1.868,1042,2.183,1046,2.354,1051,1.391,1068,1.422,1074,2.149,1079,1.431,1083,2.292,1087,1.262,1089,0.938,1102,1.29,1117,1.526,1146,1.455,1173,0.786,1175,1.476,1203,1.583,1221,3.901,1223,1.262,1235,1.262,1245,1.005,1246,2.292,1255,1.143,1280,1.65,1283,1.65,1293,1.123,1331,4.343,1340,1.65,1347,1.29,1473,3.504,1583,1.731,1633,4.727,1656,1.391,1676,1.526,1700,1.731,1703,1.65,1722,1.731,1786,2.716,1788,4.269,1789,4.269,1791,1.731,1807,2.292,1831,1.431,1884,2.582,1904,1.476,1923,1.731,1952,1.526,2011,1.583,2048,1.731,2163,1.65,2279,1.65,2296,1.731,2325,1.731,2419,1.731,2499,1.731,2510,1.731,2534,1.731,2563,6.125,2564,4.477,2565,1.831,2566,1.831,2568,1.831,2569,3.098,2570,1.831,2571,1.831,2572,1.831,2573,1.831,2574,1.831,2575,1.583,2608,1.831,2657,4.027,2658,2.171]],["t/703",[27,1.167,32,1.798,38,1.465,47,2.275,53,0.512,75,2.275,80,0.996,81,2.012,84,1.798,86,1.517,121,1.854,125,2.177,128,2.177,135,2.388,144,1.881,149,1.633,150,2.452,195,1.826,202,2.388,214,2.452,218,1.432,228,1.932,235,1.204,265,1.676,266,2.323,279,2.602,288,2.608,325,1.654,342,1.159,355,1.826,488,1.772,490,1.723,497,1.914,498,2.909,500,1.883,538,2.428,590,3.749,592,3.166,594,1.128,598,2.602,624,3.749,644,1.432,663,2.092,671,2.472,684,1.826,716,2.177,751,2.523,752,2.133,756,2.538,816,1.553,833,1.676,847,2.946,908,2.909,911,2.177,979,2.133,1027,4.908,1045,2.791,1074,1.723,1089,2.504,1091,2.275,1113,2.388,1155,1.251,1221,2.504,1245,1.772,1331,2.177,1347,2.275,1541,2.602,1633,5.239,1786,2.177,1807,5.227,1979,2.388,2022,2.909,2037,2.909,2198,3.229,2264,3.229,2362,3.939,2369,3.051,2575,2.791,2576,3.466,2577,3.466,2579,3.229,2580,3.229,2657,7.067]],["t/705",[19,4.196,27,1.282,34,2.305,38,1.261,48,1.428,61,1.548,80,2.036,81,1.793,86,1.305,96,1.219,144,1.535,149,2.202,166,2.821,170,1.675,187,1.405,188,2.504,195,3.436,203,1.704,228,2.402,235,1.623,255,2.426,265,1.443,266,2.07,274,2.937,340,2.821,358,2.111,369,2.005,413,1.621,478,1.8,488,2.39,510,2.356,524,3.142,538,3.28,555,1.443,579,1.247,598,3.509,619,1.578,640,1.026,648,0.903,654,1.261,663,2.821,664,2.005,675,1.37,678,2.056,698,1.874,702,1.525,719,1.915,740,1.704,752,1.836,753,3.924,756,2.788,815,1.321,816,1.337,823,2.983,833,2.261,840,4.838,862,2.111,863,2.504,883,2.821,884,1.836,922,3.338,959,1.621,979,2.877,992,1.621,1066,2.626,1087,1.915,1089,1.424,1149,2.402,1161,2.315,1213,3.403,1247,1.915,1271,2.626,1457,1.836,1526,1.874,1633,4.282,1697,2.626,1781,2.315,1783,2.239,1788,2.504,1789,2.504,1931,2.056,1969,2.626,1978,2.626,2022,2.504,2415,3.765,2419,2.626,2564,4.115,2584,2.779,2587,2.779,2609,2.983,2614,5.764,2615,2.983,2659,3.294,2660,3.294,2661,3.294,2662,3.294,2663,3.294]]],"invertedIndex":[["",{"_index":34,"t":{"5":{"position":[[143,2]]},"7":{"position":[[52,2],[68,1]]},"27":{"position":[[1749,1]]},"37":{"position":[[99,1]]},"53":{"position":[[83,1],[85,1],[87,2],[268,3],[293,2],[312,3],[339,2],[365,3],[399,2]]},"57":{"position":[[220,2],[384,2],[532,3],[557,2]]},"61":{"position":[[292,3],[302,1],[304,3],[308,3],[312,1],[314,3],[329,3],[355,3],[381,3],[404,1],[406,3]]},"63":{"position":[[142,1],[399,1],[409,1],[432,1],[434,1]]},"73":{"position":[[38,2]]},"75":{"position":[[44,2],[82,1]]},"87":{"position":[[156,1],[181,2],[223,1],[233,1],[256,1],[258,1],[264,1],[274,1],[296,1],[298,1]]},"91":{"position":[[318,5]]},"93":{"position":[[294,5]]},"95":{"position":[[302,5],[1435,2]]},"99":{"position":[[883,5]]},"129":{"position":[[283,2],[373,2],[505,2],[796,1],[1112,2]]},"170":{"position":[[0,2],[9,1],[123,2],[203,2]]},"172":{"position":[[0,2],[105,2],[158,2]]},"174":{"position":[[0,2],[709,2],[765,2]]},"176":{"position":[[143,1],[299,2],[397,2],[620,2],[824,2],[992,2]]},"189":{"position":[[194,1]]},"195":{"position":[[884,3]]},"208":{"position":[[0,1],[897,1],[972,2],[991,1],[1027,2],[1044,1],[1060,2],[1122,1],[1124,1],[1210,1],[1212,2],[1329,1],[1873,2],[1892,1],[1894,1],[2092,1],[2094,2],[2111,1],[2205,2],[2217,1],[2350,2],[2366,1],[2368,1],[2490,1],[2492,2],[2595,1],[2767,2],[2858,1],[3047,2],[3064,1],[3166,2],[3177,1],[3232,2],[3256,1]]},"230":{"position":[[157,4],[317,1],[392,1],[394,1],[572,1]]},"238":{"position":[[1054,1]]},"244":{"position":[[222,3],[592,3],[665,3]]},"254":{"position":[[248,1],[420,1]]},"271":{"position":[[147,1]]},"277":{"position":[[51,3],[801,3]]},"305":{"position":[[0,2],[63,2],[121,2],[154,2]]},"315":{"position":[[87,3],[319,3]]},"327":{"position":[[1014,1]]},"329":{"position":[[794,1]]},"349":{"position":[[2192,2]]},"351":{"position":[[392,1],[1325,1]]},"369":{"position":[[95,1]]},"371":{"position":[[192,2],[450,2],[617,2]]},"402":{"position":[[230,2]]},"410":{"position":[[137,2],[211,2]]},"412":{"position":[[374,3],[469,3]]},"416":{"position":[[108,1]]},"418":{"position":[[376,2],[700,2],[731,2],[750,2]]},"420":{"position":[[850,1],[852,3],[919,3],[923,1],[1172,1],[1191,1],[1219,1],[1247,1]]},"427":{"position":[[742,1],[765,1]]},"454":{"position":[[380,1]]},"456":{"position":[[91,1]]},"460":{"position":[[302,1]]},"462":{"position":[[116,1]]},"483":{"position":[[891,2]]},"487":{"position":[[1679,2]]},"508":{"position":[[42,1],[201,1],[415,1],[711,1],[925,1],[1038,1],[1206,1]]},"532":{"position":[[429,2]]},"583":{"position":[[301,1]]},"604":{"position":[[210,2],[457,3],[869,2],[2347,2],[2623,1],[2697,1]]},"612":{"position":[[24,1]]},"619":{"position":[[314,1],[338,1]]},"631":{"position":[[174,2],[428,3],[840,2],[2261,2],[2553,1],[2631,1]]},"635":{"position":[[248,1]]},"637":{"position":[[472,1]]},"673":{"position":[[58,1],[80,1]]},"675":{"position":[[316,1]]},"677":{"position":[[207,1],[218,1]]},"683":{"position":[[266,2]]},"687":{"position":[[0,3],[34,2],[90,2],[122,2],[155,2],[207,2]]},"689":{"position":[[0,3]]},"691":{"position":[[0,2]]},"701":{"position":[[173,2],[431,3],[873,2],[2298,2],[2589,1],[2660,1]]},"705":{"position":[[900,1],[959,1],[973,4],[978,1],[1016,1]]}}}],["0",{"_index":303,"t":{"27":{"position":[[467,1],[773,2],[892,1],[894,2],[1190,2]]},"37":{"position":[[277,1]]},"214":{"position":[[123,6]]},"232":{"position":[[404,6]]},"418":{"position":[[415,3]]},"427":{"position":[[547,1],[549,1]]},"508":{"position":[[853,1]]},"604":{"position":[[1060,1]]},"631":{"position":[[1030,1]]}}}],["0.0.0.0/0",{"_index":1912,"t":{"349":{"position":[[1366,9],[1437,9],[1508,9]]}}}],["0.00",{"_index":394,"t":{"37":{"position":[[110,5]]}}}],["0.001",{"_index":2536,"t":{"596":{"position":[[290,5]]}}}],["0.01",{"_index":1118,"t":{"156":{"position":[[244,4]]}}}],["0.05",{"_index":969,"t":{"125":{"position":[[302,4]]}}}],["0.1.2",{"_index":1324,"t":{"208":{"position":[[927,9]]},"230":{"position":[[347,9]]}}}],["0.1.x",{"_index":1350,"t":{"208":{"position":[[1904,8],[1919,8]]},"244":{"position":[[436,7],[648,7]]}}}],["0.12xdai",{"_index":2358,"t":{"510":{"position":[[139,9]]}}}],["0.2.0",{"_index":1299,"t":{"208":{"position":[[46,8],[1019,7]]},"214":{"position":[[170,5],[185,7]]},"230":{"position":[[138,8]]},"232":{"position":[[451,5],[466,7]]},"244":{"position":[[444,8],[656,8]]}}}],["0.2.1",{"_index":1435,"t":{"230":{"position":[[147,9]]}}}],["00",{"_index":531,"t":{"53":{"position":[[75,3]]}}}],["05",{"_index":160,"t":{"18":{"position":[[239,2],[261,2]]}}}],["0x00",{"_index":2615,"t":{"637":{"position":[[226,4]]},"705":{"position":[[166,4]]}}}],["0x01",{"_index":2614,"t":{"637":{"position":[[45,4],[295,5],[396,4]]},"705":{"position":[[201,5],[241,4],[1321,4]]}}}],["0x072115dbd5c8b47e971890357d2951d4569f6b27",{"_index":388,"t":{"35":{"position":[[178,42]]}}}],["0x19992b52338b7b49de9679ae018a7027803db1aa",{"_index":386,"t":{"35":{"position":[[34,42]]}}}],["0x1fd16a",{"_index":635,"t":{"63":{"position":[[330,13]]},"81":{"position":[[173,13]]}}}],["0x60cd8dcc7cce0cca6a3743727ce909b6f715b2d8",{"_index":381,"t":{"31":{"position":[[26,42]]},"33":{"position":[[92,42]]}}}],["0x89f2e26f20bf66bbfac947a3b628b4b4724aaa5c",{"_index":389,"t":{"35":{"position":[[250,42]]}}}],["0x[a",{"_index":630,"t":{"63":{"position":[[263,6]]},"79":{"position":[[231,6]]}}}],["0xadfb8d27671f14f297ee94135e266aaff8752e35",{"_index":1072,"t":{"140":{"position":[[125,45],[478,44]]},"148":{"position":[[399,45],[736,44]]},"158":{"position":[[146,44]]}}}],["0xc60e38c6352875c051b481cbe79dd0383adb7817",{"_index":52,"t":{"10":{"position":[[70,42]]},"23":{"position":[[94,42]]}}}],["0xda007777d86ac6d989cc9f79a73261b3fc5e0da0",{"_index":50,"t":{"10":{"position":[[15,42]]},"23":{"position":[[27,42]]}}}],["0xee3b01b2debd3df95bf24d4aacf8e70373113315",{"_index":382,"t":{"31":{"position":[[93,42]]},"33":{"position":[[25,42]]}}}],["0xf35960302a07022aba880dffaec2fdd64d5bf1c1",{"_index":574,"t":{"57":{"position":[[579,44]]}}}],["0xf66823fdc33b9f4c66db4c3394ff139872c12f16",{"_index":387,"t":{"35":{"position":[[108,42]]}}}],["1",{"_index":255,"t":{"25":{"position":[[333,3]]},"37":{"position":[[6,1],[279,1]]},"152":{"position":[[436,2]]},"189":{"position":[[116,2]]},"208":{"position":[[1543,1]]},"238":{"position":[[913,1],[1147,1],[1386,1]]},"242":{"position":[[720,1]]},"244":{"position":[[413,1],[625,1],[784,1]]},"250":{"position":[[411,1],[714,1]]},"252":{"position":[[145,1]]},"254":{"position":[[140,1]]},"258":{"position":[[213,1]]},"262":{"position":[[303,1],[377,1]]},"266":{"position":[[69,1]]},"271":{"position":[[69,2]]},"327":{"position":[[929,2]]},"508":{"position":[[5,2]]},"543":{"position":[[132,1],[186,1]]},"552":{"position":[[133,1],[187,1]]},"565":{"position":[[132,1],[186,1]]},"604":{"position":[[1877,2],[2566,2],[2768,1]]},"627":{"position":[[73,1]]},"631":{"position":[[965,1],[1789,2],[2496,2],[2702,1]]},"633":{"position":[[46,1],[160,1]]},"701":{"position":[[1826,2],[2532,2],[2731,1]]},"705":{"position":[[298,2],[1173,2]]}}}],["1.4",{"_index":1626,"t":{"309":{"position":[[1405,3]]}}}],["1.dappnode.eth",{"_index":1438,"t":{"230":{"position":[[410,16]]}}}],["10",{"_index":304,"t":{"27":{"position":[[469,3],[1657,3]]},"29":{"position":[[354,3],[406,3]]},"37":{"position":[[297,2]]},"228":{"position":[[37,2]]},"510":{"position":[[315,2]]},"625":{"position":[[144,3]]}}}],["10.0.0.1",{"_index":1942,"t":{"367":{"position":[[540,9]]}}}],["100",{"_index":320,"t":{"27":{"position":[[768,4],[897,4],[1185,4],[1473,4]]},"323":{"position":[[418,4]]}}}],["100,000,000",{"_index":232,"t":{"23":{"position":[[172,11]]}}}],["1024",{"_index":1646,"t":{"309":{"position":[[3045,4],[3295,4]]},"349":{"position":[[1418,4],[1489,4]]}}}],["11",{"_index":417,"t":{"37":{"position":[[300,2]]}}}],["11th",{"_index":2080,"t":{"410":{"position":[[756,4]]}}}],["12",{"_index":418,"t":{"37":{"position":[[303,2]]},"510":{"position":[[128,2]]}}}],["123456789,1234567890:abcdefghijklmnopqrstuvwxyz123456",{"_index":1921,"t":{"349":{"position":[[2195,53]]}}}],["12603",{"_index":2104,"t":{"418":{"position":[[293,5]]}}}],["12603:12603/tcp",{"_index":2101,"t":{"418":{"position":[[208,17]]}}}],["12603:12603/udp",{"_index":2102,"t":{"418":{"position":[[228,17]]}}}],["12th",{"_index":2084,"t":{"410":{"position":[[846,4]]}}}],["13",{"_index":419,"t":{"37":{"position":[[306,2]]},"323":{"position":[[347,2]]}}}],["1304",{"_index":1628,"t":{"309":{"position":[[1412,5]]}}}],["14",{"_index":420,"t":{"37":{"position":[[309,2]]}}}],["14515",{"_index":2478,"t":{"569":{"position":[[274,5]]}}}],["15",{"_index":421,"t":{"37":{"position":[[312,2]]},"93":{"position":[[671,5]]},"95":{"position":[[1431,3]]},"315":{"position":[[125,3]]}}}],["15h",{"_index":766,"t":{"93":{"position":[[657,6]]},"95":{"position":[[1417,6]]}}}],["16",{"_index":422,"t":{"37":{"position":[[315,2]]},"309":{"position":[[754,2]]},"432":{"position":[[373,2]]},"581":{"position":[[382,2]]},"583":{"position":[[632,2]]}}}],["168",{"_index":1632,"t":{"309":{"position":[[1527,4]]}}}],["16:00:00",{"_index":319,"t":{"27":{"position":[[716,8],[1133,8]]}}}],["16gb",{"_index":1798,"t":{"329":{"position":[[1301,4]]}}}],["17",{"_index":296,"t":{"27":{"position":[[409,2],[481,2],[557,2],[630,2],[707,2],[834,2],[906,2],[978,2],[1051,2],[1124,2]]},"29":{"position":[[38,2]]},"37":{"position":[[318,2]]}}}],["18",{"_index":312,"t":{"27":{"position":[[615,2],[1036,2]]},"37":{"position":[[321,2]]}}}],["180",{"_index":1631,"t":{"309":{"position":[[1520,3]]}}}],["18081",{"_index":1425,"t":{"224":{"position":[[461,6]]}}}],["19",{"_index":423,"t":{"37":{"position":[[324,2]]}}}],["192.168.0.1",{"_index":1941,"t":{"367":{"position":[[524,12]]}}}],["192.168.1.1",{"_index":1940,"t":{"367":{"position":[[511,12]]}}}],["2",{"_index":413,"t":{"37":{"position":[[281,1]]},"63":{"position":[[9,3]]},"65":{"position":[[68,3],[104,3]]},"105":{"position":[[179,1]]},"107":{"position":[[803,1]]},"152":{"position":[[844,2]]},"189":{"position":[[955,2]]},"208":{"position":[[1545,1]]},"242":{"position":[[722,1]]},"271":{"position":[[974,2]]},"289":{"position":[[69,1]]},"309":{"position":[[392,1],[667,1]]},"327":{"position":[[1272,2]]},"432":{"position":[[383,1]]},"508":{"position":[[138,2]]},"532":{"position":[[27,1],[462,1]]},"536":{"position":[[29,1]]},"604":{"position":[[1386,1],[1914,2]]},"631":{"position":[[1380,1],[1826,2]]},"633":{"position":[[362,2]]},"635":{"position":[[114,1]]},"701":{"position":[[1417,1],[1863,2]]},"705":{"position":[[593,2]]}}}],["2,200,000",{"_index":372,"t":{"29":{"position":[[263,9],[308,9]]}}}],["2.0",{"_index":2498,"t":{"576":{"position":[[943,4]]}}}],["2.50",{"_index":397,"t":{"37":{"position":[[140,5],[146,5],[152,5],[158,5]]}}}],["2.6.0",{"_index":1301,"t":{"208":{"position":[[74,6]]},"216":{"position":[[243,6]]}}}],["2.60",{"_index":398,"t":{"37":{"position":[[164,5]]}}}],["2.80",{"_index":399,"t":{"37":{"position":[[170,5]]}}}],["2.dappnode.eth",{"_index":1440,"t":{"230":{"position":[[497,16]]}}}],["20",{"_index":424,"t":{"37":{"position":[[327,2]]},"502":{"position":[[384,2]]}}}],["2000",{"_index":2249,"t":{"474":{"position":[[635,4]]}}}],["2019",{"_index":159,"t":{"18":{"position":[[234,4],[256,4]]}}}],["2021",{"_index":297,"t":{"27":{"position":[[412,5],[837,5]]},"29":{"position":[[41,5]]}}}],["2022",{"_index":306,"t":{"27":{"position":[[484,5],[909,5]]}}}],["2023",{"_index":311,"t":{"27":{"position":[[560,5],[633,5],[981,5],[1054,5]]}}}],["2024",{"_index":281,"t":{"27":{"position":[[154,6],[710,5],[1127,5]]}}}],["20:00:00",{"_index":364,"t":{"29":{"position":[[47,8]]}}}],["20min",{"_index":767,"t":{"93":{"position":[[664,6]]},"95":{"position":[[1424,6]]}}}],["21",{"_index":425,"t":{"37":{"position":[[330,2]]}}}],["22",{"_index":426,"t":{"37":{"position":[[333,2]]},"182":{"position":[[143,3]]},"309":{"position":[[2370,4]]}}}],["22.5",{"_index":318,"t":{"27":{"position":[[697,5]]}}}],["22:00:00",{"_index":298,"t":{"27":{"position":[[418,8],[490,8],[566,8],[639,8],[843,8],[915,8],[987,8],[1060,8]]}}}],["23",{"_index":427,"t":{"37":{"position":[[336,2]]}}}],["23.8.0",{"_index":2120,"t":{"420":{"position":[[875,9]]}}}],["24",{"_index":428,"t":{"37":{"position":[[339,2]]}}}],["24/7",{"_index":2170,"t":{"438":{"position":[[607,5]]},"450":{"position":[[354,4]]}}}],["25",{"_index":321,"t":{"27":{"position":[[966,3]]},"37":{"position":[[342,2]]}}}],["250",{"_index":2111,"t":{"418":{"position":[[430,5]]}}}],["26",{"_index":390,"t":{"37":{"position":[[8,3],[345,2]]}}}],["266d40d64f07",{"_index":2146,"t":{"427":{"position":[[513,12]]}}}],["27",{"_index":316,"t":{"27":{"position":[[688,2],[1109,2]]}}}],["28800",{"_index":918,"t":{"115":{"position":[[505,5]]}}}],["2tb",{"_index":1799,"t":{"329":{"position":[[1310,3]]}}}],["3",{"_index":274,"t":{"27":{"position":[[117,1]]},"37":{"position":[[283,1]]},"121":{"position":[[129,1]]},"123":{"position":[[24,1]]},"152":{"position":[[1438,2]]},"271":{"position":[[371,1],[742,2]]},"327":{"position":[[1691,2]]},"600":{"position":[[343,1]]},"602":{"position":[[603,1]]},"604":{"position":[[1954,2]]},"627":{"position":[[302,1]]},"631":{"position":[[1866,2]]},"639":{"position":[[374,2]]},"701":{"position":[[1903,2]]},"705":{"position":[[541,2],[831,2]]}}}],["3.0",{"_index":1394,"t":{"208":{"position":[[3251,4]]},"266":{"position":[[96,4]]}}}],["3.00",{"_index":396,"t":{"37":{"position":[[128,5],[134,5],[176,5]]}}}],["3.20",{"_index":400,"t":{"37":{"position":[[182,5]]}}}],["3.40",{"_index":401,"t":{"37":{"position":[[188,5]]}}}],["3.5",{"_index":2089,"t":{"416":{"position":[[59,5]]},"418":{"position":[[72,5]]}}}],["3.60",{"_index":402,"t":{"37":{"position":[[194,5]]}}}],["3.80",{"_index":395,"t":{"37":{"position":[[116,5],[122,5],[200,5]]}}}],["30",{"_index":161,"t":{"18":{"position":[[242,2],[264,2]]},"125":{"position":[[355,3]]},"309":{"position":[[1129,2],[6107,2]]}}}],["300",{"_index":974,"t":{"125":{"position":[[371,3]]}}}],["32",{"_index":1807,"t":{"329":{"position":[[1450,2]]},"432":{"position":[[293,2]]},"563":{"position":[[273,2]]},"579":{"position":[[183,2]]},"591":{"position":[[32,2]]},"604":{"position":[[994,2]]},"606":{"position":[[50,2],[165,2],[859,2],[902,2],[1055,2]]},"610":{"position":[[313,2]]},"619":{"position":[[49,2],[239,2]]},"701":{"position":[[998,2],[1064,2]]},"703":{"position":[[50,2],[165,2],[841,2],[924,2],[1030,2]]}}}],["32.5",{"_index":308,"t":{"27":{"position":[[541,5]]}}}],["323131",{"_index":1361,"t":{"208":{"position":[[2268,8]]},"248":{"position":[[531,8]]}}}],["35",{"_index":324,"t":{"27":{"position":[[1116,3]]},"156":{"position":[[586,2]]}}}],["36",{"_index":276,"t":{"27":{"position":[[125,3],[765,2],[1182,2]]}}}],["38",{"_index":1634,"t":{"309":{"position":[[1640,3]]}}}],["395353",{"_index":1362,"t":{"208":{"position":[[2277,10]]},"248":{"position":[[540,9]]}}}],["4",{"_index":369,"t":{"29":{"position":[[198,1]]},"37":{"position":[[285,1]]},"53":{"position":[[79,3],[450,1]]},"115":{"position":[[517,2]]},"152":{"position":[[2135,2]]},"309":{"position":[[404,1],[745,1]]},"329":{"position":[[2227,1]]},"432":{"position":[[303,1]]},"596":{"position":[[245,1]]},"598":{"position":[[145,1]]},"617":{"position":[[75,1]]},"705":{"position":[[1181,2]]}}}],["4.00",{"_index":403,"t":{"37":{"position":[[206,5]]}}}],["4.20",{"_index":404,"t":{"37":{"position":[[212,5]]}}}],["4.40",{"_index":405,"t":{"37":{"position":[[218,5]]}}}],["4.60",{"_index":406,"t":{"37":{"position":[[224,5]]}}}],["4.80",{"_index":407,"t":{"37":{"position":[[230,5]]}}}],["40",{"_index":371,"t":{"29":{"position":[[257,3],[302,3]]},"309":{"position":[[1634,2]]}}}],["443",{"_index":1643,"t":{"309":{"position":[[2687,5]]}}}],["45",{"_index":314,"t":{"27":{"position":[[622,3]]}}}],["469",{"_index":1637,"t":{"309":{"position":[[1747,4]]}}}],["4e9f",{"_index":2144,"t":{"427":{"position":[[503,4]]}}}],["4tb",{"_index":1809,"t":{"329":{"position":[[1462,3]]}}}],["5",{"_index":414,"t":{"37":{"position":[[287,1]]},"329":{"position":[[3498,1]]},"556":{"position":[[537,1],[584,1],[610,1]]},"604":{"position":[[2815,1]]},"631":{"position":[[2749,1]]},"701":{"position":[[2778,1]]}}}],["5.00",{"_index":408,"t":{"37":{"position":[[236,5],[266,5]]}}}],["5.20",{"_index":409,"t":{"37":{"position":[[242,5]]}}}],["5.40",{"_index":410,"t":{"37":{"position":[[248,5]]}}}],["5.5",{"_index":366,"t":{"29":{"position":[[61,4],[93,3],[435,4]]}}}],["5.60",{"_index":411,"t":{"37":{"position":[[254,5]]}}}],["5.80",{"_index":412,"t":{"37":{"position":[[260,5]]}}}],["50",{"_index":323,"t":{"27":{"position":[[1039,3],[1043,3]]}}}],["5000",{"_index":768,"t":{"93":{"position":[[677,7]]},"95":{"position":[[1438,7]]}}}],["5001",{"_index":1478,"t":{"250":{"position":[[834,4]]}}}],["503",{"_index":1636,"t":{"309":{"position":[[1740,3]]}}}],["51820",{"_index":1644,"t":{"309":{"position":[[2881,7]]},"329":{"position":[[1813,6]]},"349":{"position":[[1352,5]]}}}],["55",{"_index":313,"t":{"27":{"position":[[618,3]]}}}],["550,000",{"_index":373,"t":{"29":{"position":[[360,7],[412,7]]}}}],["5min",{"_index":1322,"t":{"208":{"position":[[873,7]]},"228":{"position":[[341,6]]}}}],["6",{"_index":368,"t":{"29":{"position":[[155,1]]},"37":{"position":[[289,1]]},"129":{"position":[[242,1],[1372,1]]},"218":{"position":[[36,1]]}}}],["60",{"_index":977,"t":{"125":{"position":[[568,3]]},"228":{"position":[[348,4]]}}}],["60min",{"_index":771,"t":{"93":{"position":[[730,8]]}}}],["64",{"_index":1449,"t":{"236":{"position":[[295,2]]}}}],["64gb",{"_index":1808,"t":{"329":{"position":[[1453,4]]}}}],["65535",{"_index":1647,"t":{"309":{"position":[[3050,7],[3300,7]]},"349":{"position":[[1423,5],[1494,5]]}}}],["66",{"_index":2450,"t":{"554":{"position":[[537,3]]}}}],["67.5",{"_index":309,"t":{"27":{"position":[[547,5]]}}}],["7",{"_index":415,"t":{"37":{"position":[[291,1]]},"107":{"position":[[1017,2]]},"134":{"position":[[327,2]]}}}],["725",{"_index":2653,"t":{"695":{"position":[[47,3]]}}}],["75",{"_index":322,"t":{"27":{"position":[[970,3],[1112,3]]}}}],["77.5",{"_index":317,"t":{"27":{"position":[[691,5]]}}}],["8",{"_index":416,"t":{"37":{"position":[[293,1]]},"81":{"position":[[225,1]]},"218":{"position":[[38,1]]},"309":{"position":[[679,1]]},"423":{"position":[[0,1]]},"581":{"position":[[388,1]]},"583":{"position":[[638,1]]}}}],["80",{"_index":1371,"t":{"208":{"position":[[2487,2]]},"250":{"position":[[831,2]]},"309":{"position":[[2534,4]]}}}],["8332",{"_index":1422,"t":{"224":{"position":[[362,7]]}}}],["835c",{"_index":2145,"t":{"427":{"position":[[508,4]]}}}],["8545",{"_index":1421,"t":{"224":{"position":[[283,4]]},"250":{"position":[[839,4]]}}}],["9",{"_index":307,"t":{"27":{"position":[[539,1],[964,1]]},"37":{"position":[[295,1]]},"57":{"position":[[107,4]]},"214":{"position":[[148,7]]},"232":{"position":[[429,7]]}}}],["90",{"_index":267,"t":{"27":{"position":[[0,3],[473,3]]},"125":{"position":[[359,3]]}}}],["9554",{"_index":696,"t":{"71":{"position":[[1867,4]]}}}],["9554/tcp",{"_index":697,"t":{"71":{"position":[[1887,8]]}}}],["9554/udp",{"_index":688,"t":{"71":{"position":[[1630,8]]}}}],["9]+).([0",{"_index":1399,"t":{"214":{"position":[[130,8],[139,8]]},"232":{"position":[[411,8],[420,8]]}}}],["9]+.[0",{"_index":564,"t":{"57":{"position":[[93,6],[100,6]]}}}],["9]{40",{"_index":633,"t":{"63":{"position":[[276,8]]},"79":{"position":[[244,8]]}}}],["abil",{"_index":2301,"t":{"487":{"position":[[1454,7]]}}}],["abov",{"_index":254,"t":{"25":{"position":[[327,5]]},"351":{"position":[[1730,6]]},"408":{"position":[[30,5]]},"454":{"position":[[112,5]]},"604":{"position":[[988,5],[1054,5]]},"631":{"position":[[959,5],[1024,5]]},"701":{"position":[[992,5],[1058,5]]}}}],["abreast",{"_index":2584,"t":{"608":{"position":[[282,7]]},"633":{"position":[[1455,7]]},"705":{"position":[[1421,7]]}}}],["absolut",{"_index":708,"t":{"71":{"position":[[2764,8]]},"238":{"position":[[1024,8]]},"331":{"position":[[13,10]]}}}],["accept",{"_index":863,"t":{"105":{"position":[[520,7]]},"186":{"position":[[20,8]]},"345":{"position":[[242,6]]},"550":{"position":[[660,8]]},"705":{"position":[[964,8]]}}}],["access",{"_index":210,"t":{"20":{"position":[[691,10]]},"168":{"position":[[41,6]]},"170":{"position":[[70,6],[239,6]]},"172":{"position":[[385,7],[423,6]]},"174":{"position":[[3,6],[138,6],[233,7],[440,7],[563,6],[648,7]]},"176":{"position":[[98,8],[1020,6]]},"178":{"position":[[0,9],[388,7]]},"180":{"position":[[40,6]]},"182":{"position":[[4,9]]},"189":{"position":[[76,6],[151,6],[484,7],[606,9],[768,6],[994,6],[1080,6]]},"191":{"position":[[497,6]]},"195":{"position":[[1299,6]]},"197":{"position":[[53,9]]},"204":{"position":[[6,7],[161,6],[212,7],[403,6]]},"208":{"position":[[149,9],[237,9]]},"218":{"position":[[354,9]]},"220":{"position":[[243,9]]},"268":{"position":[[112,9]]},"271":{"position":[[104,6],[874,6],[1013,6],[1099,6],[1283,6],[1682,6],[2024,6],[2195,6]]},"277":{"position":[[1223,6]]},"279":{"position":[[310,10]]},"309":{"position":[[2612,9],[2742,6],[3724,6],[4618,6],[4738,6],[4797,6],[4996,9],[5205,10],[5261,6]]},"315":{"position":[[160,6]]},"323":{"position":[[0,6]]},"327":{"position":[[1329,11]]},"329":{"position":[[1584,6],[2037,6]]},"349":{"position":[[756,6],[821,6],[1027,6]]},"357":{"position":[[221,6]]},"363":{"position":[[278,6],[340,6]]},"369":{"position":[[66,6],[426,10]]},"371":{"position":[[209,7],[353,6]]},"376":{"position":[[156,6],[449,6],[503,6]]},"380":{"position":[[398,6],[454,9]]},"392":{"position":[[486,10],[547,6]]},"398":{"position":[[107,6],[364,6],[520,6]]},"410":{"position":[[558,6]]},"429":{"position":[[150,6],[217,6]]},"446":{"position":[[159,6]]},"483":{"position":[[795,6]]},"485":{"position":[[177,6]]},"487":{"position":[[515,9]]},"495":{"position":[[480,6]]},"502":{"position":[[514,6]]},"514":{"position":[[1211,8],[2599,6]]},"518":{"position":[[453,6]]},"524":{"position":[[336,6]]},"526":{"position":[[231,6]]},"530":{"position":[[921,9]]},"545":{"position":[[63,6]]},"574":{"position":[[283,6]]},"594":{"position":[[236,6]]},"625":{"position":[[238,14]]},"649":{"position":[[198,6]]},"657":{"position":[[162,9]]},"663":{"position":[[83,7]]},"665":{"position":[[36,6]]},"673":{"position":[[241,10]]},"687":{"position":[[37,9]]}}}],["accord",{"_index":234,"t":{"23":{"position":[[230,10]]},"349":{"position":[[371,9]]},"410":{"position":[[706,9]]},"497":{"position":[[199,9]]}}}],["accordingli",{"_index":1111,"t":{"152":{"position":[[1834,12]]},"287":{"position":[[217,11]]}}}],["account",{"_index":1656,"t":{"309":{"position":[[4478,7]]},"323":{"position":[[75,8]]},"343":{"position":[[27,8],[62,8]]},"349":{"position":[[631,8]]},"374":{"position":[[29,8]]},"376":{"position":[[148,7],[518,8]]},"378":{"position":[[10,7],[163,8]]},"604":{"position":[[3119,8]]},"631":{"position":[[3060,8]]},"701":{"position":[[3088,8]]}}}],["account/stak",{"_index":2360,"t":{"510":{"position":[[261,16]]}}}],["accumul",{"_index":875,"t":{"107":{"position":[[670,11],[904,11]]},"109":{"position":[[112,11],[302,11]]},"134":{"position":[[97,11]]},"136":{"position":[[641,12],[839,11],[1034,11]]},"146":{"position":[[382,12]]}}}],["accuraci",{"_index":1965,"t":{"374":{"position":[[223,9]]}}}],["achiev",{"_index":2165,"t":{"434":{"position":[[27,8]]},"483":{"position":[[201,7]]},"579":{"position":[[263,8]]},"641":{"position":[[206,7]]}}}],["act",{"_index":2269,"t":{"483":{"position":[[4,4]]},"621":{"position":[[15,3]]},"695":{"position":[[91,3]]}}}],["action",{"_index":115,"t":{"14":{"position":[[157,8]]},"20":{"position":[[284,7]]},"49":{"position":[[7,7],[121,7]]},"51":{"position":[[5,6]]},"53":{"position":[[228,6],[432,6]]},"55":{"position":[[5,6]]},"57":{"position":[[654,6]]},"99":{"position":[[659,6],[673,7]]},"123":{"position":[[191,7]]},"129":{"position":[[105,7],[1384,7]]},"242":{"position":[[85,6]]},"345":{"position":[[398,7]]},"420":{"position":[[468,7],[813,7]]}}}],["actions/checkout@v3",{"_index":539,"t":{"53":{"position":[[168,19]]},"57":{"position":[[245,19],[409,19]]}}}],["activ",{"_index":66,"t":{"12":{"position":[[155,6]]},"20":{"position":[[982,8]]},"25":{"position":[[206,6]]},"77":{"position":[[84,8]]},"107":{"position":[[24,6],[56,7],[287,6]]},"123":{"position":[[157,8]]},"129":{"position":[[286,7],[311,6],[497,7]]},"131":{"position":[[260,6]]},"158":{"position":[[588,6]]},"275":{"position":[[239,10],[385,7]]},"277":{"position":[[557,8],[942,10],[1102,8]]},"325":{"position":[[151,8]]},"327":{"position":[[971,6]]},"355":{"position":[[30,7]]},"394":{"position":[[171,8],[283,10]]},"467":{"position":[[49,8]]},"474":{"position":[[199,8]]},"492":{"position":[[130,8]]},"499":{"position":[[348,6]]},"504":{"position":[[389,11]]},"518":{"position":[[408,10]]},"558":{"position":[[905,10]]},"574":{"position":[[638,6],[687,6]]},"576":{"position":[[802,7]]},"583":{"position":[[928,7]]},"604":{"position":[[574,10],[1025,7]]},"627":{"position":[[237,8]]},"631":{"position":[[545,10],[995,7]]},"653":{"position":[[117,9]]},"701":{"position":[[550,9],[1029,7]]}}}],["actor",{"_index":2640,"t":{"679":{"position":[[307,7]]}}}],["actual",{"_index":1212,"t":{"180":{"position":[[282,6]]},"406":{"position":[[583,6]]}}}],["ad",{"_index":154,"t":{"18":{"position":[[151,5]]},"39":{"position":[[133,2]]},"47":{"position":[[133,2]]},"125":{"position":[[383,6]]},"182":{"position":[[191,5]]},"189":{"position":[[233,5]]},"271":{"position":[[188,5]]},"293":{"position":[[302,6],[437,6]]},"530":{"position":[[1153,5]]},"621":{"position":[[162,6]]}}}],["add",{"_index":148,"t":{"18":{"position":[[68,3]]},"61":{"position":[[3,3]]},"189":{"position":[[293,4]]},"195":{"position":[[434,6],[898,3],[1006,6]]},"271":{"position":[[248,4],[701,3]]},"275":{"position":[[72,4]]},"277":{"position":[[251,4],[820,4],[1035,4]]},"323":{"position":[[131,3],[198,3]]},"331":{"position":[[1058,3]]},"349":{"position":[[1153,3],[1192,4]]},"351":{"position":[[977,3]]},"420":{"position":[[1021,3]]},"427":{"position":[[83,3],[284,3]]},"497":{"position":[[289,3]]},"514":{"position":[[1707,3]]},"520":{"position":[[224,3]]},"530":{"position":[[1197,3]]},"569":{"position":[[150,3]]},"677":{"position":[[220,3]]}}}],["addit",{"_index":1677,"t":{"315":{"position":[[326,8]]},"321":{"position":[[65,8]]},"410":{"position":[[433,10]]},"518":{"position":[[155,10]]},"541":{"position":[[362,10]]}}}],["addition",{"_index":1669,"t":{"309":{"position":[[5915,13]]}}}],["address",{"_index":228,"t":{"23":{"position":[[6,7],[76,7]]},"63":{"position":[[121,7],[145,7],[322,7]]},"73":{"position":[[77,7]]},"75":{"position":[[85,7]]},"81":{"position":[[165,7]]},"95":{"position":[[1291,8]]},"105":{"position":[[85,8],[389,8],[456,7]]},"109":{"position":[[157,7],[521,8],[574,8],[614,7],[715,10]]},"129":{"position":[[1527,8],[1986,8]]},"134":{"position":[[207,7],[1069,8]]},"136":{"position":[[1124,7]]},"138":{"position":[[121,7],[272,9],[357,8],[405,7],[497,7],[561,7],[698,7]]},"140":{"position":[[117,7],[369,8],[470,7]]},"142":{"position":[[106,7]]},"144":{"position":[[253,9],[338,8],[386,7],[478,7],[542,7],[679,7],[921,7],[1066,7]]},"146":{"position":[[249,8]]},"148":{"position":[[55,8],[391,7],[639,8],[728,7]]},"150":{"position":[[106,7]]},"152":{"position":[[288,7],[903,7],[1113,8],[1478,7],[1658,7],[2422,7]]},"158":{"position":[[138,7],[1135,7]]},"162":{"position":[[106,7]]},"166":{"position":[[727,7]]},"172":{"position":[[145,7]]},"180":{"position":[[292,8]]},"182":{"position":[[178,8]]},"191":{"position":[[161,7]]},"319":{"position":[[1513,7],[1793,7],[1964,7]]},"325":{"position":[[72,7],[271,7],[500,8],[564,7]]},"327":{"position":[[300,8]]},"329":{"position":[[1900,8]]},"367":{"position":[[458,7],[473,7],[493,9]]},"369":{"position":[[340,7]]},"497":{"position":[[256,9],[296,7],[723,9]]},"508":{"position":[[775,7]]},"510":{"position":[[184,8]]},"530":{"position":[[542,7]]},"543":{"position":[[485,7]]},"545":{"position":[[307,7],[357,7]]},"547":{"position":[[94,7]]},"556":{"position":[[79,8],[1114,7]]},"567":{"position":[[206,7],[256,7],[409,7],[759,8],[925,7],[958,7]]},"576":{"position":[[702,8],[753,8]]},"583":{"position":[[784,8],[826,8],[853,7]]},"598":{"position":[[339,7]]},"604":{"position":[[639,7],[883,7],[924,8],[946,7],[1121,7],[1972,7]]},"606":{"position":[[985,7],[1083,8]]},"610":{"position":[[352,7]]},"612":{"position":[[683,8]]},"631":{"position":[[610,7],[854,7],[895,8],[917,7],[1091,7],[1884,7]]},"633":{"position":[[893,7],[981,8]]},"637":{"position":[[66,7],[179,7],[199,7],[261,7],[401,8]]},"639":{"position":[[424,7],[608,8]]},"701":{"position":[[643,7],[887,7],[928,8],[950,7],[1126,7],[1921,7]]},"703":{"position":[[991,8],[1058,8]]},"705":{"position":[[77,7],[139,7],[246,8],[1337,8]]}}}],["adipisc",{"_index":6,"t":{"3":{"position":[[40,10]]},"7":{"position":[[160,10],[339,10],[518,10],[697,10],[876,10],[1055,10],[1234,10],[1413,10],[1592,10],[1771,10],[1950,10],[2129,10],[2308,10],[2487,10],[2666,10],[2845,10]]},"39":{"position":[[41,10]]},"47":{"position":[[41,10]]}}}],["adjust",{"_index":1192,"t":{"176":{"position":[[598,6]]},"287":{"position":[[189,6]]},"309":{"position":[[1894,6]]},"410":{"position":[[506,12]]},"487":{"position":[[1919,6]]},"514":{"position":[[1413,6]]}}}],["admin",{"_index":1162,"t":{"174":{"position":[[90,5]]},"206":{"position":[[266,5]]},"216":{"position":[[170,5]]},"224":{"position":[[64,5]]},"238":{"position":[[149,5]]},"248":{"position":[[87,5]]},"256":{"position":[[845,5]]},"258":{"position":[[87,5]]},"260":{"position":[[127,5]]},"576":{"position":[[41,5]]}}}],["admin/admin",{"_index":1946,"t":{"367":{"position":[[774,12]]}}}],["admin/password",{"_index":1947,"t":{"367":{"position":[[787,15]]}}}],["admin@dappnode.io",{"_index":1372,"t":{"208":{"position":[[2527,19]]},"252":{"position":[[189,19]]}}}],["administr",{"_index":1740,"t":{"323":{"position":[[269,14]]}}}],["admir",{"_index":2354,"t":{"508":{"position":[[954,6]]}}}],["adopt",{"_index":1225,"t":{"182":{"position":[[362,5]]},"469":{"position":[[97,9]]}}}],["adress",{"_index":2453,"t":{"556":{"position":[[257,9]]}}}],["advanc",{"_index":639,"t":{"63":{"position":[[371,8],[419,12]]},"83":{"position":[[228,8]]},"87":{"position":[[243,12]]},"176":{"position":[[836,10]]},"178":{"position":[[182,8]]},"309":{"position":[[4884,8],[5081,8]]},"349":{"position":[[1902,8],[2099,9]]},"367":{"position":[[986,9]]},"420":{"position":[[345,8]]},"469":{"position":[[69,12]]},"487":{"position":[[1566,8]]},"497":{"position":[[388,10]]},"499":{"position":[[314,8]]},"508":{"position":[[1212,8]]},"514":{"position":[[1171,8],[1190,8]]},"532":{"position":[[12,8]]},"681":{"position":[[193,8]]}}}],["advantag",{"_index":987,"t":{"125":{"position":[[981,9]]},"204":{"position":[[311,10]]},"281":{"position":[[31,10]]}}}],["advis",{"_index":1612,"t":{"307":{"position":[[220,6]]},"497":{"position":[[643,7]]}}}],["advisori",{"_index":2576,"t":{"606":{"position":[[304,13]]},"703":{"position":[[304,13]]}}}],["affect",{"_index":1131,"t":{"158":{"position":[[809,6]]},"228":{"position":[[52,7]]},"315":{"position":[[550,6]]},"526":{"position":[[327,6]]}}}],["afford",{"_index":2595,"t":{"619":{"position":[[125,10]]}}}],["ag",{"_index":827,"t":{"99":{"position":[[629,3]]}}}],["again",{"_index":869,"t":{"107":{"position":[[294,6]]},"140":{"position":[[749,6]]},"148":{"position":[[593,6],[1007,6]]},"152":{"position":[[828,6]]},"158":{"position":[[531,6],[984,5]]},"166":{"position":[[810,6]]},"309":{"position":[[5669,6]]},"327":{"position":[[1674,5]]},"343":{"position":[[217,5]]},"351":{"position":[[1614,6]]},"604":{"position":[[1863,6]]},"631":{"position":[[1775,6]]},"701":{"position":[[1812,6]]}}}],["against",{"_index":672,"t":{"71":{"position":[[692,7]]},"87":{"position":[[58,7]]},"136":{"position":[[796,7]]},"394":{"position":[[232,7]]},"495":{"position":[[459,7]]}}}],["ago",{"_index":915,"t":{"115":{"position":[[389,4]]}}}],["ahead",{"_index":2574,"t":{"604":{"position":[[2485,5]]},"631":{"position":[[2399,5]]},"701":{"position":[[2436,5]]}}}],["aid",{"_index":1486,"t":{"256":{"position":[[677,3]]}}}],["aim",{"_index":199,"t":{"20":{"position":[[469,4]]},"382":{"position":[[7,6]]},"550":{"position":[[38,4]]}}}],["air",{"_index":2009,"t":{"404":{"position":[[115,3],[140,3],[209,3],[269,3]]},"406":{"position":[[182,3],[199,3]]}}}],["airdrop",{"_index":237,"t":{"25":{"position":[[14,10]]}}}],["airstream",{"_index":2047,"t":{"406":{"position":[[872,9]]}}}],["al",{"_index":2208,"t":{"462":{"position":[[67,5]]}}}],["alcohol",{"_index":2065,"t":{"408":{"position":[[504,8]]}}}],["alert",{"_index":1103,"t":{"152":{"position":[[1332,5]]},"244":{"position":[[0,6],[678,5],[980,6]]},"319":{"position":[[698,6],[1411,5]]},"331":{"position":[[250,7]]},"371":{"position":[[742,6]]}}}],["alert('button",{"_index":35,"t":{"5":{"position":[[146,13]]}}}],["algorithm",{"_index":249,"t":{"25":{"position":[[257,9]]}}}],["align",{"_index":1624,"t":{"309":{"position":[[844,6]]}}}],["alik",{"_index":2513,"t":{"585":{"position":[[107,6]]}}}],["aliqua",{"_index":436,"t":{"39":{"position":[[117,7]]},"47":{"position":[[117,7]]}}}],["aliquam",{"_index":16,"t":{"3":{"position":[[133,7]]},"7":{"position":[[253,7],[432,7],[611,7],[790,7],[969,7],[1148,7],[1327,7],[1506,7],[1685,7],[1864,7],[2043,7],[2222,7],[2401,7],[2580,7],[2759,7],[2938,7]]}}}],["aliquip",{"_index":446,"t":{"39":{"position":[[200,7]]},"47":{"position":[[200,7]]}}}],["aliv",{"_index":1718,"t":{"319":{"position":[[1268,5]]}}}],["allnamedvolumesmountpoint",{"_index":661,"t":{"71":{"position":[[245,26],[2312,26],[2539,25]]}}}],["alloc",{"_index":269,"t":{"27":{"position":[[50,9],[2335,9]]},"29":{"position":[[120,9]]},"309":{"position":[[1504,8]]},"331":{"position":[[747,8]]},"337":{"position":[[923,9]]},"621":{"position":[[22,10]]}}}],["allow",{"_index":113,"t":{"14":{"position":[[120,6]]},"20":{"position":[[837,8]]},"59":{"position":[[121,5]]},"71":{"position":[[168,5],[275,5],[1943,5],[2125,5],[2342,5],[2580,5]]},"91":{"position":[[17,6]]},"113":{"position":[[549,6]]},"134":{"position":[[796,8]]},"176":{"position":[[686,6]]},"180":{"position":[[19,6]]},"195":{"position":[[269,5],[460,5],[792,5]]},"197":{"position":[[161,8]]},"220":{"position":[[53,7]]},"232":{"position":[[38,8]]},"238":{"position":[[0,6],[832,5]]},"246":{"position":[[256,8]]},"271":{"position":[[1436,5]]},"279":{"position":[[33,6],[516,6]]},"283":{"position":[[161,8]]},"285":{"position":[[33,6]]},"297":{"position":[[55,6]]},"299":{"position":[[156,6]]},"309":{"position":[[446,6],[1804,6],[2175,6],[2384,6],[3067,6],[3317,6],[4604,6],[4860,8]]},"315":{"position":[[190,8]]},"319":{"position":[[448,6]]},"349":{"position":[[917,5]]},"367":{"position":[[52,6]]},"420":{"position":[[1005,6]]},"442":{"position":[[382,8]]},"467":{"position":[[35,6]]},"502":{"position":[[234,8]]},"514":{"position":[[1400,5]]},"520":{"position":[[209,5]]},"541":{"position":[[404,6]]},"550":{"position":[[745,6]]},"563":{"position":[[115,6],[475,6],[620,6]]},"572":{"position":[[41,6]]},"574":{"position":[[35,6]]},"579":{"position":[[61,6],[151,8]]},"581":{"position":[[395,8]]},"602":{"position":[[1399,6]]},"608":{"position":[[26,6]]}}}],["along",{"_index":2569,"t":{"604":{"position":[[1593,5],[3017,5]]},"631":{"position":[[1505,5],[2958,5]]},"701":{"position":[[1542,5],[2986,5]]}}}],["alongsid",{"_index":1403,"t":{"216":{"position":[[179,9]]}}}],["alreadi",{"_index":884,"t":{"109":{"position":[[183,7]]},"136":{"position":[[1095,8]]},"152":{"position":[[1288,7],[1984,7]]},"172":{"position":[[255,8]]},"293":{"position":[[236,7]]},"309":{"position":[[4161,7],[5410,7]]},"327":{"position":[[2026,7]]},"343":{"position":[[7,7]]},"349":{"position":[[588,7]]},"386":{"position":[[30,7]]},"438":{"position":[[23,7]]},"454":{"position":[[227,7]]},"538":{"position":[[540,7]]},"637":{"position":[[380,7]]},"701":{"position":[[542,7]]},"705":{"position":[[225,7]]}}}],["altern",{"_index":1910,"t":{"349":{"position":[[656,14]]},"369":{"position":[[149,11],[481,14]]},"427":{"position":[[679,11]]},"497":{"position":[[548,11]]},"508":{"position":[[619,13]]}}}],["alway",{"_index":959,"t":{"123":{"position":[[291,6]]},"134":{"position":[[1029,6]]},"170":{"position":[[256,6]]},"176":{"position":[[1013,6]]},"178":{"position":[[396,6]]},"180":{"position":[[605,6]]},"271":{"position":[[1934,6]]},"323":{"position":[[398,6]]},"329":{"position":[[2721,6],[2953,6]]},"394":{"position":[[123,6],[334,6]]},"398":{"position":[[439,6]]},"400":{"position":[[250,6]]},"402":{"position":[[187,6]]},"406":{"position":[[855,6]]},"432":{"position":[[508,6]]},"450":{"position":[[586,6]]},"560":{"position":[[604,6]]},"583":{"position":[[1145,6]]},"598":{"position":[[677,6]]},"608":{"position":[[270,6]]},"633":{"position":[[1443,6]]},"679":{"position":[[169,6]]},"705":{"position":[[1409,6]]}}}],["amazon",{"_index":1671,"t":{"311":{"position":[[0,6],[68,7]]},"313":{"position":[[459,6]]},"349":{"position":[[303,7]]}}}],["ambient",{"_index":2082,"t":{"410":{"position":[[787,7],[877,7]]}}}],["amet",{"_index":4,"t":{"3":{"position":[[22,5],[174,4]]},"7":{"position":[[142,5],[294,4],[321,5],[473,4],[500,5],[652,4],[679,5],[831,4],[858,5],[1010,4],[1037,5],[1189,4],[1216,5],[1368,4],[1395,5],[1547,4],[1574,5],[1726,4],[1753,5],[1905,4],[1932,5],[2084,4],[2111,5],[2263,4],[2290,5],[2442,4],[2469,5],[2621,4],[2648,5],[2800,4],[2827,5],[2979,4]]},"39":{"position":[[23,5]]},"47":{"position":[[23,5]]}}}],["ami",{"_index":1672,"t":{"313":{"position":[[13,3],[237,4],[480,5]]},"315":{"position":[[83,3],[104,3],[351,3],[971,3]]},"339":{"position":[[21,3]]},"345":{"position":[[133,3]]}}}],["amount",{"_index":1683,"t":{"315":{"position":[[583,6]]},"349":{"position":[[1651,6]]},"408":{"position":[[533,6]]},"490":{"position":[[257,7]]},"508":{"position":[[720,6]]},"510":{"position":[[305,6]]},"556":{"position":[[809,6]]},"576":{"position":[[531,6],[671,6]]},"583":{"position":[[546,6],[740,6]]}}}],["amplifi",{"_index":1992,"t":{"398":{"position":[[142,7]]}}}],["analysi",{"_index":980,"t":{"125":{"position":[[729,8]]}}}],["and/or",{"_index":1762,"t":{"327":{"position":[[847,6]]},"412":{"position":[[196,6]]}}}],["android",{"_index":1261,"t":{"195":{"position":[[137,7],[168,7]]},"277":{"position":[[0,7],[31,7],[231,7]]}}}],["anim",{"_index":473,"t":{"39":{"position":[[426,4]]},"47":{"position":[[426,4]]}}}],["anonym",{"_index":1710,"t":{"319":{"position":[[1058,9]]},"465":{"position":[[155,9]]},"490":{"position":[[71,9]]}}}],["anoth",{"_index":999,"t":{"127":{"position":[[237,8]]},"166":{"position":[[719,7]]},"176":{"position":[[112,7]]},"329":{"position":[[1930,7]]},"343":{"position":[[174,7]]},"510":{"position":[[39,7]]},"514":{"position":[[2178,7]]},"528":{"position":[[592,7]]},"554":{"position":[[854,7]]},"602":{"position":[[1053,7]]},"629":{"position":[[744,7]]},"661":{"position":[[79,7]]},"699":{"position":[[699,7]]}}}],["anoym",{"_index":1751,"t":{"325":{"position":[[706,9]]}}}],["answer",{"_index":745,"t":{"91":{"position":[[531,6]]},"442":{"position":[[262,6]]}}}],["anybodi",{"_index":2530,"t":{"594":{"position":[[359,7]]}}}],["anymor",{"_index":1128,"t":{"158":{"position":[[685,8]]}}}],["anyon",{"_index":811,"t":{"97":{"position":[[304,6]]},"105":{"position":[[467,6]]},"309":{"position":[[4192,6]]},"572":{"position":[[48,6]]},"627":{"position":[[173,7]]},"683":{"position":[[182,6]]}}}],["anywher",{"_index":1281,"t":{"197":{"position":[[213,9]]}}}],["apart",{"_index":2593,"t":{"617":{"position":[[107,5]]}}}],["api",{"_index":1314,"t":{"208":{"position":[[612,3],[686,3],[781,6],[2960,6]]},"220":{"position":[[618,3],[692,3],[787,5]]},"224":{"position":[[330,3],[430,3]]},"260":{"position":[[420,3],[760,4],[803,3]]},"369":{"position":[[123,3]]}}}],["api_rpc_cons_p",{"_index":1893,"t":{"337":{"position":[[515,19]]}}}],["api_rpc_cons_sync",{"_index":1895,"t":{"337":{"position":[[677,21]]}}}],["api_rpc_exec_p",{"_index":1894,"t":{"337":{"position":[[596,19]]}}}],["api_rpc_exec_sync",{"_index":1896,"t":{"337":{"position":[[750,21]]}}}],["apm",{"_index":808,"t":{"97":{"position":[[194,3],[257,3],[332,3]]}}}],["app",{"_index":1262,"t":{"195":{"position":[[176,4],[279,3],[470,3],[527,3],[717,4],[802,3]]},"277":{"position":[[39,4],[239,4],[1021,4]]},"502":{"position":[[563,3]]},"545":{"position":[[144,3]]},"567":{"position":[[185,4]]},"569":{"position":[[193,3]]},"602":{"position":[[505,4]]},"633":{"position":[[440,3]]}}}],["appear",{"_index":1076,"t":{"142":{"position":[[144,7],[197,6]]},"150":{"position":[[144,7]]},"152":{"position":[[338,7],[1344,8],[1535,8],[2041,8]]},"158":{"position":[[78,8],[214,8]]},"162":{"position":[[144,7]]},"166":{"position":[[57,6]]},"248":{"position":[[35,10]]},"576":{"position":[[162,6]]},"583":{"position":[[164,6]]},"612":{"position":[[657,6]]},"639":{"position":[[582,6]]}}}],["appli",{"_index":1466,"t":{"248":{"position":[[328,7],[598,7],[832,7]]},"329":{"position":[[415,9],[1711,8]]},"367":{"position":[[1226,5]]},"408":{"position":[[132,7],[519,5]]},"558":{"position":[[445,5]]},"583":{"position":[[419,5]]}}}],["applic",{"_index":1304,"t":{"208":{"position":[[264,13],[587,12]]},"220":{"position":[[270,13],[593,12]]},"275":{"position":[[50,12],[339,12]]},"277":{"position":[[711,13]]},"279":{"position":[[553,12]]},"301":{"position":[[215,13]]},"309":{"position":[[1241,12]]},"311":{"position":[[220,12]]},"349":{"position":[[277,11]]},"367":{"position":[[212,12]]},"400":{"position":[[105,12]]},"472":{"position":[[93,12],[273,12]]},"504":{"position":[[117,12],[234,11],[650,12]]},"514":{"position":[[136,13]]},"671":{"position":[[68,12]]},"679":{"position":[[155,13]]}}}],["application/json",{"_index":2663,"t":{"705":{"position":[[998,17]]}}}],["approach",{"_index":1049,"t":{"134":{"position":[[850,8]]},"268":{"position":[[90,8]]},"351":{"position":[[78,11],[620,8]]},"402":{"position":[[39,10]]},"412":{"position":[[396,10]]},"532":{"position":[[381,8]]}}}],["approv",{"_index":1462,"t":{"246":{"position":[[76,7]]},"497":{"position":[[49,8]]},"639":{"position":[[507,7]]}}}],["approxim",{"_index":1625,"t":{"309":{"position":[[1391,13]]}}}],["apr",{"_index":305,"t":{"27":{"position":[[477,3],[902,3]]}}}],["aragon",{"_index":775,"t":{"95":{"position":[[70,6]]},"97":{"position":[[261,7]]},"99":{"position":[[617,6]]}}}],["architectur",{"_index":1328,"t":{"208":{"position":[[1063,16]]},"210":{"position":[[343,13]]},"236":{"position":[[46,13],[277,13],[314,12]]},"335":{"position":[[738,12]]}}}],["archiv",{"_index":638,"t":{"63":{"position":[[361,7]]},"83":{"position":[[218,7]]},"87":{"position":[[284,11]]},"538":{"position":[[383,7]]}}}],["area",{"_index":1918,"t":{"349":{"position":[[2080,4]]},"406":{"position":[[1150,4]]}}}],["arg",{"_index":2097,"t":{"418":{"position":[[131,5],[503,5]]},"420":{"position":[[637,3]]}}}],["argument",{"_index":2115,"t":{"418":{"position":[[849,10]]},"420":{"position":[[384,9],[415,8]]}}}],["aris",{"_index":1109,"t":{"152":{"position":[[1699,6]]},"309":{"position":[[5398,6]]},"319":{"position":[[281,6]]},"530":{"position":[[783,5]]}}}],["arm",{"_index":1450,"t":{"236":{"position":[[310,3]]},"438":{"position":[[208,3],[310,3]]}}}],["around",{"_index":514,"t":{"49":{"position":[[39,6]]},"125":{"position":[[295,6]]},"176":{"position":[[895,6]]},"309":{"position":[[1513,6],[1733,6]]},"604":{"position":[[2807,7]]},"631":{"position":[[2741,7]]},"701":{"position":[[2770,7]]}}}],["array",{"_index":73,"t":{"12":{"position":[[263,5]]},"67":{"position":[[82,5],[390,5]]},"83":{"position":[[133,5]]},"236":{"position":[[107,5]]},"238":{"position":[[106,6],[227,5],[585,5]]},"244":{"position":[[61,5]]},"250":{"position":[[71,5]]},"254":{"position":[[65,5]]},"256":{"position":[[352,5]]},"258":{"position":[[138,5]]}}}],["arriv",{"_index":960,"t":{"125":{"position":[[16,8]]}}}],["art",{"_index":2652,"t":{"693":{"position":[[157,4]]}}}],["articl",{"_index":137,"t":{"16":{"position":[[104,7]]}}}],["ask",{"_index":1904,"t":{"347":{"position":[[169,3]]},"448":{"position":[[80,6]]},"543":{"position":[[386,5]]},"560":{"position":[[650,3]]},"567":{"position":[[667,3],[1063,5]]},"604":{"position":[[1844,3]]},"631":{"position":[[1756,3]]},"701":{"position":[[1793,3]]}}}],["aspect",{"_index":2172,"t":{"438":{"position":[[1211,8]]},"481":{"position":[[363,7]]},"487":{"position":[[822,7]]},"576":{"position":[[914,8]]}}}],["aspir",{"_index":79,"t":{"12":{"position":[[340,9]]},"20":{"position":[[542,7]]}}}],["assess",{"_index":377,"t":{"29":{"position":[[550,6]]}}}],["asset",{"_index":821,"t":{"99":{"position":[[354,8]]},"465":{"position":[[68,5]]},"594":{"position":[[503,7]]}}}],["assist",{"_index":1756,"t":{"327":{"position":[[169,6]]},"450":{"position":[[555,10]]},"576":{"position":[[1175,11]]}}}],["associ",{"_index":892,"t":{"109":{"position":[[679,10]]},"208":{"position":[[2515,11]]},"238":{"position":[[315,10],[421,10]]},"252":{"position":[[177,11]]},"281":{"position":[[166,10]]},"291":{"position":[[273,10]]},"319":{"position":[[1442,10]]},"514":{"position":[[1065,10]]},"585":{"position":[[251,10]]}}}],["assum",{"_index":1719,"t":{"319":{"position":[[1374,6]]},"329":{"position":[[1220,8]]}}}],["assur",{"_index":2292,"t":{"483":{"position":[[1385,7]]}}}],["atmospher",{"_index":2019,"t":{"404":{"position":[[423,10]]}}}],["atop",{"_index":2242,"t":{"472":{"position":[[392,4]]}}}],["attach",{"_index":1136,"t":{"160":{"position":[[270,8]]},"406":{"position":[[477,8]]}}}],["attempt",{"_index":2328,"t":{"499":{"position":[[10,8]]},"528":{"position":[[333,7]]}}}],["attend",{"_index":2174,"t":{"442":{"position":[[112,8],[139,8],[156,8]]},"448":{"position":[[21,8]]}}}],["attent",{"_index":1409,"t":{"218":{"position":[[150,9]]},"321":{"position":[[354,10]]},"598":{"position":[[385,9]]}}}],["attest",{"_index":1794,"t":{"329":{"position":[[758,10]]}}}],["attract",{"_index":1555,"t":{"281":{"position":[[255,10]]}}}],["attribut",{"_index":2094,"t":{"416":{"position":[[307,11]]}}}],["audienc",{"_index":212,"t":{"20":{"position":[[713,9]]}}}],["audit",{"_index":2506,"t":{"581":{"position":[[280,10]]}}}],["augment",{"_index":356,"t":{"27":{"position":[[2150,7]]}}}],["aut",{"_index":451,"t":{"39":{"position":[[238,4]]},"47":{"position":[[238,4]]},"95":{"position":[[1605,3]]}}}],["authent",{"_index":551,"t":{"53":{"position":[[530,15]]},"347":{"position":[[219,14]]},"495":{"position":[[152,13]]}}}],["author",{"_index":153,"t":{"18":{"position":[[136,7]]},"208":{"position":[[2495,9]]},"210":{"position":[[557,6]]},"252":{"position":[[5,6]]},"254":{"position":[[13,7],[165,7]]},"495":{"position":[[220,6],[383,7]]}}}],["authors.yml",{"_index":155,"t":{"18":{"position":[[160,12]]}}}],["auto",{"_index":1878,"t":{"335":{"position":[[478,4],[570,4]]},"394":{"position":[[23,4],[180,4],[294,4]]},"518":{"position":[[234,4]]}}}],["auto_check.yml",{"_index":526,"t":{"53":{"position":[[10,14]]}}}],["autom",{"_index":512,"t":{"49":{"position":[[20,8]]},"59":{"position":[[45,8]]},"442":{"position":[[488,9]]},"659":{"position":[[237,10]]}}}],["automat",{"_index":353,"t":{"27":{"position":[[2111,14]]},"77":{"position":[[70,13]]},"83":{"position":[[25,13]]},"107":{"position":[[1074,13]]},"129":{"position":[[1901,13]]},"138":{"position":[[145,13],[198,13]]},"140":{"position":[[233,13]]},"144":{"position":[[810,9],[943,13]]},"146":{"position":[[275,9]]},"148":{"position":[[96,14]]},"166":{"position":[[774,13]]},"309":{"position":[[2116,13]]},"325":{"position":[[215,13]]},"367":{"position":[[130,14]]},"394":{"position":[[63,13]]},"420":{"position":[[481,13]]},"448":{"position":[[278,14]]},"483":{"position":[[113,13]]},"499":{"position":[[138,13]]},"558":{"position":[[543,13]]},"598":{"position":[[302,13]]},"635":{"position":[[445,14]]}}}],["autonom",{"_index":175,"t":{"20":{"position":[[39,10],[255,12]]},"504":{"position":[[540,10],[719,10]]}}}],["autosubscript",{"_index":1030,"t":{"129":{"position":[[1866,17]]}}}],["avail",{"_index":336,"t":{"27":{"position":[[1360,9],[1665,9],[1735,9]]},"29":{"position":[[206,9]]},"51":{"position":[[33,9]]},"77":{"position":[[162,9]]},"79":{"position":[[65,9]]},"81":{"position":[[58,9]]},"83":{"position":[[80,9]]},"99":{"position":[[81,9]]},"115":{"position":[[737,9]]},"166":{"position":[[377,10]]},"170":{"position":[[266,9]]},"228":{"position":[[271,9]]},"234":{"position":[[218,9]]},"238":{"position":[[132,9]]},"262":{"position":[[50,9]]},"309":{"position":[[35,9]]},"315":{"position":[[111,9]]},"333":{"position":[[385,9]]},"429":{"position":[[257,9],[567,9],[954,9]]},"432":{"position":[[65,9],[209,9]]},"438":{"position":[[368,10]]},"483":{"position":[[142,9]]},"487":{"position":[[447,9]]},"508":{"position":[[541,9]]},"514":{"position":[[1125,9],[1274,10],[2311,9]]},"516":{"position":[[66,9],[217,9]]},"524":{"position":[[50,9]]},"528":{"position":[[495,9],[680,9]]},"541":{"position":[[454,9],[574,9]]},"550":{"position":[[958,9]]},"563":{"position":[[170,9]]},"572":{"position":[[82,9]]},"629":{"position":[[198,10]]},"679":{"position":[[136,9]]}}}],["avalanch",{"_index":2231,"t":{"472":{"position":[[0,9]]},"474":{"position":[[27,9],[134,9],[167,9],[445,9]]}}}],["avalanche’",{"_index":2235,"t":{"472":{"position":[[210,11]]},"474":{"position":[[335,11]]}}}],["avatar",{"_index":611,"t":{"61":{"position":[[333,6]]},"248":{"position":[[859,8]]},"569":{"position":[[366,6]]}}}],["avax",{"_index":2247,"t":{"474":{"position":[[374,4],[475,4],[640,4],[683,4]]}}}],["averag",{"_index":943,"t":{"121":{"position":[[98,7]]},"123":{"position":[[8,7]]},"125":{"position":[[998,7]]}}}],["avoid",{"_index":1143,"t":{"166":{"position":[[768,5]]},"404":{"position":[[506,5]]}}}],["aw",{"_index":1544,"t":{"279":{"position":[[217,4]]},"309":{"position":[[57,3],[1796,3],[1930,3]]},"311":{"position":[[20,5]]},"313":{"position":[[79,3],[559,3]]},"315":{"position":[[29,4],[306,3],[391,3],[678,3],[789,3]]},"341":{"position":[[10,3]]},"343":{"position":[[23,3],[125,3],[230,3]]},"347":{"position":[[325,3]]},"349":{"position":[[627,3],[1824,3]]},"351":{"position":[[766,3]]}}}],["await",{"_index":133,"t":{"16":{"position":[[57,7]]}}}],["awar",{"_index":1228,"t":{"182":{"position":[[402,5]]}}}],["award",{"_index":350,"t":{"27":{"position":[[1927,7]]}}}],["away",{"_index":1084,"t":{"144":{"position":[[1211,5]]},"146":{"position":[[165,5]]},"291":{"position":[[306,5]]}}}],["aws.pem",{"_index":1926,"t":{"351":{"position":[[878,8],[1028,8]]}}}],["back",{"_index":1101,"t":{"152":{"position":[[765,4]]},"166":{"position":[[711,4]]},"319":{"position":[[2120,4]]},"329":{"position":[[903,4]]},"406":{"position":[[1362,4],[1383,4]]},"408":{"position":[[769,4]]},"438":{"position":[[916,4]]},"560":{"position":[[58,6]]}}}],["backend",{"_index":1427,"t":{"226":{"position":[[186,9]]}}}],["background",{"_index":1465,"t":{"248":{"position":[[302,10],[430,10]]}}}],["backtest",{"_index":975,"t":{"125":{"position":[[493,11]]}}}],["backup",{"_index":1193,"t":{"176":{"position":[[657,6]]},"208":{"position":[[1112,9]]},"210":{"position":[[373,6]]},"238":{"position":[[39,6],[391,7],[506,6],[1002,7],[1075,6]]},"398":{"position":[[455,6]]},"514":{"position":[[2283,7],[2487,7],[2513,8]]},"556":{"position":[[686,6]]},"558":{"position":[[677,6],[883,6]]},"560":{"position":[[274,6]]}}}],["balanc",{"_index":853,"t":{"105":{"position":[[33,7]]},"129":{"position":[[1042,7]]},"136":{"position":[[12,7]]},"204":{"position":[[358,7]]},"560":{"position":[[425,7]]},"604":{"position":[[980,7],[1046,7]]},"631":{"position":[[951,7],[1016,7]]},"701":{"position":[[984,7],[1050,7]]}}}],["balena",{"_index":2180,"t":{"444":{"position":[[58,6]]}}}],["ban",{"_index":1017,"t":{"129":{"position":[[1115,7],[1140,6],[1185,6]]},"140":{"position":[[688,6]]},"148":{"position":[[532,6],[946,6]]}}}],["bandwidth",{"_index":1830,"t":{"329":{"position":[[3265,9]]},"392":{"position":[[392,10],[935,10]]},"502":{"position":[[313,10]]}}}],["bar",{"_index":1158,"t":{"172":{"position":[[153,4]]},"191":{"position":[[169,3]]},"195":{"position":[[576,3],[655,4]]},"329":{"position":[[2168,3]]},"345":{"position":[[36,3]]},"367":{"position":[[481,4]]},"514":{"position":[[2066,4]]},"534":{"position":[[76,3]]}}}],["bare",{"_index":2557,"t":{"602":{"position":[[1066,6]]},"629":{"position":[[757,6]]},"699":{"position":[[712,6]]}}}],["barrier",{"_index":1557,"t":{"283":{"position":[[152,8]]},"299":{"position":[[218,8]]},"504":{"position":[[850,8]]},"627":{"position":[[143,7]]}}}],["base",{"_index":191,"t":{"20":{"position":[[340,5]]},"27":{"position":[[1224,5]]},"37":{"position":[[64,5]]},"57":{"position":[[835,5]]},"91":{"position":[[284,4]]},"93":{"position":[[260,4]]},"95":{"position":[[268,4]]},"99":{"position":[[849,4]]},"189":{"position":[[62,5]]},"195":{"position":[[82,5]]},"275":{"position":[[114,5]]},"281":{"position":[[68,5]]},"287":{"position":[[68,5]]},"303":{"position":[[413,5]]},"309":{"position":[[3545,5],[3893,5]]},"315":{"position":[[435,5]]},"349":{"position":[[519,5]]},"367":{"position":[[1068,5]]},"432":{"position":[[21,5]]},"438":{"position":[[48,5],[287,5],[314,5]]},"440":{"position":[[64,4]]},"442":{"position":[[409,5]]},"487":{"position":[[1942,5]]}}}],["bash",{"_index":2201,"t":{"454":{"position":[[387,4]]},"456":{"position":[[98,4]]},"460":{"position":[[321,4]]},"462":{"position":[[123,4]]}}}],["basi",{"_index":2394,"t":{"528":{"position":[[568,6]]}}}],["basic",{"_index":1615,"t":{"309":{"position":[[238,5],[273,5],[1092,5]]},"367":{"position":[[302,5]]},"410":{"position":[[80,5]]},"416":{"position":[[203,5],[301,5]]},"514":{"position":[[180,5],[346,5]]},"649":{"position":[[140,5]]},"685":{"position":[[90,6]]}}}],["bda6",{"_index":2143,"t":{"427":{"position":[[498,4]]}}}],["be",{"_index":123,"t":{"14":{"position":[[290,5]]},"125":{"position":[[969,5]]},"127":{"position":[[166,5]]},"152":{"position":[[1632,5]]},"321":{"position":[[190,5]]},"331":{"position":[[593,5]]},"359":{"position":[[29,5]]},"396":{"position":[[82,5]]},"404":{"position":[[144,5]]},"438":{"position":[[1123,5]]},"550":{"position":[[226,5]]},"563":{"position":[[291,5]]},"596":{"position":[[34,5]]},"625":{"position":[[166,5]]}}}],["beacon",{"_index":2096,"t":{"418":{"position":[[88,6],[118,6],[173,7],[712,6],[814,6]]},"514":{"position":[[2161,6]]},"538":{"position":[[326,6]]},"572":{"position":[[108,6]]},"610":{"position":[[90,6],[281,6]]},"612":{"position":[[504,6],[552,6]]},"627":{"position":[[445,6]]},"633":{"position":[[1122,6]]},"637":{"position":[[963,6]]},"639":{"position":[[53,6]]}}}],["beacon_chain",{"_index":1370,"t":{"208":{"position":[[2463,15]]},"250":{"position":[[736,14]]}}}],["beaconcha.in",{"_index":2580,"t":{"606":{"position":[[1217,12],[1301,12]]},"633":{"position":[[1177,12],[1261,12]]},"703":{"position":[[1279,12]]}}}],["becom",{"_index":868,"t":{"107":{"position":[[280,6]]},"125":{"position":[[1061,6]]},"136":{"position":[[673,8]]},"293":{"position":[[44,6]]},"474":{"position":[[490,6]]},"479":{"position":[[44,6]]},"481":{"position":[[375,6]]},"524":{"position":[[605,7]]},"558":{"position":[[827,8]]},"600":{"position":[[281,8]]},"697":{"position":[[170,8]]}}}],["bedrock",{"_index":2418,"t":{"538":{"position":[[452,7]]}}}],["bee",{"_index":2335,"t":{"502":{"position":[[243,3],[422,3]]},"506":{"position":[[99,3]]},"508":{"position":[[420,3],[739,3]]}}}],["befor",{"_index":593,"t":{"59":{"position":[[257,6]]},"79":{"position":[[41,6]]},"85":{"position":[[37,6]]},"101":{"position":[[251,6]]},"107":{"position":[[1114,6]]},"115":{"position":[[13,7]]},"134":{"position":[[823,6]]},"138":{"position":[[191,6],[413,6]]},"144":{"position":[[186,6],[394,6]]},"178":{"position":[[462,6]]},"208":{"position":[[1297,6],[1375,6],[1681,6],[1806,6]]},"232":{"position":[[31,6]]},"240":{"position":[[190,6]]},"242":{"position":[[57,6],[333,6],[438,6],[544,6],[825,6],[942,6],[1034,6],[1150,6]]},"283":{"position":[[191,6]]},"315":{"position":[[876,6]]},"329":{"position":[[1975,6]]},"351":{"position":[[1507,6]]},"392":{"position":[[0,6]]},"408":{"position":[[750,6]]},"454":{"position":[[0,6]]},"495":{"position":[[269,6]]},"499":{"position":[[355,6]]},"550":{"position":[[597,6]]},"554":{"position":[[417,6]]},"558":{"position":[[898,6]]},"569":{"position":[[828,6]]},"591":{"position":[[160,6]]},"608":{"position":[[110,6]]},"633":{"position":[[682,6]]},"637":{"position":[[74,6]]},"649":{"position":[[73,6]]}}}],["begin",{"_index":343,"t":{"27":{"position":[[1682,10]]},"146":{"position":[[74,5]]},"355":{"position":[[99,5]]},"450":{"position":[[257,5]]},"576":{"position":[[377,9]]},"623":{"position":[[192,5]]}}}],["beginn",{"_index":2643,"t":{"681":{"position":[[178,8]]}}}],["behalf",{"_index":2448,"t":{"554":{"position":[[467,6]]}}}],["behavior",{"_index":996,"t":{"127":{"position":[[62,9]]},"131":{"position":[[110,8]]},"329":{"position":[[2490,8]]},"514":{"position":[[1963,9]]},"655":{"position":[[112,8]]}}}],["behind",{"_index":1814,"t":{"329":{"position":[[1828,6]]}}}],["belong",{"_index":872,"t":{"107":{"position":[[435,6]]},"238":{"position":[[1264,7]]},"250":{"position":[[630,7]]},"319":{"position":[[1588,6]]},"602":{"position":[[1358,9]]}}}],["below",{"_index":1106,"t":{"152":{"position":[[1401,5],[2098,5]]},"195":{"position":[[76,5]]},"222":{"position":[[215,6]]},"224":{"position":[[191,6]]},"236":{"position":[[232,6]]},"256":{"position":[[477,6]]},"260":{"position":[[169,5]]},"349":{"position":[[1225,6]]},"429":{"position":[[238,5]]},"454":{"position":[[153,5]]},"567":{"position":[[563,6]]},"600":{"position":[[369,6]]},"627":{"position":[[328,6]]},"671":{"position":[[175,5]]}}}],["beneath",{"_index":1989,"t":{"398":{"position":[[0,7]]}}}],["benefici",{"_index":2266,"t":{"481":{"position":[[134,11]]}}}],["benefit",{"_index":1554,"t":{"281":{"position":[[218,8]]},"392":{"position":[[728,9]]},"467":{"position":[[293,8]]},"550":{"position":[[99,7]]},"572":{"position":[[58,7]]},"594":{"position":[[37,8],[125,7],[413,7]]}}}],["best",{"_index":1040,"t":{"134":{"position":[[496,4]]},"189":{"position":[[441,4]]},"204":{"position":[[461,4]]},"277":{"position":[[93,4],[299,4]]},"309":{"position":[[136,4]]},"400":{"position":[[425,4]]},"406":{"position":[[130,4]]},"436":{"position":[[126,4]]},"438":{"position":[[144,4],[402,4]]},"487":{"position":[[1384,4]]},"528":{"position":[[556,4]]},"554":{"position":[[953,4]]},"576":{"position":[[299,4]]},"615":{"position":[[235,4]]},"665":{"position":[[4,4]]}}}],["besu",{"_index":1780,"t":{"329":{"position":[[251,6]]},"543":{"position":[[158,5]]},"552":{"position":[[159,5]]},"565":{"position":[[158,5]]},"602":{"position":[[213,5]]}}}],["beta",{"_index":1302,"t":{"208":{"position":[[81,6]]},"216":{"position":[[250,5]]}}}],["better",{"_index":1568,"t":{"289":{"position":[[11,6]]},"291":{"position":[[379,6],[468,6]]},"307":{"position":[[266,6]]},"331":{"position":[[740,6],[841,6]]},"394":{"position":[[219,6]]},"667":{"position":[[125,6]]}}}],["between",{"_index":143,"t":{"16":{"position":[[193,7]]},"125":{"position":[[638,7],[927,7]]},"197":{"position":[[123,7]]},"319":{"position":[[952,7]]},"392":{"position":[[628,7]]},"408":{"position":[[140,7]]},"442":{"position":[[834,7]]},"514":{"position":[[1594,7]]},"530":{"position":[[193,7]]},"554":{"position":[[183,7]]},"569":{"position":[[602,7]]},"574":{"position":[[74,7]]},"576":{"position":[[471,7]]}}}],["beyond",{"_index":1031,"t":{"131":{"position":[[0,6]]},"487":{"position":[[1724,6]]},"502":{"position":[[394,6]]}}}],["big",{"_index":941,"t":{"121":{"position":[[24,3]]},"125":{"position":[[1198,3]]},"293":{"position":[[538,3]]},"406":{"position":[[1266,3]]}}}],["bigger",{"_index":991,"t":{"125":{"position":[[1079,6],[1101,6]]}}}],["bin",{"_index":2366,"t":{"514":{"position":[[838,5],[992,5]]}}}],["bio",{"_index":2074,"t":{"410":{"position":[[501,4],[576,4]]}}}],["bitcoin",{"_index":1401,"t":{"216":{"position":[[61,7]]},"224":{"position":[[288,7],[317,7],[391,7],[521,9]]},"256":{"position":[[536,8]]},"465":{"position":[[0,8],[219,7]]},"467":{"position":[[10,7],[77,7],[271,7]]},"469":{"position":[[139,7],[388,7],[482,7]]}}}],["bitcoin.dnp.dappnode.eth",{"_index":1323,"t":{"208":{"position":[[899,27]]},"230":{"position":[[319,27]]}}}],["bitcoin’",{"_index":2222,"t":{"469":{"position":[[0,9]]}}}],["bl",{"_index":1066,"t":{"138":{"position":[[342,3]]},"144":{"position":[[323,3]]},"337":{"position":[[299,3],[357,3],[421,3],[499,3]]},"705":{"position":[[418,3]]}}}],["black",{"_index":1468,"t":{"248":{"position":[[550,7]]}}}],["blank",{"_index":2351,"t":{"508":{"position":[[642,5]]}}}],["blkid",{"_index":2141,"t":{"427":{"position":[[372,5]]}}}],["block",{"_index":603,"t":{"61":{"position":[[185,6]]},"69":{"position":[[85,6]]},"105":{"position":[[216,5],[344,6],[364,5]]},"107":{"position":[[506,5],[599,5]]},"111":{"position":[[350,5]]},"113":{"position":[[185,5]]},"115":{"position":[[832,6]]},"121":{"position":[[131,6],[285,6],[375,5],[469,5]]},"123":{"position":[[26,5],[210,5]]},"125":{"position":[[89,6],[143,6],[255,7],[332,6],[436,6],[831,6]]},"129":{"position":[[418,5],[553,5],[644,5],[1241,5],[1467,5],[1589,5],[1663,5]]},"131":{"position":[[171,6]]},"134":{"position":[[128,5],[671,5],[740,5],[1158,6]]},"136":{"position":[[376,5],[574,5]]},"138":{"position":[[184,6]]},"140":{"position":[[641,5]]},"142":{"position":[[182,6]]},"144":{"position":[[982,6],[1176,6]]},"146":{"position":[[51,5],[350,6]]},"148":{"position":[[482,5],[899,5]]},"156":{"position":[[212,5]]},"160":{"position":[[349,6]]},"293":{"position":[[482,6]]},"329":{"position":[[3037,5]]},"499":{"position":[[152,8]]},"581":{"position":[[444,5]]},"600":{"position":[[212,5]]},"602":{"position":[[1432,6],[1473,6],[1623,6]]},"604":{"position":[[285,6]]},"621":{"position":[[119,7]]},"627":{"position":[[266,5]]},"631":{"position":[[249,6]]},"639":{"position":[[554,6]]},"701":{"position":[[248,6]]}}}],["blockchain",{"_index":206,"t":{"20":{"position":[[640,10]]},"174":{"position":[[165,10]]},"208":{"position":[[2804,14]]},"224":{"position":[[41,10]]},"256":{"position":[[502,10],[513,10],[1107,13]]},"297":{"position":[[265,10]]},"392":{"position":[[201,10],[291,11]]},"438":{"position":[[669,10],[777,10],[816,10],[1072,10]]},"450":{"position":[[414,10]]},"465":{"position":[[105,10]]},"467":{"position":[[182,11]]},"469":{"position":[[181,10]]},"472":{"position":[[121,10],[302,10]]},"477":{"position":[[30,11],[133,10]]},"479":{"position":[[113,10]]},"504":{"position":[[347,10],[766,10],[813,10]]},"508":{"position":[[459,10]]},"516":{"position":[[143,10],[485,11]]},"518":{"position":[[667,11]]},"567":{"position":[[1482,10]]},"594":{"position":[[216,10]]},"610":{"position":[[385,11]]},"621":{"position":[[181,11]]},"623":{"position":[[111,11]]},"671":{"position":[[89,10],[147,10]]},"675":{"position":[[4,10],[242,10]]},"677":{"position":[[79,10],[134,11]]},"679":{"position":[[100,10]]},"693":{"position":[[22,10]]},"701":{"position":[[268,11]]}}}],["blockchain'",{"_index":2377,"t":{"516":{"position":[[585,12]]}}}],["blockchain_data",{"_index":700,"t":{"71":{"position":[[2068,15],[2296,15]]}}}],["blockswap",{"_index":2526,"t":{"594":{"position":[[96,9]]}}}],["blog",{"_index":18,"t":{"5":{"position":[[0,4],[111,4]]},"7":{"position":[[35,4],[87,4]]},"18":{"position":[[11,8],[48,4],[107,4],[131,4],[177,4],[286,4],[334,4],[356,4],[408,5],[450,5]]}}}],["blow",{"_index":2049,"t":{"406":{"position":[[1066,7]]}}}],["board",{"_index":2042,"t":{"406":{"position":[[499,5],[1103,5]]}}}],["boast",{"_index":2496,"t":{"574":{"position":[[677,6]]}}}],["boolean",{"_index":649,"t":{"67":{"position":[[302,7],[414,7]]},"77":{"position":[[230,7]]},"85":{"position":[[73,7]]},"91":{"position":[[453,9],[511,9],[597,9],[659,9],[690,9],[734,9]]},"93":{"position":[[429,9],[487,9],[795,9],[867,9],[898,9],[942,9]]},"95":{"position":[[437,9],[495,9],[1619,9],[1758,9],[1789,9],[1833,12]]},"99":{"position":[[1018,9],[1076,9],[1107,9],[1151,12]]},"234":{"position":[[158,7],[258,7]]}}}],["boost",{"_index":1099,"t":{"152":{"position":[[680,6],[1164,5]]},"329":{"position":[[369,5]]},"543":{"position":[[254,5]]},"552":{"position":[[255,5]]},"565":{"position":[[254,5]]},"602":{"position":[[1308,5],[1318,5]]},"608":{"position":[[16,6]]}}}],["boot",{"_index":2077,"t":{"410":{"position":[[609,8]]},"444":{"position":[[122,4]]},"446":{"position":[[145,4],[170,4],[327,4],[363,4]]},"657":{"position":[[132,7]]},"687":{"position":[[4,7]]}}}],["borderless",{"_index":2218,"t":{"465":{"position":[[298,10]]}}}],["bot",{"_index":1653,"t":{"309":{"position":[[4030,3],[4181,3],[4436,3],[5838,4]]},"323":{"position":[[215,3]]},"327":{"position":[[393,3]]},"347":{"position":[[109,3],[253,4],[430,3]]},"351":{"position":[[103,3],[318,4],[476,3],[490,3],[1750,4]]}}}],["bot'",{"_index":1654,"t":{"309":{"position":[[4208,5]]},"351":{"position":[[244,5]]}}}],["botfath",{"_index":1922,"t":{"351":{"position":[[282,10]]}}}],["botfather'",{"_index":1903,"t":{"347":{"position":[[143,11]]}}}],["both",{"_index":597,"t":{"61":{"position":[[106,4]]},"111":{"position":[[164,4]]},"176":{"position":[[455,4]]},"197":{"position":[[376,4]]},"204":{"position":[[500,4]]},"329":{"position":[[2852,4]]},"363":{"position":[[172,4]]},"376":{"position":[[364,4],[459,4]]},"408":{"position":[[442,4]]},"483":{"position":[[805,4]]},"514":{"position":[[259,4],[1153,4],[1934,4]]},"563":{"position":[[627,4]]},"627":{"position":[[31,4]]}}}],["bottoken",{"_index":1917,"t":{"349":{"position":[[2059,8]]}}}],["bottom",{"_index":2033,"t":{"406":{"position":[[363,6],[1345,6]]}}}],["bought",{"_index":1600,"t":{"303":{"position":[[7,6]]},"386":{"position":[[7,6]]}}}],["box",{"_index":2609,"t":{"633":{"position":[[288,3]]},"705":{"position":[[724,3]]}}}],["brain",{"_index":1071,"t":{"140":{"position":[[30,5]]},"148":{"position":[[196,6]]},"152":{"position":[[1965,6]]},"158":{"position":[[1159,6]]},"329":{"position":[[2264,6]]}}}],["branch",{"_index":533,"t":{"53":{"position":[[96,9]]},"57":{"position":[[56,9],[634,6]]}}}],["breach",{"_index":2322,"t":{"495":{"position":[[509,9]]}}}],["break",{"_index":1351,"t":{"208":{"position":[[1977,6]]},"244":{"position":[[844,6]]},"483":{"position":[[289,5]]}}}],["bridg",{"_index":2412,"t":{"538":{"position":[[263,6]]},"594":{"position":[[475,7]]}}}],["brief",{"_index":1334,"t":{"208":{"position":[[1228,6]]},"240":{"position":[[121,6]]},"406":{"position":[[970,5]]}}}],["briefli",{"_index":1406,"t":{"218":{"position":[[55,7]]}}}],["bring",{"_index":2279,"t":{"483":{"position":[[664,6]]},"594":{"position":[[27,5]]},"604":{"position":[[896,6]]},"631":{"position":[[867,6]]},"701":{"position":[[900,6]]}}}],["broadcast",{"_index":2587,"t":{"612":{"position":[[352,11]]},"637":{"position":[[804,11]]},"705":{"position":[[1203,12]]}}}],["broader",{"_index":2508,"t":{"581":{"position":[[408,7]]}}}],["broadli",{"_index":2402,"t":{"532":{"position":[[289,7]]}}}],["broken",{"_index":2549,"t":{"600":{"position":[[357,6]]},"627":{"position":[[316,6]]}}}],["brows",{"_index":2296,"t":{"487":{"position":[[646,8],[703,8]]},"604":{"position":[[2935,6]]},"631":{"position":[[2876,6]]},"701":{"position":[[2904,6]]}}}],["browser",{"_index":1156,"t":{"172":{"position":[[96,8]]},"191":{"position":[[104,7]]},"195":{"position":[[1288,7]]},"277":{"position":[[1212,7]]},"305":{"position":[[164,7]]},"327":{"position":[[1806,8]]},"355":{"position":[[59,7]]},"357":{"position":[[266,8]]},"361":{"position":[[14,8]]},"367":{"position":[[386,7]]},"661":{"position":[[68,7]]}}}],["bu",{"_index":2479,"t":{"569":{"position":[[347,2]]}}}],["budget",{"_index":1689,"t":{"315":{"position":[[1047,6]]}}}],["buffer",{"_index":1855,"t":{"333":{"position":[[521,7]]}}}],["bug",{"_index":1390,"t":{"208":{"position":[[3169,7]]},"210":{"position":[[714,4]]}}}],["build",{"_index":109,"t":{"14":{"position":[[43,5]]},"53":{"position":[[123,6]]},"55":{"position":[[12,6]]},"57":{"position":[[146,5],[187,5],[298,5]]},"61":{"position":[[296,5]]},"89":{"position":[[69,6]]},"93":{"position":[[4,5],[29,5],[114,5],[174,5],[215,5],[642,5]]},"95":{"position":[[1402,5]]},"97":{"position":[[142,6]]},"99":{"position":[[238,5],[244,5]]},"236":{"position":[[0,5]]},"311":{"position":[[203,5]]},"416":{"position":[[101,6]]},"418":{"position":[[102,6],[477,6],[843,5]]},"442":{"position":[[86,5]]},"472":{"position":[[386,5]]}}}],["builder",{"_index":2562,"t":{"602":{"position":[[1480,9]]}}}],["buildx",{"_index":1447,"t":{"236":{"position":[[75,6]]}}}],["built",{"_index":1601,"t":{"303":{"position":[[84,5]]},"414":{"position":[[22,5]]},"487":{"position":[[233,5]]}}}],["bump",{"_index":528,"t":{"53":{"position":[[31,4],[235,4]]}}}],["bunch",{"_index":2305,"t":{"487":{"position":[[1983,5]]}}}],["bundl",{"_index":1453,"t":{"238":{"position":[[241,7]]},"514":{"position":[[459,7]]}}}],["burn",{"_index":2178,"t":{"444":{"position":[[0,4]]},"446":{"position":[[6,7]]}}}],["button",{"_index":32,"t":{"5":{"position":[[123,7]]},"109":{"position":[[420,6]]},"152":{"position":[[84,7],[125,7],[821,6]]},"164":{"position":[[43,6]]},"166":{"position":[[35,7]]},"189":{"position":[[364,7]]},"191":{"position":[[312,6]]},"195":{"position":[[888,6],[1031,6]]},"271":{"position":[[319,6]]},"277":{"position":[[805,7]]},"327":{"position":[[457,6]]},"349":{"position":[[1218,6],[2371,7]]},"351":{"position":[[752,6]]},"374":{"position":[[252,7]]},"376":{"position":[[209,6]]},"378":{"position":[[129,6]]},"510":{"position":[[350,7]]},"604":{"position":[[2883,6]]},"606":{"position":[[1314,6]]},"612":{"position":[[74,6],[211,6]]},"631":{"position":[[2817,6]]},"633":{"position":[[1274,6]]},"637":{"position":[[526,6],[663,6]]},"639":{"position":[[347,6]]},"701":{"position":[[2846,6]]},"703":{"position":[[1292,6]]}}}],["bypass",{"_index":1291,"t":{"202":{"position":[[113,6]]},"281":{"position":[[126,6]]},"499":{"position":[[188,6]]}}}],["byte",{"_index":1849,"t":{"333":{"position":[[265,5],[398,5],[459,5],[532,5],[594,5],[898,6],[965,5],[1044,5]]}}}],["bzz",{"_index":1296,"t":{"206":{"position":[[119,3]]},"502":{"position":[[183,3],[273,3],[357,3]]},"508":{"position":[[867,3]]},"510":{"position":[[131,3],[318,4]]}}}],["c",{"_index":829,"t":{"99":{"position":[[721,1]]}}}],["cabl",{"_index":1958,"t":{"369":{"position":[[772,6]]},"406":{"position":[[471,5]]},"446":{"position":[[466,5]]}}}],["cach",{"_index":1851,"t":{"333":{"position":[[317,5],[577,6]]}}}],["cadvisor",{"_index":1869,"t":{"333":{"position":[[1167,8]]}}}],["cadvisor_version_info",{"_index":1868,"t":{"333":{"position":[[1122,22]]}}}],["calcul",{"_index":901,"t":{"113":{"position":[[409,12]]}}}],["call",{"_index":908,"t":{"113":{"position":[[687,6]]},"129":{"position":[[1817,7],[2057,7]]},"406":{"position":[[192,6]]},"606":{"position":[[747,6]]},"703":{"position":[[747,6]]}}}],["came",{"_index":1842,"t":{"331":{"position":[[261,4]]},"667":{"position":[[17,4]]}}}],["can",{"_index":2031,"t":{"406":{"position":[[261,4]]}}}],["can't",{"_index":1253,"t":{"189":{"position":[[988,5]]},"271":{"position":[[1007,5]]},"319":{"position":[[201,5],[215,5],[342,5]]},"325":{"position":[[577,5]]},"331":{"position":[[334,5]]},"363":{"position":[[272,5]]},"369":{"position":[[577,5]]},"530":{"position":[[2,5]]}}}],["canari",{"_index":2602,"t":{"625":{"position":[[52,6]]}}}],["canyouseem",{"_index":1955,"t":{"369":{"position":[[302,14]]}}}],["cap",{"_index":695,"t":{"71":{"position":[[1811,5]]}}}],["capabl",{"_index":1070,"t":{"138":{"position":[[714,10]]},"144":{"position":[[695,10]]},"178":{"position":[[133,13]]},"204":{"position":[[410,11]]},"311":{"position":[[171,13]]},"472":{"position":[[222,12]]},"483":{"position":[[731,13],[1059,12]]}}}],["capit",{"_index":2489,"t":{"572":{"position":[[383,7]]}}}],["captur",{"_index":1579,"t":{"293":{"position":[[79,8]]}}}],["card",{"_index":1100,"t":{"152":{"position":[[687,4]]},"248":{"position":[[360,4],[630,4],[892,4]]},"303":{"position":[[272,4]]},"427":{"position":[[62,4]]},"612":{"position":[[99,5]]},"637":{"position":[[551,5]]}}}],["care",{"_index":2037,"t":{"406":{"position":[[421,7]]},"408":{"position":[[594,7]]},"596":{"position":[[178,4]]},"606":{"position":[[444,4]]},"703":{"position":[[444,4]]}}}],["carefuli",{"_index":2044,"t":{"406":{"position":[[764,8]]}}}],["carefulli",{"_index":1082,"t":{"144":{"position":[[175,10]]},"406":{"position":[[340,9]]},"408":{"position":[[701,10]]},"438":{"position":[[502,9]]}}}],["carri",{"_index":59,"t":{"12":{"position":[[77,5]]},"208":{"position":[[2189,7]]},"246":{"position":[[364,7]]},"695":{"position":[[186,7]]}}}],["case",{"_index":682,"t":{"71":{"position":[[993,4]]},"172":{"position":[[401,6]]},"295":{"position":[[163,6]]},"309":{"position":[[811,4],[4960,4]]},"329":{"position":[[2426,4],[3691,6]]},"343":{"position":[[155,4]]},"420":{"position":[[1102,4]]},"427":{"position":[[3,4]]},"452":{"position":[[64,5]]},"514":{"position":[[930,4]]},"524":{"position":[[581,4]]}}}],["cat",{"_index":1971,"t":{"380":{"position":[[561,3]]}}}],["catch",{"_index":950,"t":{"123":{"position":[[74,5],[174,5]]},"438":{"position":[[944,5]]}}}],["categor",{"_index":1731,"t":{"321":{"position":[[196,11]]},"532":{"position":[[297,11]]}}}],["categori",{"_index":1059,"t":{"136":{"position":[[663,9]]},"208":{"position":[[2770,13]]},"210":{"position":[[611,10]]},"256":{"position":[[0,10],[98,10],[186,10],[273,8]]},"331":{"position":[[651,11]]},"367":{"position":[[1032,11]]}}}],["caus",{"_index":1041,"t":{"134":{"position":[[554,6]]},"402":{"position":[[427,5]]},"406":{"position":[[41,5]]}}}],["caution",{"_index":493,"t":{"41":{"position":[[373,7]]},"95":{"position":[[1713,8]]},"99":{"position":[[765,8]]},"115":{"position":[[269,7]]},"156":{"position":[[507,7]]},"160":{"position":[[184,7]]},"166":{"position":[[628,7]]},"172":{"position":[[264,7]]},"178":{"position":[[339,7],[360,7]]},"182":{"position":[[300,7]]},"191":{"position":[[414,7],[548,7]]},"271":{"position":[[2254,7]]},"305":{"position":[[203,7]]},"325":{"position":[[421,7]]},"376":{"position":[[314,7]]},"398":{"position":[[431,7]]},"402":{"position":[[484,8]]},"497":{"position":[[659,7]]},"518":{"position":[[720,7],[796,7]]},"526":{"position":[[288,7]]},"567":{"position":[[878,7]]}}}],["caveat",{"_index":2386,"t":{"524":{"position":[[505,6]]}}}],["censor",{"_index":1584,"t":{"293":{"position":[[474,7]]}}}],["censorship",{"_index":2330,"t":{"502":{"position":[[105,10]]}}}],["center",{"_index":1581,"t":{"293":{"position":[[284,7]]},"408":{"position":[[572,6]]}}}],["central",{"_index":185,"t":{"20":{"position":[[219,11]]},"27":{"position":[[436,8],[508,8],[584,8],[657,8],[734,8],[861,8],[933,8],[1005,8],[1078,8],[1151,8]]},"125":{"position":[[744,11],[1029,12]]},"581":{"position":[[305,11]]}}}],["ceremoni",{"_index":2459,"t":{"558":{"position":[[523,8]]}}}],["certain",{"_index":970,"t":{"125":{"position":[[316,7]]},"168":{"position":[[192,7]]},"271":{"position":[[1602,7]]},"438":{"position":[[1064,7]]},"518":{"position":[[301,7]]}}}],["cgnat",{"_index":1815,"t":{"329":{"position":[[1837,6]]}}}],["ch",{"_index":781,"t":{"95":{"position":[[613,4]]}}}],["chain",{"_index":114,"t":{"14":{"position":[[131,5],[151,5],[226,5]]},"156":{"position":[[387,6]]},"166":{"position":[[499,6]]},"174":{"position":[[202,6]]},"208":{"position":[[807,8]]},"210":{"position":[[180,5]]},"329":{"position":[[1255,5]]},"371":{"position":[[559,5]]},"418":{"position":[[95,6],[125,5],[181,5],[719,5],[821,5]]},"477":{"position":[[68,5]]},"495":{"position":[[35,6]]},"506":{"position":[[18,6],[150,6]]},"508":{"position":[[194,6]]},"510":{"position":[[69,6]]},"514":{"position":[[2168,5]]},"532":{"position":[[172,5],[222,6]]},"536":{"position":[[147,6],[200,6]]},"572":{"position":[[115,6]]},"602":{"position":[[1584,5]]},"604":{"position":[[299,6]]},"610":{"position":[[97,6]]},"612":{"position":[[511,5],[559,5]]},"615":{"position":[[72,6],[104,5]]},"617":{"position":[[56,5],[282,5]]},"619":{"position":[[93,5]]},"621":{"position":[[206,6]]},"625":{"position":[[7,5],[59,5]]},"627":{"position":[[22,5],[117,5],[411,5],[452,5]]},"629":{"position":[[78,5],[144,6]]},"631":{"position":[[270,6],[2562,5]]},"633":{"position":[[180,5],[227,5],[1129,5]]},"635":{"position":[[97,6],[230,5],[306,5],[421,5]]},"637":{"position":[[341,5],[481,5],[970,5]]},"639":{"position":[[60,6],[217,5]]},"677":{"position":[[63,5],[112,5],[301,5]]},"697":{"position":[[337,5]]}}}],["chain'",{"_index":2585,"t":{"610":{"position":[[288,7]]}}}],["chain/consensu",{"_index":2414,"t":{"538":{"position":[[333,15]]}}}],["chain/lukso",{"_index":1776,"t":{"329":{"position":[[80,11]]}}}],["chainlist",{"_index":2638,"t":{"677":{"position":[[162,10],[315,10]]}}}],["challeng",{"_index":1663,"t":{"309":{"position":[[5382,10]]}}}],["champion",{"_index":2257,"t":{"477":{"position":[[175,9]]}}}],["chanc",{"_index":964,"t":{"125":{"position":[[212,6],[407,7],[465,6]]},"303":{"position":[[255,6]]},"380":{"position":[[381,6]]}}}],["chang",{"_index":579,"t":{"57":{"position":[[751,7]]},"71":{"position":[[2143,6],[2508,7]]},"91":{"position":[[273,6]]},"93":{"position":[[249,6]]},"95":{"position":[[257,6],[1734,6]]},"99":{"position":[[787,6],[838,6]]},"121":{"position":[[338,7]]},"129":{"position":[[127,8]]},"138":{"position":[[64,8]]},"140":{"position":[[40,6],[584,6]]},"144":{"position":[[865,6],[1010,6]]},"146":{"position":[[199,6]]},"148":{"position":[[0,6],[153,8],[254,8],[842,6]]},"152":{"position":[[1094,6],[1268,7],[1296,7],[1914,7],[1992,7]]},"158":{"position":[[7,7],[99,7],[315,6]]},"166":{"position":[[673,6]]},"178":{"position":[[303,7]]},"180":{"position":[[459,6]]},"184":{"position":[[243,7]]},"208":{"position":[[1264,7]]},"238":{"position":[[336,6],[850,6]]},"240":{"position":[[24,7],[157,7]]},"305":{"position":[[308,6]]},"307":{"position":[[234,6]]},"349":{"position":[[330,7]]},"363":{"position":[[18,6],[56,6],[240,7]]},"367":{"position":[[728,7],[1236,8]]},"380":{"position":[[16,6]]},"398":{"position":[[175,6]]},"410":{"position":[[230,8]]},"514":{"position":[[1492,6],[1536,6]]},"518":{"position":[[735,7]]},"522":{"position":[[19,6],[145,6],[201,6]]},"565":{"position":[[734,7]]},"567":{"position":[[1252,7]]},"602":{"position":[[1021,6]]},"604":{"position":[[662,6],[1180,8]]},"610":{"position":[[204,7],[371,6]]},"629":{"position":[[712,6]]},"631":{"position":[[633,6],[1150,8]]},"699":{"position":[[667,6]]},"701":{"position":[[666,6],[1185,8]]},"705":{"position":[[435,7]]}}}],["changelog",{"_index":1333,"t":{"208":{"position":[[1215,12]]},"210":{"position":[[398,9]]}}}],["channel",{"_index":1345,"t":{"208":{"position":[[1672,8],[1797,8]]},"242":{"position":[[933,8],[1141,8]]},"256":{"position":[[935,8],[1004,9]]},"319":{"position":[[1288,7]]},"321":{"position":[[47,7],[387,8]]},"323":{"position":[[189,8],[255,7],[294,7],[315,7],[545,7],[574,7]]},"351":{"position":[[413,7]]},"641":{"position":[[307,8]]}}}],["charact",{"_index":721,"t":{"81":{"position":[[227,10]]},"238":{"position":[[915,10],[1056,10],[1149,10],[1388,10]]},"244":{"position":[[415,10],[627,10],[786,10]]},"250":{"position":[[413,10],[716,10]]},"252":{"position":[[147,10]]},"254":{"position":[[142,10]]},"258":{"position":[[215,10]]},"262":{"position":[[305,10],[379,10]]},"266":{"position":[[71,10]]},"374":{"position":[[128,11]]}}}],["charg",{"_index":1675,"t":{"315":{"position":[[53,7],[375,7]]},"565":{"position":[[593,7]]},"567":{"position":[[1111,7]]},"574":{"position":[[473,8]]}}}],["charon",{"_index":2454,"t":{"556":{"position":[[319,6]]},"560":{"position":[[308,6]]}}}],["chart",{"_index":236,"t":{"23":{"position":[[260,6]]},"27":{"position":[[1536,5],[1595,5]]}}}],["chat",{"_index":1485,"t":{"256":{"position":[[595,4]]},"347":{"position":[[155,5]]},"351":{"position":[[250,4],[480,5]]}}}],["cheat",{"_index":1061,"t":{"136":{"position":[[804,8]]}}}],["check",{"_index":265,"t":{"25":{"position":[[490,5]]},"51":{"position":[[12,6]]},"117":{"position":[[272,5],[350,5]]},"152":{"position":[[145,5],[224,5],[1360,5],[2057,5]]},"166":{"position":[[582,5]]},"208":{"position":[[311,5],[751,5]]},"220":{"position":[[317,5],[757,5]]},"319":{"position":[[2141,5]]},"327":{"position":[[57,5],[349,5]]},"329":{"position":[[551,5],[679,5],[2300,5],[2743,5],[2960,5],[3024,5]]},"345":{"position":[[151,5],[298,5]]},"349":{"position":[[547,5]]},"367":{"position":[[596,5]]},"369":{"position":[[176,5],[380,6],[393,8]]},"400":{"position":[[403,5]]},"410":{"position":[[665,5],[777,5],[867,5]]},"412":{"position":[[367,6]]},"429":{"position":[[540,5]]},"450":{"position":[[158,5]]},"487":{"position":[[1873,5]]},"497":{"position":[[246,5]]},"528":{"position":[[648,5]]},"560":{"position":[[518,6]]},"567":{"position":[[1404,5]]},"569":{"position":[[96,5]]},"606":{"position":[[1139,5]]},"619":{"position":[[254,5]]},"633":{"position":[[589,5],[1037,5]]},"641":{"position":[[64,5]]},"703":{"position":[[1114,5]]},"705":{"position":[[1229,5]]}}}],["checker",{"_index":1953,"t":{"369":{"position":[[265,7]]}}}],["checkpoint",{"_index":2382,"t":{"518":{"position":[[614,10]]},"602":{"position":[[647,10],[904,11]]},"629":{"position":[[338,10],[595,11]]},"699":{"position":[[293,10],[550,11]]}}}],["checkpoint_sync_url",{"_index":2105,"t":{"418":{"position":[[299,20]]}}}],["checkpointsync",{"_index":2381,"t":{"518":{"position":[[543,15]]}}}],["checksync",{"_index":1836,"t":{"329":{"position":[[3532,9]]},"602":{"position":[[952,10]]},"629":{"position":[[643,10]]},"699":{"position":[[598,10]]}}}],["chequebook",{"_index":2352,"t":{"508":{"position":[[685,10],[806,11],[880,10]]}}}],["chip",{"_index":1602,"t":{"303":{"position":[[99,5]]}}}],["choic",{"_index":783,"t":{"95":{"position":[[653,9],[1141,9]]},"172":{"position":[[23,6]]},"301":{"position":[[31,6]]},"305":{"position":[[23,7]]},"309":{"position":[[141,6],[1788,7]]},"442":{"position":[[253,8]]},"524":{"position":[[229,8]]},"538":{"position":[[37,6]]}}}],["choos",{"_index":1293,"t":{"204":{"position":[[430,6]]},"309":{"position":[[23,7],[820,6]]},"315":{"position":[[514,7]]},"329":{"position":[[394,6]]},"345":{"position":[[44,6],[390,7]]},"349":{"position":[[57,6],[419,6]]},"392":{"position":[[20,6],[619,8]]},"398":{"position":[[236,6]]},"438":{"position":[[379,6]]},"518":{"position":[[5,8]]},"528":{"position":[[180,6]]},"567":{"position":[[1664,6]]},"574":{"position":[[67,6]]},"583":{"position":[[535,6]]},"602":{"position":[[170,7],[236,7],[296,8]]},"604":{"position":[[1482,6],[1870,6]]},"629":{"position":[[168,7],[260,7]]},"631":{"position":[[1782,6]]},"699":{"position":[[156,7],[238,7]]},"701":{"position":[[1819,6]]}}}],["chose",{"_index":2575,"t":{"604":{"position":[[3045,5]]},"606":{"position":[[697,5]]},"631":{"position":[[2986,5]]},"633":{"position":[[404,5]]},"701":{"position":[[3014,5]]},"703":{"position":[[697,5]]}}}],["chosen",{"_index":1831,"t":{"329":{"position":[[3291,6]]},"349":{"position":[[1142,7]]},"448":{"position":[[10,6]]},"487":{"position":[[1012,6]]},"576":{"position":[[660,6]]},"583":{"position":[[761,6]]},"604":{"position":[[2291,7]]},"631":{"position":[[2205,7]]},"701":{"position":[[2242,7]]}}}],["chunk",{"_index":2052,"t":{"406":{"position":[[1270,6]]}}}],["ci",{"_index":828,"t":{"99":{"position":[[702,3]]}}}],["cid",{"_index":2392,"t":{"528":{"position":[[443,3]]}}}],["cillum",{"_index":457,"t":{"39":{"position":[[296,6]]},"47":{"position":[[296,6]]}}}],["circuit",{"_index":2027,"t":{"406":{"position":[[69,9],[1226,9]]}}}],["cl",{"_index":1052,"t":{"134":{"position":[[958,4],[1002,2],[1014,2]]},"329":{"position":[[3305,2]]}}}],["claim",{"_index":851,"t":{"103":{"position":[[216,5]]},"107":{"position":[[479,7],[733,7],[895,8],[966,7]]},"109":{"position":[[191,8],[240,5],[342,5],[410,5],[743,5]]},"113":{"position":[[354,5]]},"115":{"position":[[753,7],[862,5]]},"129":{"position":[[1053,6]]},"134":{"position":[[32,5],[152,5],[812,5]]},"136":{"position":[[741,5],[926,7],[985,6],[1087,7],[1153,5]]},"138":{"position":[[728,5]]},"144":{"position":[[709,5]]},"166":{"position":[[198,6],[319,6]]},"591":{"position":[[252,8]]},"635":{"position":[[179,8],[469,5]]},"637":{"position":[[1014,5]]},"639":{"position":[[87,5],[137,5]]}}}],["claimabl",{"_index":287,"t":{"27":{"position":[[255,11],[377,9],[802,9],[1520,10],[2285,9]]},"109":{"position":[[51,9],[200,9],[489,9]]},"134":{"position":[[785,10]]},"136":{"position":[[682,10],[938,10],[949,9],[992,9]]},"156":{"position":[[168,9]]},"166":{"position":[[281,9],[355,9]]}}}],["claimwithdraw",{"_index":2617,"t":{"639":{"position":[[377,15]]}}}],["clarifi",{"_index":1135,"t":{"158":{"position":[[1060,8]]}}}],["clariti",{"_index":2560,"t":{"602":{"position":[[1238,7]]},"629":{"position":[[929,7]]},"699":{"position":[[884,7]]}}}],["classic",{"_index":2250,"t":{"477":{"position":[[9,8],[167,7]]},"479":{"position":[[23,7],[203,7]]}}}],["classic’",{"_index":2260,"t":{"479":{"position":[[89,9]]}}}],["clean",{"_index":2028,"t":{"406":{"position":[[119,6],[314,6],[590,8],[676,8],[837,8]]},"408":{"position":[[433,8]]},"440":{"position":[[27,5]]}}}],["clear",{"_index":1843,"t":{"331":{"position":[[546,5]]},"530":{"position":[[1002,5]]}}}],["clearli",{"_index":1410,"t":{"218":{"position":[[164,7]]}}}],["cli",{"_index":1199,"t":{"178":{"position":[[89,6]]},"329":{"position":[[487,3]]}}}],["click",{"_index":38,"t":{"5":{"position":[[191,5]]},"109":{"position":[[394,8]]},"152":{"position":[[56,8],[97,8],[796,5]]},"154":{"position":[[100,5]]},"164":{"position":[[16,5]]},"166":{"position":[[5,8],[189,5]]},"189":{"position":[[284,5],[340,5]]},"191":{"position":[[290,5]]},"195":{"position":[[249,5],[397,5],[425,5],[441,5],[542,5],[660,5],[722,5],[871,5],[997,5]]},"271":{"position":[[239,5],[295,5],[894,5]]},"275":{"position":[[63,5]]},"277":{"position":[[761,5],[788,5],[916,5],[933,5],[1026,5]]},"325":{"position":[[128,5]]},"345":{"position":[[211,5],[263,5],[319,5],[448,5]]},"349":{"position":[[1057,5],[1182,5],[2343,5],[2384,8]]},"351":{"position":[[732,5]]},"363":{"position":[[231,5]]},"369":{"position":[[387,5]]},"374":{"position":[[233,5]]},"376":{"position":[[199,5]]},"380":{"position":[[129,5]]},"487":{"position":[[637,5],[880,5]]},"508":{"position":[[89,5]]},"510":{"position":[[278,5]]},"514":{"position":[[1002,8],[1223,8]]},"530":{"position":[[394,5],[1216,8]]},"545":{"position":[[97,8]]},"567":{"position":[[1006,5],[1299,5],[1425,5]]},"569":{"position":[[350,8]]},"576":{"position":[[112,5]]},"583":{"position":[[101,5]]},"598":{"position":[[50,5]]},"604":{"position":[[2853,5]]},"606":{"position":[[1277,8]]},"612":{"position":[[44,5],[183,5]]},"631":{"position":[[2787,5]]},"633":{"position":[[562,5],[1237,8]]},"637":{"position":[[496,5],[635,5]]},"639":{"position":[[449,5]]},"701":{"position":[[2816,5]]},"703":{"position":[[1255,8]]},"705":{"position":[[338,5]]}}}],["clicked!')}>click",{"_index":36,"t":{"5":{"position":[[160,17]]}}}],["client",{"_index":1164,"t":{"174":{"position":[[176,7]]},"193":{"position":[[86,7]]},"195":{"position":[[36,6]]},"268":{"position":[[252,6]]},"271":{"position":[[599,6],[691,6],[766,6],[819,6]]},"273":{"position":[[80,7]]},"275":{"position":[[21,7]]},"329":{"position":[[215,6],[270,6],[528,7],[1266,8],[2691,7],[2881,7],[2986,7],[3147,7],[3308,7],[3372,6],[3458,6],[3562,7],[3601,6],[3728,6],[3762,6]]},"335":{"position":[[226,6],[324,6],[396,6]]},"337":{"position":[[587,8],[668,8],[729,7],[802,7]]},"351":{"position":[[794,7]]},"506":{"position":[[103,6]]},"508":{"position":[[568,8]]},"514":{"position":[[118,7],[938,8],[2102,7]]},"516":{"position":[[171,6]]},"518":{"position":[[80,6],[97,6],[592,6]]},"522":{"position":[[11,7]]},"538":{"position":[[190,6]]},"543":{"position":[[144,6],[198,6]]},"550":{"position":[[409,7],[429,7],[461,7],[531,7]]},"552":{"position":[[145,6],[199,6]]},"565":{"position":[[144,6],[198,6]]},"583":{"position":[[294,6],[313,8],[407,7]]},"602":{"position":[[163,6],[229,6],[325,6],[355,6],[445,8],[700,7],[718,7],[861,7],[1001,7],[1116,7],[1138,6]]},"629":{"position":[[161,6],[253,6],[391,7],[409,7],[552,7],[692,7],[807,7],[829,6]]},"667":{"position":[[57,7]]},"673":{"position":[[129,6]]},"697":{"position":[[126,7]]},"699":{"position":[[148,7],[230,7],[346,7],[364,7],[507,7],[647,7],[762,7],[784,6]]}}}],["client'",{"_index":2415,"t":{"538":{"position":[[349,8]]},"556":{"position":[[326,8]]},"602":{"position":[[1289,8]]},"629":{"position":[[980,8]]},"699":{"position":[[935,8]]},"705":{"position":[[639,8],[1087,8]]}}}],["client/key",{"_index":2437,"t":{"550":{"position":[[485,10]]}}}],["clients/an",{"_index":2647,"t":{"687":{"position":[[171,10]]}}}],["clipboard",{"_index":1515,"t":{"271":{"position":[[549,9]]},"277":{"position":[[165,9],[371,9]]}}}],["close",{"_index":1344,"t":{"208":{"position":[[1656,5],[1781,5]]},"242":{"position":[[917,5],[1125,5]]},"406":{"position":[[1213,5]]},"410":{"position":[[10,5]]}}}],["closet",{"_index":2020,"t":{"404":{"position":[[512,7]]}}}],["cloud",{"_index":1542,"t":{"279":{"position":[[9,5],[72,5],[201,5],[421,5]]},"281":{"position":[[9,5],[96,5],[246,5]]},"283":{"position":[[14,6]]},"285":{"position":[[27,5]]},"287":{"position":[[14,6],[201,5]]},"291":{"position":[[240,5],[495,5]]},"293":{"position":[[198,5],[585,6]]},"295":{"position":[[9,5]]},"297":{"position":[[49,5]]},"299":{"position":[[82,5]]},"301":{"position":[[9,5],[253,5]]},"311":{"position":[[31,5]]},"313":{"position":[[286,5],[563,6]]},"315":{"position":[[20,5],[299,6]]},"345":{"position":[[65,5]]},"355":{"position":[[132,6]]},"382":{"position":[[48,5]]},"438":{"position":[[194,5]]}}}],["cluster",{"_index":2444,"t":{"554":{"position":[[325,7],[380,7]]},"556":{"position":[[19,7],[216,7],[596,8],[766,9],[844,7],[1136,7]]},"558":{"position":[[323,7],[770,7]]},"560":{"position":[[343,7]]},"567":{"position":[[1763,7]]},"569":{"position":[[791,7]]}}}],["cluster'",{"_index":2462,"t":{"560":{"position":[[74,9]]}}}],["clutter",{"_index":1732,"t":{"321":{"position":[[237,9]]}}}],["co",{"_index":165,"t":{"18":{"position":[[324,2]]}}}],["code",{"_index":245,"t":{"25":{"position":[[188,4]]},"271":{"position":[[621,5]]},"277":{"position":[[133,5],[339,5]]},"479":{"position":[[286,4]]},"510":{"position":[[17,4],[95,4]]}}}],["collabor",{"_index":220,"t":{"20":{"position":[[937,14]]}}}],["collater",{"_index":1028,"t":{"129":{"position":[[1779,10]]},"621":{"position":[[78,10]]}}}],["collect",{"_index":216,"t":{"20":{"position":[[806,12]]},"71":{"position":[[641,7]]},"77":{"position":[[38,7]]},"113":{"position":[[273,9]]},"327":{"position":[[1111,10]]},"331":{"position":[[161,7],[469,7],[625,7]]},"333":{"position":[[111,9]]},"337":{"position":[[852,7],[1198,9]]},"483":{"position":[[127,10],[1414,9]]},"594":{"position":[[519,7]]}}}],["color",{"_index":1469,"t":{"248":{"position":[[577,5],[700,5]]}}}],["column",{"_index":1512,"t":{"271":{"position":[[345,7]]}}}],["combin",{"_index":1948,"t":{"367":{"position":[[819,12]]},"374":{"position":[[113,11]]},"572":{"position":[[191,8]]}}}],["come",{"_index":942,"t":{"121":{"position":[[62,5]]},"136":{"position":[[366,4]]},"176":{"position":[[1119,6]]},"279":{"position":[[239,4]]},"319":{"position":[[8,5],[647,5],[1322,5],[2115,4]]},"349":{"position":[[349,5]]},"394":{"position":[[9,5]]},"429":{"position":[[9,5]]},"474":{"position":[[67,6]]},"483":{"position":[[451,6],[611,6]]},"487":{"position":[[210,4],[1736,5]]},"495":{"position":[[362,5]]},"497":{"position":[[25,5]]},"524":{"position":[[167,5],[490,5]]},"526":{"position":[[170,5]]},"550":{"position":[[554,4]]},"598":{"position":[[535,5]]},"629":{"position":[[228,7]]},"689":{"position":[[4,6]]},"691":{"position":[[3,6]]},"699":{"position":[[194,7]]}}}],["comma",{"_index":1919,"t":{"349":{"position":[[2134,5]]}}}],["command",{"_index":730,"t":{"89":{"position":[[94,7]]},"91":{"position":[[9,7],[146,8]]},"93":{"position":[[10,7],[120,8]]},"95":{"position":[[12,7],[124,8],[1265,7]]},"99":{"position":[[41,7],[91,9],[130,9],[180,8],[208,9],[228,9]]},"176":{"position":[[911,9]]},"178":{"position":[[66,7],[221,7],[271,8],[434,8]]},"180":{"position":[[147,7]]},"189":{"position":[[1141,8]]},"195":{"position":[[1158,8]]},"271":{"position":[[1160,8],[1315,8]]},"277":{"position":[[657,8]]},"309":{"position":[[4060,8],[4256,8],[4456,8],[5114,9],[5750,7],[5887,7]]},"347":{"position":[[131,7]]},"351":{"position":[[434,7],[839,7],[942,7],[1076,7],[1196,8],[1229,7],[1695,7],[1799,7]]},"380":{"position":[[552,8]]},"429":{"position":[[29,8],[83,8],[122,7],[267,8],[731,8],[819,8],[860,7],[912,8],[939,7]]},"450":{"position":[[231,8]]},"454":{"position":[[145,7]]},"460":{"position":[[121,7]]},"462":{"position":[[5,7]]},"604":{"position":[[111,7]]},"615":{"position":[[355,7]]}}}],["commend",{"_index":1977,"t":{"384":{"position":[[127,12]]}}}],["comment",{"_index":43,"t":{"7":{"position":[[70,7]]}}}],["commerci",{"_index":2161,"t":{"432":{"position":[[75,10]]}}}],["commiss",{"_index":2535,"t":{"594":{"position":[[529,11]]}}}],["commit",{"_index":95,"t":{"12":{"position":[[516,6]]},"331":{"position":[[407,9]]},"477":{"position":[[81,9]]},"479":{"position":[[99,10]]},"532":{"position":[[208,10]]},"556":{"position":[[742,9]]}}}],["commodo",{"_index":449,"t":{"39":{"position":[[214,7]]},"47":{"position":[[214,7]]}}}],["common",{"_index":1828,"t":{"329":{"position":[[2819,6],[3106,6]]},"367":{"position":[[486,6]]},"371":{"position":[[173,6]]},"514":{"position":[[2081,6]]},"661":{"position":[[9,6]]}}}],["commonli",{"_index":2186,"t":{"446":{"position":[[244,8]]}}}],["commun",{"_index":58,"t":{"12":{"position":[[62,9]]},"20":{"position":[[826,10],[964,9]]},"25":{"position":[[46,9],[213,9]]},"27":{"position":[[1914,9]]},"43":{"position":[[34,10]]},"45":{"position":[[117,9]]},"256":{"position":[[552,14]]},"309":{"position":[[3098,11],[3190,11],[3348,11],[3551,16]]},"319":{"position":[[938,13],[1068,13],[1868,13]]},"367":{"position":[[168,13]]},"400":{"position":[[305,9]]},"412":{"position":[[186,9]]},"450":{"position":[[641,9]]},"487":{"position":[[1849,10]]},"514":{"position":[[2254,10]]},"560":{"position":[[658,9]]},"574":{"position":[[645,9],[694,10]]},"576":{"position":[[1283,9]]},"625":{"position":[[123,10]]},"641":{"position":[[162,9]]},"685":{"position":[[283,10],[304,9]]}}}],["community'",{"_index":1841,"t":{"331":{"position":[[209,11]]}}}],["commut",{"_index":1961,"t":{"371":{"position":[[441,8]]}}}],["compar",{"_index":1036,"t":{"131":{"position":[[202,8]]}}}],["comparison",{"_index":978,"t":{"125":{"position":[[627,10]]}}}],["compat",{"_index":1260,"t":{"193":{"position":[[126,10]]},"208":{"position":[[1984,13]]},"244":{"position":[[851,13]]},"273":{"position":[[120,10]]},"536":{"position":[[228,13]]},"697":{"position":[[143,10]]}}}],["compet",{"_index":2445,"t":{"554":{"position":[[391,9]]},"569":{"position":[[802,9]]}}}],["complet",{"_index":1195,"t":{"176":{"position":[[933,8]]},"180":{"position":[[529,9]]},"309":{"position":[[4814,8]]},"331":{"position":[[51,10]]},"333":{"position":[[729,9],[803,9]]},"351":{"position":[[123,9],[1534,9]]},"392":{"position":[[273,8]]},"450":{"position":[[25,9]]},"458":{"position":[[50,11]]},"558":{"position":[[495,9]]},"567":{"position":[[1531,8]]}}}],["complex",{"_index":1196,"t":{"176":{"position":[[963,7]]},"281":{"position":[[137,12]]},"418":{"position":[[760,7]]},"481":{"position":[[382,7]]},"483":{"position":[[58,7]]}}}],["compon",{"_index":837,"t":{"101":{"position":[[104,11],[542,10]]},"111":{"position":[[31,11],[88,10]]},"248":{"position":[[849,9]]},"462":{"position":[[37,10]]},"483":{"position":[[247,11]]}}}],["compos",{"_index":667,"t":{"71":{"position":[[529,8],[1266,8],[1580,8],[2225,7]]},"91":{"position":[[344,7],[368,7]]},"93":{"position":[[320,7],[344,7]]},"95":{"position":[[328,7],[352,7]]},"99":{"position":[[909,7],[933,7]]},"111":{"position":[[10,8]]},"238":{"position":[[1321,7]]},"250":{"position":[[591,7]]},"335":{"position":[[674,7]]},"416":{"position":[[259,7]]},"454":{"position":[[82,7]]}}}],["compose.yml",{"_index":615,"t":{"61":{"position":[[392,11]]},"91":{"position":[[403,13]]},"93":{"position":[[379,13]]},"95":{"position":[[387,13]]},"99":{"position":[[968,13]]},"414":{"position":[[131,11],[216,11]]},"416":{"position":[[16,11]]},"418":{"position":[[24,11]]},"420":{"position":[[78,11]]}}}],["compose_file_nam",{"_index":736,"t":{"91":{"position":[[326,17]]},"93":{"position":[[302,17]]},"95":{"position":[[310,17]]},"99":{"position":[[891,17]]}}}],["comprehens",{"_index":481,"t":{"41":{"position":[[69,13]]},"436":{"position":[[164,13]]},"483":{"position":[[369,13]]},"574":{"position":[[247,13]]},"589":{"position":[[148,13]]},"623":{"position":[[137,13]]},"683":{"position":[[31,13]]}}}],["compress",{"_index":2029,"t":{"406":{"position":[[171,10]]}}}],["compris",{"_index":2271,"t":{"483":{"position":[[229,9]]}}}],["compromis",{"_index":1703,"t":{"319":{"position":[[720,10],[865,12]]},"331":{"position":[[298,10]]},"604":{"position":[[504,11]]},"631":{"position":[[475,11]]},"701":{"position":[[478,11]]}}}],["comput",{"_index":180,"t":{"20":{"position":[[117,8]]},"99":{"position":[[515,7]]},"111":{"position":[[403,9]]},"113":{"position":[[375,9],[717,8]]},"115":{"position":[[51,9],[106,9],[216,8]]},"176":{"position":[[40,9],[902,8]]},"293":{"position":[[615,9]]},"301":{"position":[[259,9]]},"303":{"position":[[68,8]]},"309":{"position":[[713,14]]},"311":{"position":[[37,9],[122,9]]},"367":{"position":[[399,8]]},"481":{"position":[[239,8]]},"661":{"position":[[87,9],[210,9]]}}}],["computer'",{"_index":2523,"t":{"591":{"position":[[222,10]]}}}],["concept",{"_index":1496,"t":{"260":{"position":[[194,7]]},"465":{"position":[[94,7]]},"579":{"position":[[311,8]]}}}],["concern",{"_index":1900,"t":{"337":{"position":[[1171,8]]}}}],["condit",{"_index":581,"t":{"57":{"position":[[788,11]]},"69":{"position":[[73,11]]},"301":{"position":[[292,11]]},"404":{"position":[[119,12]]},"481":{"position":[[175,9]]},"518":{"position":[[309,11]]}}}],["conduct",{"_index":2061,"t":{"408":{"position":[[266,12]]},"504":{"position":[[515,9]]},"536":{"position":[[121,8]]},"598":{"position":[[647,7]]}}}],["confidenti",{"_index":1725,"t":{"319":{"position":[[1980,15]]}}}],["config",{"_index":174,"t":{"18":{"position":[[481,7]]},"228":{"position":[[132,6]]},"238":{"position":[[539,8],[947,8]]},"271":{"position":[[428,7],[504,7],[611,6],[709,6],[796,6]]},"420":{"position":[[126,6],[354,8]]},"514":{"position":[[1086,7]]},"530":{"position":[[936,7]]},"558":{"position":[[427,7]]},"569":{"position":[[206,7]]}}}],["configur",{"_index":654,"t":{"71":{"position":[[41,13]]},"168":{"position":[[118,13]]},"170":{"position":[[300,14]]},"172":{"position":[[359,14]]},"174":{"position":[[255,9]]},"178":{"position":[[447,14]]},"182":{"position":[[56,9]]},"191":{"position":[[383,13]]},"200":{"position":[[111,13]]},"206":{"position":[[182,9]]},"271":{"position":[[1634,15]]},"279":{"position":[[167,10]]},"309":{"position":[[2161,13],[4893,14]]},"313":{"position":[[143,14],[330,9],[495,10]]},"319":{"position":[[1844,14]]},"327":{"position":[[283,10]]},"329":{"position":[[1594,9]]},"335":{"position":[[61,14]]},"345":{"position":[[282,15]]},"349":{"position":[[68,13],[133,14],[2279,13]]},"351":{"position":[[330,13]]},"353":{"position":[[228,10]]},"371":{"position":[[79,14],[195,9],[620,9]]},"390":{"position":[[83,11]]},"400":{"position":[[38,10]]},"410":{"position":[[187,9],[304,9]]},"420":{"position":[[290,14]]},"442":{"position":[[367,14],[651,14]]},"448":{"position":[[91,13]]},"450":{"position":[[295,14]]},"516":{"position":[[765,9]]},"524":{"position":[[647,9]]},"526":{"position":[[211,11]]},"538":{"position":[[595,14]]},"556":{"position":[[172,13]]},"558":{"position":[[167,13],[281,13],[455,14]]},"563":{"position":[[788,13]]},"583":{"position":[[429,13]]},"598":{"position":[[430,9]]},"649":{"position":[[267,11]]},"687":{"position":[[125,11]]},"705":{"position":[[85,11]]}}}],["configurt",{"_index":1907,"t":{"349":{"position":[[359,11]]}}}],["confirm",{"_index":1114,"t":{"154":{"position":[[20,12]]},"363":{"position":[[200,8]]},"369":{"position":[[469,7]]},"374":{"position":[[191,7]]},"560":{"position":[[396,7]]},"567":{"position":[[724,12],[1327,12],[1520,7]]},"621":{"position":[[127,10]]}}}],["conform",{"_index":1398,"t":{"214":{"position":[[88,7]]},"232":{"position":[[369,7]]}}}],["congratul",{"_index":1996,"t":{"400":{"position":[[0,16]]},"450":{"position":[[461,16]]}}}],["connect",{"_index":1155,"t":{"172":{"position":[[37,9]]},"176":{"position":[[273,7],[490,7],[555,10],[664,10],[700,7],[1093,10],[1185,10]]},"180":{"position":[[81,9]]},"184":{"position":[[63,7]]},"189":{"position":[[733,12],[915,10]]},"193":{"position":[[177,7]]},"195":{"position":[[116,7],[258,10],[299,11],[450,9],[490,11],[669,8],[822,11],[912,11],[1041,8],[1212,10],[1228,10]]},"197":{"position":[[112,10]]},"204":{"position":[[14,10],[175,9],[220,10]]},"208":{"position":[[1480,10]]},"242":{"position":[[657,10]]},"271":{"position":[[1461,10],[1758,10],[1922,11]]},"273":{"position":[[171,7]]},"275":{"position":[[211,7],[262,10],[300,10]]},"277":{"position":[[956,7],[1136,10],[1152,10]]},"291":{"position":[[83,10]]},"297":{"position":[[188,13]]},"303":{"position":[[120,7]]},"305":{"position":[[217,10]]},"309":{"position":[[2407,7],[2793,11],[2924,12],[2987,11],[3519,11],[4369,10],[4536,7],[4568,10]]},"329":{"position":[[1917,9],[1982,10]]},"337":{"position":[[545,9],[626,9]]},"351":{"position":[[742,9],[1150,9]]},"353":{"position":[[22,10],[297,7]]},"357":{"position":[[6,10],[88,7]]},"359":{"position":[[117,7],[178,7]]},"363":{"position":[[89,9]]},"365":{"position":[[116,7],[216,7]]},"367":{"position":[[408,9]]},"369":{"position":[[585,7],[672,11],[721,9]]},"371":{"position":[[272,7]]},"392":{"position":[[91,7]]},"408":{"position":[[727,11]]},"423":{"position":[[76,10]]},"429":{"position":[[546,12]]},"506":{"position":[[125,10]]},"516":{"position":[[284,10],[416,11]]},"518":{"position":[[939,11]]},"520":{"position":[[38,7]]},"524":{"position":[[131,10],[176,10]]},"526":{"position":[[34,7],[260,9],[348,11]]},"528":{"position":[[42,7],[238,10]]},"530":{"position":[[820,11],[837,10]]},"538":{"position":[[471,10],[665,11]]},"545":{"position":[[169,7]]},"554":{"position":[[900,10]]},"560":{"position":[[441,9]]},"567":{"position":[[354,7],[493,10]]},"576":{"position":[[246,9],[347,10]]},"606":{"position":[[812,7]]},"633":{"position":[[739,7]]},"639":{"position":[[302,7],[331,7]]},"671":{"position":[[52,7]]},"673":{"position":[[106,8],[264,9],[376,7]]},"677":{"position":[[3,7],[97,10]]},"683":{"position":[[276,7]]},"703":{"position":[[812,7]]}}}],["consectetur",{"_index":5,"t":{"3":{"position":[[28,11]]},"7":{"position":[[148,11],[327,11],[506,11],[685,11],[864,11],[1043,11],[1222,11],[1401,11],[1580,11],[1759,11],[1938,11],[2117,11],[2296,11],[2475,11],[2654,11],[2833,11]]},"39":{"position":[[29,11]]},"47":{"position":[[29,11]]}}}],["consensu",{"_index":195,"t":{"20":{"position":[[380,9]]},"134":{"position":[[942,9]]},"329":{"position":[[260,9],[2871,9],[3448,9],[3718,9]]},"337":{"position":[[658,9],[792,9]]},"474":{"position":[[347,9],[596,9]]},"504":{"position":[[457,9]]},"514":{"position":[[2092,9]]},"518":{"position":[[87,9],[582,9]]},"543":{"position":[[188,9]]},"550":{"position":[[419,9],[562,9]]},"552":{"position":[[189,9]]},"563":{"position":[[751,9]]},"565":{"position":[[188,9]]},"583":{"position":[[303,9]]},"596":{"position":[[318,9]]},"602":{"position":[[219,9],[690,9],[851,9],[991,9],[1106,9]]},"604":{"position":[[1991,9]]},"629":{"position":[[243,9],[381,9],[542,9],[682,9],[797,9]]},"631":{"position":[[1903,9]]},"637":{"position":[[140,9]]},"697":{"position":[[327,9]]},"699":{"position":[[220,9],[336,9],[497,9],[637,9],[752,9]]},"701":{"position":[[1940,9]]},"703":{"position":[[1198,9]]},"705":{"position":[[104,9],[629,9],[1077,9],[1263,9]]}}}],["consensys/teku",{"_index":2121,"t":{"420":{"position":[[901,17]]}}}],["consensys/teku:$upstream_vers",{"_index":2118,"t":{"420":{"position":[[663,32]]}}}],["consequ",{"_index":997,"t":{"127":{"position":[[150,12]]}}}],["consequat",{"_index":17,"t":{"3":{"position":[[141,10]]},"7":{"position":[[261,10],[440,10],[619,10],[798,10],[977,10],[1156,10],[1335,10],[1514,10],[1693,10],[1872,10],[2051,10],[2230,10],[2409,10],[2588,10],[2767,10],[2946,10]]},"39":{"position":[[222,10]]},"47":{"position":[[222,10]]}}}],["consid",{"_index":852,"t":{"105":{"position":[[12,10]]},"107":{"position":[[223,10],[773,8]]},"136":{"position":[[311,10]]},"172":{"position":[[408,8]]},"178":{"position":[[171,10]]},"200":{"position":[[132,10]]},"299":{"position":[[10,11]]},"315":{"position":[[64,9]]},"438":{"position":[[1193,11]]},"442":{"position":[[744,8]]},"526":{"position":[[437,8]]},"530":{"position":[[449,8],[867,8]]},"576":{"position":[[1187,8]]},"608":{"position":[[0,11]]}}}],["consist",{"_index":935,"t":{"119":{"position":[[186,13]]},"121":{"position":[[566,13]]},"125":{"position":[[806,12]]},"131":{"position":[[148,12]]},"138":{"position":[[52,8]]},"279":{"position":[[354,8]]},"313":{"position":[[411,11]]},"319":{"position":[[1172,8]]},"442":{"position":[[718,11]]},"610":{"position":[[117,8]]}}}],["consol",{"_index":1312,"t":{"208":{"position":[[471,7]]},"220":{"position":[[477,7]]},"351":{"position":[[770,8]]}}}],["consolid",{"_index":871,"t":{"107":{"position":[[399,12],[709,12],[861,12],[942,12]]},"136":{"position":[[514,13],[864,12]]}}}],["constant",{"_index":956,"t":{"123":{"position":[[230,9]]},"319":{"position":[[2086,8]]},"331":{"position":[[1001,8]]},"404":{"position":[[200,8]]}}}],["constantli",{"_index":1641,"t":{"309":{"position":[[2340,10]]}}}],["constraint",{"_index":1567,"t":{"287":{"position":[[241,11]]},"301":{"position":[[136,11]]}}}],["construct",{"_index":2240,"t":{"472":{"position":[[354,9]]},"550":{"position":[[604,12]]}}}],["consult",{"_index":1945,"t":{"367":{"position":[[636,7]]},"538":{"position":[[696,7]]},"602":{"position":[[1266,7]]},"629":{"position":[[957,7]]},"699":{"position":[[912,7]]}}}],["consum",{"_index":1569,"t":{"291":{"position":[[98,8]]},"438":{"position":[[1015,10]]}}}],["contact",{"_index":1607,"t":{"303":{"position":[[443,7]]},"329":{"position":[[1856,7]]}}}],["contain",{"_index":663,"t":{"71":{"position":[[394,9],[1524,9],[1680,9],[2622,9],[2793,10]]},"77":{"position":[[111,8]]},"191":{"position":[[361,8]]},"206":{"position":[[204,9]]},"228":{"position":[[87,9]]},"234":{"position":[[64,10]]},"313":{"position":[[99,8]]},"329":{"position":[[2229,10]]},"333":{"position":[[274,11],[332,11],[884,10],[1111,10],[1250,11]]},"414":{"position":[[40,11],[84,10]]},"429":{"position":[[629,10],[671,10],[711,10]]},"444":{"position":[[218,10]]},"487":{"position":[[770,8]]},"514":{"position":[[110,7],[1372,10]]},"606":{"position":[[323,7]]},"703":{"position":[[323,7]]},"705":{"position":[[648,9],[1096,9]]}}}],["container_cpu_usage_seconds_tot",{"_index":1870,"t":{"333":{"position":[[1185,34]]}}}],["container_fs_usage_byt",{"_index":1861,"t":{"333":{"position":[[838,25]]}}}],["container_last_seen",{"_index":1865,"t":{"333":{"position":[[1063,20]]}}}],["container_memory_cach",{"_index":1850,"t":{"333":{"position":[[286,23]]}}}],["container_memory_usage_byt",{"_index":1848,"t":{"333":{"position":[[219,29]]}}}],["containerport",{"_index":687,"t":{"71":{"position":[[1615,14],[1657,14],[1852,14],[1872,14]]}}}],["content",{"_index":840,"t":{"101":{"position":[[226,8]]},"392":{"position":[[586,8]]},"502":{"position":[[524,7]]},"528":{"position":[[360,7],[420,7]]},"705":{"position":[[983,8],[1036,9],[1128,8]]}}}],["content_provid",{"_index":787,"t":{"95":{"position":[[737,16],[962,16]]}}}],["context",{"_index":1908,"t":{"349":{"position":[[511,7],[1783,8]]},"418":{"position":[[109,8],[484,8]]},"487":{"position":[[142,7]]}}}],["contin",{"_index":283,"t":{"27":{"position":[[183,9]]}}}],["continu",{"_index":716,"t":{"79":{"position":[[48,11]]},"85":{"position":[[44,10]]},"154":{"position":[[119,8]]},"158":{"position":[[1174,8]]},"166":{"position":[[220,8]]},"279":{"position":[[254,8]]},"297":{"position":[[233,10]]},"331":{"position":[[221,10]]},"345":{"position":[[217,9],[269,9],[325,9]]},"438":{"position":[[561,10],[695,10],[1093,10]]},"450":{"position":[[440,10]]},"469":{"position":[[436,9]]},"606":{"position":[[536,8]]},"633":{"position":[[579,9]]},"703":{"position":[[536,8]]}}}],["contract",{"_index":847,"t":{"101":{"position":[[509,9],[585,8]]},"111":{"position":[[68,9],[249,8]]},"113":{"position":[[15,8],[234,8],[317,8],[566,8]]},"115":{"position":[[571,8],[678,8],[932,8]]},"129":{"position":[[1835,8],[2105,8]]},"134":{"position":[[717,9]]},"392":{"position":[[446,9],[609,9]]},"516":{"position":[[20,9],[104,9],[342,9]]},"518":{"position":[[482,9]]},"536":{"position":[[262,10]]},"556":{"position":[[967,8]]},"581":{"position":[[227,10]]},"600":{"position":[[49,8],[479,8]]},"606":{"position":[[196,9],[924,9]]},"627":{"position":[[466,8]]},"633":{"position":[[194,9],[673,8],[849,9]]},"635":{"position":[[213,9],[514,9]]},"637":{"position":[[1046,8]]},"639":{"position":[[119,9],[231,8]]},"697":{"position":[[351,9]]},"703":{"position":[[193,9],[946,9]]}}}],["contrast",{"_index":1735,"t":{"321":{"position":[[368,9]]}}}],["contribut",{"_index":82,"t":{"12":{"position":[[368,13],[630,14]]},"41":{"position":[[478,10]]},"43":{"position":[[11,13],[62,10],[104,13]]},"129":{"position":[[771,11]]},"131":{"position":[[285,12]]},"136":{"position":[[761,12]]},"254":{"position":[[0,12]]},"384":{"position":[[73,10]]},"410":{"position":[[459,10]]},"467":{"position":[[198,10]]},"469":{"position":[[418,10]]},"474":{"position":[[289,10],[390,10]]},"479":{"position":[[233,10]]},"492":{"position":[[139,10]]},"550":{"position":[[874,12]]},"615":{"position":[[137,10]]}}}],["contributor",{"_index":246,"t":{"25":{"position":[[193,12]]},"208":{"position":[[2579,15]]},"210":{"position":[[580,12]]},"254":{"position":[[153,11]]}}}],["control",{"_index":183,"t":{"20":{"position":[[155,10]]},"121":{"position":[[215,7]]},"138":{"position":[[464,7]]},"144":{"position":[[445,7]]},"158":{"position":[[475,8]]},"176":{"position":[[63,7],[942,7]]},"178":{"position":[[110,7]]},"206":{"position":[[226,7]]},"248":{"position":[[23,7]]},"256":{"position":[[988,7]]},"293":{"position":[[522,10]]},"309":{"position":[[3863,7],[4784,8],[4823,7]]},"442":{"position":[[350,7]]},"504":{"position":[[303,7],[688,7]]},"516":{"position":[[518,7]]},"524":{"position":[[300,8]]},"526":{"position":[[132,7]]},"550":{"position":[[314,7]]},"563":{"position":[[379,7]]},"581":{"position":[[317,8]]}}}],["conveni",{"_index":164,"t":{"18":{"position":[[310,10]]},"59":{"position":[[136,12]]},"483":{"position":[[1246,12]]},"502":{"position":[[738,13]]},"524":{"position":[[464,10]]}}}],["cool",{"_index":2010,"t":{"404":{"position":[[135,4]]},"408":{"position":[[851,7]]},"487":{"position":[[1992,4]]}}}],["copi",{"_index":1246,"t":{"189":{"position":[[372,4],[1209,4]]},"191":{"position":[[145,6]]},"271":{"position":[[499,4],[520,4],[929,4],[1249,4],[1352,4]]},"323":{"position":[[306,4],[452,8]]},"351":{"position":[[536,4],[1277,4]]},"376":{"position":[[266,4]]},"467":{"position":[[170,4]]},"558":{"position":[[206,4]]},"604":{"position":[[1721,7],[1815,6]]},"631":{"position":[[1633,7],[1727,6]]},"701":{"position":[[1670,7],[1764,6]]}}}],["core",{"_index":849,"t":{"103":{"position":[[49,4]]},"222":{"position":[[83,4],[431,4]]},"224":{"position":[[399,4]]},"432":{"position":[[282,4],[365,4]]},"460":{"position":[[176,4]]},"490":{"position":[[57,4]]},"581":{"position":[[152,4]]},"602":{"position":[[1375,4]]}}}],["corner",{"_index":2369,"t":{"514":{"position":[[1248,6]]},"569":{"position":[[392,6]]},"633":{"position":[[1301,6]]},"703":{"position":[[1319,6]]}}}],["corpor",{"_index":1578,"t":{"293":{"position":[[69,9],[557,12]]}}}],["correct",{"_index":1034,"t":{"131":{"position":[[102,7]]},"152":{"position":[[2200,7]]},"154":{"position":[[70,7]]},"351":{"position":[[347,8]]},"530":{"position":[[678,8]]},"633":{"position":[[665,7]]}}}],["correctli",{"_index":921,"t":{"115":{"position":[[811,9]]},"129":{"position":[[1490,9]]},"148":{"position":[[365,9]]},"152":{"position":[[974,9]]},"208":{"position":[[1445,12]]},"238":{"position":[[1095,10]]},"242":{"position":[[508,11]]},"675":{"position":[[291,9]]},"679":{"position":[[47,10]]}}}],["correspond",{"_index":2295,"t":{"487":{"position":[[399,13]]},"558":{"position":[[338,13]]},"560":{"position":[[322,13]]},"567":{"position":[[417,11],[933,10]]}}}],["cost",{"_index":119,"t":{"14":{"position":[[197,5]]},"279":{"position":[[587,4]]},"283":{"position":[[147,4]]},"291":{"position":[[40,5],[150,4],[179,4],[267,5],[332,4]]},"299":{"position":[[213,4]]},"315":{"position":[[249,4],[424,5],[664,5],[778,5],[949,5]]},"536":{"position":[[111,6]]},"619":{"position":[[136,4]]}}}],["count",{"_index":1886,"t":{"337":{"position":[[207,5],[348,5],[482,5]]}}}],["counter",{"_index":1122,"t":{"156":{"position":[[735,7]]}}}],["coupl",{"_index":1834,"t":{"329":{"position":[[3410,6]]},"359":{"position":[[8,6]]}}}],["cover",{"_index":725,"t":{"89":{"position":[[10,6]]},"315":{"position":[[254,6]]},"402":{"position":[[18,5]]},"657":{"position":[[236,8]]}}}],["cpu",{"_index":1289,"t":{"200":{"position":[[170,3]]},"315":{"position":[[530,3]]},"333":{"position":[[185,3],[1226,3]]},"396":{"position":[[104,3]]},"408":{"position":[[5,3],[333,4],[451,3],[586,3]]},"481":{"position":[[266,4]]},"483":{"position":[[1142,4]]}}}],["cpu'",{"_index":2057,"t":{"408":{"position":[[152,5]]}}}],["craft",{"_index":2237,"t":{"472":{"position":[[252,5]]}}}],["crash",{"_index":2363,"t":{"514":{"position":[[668,7]]}}}],["creat",{"_index":30,"t":{"5":{"position":[[92,6]]},"14":{"position":[[315,8]]},"20":{"position":[[553,6]]},"41":{"position":[[141,7],[504,8]]},"51":{"position":[[106,7]]},"55":{"position":[[44,7]]},"61":{"position":[[27,6]]},"91":{"position":[[110,8]]},"97":{"position":[[49,8],[315,6]]},"189":{"position":[[512,6]]},"195":{"position":[[286,6],[477,6],[809,6]]},"277":{"position":[[408,6]]},"313":{"position":[[523,6]]},"323":{"position":[[172,6]]},"329":{"position":[[425,6]]},"343":{"position":[[52,6]]},"347":{"position":[[96,6]]},"349":{"position":[[705,6],[890,6],[1108,7]]},"420":{"position":[[495,6]]},"427":{"position":[[216,6]]},"465":{"position":[[141,7]]},"487":{"position":[[1834,7]]},"556":{"position":[[4,8]]},"558":{"position":[[668,6]]},"594":{"position":[[442,7]]},"600":{"position":[[419,6]]},"602":{"position":[[1454,7]]},"604":{"position":[[315,6],[596,6],[1404,6],[1906,7]]},"627":{"position":[[378,6]]},"631":{"position":[[286,6],[567,6],[1398,6],[1818,7]]},"697":{"position":[[267,6]]},"701":{"position":[[289,6],[600,6],[1435,6],[1855,7]]}}}],["creation",{"_index":2245,"t":{"472":{"position":[[456,8]]},"554":{"position":[[148,8]]},"569":{"position":[[567,8]]},"581":{"position":[[450,9]]},"695":{"position":[[161,8]]}}}],["creativ",{"_index":2648,"t":{"693":{"position":[[47,8]]}}}],["creator",{"_index":2656,"t":{"695":{"position":[[222,8]]}}}],["credenti",{"_index":1159,"t":{"172":{"position":[[192,11]]},"180":{"position":[[334,12]]},"189":{"position":[[49,12],[327,12],[405,11],[679,11],[851,11],[1041,11]]},"191":{"position":[[80,12],[241,11],[401,12],[444,11]]},"193":{"position":[[34,12]]},"271":{"position":[[49,12],[282,12],[333,11],[406,12],[474,11],[529,11],[881,12],[915,13],[944,11],[1060,11],[1193,11],[1260,12],[1290,12],[1367,11],[1396,11],[1424,11],[1568,11],[1663,11],[1728,11],[1835,11],[1957,11],[2113,12],[2153,11]]},"273":{"position":[[25,12]]},"275":{"position":[[149,11]]},"277":{"position":[[112,12],[318,12],[431,12],[489,11],[850,11],[1059,11]]},"307":{"position":[[125,12]]},"309":{"position":[[4336,11],[4701,11],[5472,11],[5524,11]]},"329":{"position":[[2118,12]]},"345":{"position":[[82,11]]},"347":{"position":[[70,11]]},"349":{"position":[[2002,11]]},"351":{"position":[[24,11],[523,12],[594,12],[1264,12],[1382,12],[1495,11]]},"353":{"position":[[251,11]]},"363":{"position":[[248,13]]},"429":{"position":[[352,11],[415,11],[465,12]]},"448":{"position":[[328,11],[388,11]]},"663":{"position":[[124,11]]}}}],["credibl",{"_index":2327,"t":{"497":{"position":[[770,12]]}}}],["critic",{"_index":2288,"t":{"483":{"position":[[1083,8]]},"504":{"position":[[52,8]]}}}],["cron",{"_index":530,"t":{"53":{"position":[[69,5],[470,4]]}}}],["crucial",{"_index":732,"t":{"89":{"position":[[110,7]]},"148":{"position":[[654,7]]},"170":{"position":[[145,7]]},"309":{"position":[[2256,7],[5271,7]]},"376":{"position":[[86,7]]},"398":{"position":[[485,7]]},"438":{"position":[[1114,8]]},"492":{"position":[[49,7]]},"583":{"position":[[1103,7]]}}}],["crypto",{"_index":127,"t":{"14":{"position":[[370,6]]},"617":{"position":[[224,7]]}}}],["cryptocurr",{"_index":2211,"t":{"465":{"position":[[39,15]]},"467":{"position":[[436,14]]},"469":{"position":[[123,15]]},"490":{"position":[[35,14]]},"621":{"position":[[51,14],[361,15]]}}}],["cryptograph",{"_index":2310,"t":{"490":{"position":[[133,13]]},"495":{"position":[[107,13]]},"532":{"position":[[194,13]]}}}],["css",{"_index":1464,"t":{"248":{"position":[[298,3],[426,3],[573,3],[696,3],[806,3],[958,3]]}}}],["ctrl+o",{"_index":1535,"t":{"277":{"position":[[540,7]]}}}],["ctrl+shift+c",{"_index":1929,"t":{"351":{"position":[[1312,12]]}}}],["ctrl+shift+v",{"_index":1534,"t":{"277":{"position":[[525,14]]}}}],["ctrl+x",{"_index":1536,"t":{"277":{"position":[[548,8]]}}}],["culpa",{"_index":469,"t":{"39":{"position":[[392,5]]},"47":{"position":[[392,5]]}}}],["cupidatat",{"_index":465,"t":{"39":{"position":[[360,9]]},"47":{"position":[[360,9]]}}}],["curat",{"_index":2641,"t":{"681":{"position":[[65,7]]}}}],["curl",{"_index":2660,"t":{"705":{"position":[[885,4]]}}}],["current",{"_index":122,"t":{"14":{"position":[[280,9]]},"65":{"position":[[36,9]]},"87":{"position":[[70,7]]},"121":{"position":[[0,10]]},"158":{"position":[[580,7]]},"256":{"position":[[178,7]]},"287":{"position":[[82,7]]},"335":{"position":[[151,7]]},"369":{"position":[[630,10]]},"532":{"position":[[406,10]]}}}],["custom",{"_index":484,"t":{"41":{"position":[[177,6]]},"59":{"position":[[66,13]]},"71":{"position":[[420,9],[546,9],[1474,9]]},"279":{"position":[[616,9]]},"309":{"position":[[3804,9]]},"349":{"position":[[1329,6],[1395,6],[1466,6]]},"432":{"position":[[462,9]]},"442":{"position":[[395,13],[797,13]]}}}],["customiz",{"_index":2282,"t":{"483":{"position":[[753,12]]}}}],["d",{"_index":823,"t":{"99":{"position":[[373,1]]},"705":{"position":[[1019,1]]}}}],["damag",{"_index":1203,"t":{"178":{"position":[[331,7]]},"402":{"position":[[443,6]]},"406":{"position":[[535,7]]},"604":{"position":[[465,6]]},"631":{"position":[[436,6]]},"701":{"position":[[439,6]]}}}],["danger",{"_index":2182,"t":{"444":{"position":[[166,6]]},"558":{"position":[[641,6]]}}}],["dao",{"_index":54,"t":{"12":{"position":[[13,3],[162,3],[336,3]]},"20":{"position":[[10,4],[17,4],[449,4],[465,3],[741,4],[922,3]]},"27":{"position":[[1632,3],[1960,3]]},"596":{"position":[[378,4]]}}}],["dapp",{"_index":205,"t":{"20":{"position":[[629,6]]},"301":{"position":[[117,6]]},"392":{"position":[[471,5]]},"502":{"position":[[151,6],[536,5]]},"504":{"position":[[130,7]]}}}],["dappmanag",{"_index":1181,"t":{"176":{"position":[[82,12],[711,11]]},"180":{"position":[[426,12]]},"189":{"position":[[96,12],[123,11],[165,12],[1005,12]]},"195":{"position":[[1310,12]]},"228":{"position":[[286,11]]},"234":{"position":[[12,11],[192,11]]},"271":{"position":[[76,11],[118,12],[1024,12]]},"277":{"position":[[1234,12]]},"303":{"position":[[135,11]]},"305":{"position":[[292,11]]},"335":{"position":[[105,12]]},"380":{"position":[[412,11]]},"534":{"position":[[99,14]]}}}],["dappmanager_auto_updates_system_packag",{"_index":1879,"t":{"335":{"position":[[521,41]]}}}],["dappmanager_auto_updates_user_packag",{"_index":1877,"t":{"335":{"position":[[431,39]]}}}],["dappmanager_eth_client_target_loc",{"_index":1876,"t":{"335":{"position":[[343,36]]}}}],["dappmanager_eth_fallback_en",{"_index":1874,"t":{"335":{"position":[[261,33]]}}}],["dappmanager_host_info",{"_index":1880,"t":{"335":{"position":[[615,22]]}}}],["dappmanager_ipfs_client_target_loc",{"_index":1872,"t":{"335":{"position":[[176,37]]}}}],["dappmmanager_staker_config",{"_index":1871,"t":{"335":{"position":[[118,27]]}}}],["dappndo",{"_index":2158,"t":{"429":{"position":[[1001,8]]}}}],["dappnod",{"_index":53,"t":{"12":{"position":[[4,8]]},"14":{"position":[[0,8]]},"16":{"position":[[10,8]]},"20":{"position":[[440,8],[746,8],[913,8]]},"25":{"position":[[116,8],[138,8],[170,8],[277,8],[378,8],[417,10]]},"27":{"position":[[1883,8]]},"41":{"position":[[184,8],[351,8],[433,8],[492,8],[544,9]]},"43":{"position":[[76,9]]},"49":{"position":[[75,8]]},"55":{"position":[[23,8]]},"59":{"position":[[21,8]]},"61":{"position":[[78,8]]},"89":{"position":[[168,8]]},"93":{"position":[[538,10],[598,11]]},"95":{"position":[[774,10],[879,10],[948,11],[1005,10],[1081,11],[1694,8]]},"97":{"position":[[77,8]]},"99":{"position":[[751,8]]},"107":{"position":[[997,8],[1233,9]]},"134":{"position":[[283,8],[387,8]]},"148":{"position":[[114,9]]},"152":{"position":[[584,9],[1135,9]]},"168":{"position":[[53,8]]},"170":{"position":[[193,9]]},"172":{"position":[[75,9],[183,8]]},"174":{"position":[[81,8],[699,9],[755,9]]},"176":{"position":[[0,8],[289,9],[355,8],[1032,9]]},"178":{"position":[[31,9]]},"180":{"position":[[118,9],[357,8],[500,10]]},"182":{"position":[[14,8]]},"184":{"position":[[24,8],[152,8]]},"186":{"position":[[131,9]]},"189":{"position":[[550,8],[621,9],[779,8],[962,8],[1061,8],[1091,8]]},"191":{"position":[[262,8],[512,9]]},"193":{"position":[[192,8]]},"195":{"position":[[127,9]]},"197":{"position":[[68,9],[151,9],[189,8],[264,8],[381,8]]},"204":{"position":[[33,8],[113,8],[239,8]]},"206":{"position":[[4,8],[74,8]]},"208":{"position":[[556,8],[1397,8],[1703,8],[1827,8],[2505,9]]},"212":{"position":[[0,8]]},"214":{"position":[[0,8]]},"216":{"position":[[4,8]]},"218":{"position":[[6,8],[94,8],[250,8]]},"220":{"position":[[0,8],[136,8],[562,8]]},"222":{"position":[[13,8],[282,8],[358,8],[383,8],[422,8]]},"224":{"position":[[19,8]]},"230":{"position":[[0,8],[72,8]]},"232":{"position":[[69,8],[237,8],[307,8]]},"238":{"position":[[167,8]]},"242":{"position":[[99,8],[355,8],[460,8],[564,8],[846,8],[964,8],[1054,8],[1171,8]]},"244":{"position":[[313,8],[514,8]]},"248":{"position":[[49,8],[343,8],[372,8],[613,8],[642,8],[875,8],[904,8]]},"252":{"position":[[20,8],[167,9]]},"254":{"position":[[29,8]]},"256":{"position":[[33,8],[58,8]]},"258":{"position":[[43,8],[96,8]]},"260":{"position":[[514,8],[673,8],[783,8],[913,8]]},"262":{"position":[[0,8]]},"266":{"position":[[0,8]]},"268":{"position":[[127,9],[201,9],[231,8]]},"271":{"position":[[981,8],[1080,8],[1110,8],[1480,8],[1881,8],[2036,8],[2210,9]]},"273":{"position":[[186,8]]},"275":{"position":[[227,8]]},"277":{"position":[[972,9]]},"279":{"position":[[0,8],[58,8],[368,8],[497,9]]},"281":{"position":[[0,8],[237,8]]},"283":{"position":[[5,8],[98,9],[182,8],[272,8]]},"285":{"position":[[18,8],[84,8]]},"287":{"position":[[5,8]]},"289":{"position":[[36,8]]},"291":{"position":[[438,8],[486,8]]},"295":{"position":[[0,8]]},"297":{"position":[[40,8]]},"299":{"position":[[43,8],[73,8],[141,9]]},"301":{"position":[[0,8]]},"303":{"position":[[16,8],[54,8],[147,9]]},"305":{"position":[[144,9]]},"309":{"position":[[113,9],[468,8],[965,8],[1070,8],[1202,8],[2201,8],[2665,9],[3007,8],[3168,8],[3465,8],[3680,8],[4077,8],[4277,9],[4356,8],[4558,9],[4595,8],[4841,8],[5237,8],[5313,8],[5583,8],[6020,8],[6032,8]]},"313":{"position":[[4,8],[63,8],[196,8],[228,8],[344,8]]},"315":{"position":[[11,8],[74,8],[95,8],[174,8],[342,8],[962,8]]},"317":{"position":[[34,8],[72,8]]},"319":{"position":[[33,9],[47,8],[242,8],[326,9],[487,8],[603,8],[734,8],[848,8],[965,8],[1241,8],[1474,9],[1670,8],[1719,8]]},"323":{"position":[[206,8]]},"327":{"position":[[130,8],[204,8],[526,9],[589,9],[651,8],[804,9],[942,8],[978,9],[1132,9],[1202,8],[1288,10],[1307,8],[1580,8],[1982,9]]},"329":{"position":[[1135,8],[1175,9],[1393,8],[1554,9],[3202,8]]},"331":{"position":[[0,8],[367,8],[487,8],[813,10]]},"333":{"position":[[76,9],[128,8]]},"337":{"position":[[889,8]]},"339":{"position":[[12,8]]},"345":{"position":[[7,10],[55,9],[99,9],[124,8]]},"349":{"position":[[388,8],[492,9],[983,8]]},"351":{"position":[[1420,8]]},"353":{"position":[[313,8]]},"355":{"position":[[123,8]]},"357":{"position":[[22,8],[159,9]]},"359":{"position":[[51,8],[214,9]]},"363":{"position":[[28,8],[106,9],[288,8],[352,8]]},"365":{"position":[[0,8],[129,8],[229,8]]},"369":{"position":[[78,8],[596,8],[641,8],[709,8]]},"371":{"position":[[14,8],[288,8],[365,8],[704,9]]},"378":{"position":[[154,8]]},"382":{"position":[[24,8],[110,8]]},"384":{"position":[[38,9],[205,9],[247,9]]},"386":{"position":[[16,8]]},"388":{"position":[[40,8]]},"390":{"position":[[11,8],[100,8]]},"392":{"position":[[49,8],[104,8],[255,8],[426,8],[532,8]]},"394":{"position":[[0,8],[322,8]]},"396":{"position":[[0,8],[73,8]]},"398":{"position":[[18,8],[226,9],[421,9],[535,9]]},"400":{"position":[[22,8],[203,8],[279,8],[361,8],[455,8]]},"402":{"position":[[458,9]]},"404":{"position":[[319,8],[552,8]]},"406":{"position":[[110,8],[607,9],[704,8]]},"408":{"position":[[396,9]]},"410":{"position":[[102,8],[536,8]]},"412":{"position":[[177,8],[246,8],[436,8]]},"414":{"position":[[0,8],[239,8]]},"423":{"position":[[94,8]]},"427":{"position":[[27,8]]},"429":{"position":[[0,8],[279,9],[580,8],[620,8],[662,8],[702,8],[757,8],[903,8]]},"432":{"position":[[0,8],[140,8],[533,8]]},"434":{"position":[[11,8]]},"436":{"position":[[50,8],[101,8],[210,9]]},"438":{"position":[[88,8],[180,8],[540,8],[579,8],[648,9],[849,9],[1252,8]]},"440":{"position":[[90,9],[162,8]]},"442":{"position":[[48,8],[553,8]]},"444":{"position":[[156,9]]},"446":{"position":[[104,9],[401,8]]},"448":{"position":[[411,8]]},"450":{"position":[[122,8],[222,8],[337,8],[508,8],[615,8]]},"452":{"position":[[16,8]]},"454":{"position":[[18,9],[210,9]]},"456":{"position":[[11,9]]},"460":{"position":[[89,8],[136,8]]},"462":{"position":[[28,8]]},"467":{"position":[[26,8]]},"469":{"position":[[404,9]]},"474":{"position":[[55,8],[185,9]]},"479":{"position":[[219,9]]},"481":{"position":[[5,8],[463,8]]},"483":{"position":[[469,8],[997,8],[1092,8],[1283,8],[1345,9]]},"485":{"position":[[131,8]]},"487":{"position":[[153,9],[838,8],[928,8]]},"492":{"position":[[28,9]]},"495":{"position":[[309,8],[435,8]]},"497":{"position":[[91,8],[517,8]]},"504":{"position":[[0,8],[276,8],[570,8]]},"506":{"position":[[209,8]]},"508":{"position":[[65,8]]},"514":{"position":[[214,8],[2245,8]]},"516":{"position":[[0,8],[48,8],[162,8],[263,8],[780,8]]},"518":{"position":[[274,8],[467,8]]},"520":{"position":[[149,8]]},"522":{"position":[[80,8]]},"524":{"position":[[0,8],[111,8],[662,8]]},"526":{"position":[[151,9],[161,8],[278,9]]},"528":{"position":[[113,8],[466,8]]},"530":{"position":[[1073,8],[1124,8]]},"534":{"position":[[87,8]]},"538":{"position":[[97,8],[531,8]]},"543":{"position":[[109,8],[303,9],[363,8]]},"550":{"position":[[29,8],[67,8],[938,8]]},"552":{"position":[[110,8]]},"554":{"position":[[690,8],[714,9]]},"556":{"position":[[451,8],[505,8]]},"558":{"position":[[148,8],[229,8]]},"560":{"position":[[623,8]]},"565":{"position":[[109,8],[302,9],[362,8]]},"569":{"position":[[406,8],[921,8]]},"574":{"position":[[537,9],[618,8]]},"576":{"position":[[32,8],[261,8],[367,9],[451,8],[841,8]]},"581":{"position":[[476,9],[558,8]]},"585":{"position":[[114,8]]},"600":{"position":[[245,8],[410,8]]},"602":{"position":[[0,8]]},"604":{"position":[[259,9],[2583,8]]},"606":{"position":[[423,8],[1328,8]]},"610":{"position":[[160,8]]},"615":{"position":[[0,8],[211,8]]},"625":{"position":[[189,9]]},"627":{"position":[[369,8]]},"629":{"position":[[29,8]]},"631":{"position":[[223,9],[2513,8]]},"633":{"position":[[1315,8]]},"635":{"position":[[163,8]]},"641":{"position":[[30,8],[78,8],[145,8],[254,9]]},"649":{"position":[[49,8],[172,8],[228,8]]},"651":{"position":[[5,8],[160,9]]},"653":{"position":[[20,8]]},"655":{"position":[[129,9]]},"657":{"position":[[11,8],[140,8]]},"659":{"position":[[80,9]]},"661":{"position":[[42,8],[113,8]]},"663":{"position":[[28,8],[139,8]]},"665":{"position":[[48,8],[99,8],[138,8]]},"667":{"position":[[241,8]]},"669":{"position":[[82,8],[260,9]]},"671":{"position":[[24,9]]},"673":{"position":[[277,8],[387,10]]},"679":{"position":[[214,8]]},"681":{"position":[[151,9]]},"683":{"position":[[128,9],[245,8]]},"685":{"position":[[4,8],[119,8],[266,8]]},"687":{"position":[[21,8],[51,8],[104,8],[142,8]]},"697":{"position":[[257,9]]},"699":{"position":[[29,8],[210,9]]},"701":{"position":[[222,9],[2549,8]]},"703":{"position":[[423,8],[1333,8]]}}}],["dappnode'",{"_index":198,"t":{"20":{"position":[[454,10]]},"41":{"position":[[15,10]]},"140":{"position":[[11,10]]},"180":{"position":[[271,10]]},"182":{"position":[[155,10]]},"303":{"position":[[175,10]]},"307":{"position":[[190,10]]},"315":{"position":[[272,10]]},"319":{"position":[[1499,10],[1950,10]]},"329":{"position":[[2001,10]]},"335":{"position":[[50,10]]},"371":{"position":[[765,10]]},"382":{"position":[[167,10]]},"396":{"position":[[158,10]]},"398":{"position":[[119,10],[155,10]]},"404":{"position":[[37,10]]},"406":{"position":[[295,10]]},"410":{"position":[[28,10]]},"412":{"position":[[73,10],[525,10]]},"429":{"position":[[162,10]]},"495":{"position":[[4,10]]},"514":{"position":[[7,10]]},"576":{"position":[[1272,10]]},"581":{"position":[[103,10]]},"583":{"position":[[30,10],[1001,10]]},"598":{"position":[[794,10]]},"653":{"position":[[95,10]]},"655":{"position":[[19,10]]},"687":{"position":[[229,10]]}}}],["dappnode.loc",{"_index":1163,"t":{"174":{"position":[[112,14]]}}}],["dappnode.s0",{"_index":1215,"t":{"180":{"position":[[376,11],[571,11]]},"184":{"position":[[205,11]]},"448":{"position":[[426,11]]}}}],["dappnode/dappnodesdk",{"_index":541,"t":{"53":{"position":[[199,21]]},"57":{"position":[[276,21],[454,21]]},"91":{"position":[[178,21]]},"93":{"position":[[152,21]]},"95":{"position":[[156,21]]}}}],["dappnode@.fullnode.dappnode:8545",{"_index":2637,"t":{"675":{"position":[[165,39]]},"677":{"position":[[251,41]]}}}],["http://:14515",{"_index":2477,"t":{"569":{"position":[[248,10]]}}}],["ipf",{"_index":553,"t":{"53":{"position":[[616,4]]},"93":{"position":[[76,4],[523,4]]},"95":{"position":[[990,4],[1151,7],[1178,7]]},"99":{"position":[[284,4],[381,4]]},"206":{"position":[[111,4]]},"208":{"position":[[192,4],[305,5],[443,4],[675,5]]},"220":{"position":[[198,4],[311,5],[449,4],[681,5]]},"329":{"position":[[853,4],[922,4],[963,4],[1104,4]]},"335":{"position":[[221,4]]},"524":{"position":[[19,4],[148,4],[194,4],[251,4],[595,4],[671,4]]},"526":{"position":[[21,4],[49,4],[184,4],[242,4],[313,4],[394,4],[426,4],[460,4],[497,4]]},"528":{"position":[[21,4],[57,4],[143,4],[197,4],[211,4],[252,4],[475,4],[600,4],[666,4]]},"530":{"position":[[112,5],[147,4],[218,4],[253,4],[282,4],[325,4],[356,4],[471,4],[620,4],[703,4],[891,4],[931,4],[967,4],[1054,4],[1183,5],[1301,4],[1314,4]]},"651":{"position":[[131,4]]}}}],["ipfs.dnp.dappnode.eth",{"_index":1298,"t":{"208":{"position":[[10,24]]},"212":{"position":[[61,23]]}}}],["ipfs/qmwwmb3xhuch6jncf6m6eqza4mw9phhtg7rqafhdr2ofi8",{"_index":1436,"t":{"230":{"position":[[172,55]]}}}],["ipfs/qmyjtig7vjq6xsnujqqjvj7qamccawtrgndahsifofre7o",{"_index":1439,"t":{"230":{"position":[[427,55]]}}}],["ipfs/zdj7wweq43g6jjvlwqwzpyhuamq6uywrjkbxfad11ve2lhhq7",{"_index":1441,"t":{"230":{"position":[[514,57]]}}}],["iphone/ipad",{"_index":1264,"t":{"195":{"position":[[311,11]]},"277":{"position":[[196,11]]}}}],["ipsum",{"_index":1,"t":{"3":{"position":[[6,5],[115,5],[158,5]]},"7":{"position":[[126,5],[235,5],[278,5],[305,5],[414,5],[457,5],[484,5],[593,5],[636,5],[663,5],[772,5],[815,5],[842,5],[951,5],[994,5],[1021,5],[1130,5],[1173,5],[1200,5],[1309,5],[1352,5],[1379,5],[1488,5],[1531,5],[1558,5],[1667,5],[1710,5],[1737,5],[1846,5],[1889,5],[1916,5],[2025,5],[2068,5],[2095,5],[2204,5],[2247,5],[2274,5],[2383,5],[2426,5],[2453,5],[2562,5],[2605,5],[2632,5],[2741,5],[2784,5],[2811,5],[2920,5],[2963,5]]},"39":{"position":[[7,5]]},"47":{"position":[[7,5]]}}}],["ipv4",{"_index":1817,"t":{"329":{"position":[[1888,4]]}}}],["irur",{"_index":452,"t":{"39":{"position":[[243,5]]},"47":{"position":[[243,5]]}}}],["ish",{"_index":800,"t":{"95":{"position":[[1261,3]]}}}],["isn't",{"_index":1754,"t":{"327":{"position":[[87,5]]},"329":{"position":[[1504,5]]},"576":{"position":[[979,5]]}}}],["iso",{"_index":2166,"t":{"436":{"position":[[59,3]]},"440":{"position":[[119,3]]},"442":{"position":[[57,3],[135,3],[148,4],[165,3],[445,4],[465,3]]},"444":{"position":[[9,3]]},"446":{"position":[[18,3]]},"448":{"position":[[30,4],[243,4],[371,4]]},"450":{"position":[[527,3]]},"657":{"position":[[154,3]]},"687":{"position":[[30,3]]}}}],["isp",{"_index":1816,"t":{"329":{"position":[[1869,3],[3275,3]]}}}],["issu",{"_index":503,"t":{"45":{"position":[[41,7],[146,5]]},"170":{"position":[[77,7]]},"189":{"position":[[746,6]]},"256":{"position":[[250,5]]},"264":{"position":[[22,5]]},"303":{"position":[[490,7]]},"309":{"position":[[4978,6],[5707,6]]},"327":{"position":[[81,5]]},"329":{"position":[[2826,7],[3113,5]]},"351":{"position":[[1652,6]]},"382":{"position":[[158,5]]},"412":{"position":[[121,5]]},"518":{"position":[[511,5]]},"530":{"position":[[101,5],[583,7],[725,6],[1273,6]]}}}],["it'",{"_index":1146,"t":{"168":{"position":[[151,4]]},"170":{"position":[[140,4]]},"174":{"position":[[594,4]]},"176":{"position":[[762,4],[1042,4]]},"189":{"position":[[492,4],[637,4]]},"202":{"position":[[85,4]]},"271":{"position":[[1805,4]]},"309":{"position":[[2251,4]]},"319":{"position":[[1263,4],[1386,4]]},"323":{"position":[[340,4]]},"329":{"position":[[2716,4]]},"357":{"position":[[75,4]]},"367":{"position":[[1188,4]]},"371":{"position":[[50,4]]},"406":{"position":[[82,4]]},"438":{"position":[[226,4],[1220,4]]},"487":{"position":[[1241,4]]},"514":{"position":[[637,4]]},"516":{"position":[[689,4]]},"518":{"position":[[374,4]]},"530":{"position":[[432,4]]},"554":{"position":[[0,4]]},"556":{"position":[[659,4]]},"560":{"position":[[90,4]]},"569":{"position":[[419,4]]},"576":{"position":[[1049,4]]},"579":{"position":[[120,4]]},"583":{"position":[[1017,4],[1098,4]]},"589":{"position":[[221,4],[526,4]]},"598":{"position":[[629,4]]},"602":{"position":[[1595,4]]},"604":{"position":[[386,4],[1137,4]]},"608":{"position":[[86,4]]},"612":{"position":[[488,4]]},"625":{"position":[[79,4],[199,4]]},"631":{"position":[[357,4],[1107,4]]},"637":{"position":[[940,4]]},"669":{"position":[[107,4]]},"701":{"position":[[360,4],[1142,4]]}}}],["it'll",{"_index":1767,"t":{"327":{"position":[[1659,5]]},"404":{"position":[[667,5]]},"438":{"position":[[925,5]]}}}],["item",{"_index":646,"t":{"67":{"position":[[107,5]]},"83":{"position":[[158,5]]},"236":{"position":[[130,5]]},"238":{"position":[[610,5]]},"244":{"position":[[86,5]]},"248":{"position":[[74,5]]},"250":{"position":[[96,5],[869,4]]},"254":{"position":[[90,5]]},"256":{"position":[[375,5]]},"258":{"position":[[163,5]]}}}],["iter",{"_index":1597,"t":{"301":{"position":[[190,7]]}}}],["itself",{"_index":1679,"t":{"315":{"position":[[410,7]]},"327":{"position":[[1683,7]]},"394":{"position":[[84,6]]},"404":{"position":[[273,7]]},"574":{"position":[[431,6]]}}}],["it’",{"_index":1825,"t":{"329":{"position":[[2562,4]]}}}],["jan",{"_index":310,"t":{"27":{"position":[[553,3],[974,3]]}}}],["job",{"_index":535,"t":{"53":{"position":[[117,5]]},"57":{"position":[[140,5]]},"404":{"position":[[681,3]]}}}],["john",{"_index":1746,"t":{"325":{"position":[[624,4]]}}}],["johndoe@gmail.com",{"_index":1750,"t":{"325":{"position":[[663,19]]}}}],["join",{"_index":508,"t":{"45":{"position":[[108,4]]},"117":{"position":[[396,5]]},"119":{"position":[[278,4]]},"567":{"position":[[577,4]]},"574":{"position":[[99,7]]},"576":{"position":[[495,7],[1245,7]]}}}],["journey",{"_index":1931,"t":{"355":{"position":[[110,7]]},"469":{"position":[[10,7]]},"600":{"position":[[270,7]]},"608":{"position":[[242,7]]},"610":{"position":[[37,8]]},"623":{"position":[[211,8]]},"627":{"position":[[97,7]]},"633":{"position":[[1415,7]]},"635":{"position":[[37,8]]},"667":{"position":[[250,8]]},"705":{"position":[[1381,7]]}}}],["json",{"_index":598,"t":{"61":{"position":[[111,4]]},"208":{"position":[[2384,4],[2410,5]]},"224":{"position":[[247,4],[325,4]]},"250":{"position":[[439,4],[534,5]]},"606":{"position":[[767,6]]},"633":{"position":[[462,4]]},"703":{"position":[[767,6]]},"705":{"position":[[511,4],[1141,4]]}}}],["jsonschema",{"_index":723,"t":{"87":{"position":[[170,10]]}}}],["jul",{"_index":295,"t":{"27":{"position":[[405,3],[703,3],[830,3],[1120,3]]},"29":{"position":[[34,3]]}}}],["juli",{"_index":280,"t":{"27":{"position":[[149,4]]}}}],["jump",{"_index":1139,"t":{"166":{"position":[[397,4]]},"244":{"position":[[37,5],[975,4]]}}}],["keep",{"_index":61,"t":{"12":{"position":[[101,4]]},"140":{"position":[[330,4],[413,4]]},"148":{"position":[[600,4],[671,4]]},"319":{"position":[[904,4]]},"327":{"position":[[1421,4],[1554,4]]},"400":{"position":[[351,4]]},"402":{"position":[[233,4]]},"404":{"position":[[27,4],[584,4]]},"406":{"position":[[100,4],[694,4]]},"410":{"position":[[0,7],[406,7]]},"412":{"position":[[503,7]]},"450":{"position":[[327,4]]},"514":{"position":[[2265,4]]},"532":{"position":[[184,7]]},"545":{"position":[[428,4]]},"554":{"position":[[587,4]]},"565":{"position":[[705,4]]},"567":{"position":[[327,4],[1223,4],[1799,4]]},"583":{"position":[[807,4]]},"604":{"position":[[373,4],[1111,4],[1648,4]]},"608":{"position":[[277,4]]},"631":{"position":[[344,4],[1081,4],[1560,4]]},"633":{"position":[[1450,4]]},"669":{"position":[[76,5]]},"701":{"position":[[347,4],[1116,4],[1597,4]]},"705":{"position":[[1416,4]]}}}],["kernel",{"_index":1881,"t":{"335":{"position":[[692,6]]}}}],["key",{"_index":1221,"t":{"182":{"position":[[246,5]]},"230":{"position":[[59,4]]},"238":{"position":[[49,3],[468,5],[548,4],[772,3],[956,6]]},"281":{"position":[[214,3]]},"319":{"position":[[182,3]]},"349":{"position":[[571,3],[603,3],[686,4],[729,4],[793,4]]},"351":{"position":[[1119,3]]},"404":{"position":[[11,3]]},"410":{"position":[[599,3]]},"446":{"position":[[185,3],[258,4]]},"483":{"position":[[243,3]]},"497":{"position":[[58,4],[194,4],[431,5],[690,4]]},"499":{"position":[[90,4]]},"510":{"position":[[113,3]]},"550":{"position":[[358,5]]},"556":{"position":[[358,3],[829,4],[1305,3]]},"558":{"position":[[731,4]]},"560":{"position":[[84,5]]},"563":{"position":[[424,5]]},"565":{"position":[[508,4]]},"567":{"position":[[706,3],[813,3],[1870,5]]},"598":{"position":[[123,4]]},"600":{"position":[[436,4]]},"604":{"position":[[74,5],[204,5],[223,4],[434,4],[1230,3],[1534,5],[1702,5],[1889,4],[1945,4],[2063,4],[2081,4],[2139,4],[2198,3],[2241,4],[2385,4],[2394,3]]},"606":{"position":[[723,5],[1206,3]]},"617":{"position":[[170,4]]},"627":{"position":[[395,4]]},"631":{"position":[[81,5],[168,5],[187,4],[405,4],[1207,3],[1614,5],[1801,4],[1857,4],[1975,5],[1994,4],[2053,4],[2112,3],[2155,4],[2299,4],[2308,3]]},"633":{"position":[[430,5],[1104,3]]},"697":{"position":[[284,4]]},"701":{"position":[[80,5],[167,5],[186,4],[408,4],[1651,5],[1838,4],[1894,4],[2012,5],[2031,4],[2090,4],[2149,3],[2192,4],[2336,4],[2345,3]]},"703":{"position":[[723,5],[1181,3]]}}}],["keyboard",{"_index":1230,"t":{"184":{"position":[[53,9],[118,9]]},"357":{"position":[[133,9]]},"423":{"position":[[27,8]]}}}],["keygen",{"_index":1789,"t":{"329":{"position":[[504,6]]},"604":{"position":[[35,6]]},"631":{"position":[[42,6],[115,6],[1349,6]]},"701":{"position":[[41,6],[114,6],[1241,6],[1386,6]]},"705":{"position":[[322,6]]}}}],["keystor",{"_index":1331,"t":{"208":{"position":[[1134,11]]},"238":{"position":[[936,10]]},"329":{"position":[[432,8],[609,8]]},"514":{"position":[[2428,10]]},"558":{"position":[[584,9]]},"596":{"position":[[77,9]]},"598":{"position":[[172,8],[224,9]]},"604":{"position":[[607,9],[753,8],[2471,10],[2507,9],[2687,9],[2873,9],[2950,8],[3066,10]]},"606":{"position":[[1375,10]]},"612":{"position":[[64,9]]},"631":{"position":[[578,9],[724,8],[2385,10],[2421,9],[2621,9],[2807,9],[2891,8],[3007,10]]},"633":{"position":[[1369,10]]},"637":{"position":[[516,9]]},"701":{"position":[[611,9],[757,8],[2422,10],[2458,9],[2650,9],[2836,9],[2919,8],[3035,10]]},"703":{"position":[[1386,9]]}}}],["keyword",{"_index":1378,"t":{"208":{"position":[[2819,11]]},"210":{"position":[[638,8]]},"258":{"position":[[0,9],[233,8]]}}}],["kick",{"_index":85,"t":{"12":{"position":[[408,4]]}}}],["kickstart",{"_index":2607,"t":{"627":{"position":[[82,9]]}}}],["kind",{"_index":2375,"t":{"514":{"position":[[2351,4]]},"663":{"position":[[106,5]]}}}],["know",{"_index":1123,"t":{"156":{"position":[[757,4]]},"176":{"position":[[880,4],[1074,4]]},"305":{"position":[[358,5]]},"319":{"position":[[1308,4]]},"331":{"position":[[769,7]]},"659":{"position":[[137,4]]}}}],["knowledg",{"_index":2518,"t":{"589":{"position":[[92,10]]},"615":{"position":[[381,10]]}}}],["known",{"_index":1238,"t":{"186":{"position":[[42,5]]},"200":{"position":[[47,5]]},"208":{"position":[[1291,5]]},"222":{"position":[[202,5]]},"224":{"position":[[178,5]]},"236":{"position":[[219,5]]},"240":{"position":[[184,5]]},"256":{"position":[[464,5]]},"465":{"position":[[33,5]]},"487":{"position":[[114,5]]},"506":{"position":[[34,5]]},"514":{"position":[[813,5]]}}}],["label",{"_index":1608,"t":{"305":{"position":[[96,7]]},"367":{"position":[[952,7]]},"376":{"position":[[224,7]]}}}],["labor",{"_index":433,"t":{"39":{"position":[[94,6]]},"47":{"position":[[94,6]]}}}],["labori",{"_index":444,"t":{"39":{"position":[[184,7]]},"47":{"position":[[184,7]]}}}],["laborum",{"_index":476,"t":{"39":{"position":[[438,9]]},"47":{"position":[[438,9]]}}}],["lack",{"_index":1566,"t":{"287":{"position":[[127,4]]}}}],["land",{"_index":1500,"t":{"260":{"position":[[554,7]]}}}],["landscap",{"_index":2217,"t":{"465":{"position":[[256,9]]}}}],["laptop",{"_index":1510,"t":{"268":{"position":[[290,8]]},"357":{"position":[[241,6]]}}}],["larg",{"_index":1616,"t":{"309":{"position":[[353,5],[990,7]]},"349":{"position":[[1728,7]]}}}],["last",{"_index":1009,"t":{"129":{"position":[[413,4]]},"134":{"position":[[655,4]]},"156":{"position":[[12,4]]},"208":{"position":[[2007,4]]},"244":{"position":[[874,4]]},"333":{"position":[[1101,4]]},"528":{"position":[[635,4]]},"556":{"position":[[1041,4]]}}}],["later",{"_index":873,"t":{"107":{"position":[[558,5]]},"279":{"position":[[244,6]]},"508":{"position":[[891,5]]},"565":{"position":[[742,5]]},"567":{"position":[[1260,5]]}}}],["latest",{"_index":537,"t":{"53":{"position":[[146,6]]},"57":{"position":[[174,6],[355,6]]},"129":{"position":[[542,6]]},"208":{"position":[[963,8]]},"230":{"position":[[162,9],[383,8]]},"394":{"position":[[139,6],[361,6]]},"438":{"position":[[960,6]]},"460":{"position":[[82,6],[197,6]]},"516":{"position":[[598,6]]},"530":{"position":[[491,6]]},"604":{"position":[[1202,6]]},"631":{"position":[[1172,6]]},"679":{"position":[[80,6]]},"701":{"position":[[1207,6]]}}}],["launch",{"_index":131,"t":{"16":{"position":[[32,6]]},"29":{"position":[[22,8]]},"195":{"position":[[145,6],[508,6],[686,6]]},"275":{"position":[[29,6]]},"277":{"position":[[8,6],[208,6],[750,6],[990,6]]},"309":{"position":[[66,9],[1869,9],[2080,6],[5418,8],[5554,9]]},"313":{"position":[[260,6]]},"315":{"position":[[206,6],[734,6],[883,9],[975,6]]},"339":{"position":[[3,6]]},"345":{"position":[[338,7],[375,7],[423,7],[454,9]]},"347":{"position":[[311,9]]},"349":{"position":[[16,7],[1882,8],[2353,7],[2415,9]]},"351":{"position":[[205,9],[708,9]]},"472":{"position":[[61,9]]},"504":{"position":[[80,9]]}}}],["launchpad",{"_index":2362,"t":{"514":{"position":[[515,10]]},"554":{"position":[[798,10],[819,9]]},"556":{"position":[[139,10]]},"558":{"position":[[69,9],[249,10],[384,10]]},"560":{"position":[[144,9],[381,9]]},"606":{"position":[[245,9],[281,9]]},"633":{"position":[[241,9]]},"703":{"position":[[239,9],[281,9]]}}}],["law",{"_index":2262,"t":{"479":{"position":[[299,3]]}}}],["layer",{"_index":1051,"t":{"134":{"position":[[952,5],[1110,5]]},"532":{"position":[[21,5],[456,5]]},"536":{"position":[[23,5]]},"538":{"position":[[307,6]]},"563":{"position":[[761,5]]},"594":{"position":[[268,5]]},"604":{"position":[[2001,5]]},"610":{"position":[[229,5]]},"631":{"position":[[1913,5]]},"701":{"position":[[1950,5]]}}}],["lead",{"_index":1201,"t":{"178":{"position":[[284,4]]},"189":{"position":[[725,4]]},"309":{"position":[[4298,4]]},"321":{"position":[[279,4]]},"408":{"position":[[239,7],[643,4]]}}}],["leak",{"_index":1700,"t":{"319":{"position":[[504,7]]},"604":{"position":[[1312,5]]},"631":{"position":[[1289,5]]},"701":{"position":[[1327,5]]}}}],["learn",{"_index":138,"t":{"16":{"position":[[115,5]]},"101":{"position":[[299,5],[519,5]]},"117":{"position":[[383,5]]},"200":{"position":[[181,5]]},"202":{"position":[[161,5]]},"408":{"position":[[879,5]]},"429":{"position":[[193,5]]},"589":{"position":[[565,8]]},"604":{"position":[[2359,5]]},"631":{"position":[[2273,5]]},"641":{"position":[[13,5]]},"701":{"position":[[2310,5]]}}}],["leav",{"_index":1338,"t":{"208":{"position":[[1537,5]]},"242":{"position":[[714,5]]},"406":{"position":[[1396,7]]},"508":{"position":[[270,5],[633,5],[1243,5]]}}}],["ledger",{"_index":2230,"t":{"469":{"position":[[303,6]]}}}],["left",{"_index":1269,"t":{"195":{"position":[[645,4]]},"305":{"position":[[279,4]]},"487":{"position":[[571,4]]}}}],["legaci",{"_index":2416,"t":{"538":{"position":[[401,6]]}}}],["length",{"_index":1459,"t":{"238":{"position":[[905,7],[1139,7],[1378,7]]},"244":{"position":[[405,7],[617,7],[776,7]]},"250":{"position":[[403,7],[706,7]]},"252":{"position":[[137,7]]},"254":{"position":[[132,7]]},"258":{"position":[[205,7]]},"262":{"position":[[295,7],[369,7]]},"266":{"position":[[61,7]]}}}],["less",{"_index":944,"t":{"121":{"position":[[177,5]]},"200":{"position":[[106,4]]},"291":{"position":[[107,4]]},"392":{"position":[[749,4]]},"516":{"position":[[694,4]]}}}],["lessen",{"_index":1986,"t":{"394":{"position":[[196,6]]}}}],["lesson",{"_index":2634,"t":{"665":{"position":[[162,7]]}}}],["let'",{"_index":1006,"t":{"129":{"position":[[207,5]]},"483":{"position":[[283,5]]},"487":{"position":[[874,5]]},"667":{"position":[[32,5]]}}}],["level",{"_index":940,"t":{"119":{"position":[[340,6]]},"189":{"position":[[83,5]]},"271":{"position":[[2245,5]]},"402":{"position":[[94,5],[267,6]]},"442":{"position":[[788,5]]}}}],["leverag",{"_index":1553,"t":{"281":{"position":[[85,10]]},"291":{"position":[[50,9]]},"301":{"position":[[229,10]]},"420":{"position":[[452,8]]},"472":{"position":[[199,10]]},"524":{"position":[[9,9]]},"536":{"position":[[41,10]]}}}],["li",{"_index":2088,"t":{"414":{"position":[[112,4]]}}}],["librari",{"_index":1416,"t":{"222":{"position":[[274,7],[300,7]]}}}],["licens",{"_index":1392,"t":{"208":{"position":[[3235,10]]},"210":{"position":[[735,7]]},"266":{"position":[[19,8]]}}}],["lid",{"_index":2023,"t":{"404":{"position":[[633,4]]},"406":{"position":[[376,4],[519,3],[1358,3]]}}}],["lido",{"_index":981,"t":{"125":{"position":[[738,5]]}}}],["lifecycl",{"_index":1461,"t":{"242":{"position":[[118,10]]}}}],["lifetim",{"_index":1573,"t":{"291":{"position":[[206,8]]}}}],["lift",{"_index":2038,"t":{"406":{"position":[[434,7]]}}}],["lighhous",{"_index":2430,"t":{"543":{"position":[[213,10]]},"552":{"position":[[214,10]]},"565":{"position":[[213,10]]}}}],["lighthous",{"_index":1782,"t":{"329":{"position":[[285,11]]},"602":{"position":[[257,11]]},"629":{"position":[[274,10]]}}}],["lightn",{"_index":1491,"t":{"256":{"position":[[870,9]]}}}],["lightweight",{"_index":1458,"t":{"238":{"position":[[513,11]]},"392":{"position":[[158,12]]}}}],["limit",{"_index":44,"t":{"7":{"position":[[81,5]]},"170":{"position":[[214,12]]},"174":{"position":[[10,12],[66,7]]},"176":{"position":[[811,12]]},"281":{"position":[[154,11]]},"287":{"position":[[274,12]]},"319":{"position":[[270,10],[415,11]]},"329":{"position":[[3279,11]]},"392":{"position":[[916,7]]},"469":{"position":[[271,7]]}}}],["line",{"_index":814,"t":{"99":{"position":[[49,5]]},"178":{"position":[[74,4],[229,4]]},"427":{"position":[[442,4]]},"429":{"position":[[130,5]]},"604":{"position":[[119,4]]},"615":{"position":[[363,4]]}}}],["linear",{"_index":326,"t":{"27":{"position":[[1230,6]]},"208":{"position":[[2241,7]]},"248":{"position":[[504,7]]}}}],["link",{"_index":1245,"t":{"189":{"position":[[358,5]]},"191":{"position":[[322,4]]},"208":{"position":[[2849,8]]},"210":{"position":[[665,5]]},"220":{"position":[[43,5]]},"240":{"position":[[80,6]]},"246":{"position":[[246,5]]},"260":{"position":[[8,5],[62,5],[152,5],[223,5]]},"271":{"position":[[313,5]]},"309":{"position":[[4486,6]]},"323":{"position":[[50,4]]},"325":{"position":[[586,6]]},"327":{"position":[[1363,4]]},"331":{"position":[[340,4]]},"349":{"position":[[612,6]]},"351":{"position":[[265,4]]},"376":{"position":[[219,4]]},"506":{"position":[[226,5]]},"508":{"position":[[82,6],[531,5]]},"538":{"position":[[200,4]]},"556":{"position":[[1151,5],[1190,4]]},"604":{"position":[[2668,4]]},"606":{"position":[[1261,4]]},"631":{"position":[[2602,4]]},"633":{"position":[[1221,4]]},"701":{"position":[[2631,4]]},"703":{"position":[[1239,4]]}}}],["linux",{"_index":1274,"t":{"195":{"position":[[1056,5]]},"277":{"position":[[402,5]]},"398":{"position":[[41,5],[194,5]]},"659":{"position":[[124,5]]}}}],["linux/amd64",{"_index":1329,"t":{"208":{"position":[[1080,15]]},"236":{"position":[[257,11],[336,15]]}}}],["linux/arm64",{"_index":1330,"t":{"208":{"position":[[1096,15]]},"236":{"position":[[298,11],[352,14]]}}}],["liquid",{"_index":90,"t":{"12":{"position":[[455,9]]},"27":{"position":[[2192,9]]},"29":{"position":[[0,9],[561,9]]},"35":{"position":[[159,9],[231,9]]},"406":{"position":[[957,6]]},"541":{"position":[[20,6],[187,6],[220,6]]},"572":{"position":[[291,6]]},"574":{"position":[[220,9]]},"596":{"position":[[262,9]]}}}],["list",{"_index":46,"t":{"7":{"position":[[109,4]]},"83":{"position":[[0,4]]},"142":{"position":[[54,4]]},"150":{"position":[[54,4]]},"162":{"position":[[54,4]]},"189":{"position":[[246,5],[563,4]]},"271":{"position":[[201,5]]},"277":{"position":[[703,4]]},"327":{"position":[[93,7]]},"429":{"position":[[249,4]]},"485":{"position":[[30,6]]},"499":{"position":[[95,6]]},"516":{"position":[[209,4]]},"576":{"position":[[196,5]]},"583":{"position":[[198,5]]},"633":{"position":[[476,4]]},"681":{"position":[[73,4]]}}}],["listen",{"_index":1477,"t":{"250":{"position":[[785,7]]},"309":{"position":[[4445,7]]}}}],["littl",{"_index":2507,"t":{"581":{"position":[[372,6]]},"583":{"position":[[622,6]]},"596":{"position":[[280,6]]}}}],["live",{"_index":2621,"t":{"641":{"position":[[181,4]]}}}],["lm",{"_index":363,"t":{"29":{"position":[[17,4],[143,2],[499,3]]},"37":{"position":[[73,2]]}}}],["load",{"_index":1887,"t":{"337":{"position":[[216,6]]},"429":{"position":[[992,4]]},"558":{"position":[[131,4]]}}}],["local",{"_index":825,"t":{"99":{"position":[[553,5]]},"168":{"position":[[4,5],[83,5]]},"170":{"position":[[89,5],[171,5],[227,5]]},"174":{"position":[[38,5],[325,5],[426,5],[634,5],[728,5],[779,6]]},"176":{"position":[[526,5],[623,5],[747,5]]},"182":{"position":[[41,5]]},"204":{"position":[[0,5],[66,5]]},"260":{"position":[[682,5],[792,5],[922,5]]},"271":{"position":[[868,5],[909,5],[938,5],[1277,5],[1345,6],[1361,5],[1390,5],[1418,5],[1514,5],[1707,5],[1722,5],[1829,5],[1951,5]]},"293":{"position":[[116,9]]},"301":{"position":[[151,5]]},"329":{"position":[[916,5],[1117,5],[1572,5],[2069,5],[2112,5]]},"335":{"position":[[239,5],[409,5]]},"483":{"position":[[1442,8]]},"514":{"position":[[2359,5]]},"518":{"position":[[256,5],[527,5]]},"530":{"position":[[201,5],[302,6],[697,5],[961,5],[1177,5]]},"581":{"position":[[114,5]]},"608":{"position":[[175,5]]}}}],["local/remot",{"_index":1795,"t":{"329":{"position":[[947,12]]}}}],["localhost:5002",{"_index":762,"t":{"93":{"position":[[571,16]]}}}],["localhost:8545",{"_index":793,"t":{"95":{"position":[[912,16]]}}}],["locat",{"_index":166,"t":{"18":{"position":[[327,6]]},"204":{"position":[[276,9]]},"271":{"position":[[2062,8]]},"293":{"position":[[489,6]]},"315":{"position":[[715,8]]},"327":{"position":[[1341,6]]},"329":{"position":[[3256,8]]},"349":{"position":[[2318,7]]},"351":{"position":[[1136,8]]},"376":{"position":[[304,9]]},"398":{"position":[[342,9]]},"406":{"position":[[641,8]]},"427":{"position":[[691,9]]},"485":{"position":[[0,6]]},"587":{"position":[[8,6]]},"639":{"position":[[363,6]]},"705":{"position":[[611,6],[816,9]]}}}],["lock",{"_index":1995,"t":{"398":{"position":[[402,6]]}}}],["lodestar",{"_index":1785,"t":{"329":{"position":[[313,9]]},"543":{"position":[[224,9]]},"552":{"position":[[225,9]]},"565":{"position":[[224,9]]},"602":{"position":[[286,9]]},"629":{"position":[[304,8]]}}}],["log",{"_index":888,"t":{"109":{"position":[[432,6]]},"138":{"position":[[606,7]]},"142":{"position":[[27,3],[122,6]]},"144":{"position":[[587,7]]},"150":{"position":[[27,3],[122,6]]},"162":{"position":[[27,3],[122,6]]},"164":{"position":[[5,6]]},"172":{"position":[[207,3]]},"329":{"position":[[557,4],[2753,4],[2970,4]]},"343":{"position":[[36,3]]},"367":{"position":[[353,3],[922,6]]},"420":{"position":[[1223,3]]},"508":{"position":[[1018,4]]},"510":{"position":[[219,4]]},"514":{"position":[[1827,5],[2040,4]]},"602":{"position":[[1298,5]]},"629":{"position":[[989,5]]},"699":{"position":[[944,5]]}}}],["log_verbos",{"_index":2108,"t":{"418":{"position":[[379,14],[605,14]]}}}],["logic",{"_index":2435,"t":{"550":{"position":[[198,7]]},"563":{"position":[[265,7]]}}}],["login",{"_index":1737,"t":{"323":{"position":[[59,5]]},"378":{"position":[[67,5],[123,5]]},"380":{"position":[[114,5]]},"661":{"position":[[259,5]]}}}],["logo",{"_index":2396,"t":{"530":{"position":[[16,5]]}}}],["long",{"_index":41,"t":{"7":{"position":[[30,4]]},"27":{"position":[[1804,4]]},"81":{"position":[[238,4]]},"140":{"position":[[526,4]]},"148":{"position":[[784,4]]},"158":{"position":[[1072,4]]},"238":{"position":[[266,4]]},"291":{"position":[[344,4],[453,4]]},"327":{"position":[[1145,4]]},"329":{"position":[[3139,4],[3353,4],[3512,4]]},"602":{"position":[[733,4]]},"612":{"position":[[584,4]]},"629":{"position":[[424,4]]},"699":{"position":[[379,4]]}}}],["longer",{"_index":339,"t":{"27":{"position":[[1448,6]]},"129":{"position":[[833,6]]},"152":{"position":[[1761,6],[1871,6]]},"158":{"position":[[922,6]]},"180":{"position":[[592,6]]},"327":{"position":[[1322,6]]},"329":{"position":[[3486,6]]}}}],["look",{"_index":1007,"t":{"129":{"position":[[220,4]]},"329":{"position":[[2923,5]]},"359":{"position":[[131,4]]},"367":{"position":[[933,4]]},"404":{"position":[[647,4]]},"416":{"position":[[33,5]]},"418":{"position":[[47,4]]},"427":{"position":[[468,4]]},"487":{"position":[[1692,7],[1937,4]]},"514":{"position":[[1925,4]]},"560":{"position":[[285,4]]},"629":{"position":[[122,5]]},"669":{"position":[[157,7]]},"683":{"position":[[189,7]]},"699":{"position":[[116,5]]}}}],["loosen",{"_index":2035,"t":{"406":{"position":[[381,6]]}}}],["lorem",{"_index":0,"t":{"3":{"position":[[0,5],[152,5]]},"7":{"position":[[120,5],[272,5],[299,5],[451,5],[478,5],[630,5],[657,5],[809,5],[836,5],[988,5],[1015,5],[1167,5],[1194,5],[1346,5],[1373,5],[1525,5],[1552,5],[1704,5],[1731,5],[1883,5],[1910,5],[2062,5],[2089,5],[2241,5],[2268,5],[2420,5],[2447,5],[2599,5],[2626,5],[2778,5],[2805,5],[2957,5]]},"39":{"position":[[0,6]]},"47":{"position":[[0,6]]}}}],["lose",{"_index":1042,"t":{"134":{"position":[[567,4]]},"160":{"position":[[245,4]]},"208":{"position":[[1731,4],[1855,4]]},"242":{"position":[[992,4],[1199,4]]},"349":{"position":[[780,6],[814,6]]},"376":{"position":[[444,4],[498,4]]},"398":{"position":[[359,4]]},"438":{"position":[[873,4]]},"558":{"position":[[713,4]]},"604":{"position":[[446,4],[744,4]]},"631":{"position":[[417,4],[715,4]]},"637":{"position":[[116,4]]},"701":{"position":[[420,4],[748,4]]}}}],["lost",{"_index":1050,"t":{"134":{"position":[[889,4]]},"160":{"position":[[359,4]]},"208":{"position":[[1499,4]]},"242":{"position":[[676,4]]},"321":{"position":[[227,4]]},"327":{"position":[[1717,4]]},"380":{"position":[[302,4],[338,4]]}}}],["lot",{"_index":983,"t":{"125":{"position":[[787,4]]},"518":{"position":[[846,3],[904,3]]}}}],["lotteri",{"_index":971,"t":{"125":{"position":[[324,7],[428,7],[823,7]]}}}],["low",{"_index":963,"t":{"125":{"position":[[106,3],[208,3]]},"166":{"position":[[184,4]]},"404":{"position":[[605,4]]},"627":{"position":[[139,3]]}}}],["lower",{"_index":2011,"t":{"404":{"position":[[158,5]]},"514":{"position":[[1236,5]]},"536":{"position":[[105,5]]},"604":{"position":[[2897,5]]},"631":{"position":[[2831,5]]},"701":{"position":[[2860,5]]}}}],["lowest",{"_index":2492,"t":{"572":{"position":[[522,6]]}}}],["lowpow",{"_index":2399,"t":{"530":{"position":[[909,8]]}}}],["lp",{"_index":385,"t":{"33":{"position":[[20,2],[87,2]]}}}],["lsd",{"_index":2481,"t":{"572":{"position":[[16,3]]},"596":{"position":[[350,3]]},"598":{"position":[[11,4],[35,3],[368,4]]},"619":{"position":[[15,4],[187,4],[316,3]]}}}],["luck",{"_index":938,"t":{"119":{"position":[[221,4]]},"121":{"position":[[11,4],[535,4]]},"125":{"position":[[1171,4]]}}}],["lucki",{"_index":947,"t":{"121":{"position":[[259,5]]}}}],["lucr",{"_index":2539,"t":{"598":{"position":[[519,10]]}}}],["lukso",{"_index":1633,"t":{"309":{"position":[[1555,6],[1599,5]]},"371":{"position":[[568,5]]},"615":{"position":[[114,6]]},"617":{"position":[[66,5],[292,5]]},"619":{"position":[[102,6]]},"675":{"position":[[101,6]]},"693":{"position":[[0,5],[181,5]]},"695":{"position":[[125,5]]},"697":{"position":[[0,5],[159,6],[194,6],[239,5],[293,6],[321,5]]},"699":{"position":[[72,5],[131,6],[170,5],[181,5],[258,5],[269,5],[287,5]]},"701":{"position":[[29,5],[262,5],[563,5],[1229,5],[1374,5],[2482,6],[2591,5],[2889,5],[3121,6]]},"703":{"position":[[179,5],[233,5],[275,5],[876,5],[1192,5],[1353,5]]},"705":{"position":[[310,5],[623,5],[1071,5],[1257,5]]}}}],["lukso'",{"_index":2654,"t":{"695":{"position":[[65,7]]}}}],["lyx",{"_index":2657,"t":{"697":{"position":[[308,3]]},"701":{"position":[[1001,3],[1067,3],[1158,3]]},"703":{"position":[[53,3],[168,3],[844,3],[927,3],[1033,3]]}}}],["machin",{"_index":1001,"t":{"129":{"position":[[27,7]]},"131":{"position":[[46,7]]},"176":{"position":[[387,9]]},"184":{"position":[[161,8]]},"193":{"position":[[201,7]]},"204":{"position":[[122,7]]},"273":{"position":[[195,7]]},"279":{"position":[[397,7]]},"283":{"position":[[64,7],[237,7],[314,8]]},"285":{"position":[[203,7]]},"291":{"position":[[11,7],[406,7]]},"309":{"position":[[6,7],[45,8]]},"313":{"position":[[466,7],[540,7]]},"315":{"position":[[310,8],[502,7]]},"333":{"position":[[55,7]]},"349":{"position":[[311,7]]},"388":{"position":[[8,7]]},"392":{"position":[[225,8]]},"398":{"position":[[200,7]]},"412":{"position":[[89,8]]},"440":{"position":[[137,7]]},"444":{"position":[[210,7]]},"446":{"position":[[70,7],[125,8],[222,7],[344,7]]},"450":{"position":[[68,7]]},"454":{"position":[[182,7]]},"458":{"position":[[74,7]]},"518":{"position":[[889,7],[980,8]]}}}],["maco",{"_index":1265,"t":{"195":{"position":[[502,5],[535,6]]},"277":{"position":[[690,5]]}}}],["made",{"_index":334,"t":{"27":{"position":[[1345,4]]},"176":{"position":[[12,4]]},"406":{"position":[[1015,4]]},"472":{"position":[[297,4]]},"685":{"position":[[165,4]]}}}],["magic",{"_index":2556,"t":{"602":{"position":[[895,5]]},"629":{"position":[[586,5]]},"695":{"position":[[73,5]]},"699":{"position":[[541,5]]}}}],["magna",{"_index":435,"t":{"39":{"position":[[111,5]]},"47":{"position":[[111,5]]}}}],["main",{"_index":561,"t":{"57":{"position":[[25,6],[68,6],[682,5]]},"101":{"position":[[537,4]]},"105":{"position":[[181,4]]},"111":{"position":[[26,4]]},"176":{"position":[[58,4]]},"226":{"position":[[58,4]]},"252":{"position":[[0,4]]},"256":{"position":[[658,4],[959,4]]},"279":{"position":[[196,4]]},"289":{"position":[[71,4]]},"307":{"position":[[43,4]]},"315":{"position":[[48,4]]},"410":{"position":[[147,4]]},"532":{"position":[[158,4]]},"536":{"position":[[186,4]]},"589":{"position":[[351,4]]},"600":{"position":[[345,4]]},"627":{"position":[[304,4]]},"697":{"position":[[112,4]]}}}],["main.yml",{"_index":560,"t":{"57":{"position":[[10,8]]}}}],["mainli",{"_index":1194,"t":{"176":{"position":[[767,6]]}}}],["mainnet",{"_index":49,"t":{"10":{"position":[[5,7]]},"12":{"position":[[562,7]]},"23":{"position":[[17,7]]},"27":{"position":[[2058,7]]},"29":{"position":[[397,7]]},"35":{"position":[[24,7]]},"97":{"position":[[222,8]]},"113":{"position":[[52,7]]},"208":{"position":[[2438,9]]},"250":{"position":[[562,8]]},"309":{"position":[[1312,8],[1368,8]]},"508":{"position":[[406,8],[501,7]]},"522":{"position":[[124,7]]},"538":{"position":[[223,8],[370,8],[497,7],[657,7]]},"541":{"position":[[502,7]]},"550":{"position":[[981,7]]},"554":{"position":[[842,7]]},"563":{"position":[[193,7]]},"565":{"position":[[407,8]]},"585":{"position":[[271,8]]},"589":{"position":[[117,7]]},"629":{"position":[[20,8]]},"631":{"position":[[140,8]]},"673":{"position":[[31,7]]},"675":{"position":[[41,8]]},"699":{"position":[[20,8]]},"701":{"position":[[139,8]]}}}],["mainservic",{"_index":1319,"t":{"208":{"position":[[828,14]]},"210":{"position":[[200,11]]}}}],["mainstream",{"_index":2525,"t":{"594":{"position":[[68,10]]}}}],["maintain",{"_index":1662,"t":{"309":{"position":[[5283,11]]},"331":{"position":[[420,8]]},"438":{"position":[[716,8]]},"467":{"position":[[159,8]]},"516":{"position":[[569,11]]},"524":{"position":[[286,8]]}}}],["mainten",{"_index":1987,"t":{"394":{"position":[[203,11]]},"412":{"position":[[378,12]]}}}],["major",{"_index":784,"t":{"95":{"position":[[663,8]]},"125":{"position":[[77,8]]},"136":{"position":[[346,8]]},"204":{"position":[[305,5]]},"208":{"position":[[1939,6]]},"244":{"position":[[806,6]]}}}],["make",{"_index":81,"t":{"12":{"position":[[363,4]]},"20":{"position":[[300,6],[609,4],[893,6]]},"61":{"position":[[157,5]]},"97":{"position":[[43,5]]},"148":{"position":[[237,4]]},"152":{"position":[[950,4],[1145,4]]},"156":{"position":[[38,4]]},"279":{"position":[[266,4]]},"281":{"position":[[232,4]]},"299":{"position":[[239,4]]},"327":{"position":[[191,4],[1911,4]]},"329":{"position":[[659,4],[1081,4],[2084,4]]},"365":{"position":[[197,4]]},"367":{"position":[[1178,4]]},"406":{"position":[[1236,4]]},"427":{"position":[[384,4]]},"432":{"position":[[37,5]]},"438":{"position":[[441,4]]},"442":{"position":[[248,4]]},"446":{"position":[[439,4]]},"460":{"position":[[52,4]]},"487":{"position":[[1788,5],[2033,6]]},"490":{"position":[[190,6]]},"518":{"position":[[679,6],[728,6]]},"528":{"position":[[509,4]]},"530":{"position":[[631,4]]},"545":{"position":[[414,4]]},"550":{"position":[[46,4]]},"558":{"position":[[395,4],[655,4]]},"560":{"position":[[495,4]]},"567":{"position":[[313,4],[341,4]]},"569":{"position":[[36,4],[259,4]]},"576":{"position":[[1016,5]]},"583":{"position":[[793,4],[1152,4]]},"591":{"position":[[114,4]]},"598":{"position":[[128,4],[234,4]]},"602":{"position":[[9,5],[575,4],[923,4]]},"604":{"position":[[2714,4]]},"606":{"position":[[1025,4]]},"608":{"position":[[310,4]]},"615":{"position":[[9,5]]},"629":{"position":[[38,5],[614,4]]},"631":{"position":[[2648,4]]},"633":{"position":[[522,6],[919,4],[1483,4]]},"637":{"position":[[8,4]]},"653":{"position":[[66,4]]},"663":{"position":[[46,4]]},"699":{"position":[[38,5],[569,4]]},"701":{"position":[[2677,4]]},"703":{"position":[[852,4],[1000,4]]},"705":{"position":[[544,4],[1449,4]]}}}],["malici",{"_index":1121,"t":{"156":{"position":[[289,9]]},"528":{"position":[[350,9]]},"621":{"position":[[255,9]]},"679":{"position":[[297,9]]}}}],["manag",{"_index":189,"t":{"20":{"position":[[321,8]]},"41":{"position":[[161,6]]},"49":{"position":[[132,6]]},"95":{"position":[[85,7]]},"97":{"position":[[277,8]]},"99":{"position":[[633,7]]},"138":{"position":[[640,6]]},"142":{"position":[[307,6]]},"144":{"position":[[621,6]]},"178":{"position":[[122,10]]},"197":{"position":[[177,6]]},"256":{"position":[[978,6]]},"277":{"position":[[770,7]]},"309":{"position":[[2474,10],[4912,6],[5090,11],[5173,6],[5299,8]]},"319":{"position":[[795,6]]},"429":{"position":[[58,6]]},"481":{"position":[[341,8]]},"497":{"position":[[173,6]]},"502":{"position":[[717,6]]},"504":{"position":[[94,8],[198,10],[622,10]]},"506":{"position":[[53,8]]},"514":{"position":[[2527,8],[2710,8]]},"545":{"position":[[380,10]]},"550":{"position":[[496,8]]},"565":{"position":[[626,7]]},"567":{"position":[[279,10],[454,6],[978,6],[1144,7]]},"574":{"position":[[575,10]]},"576":{"position":[[777,11],[893,6]]},"581":{"position":[[514,10]]},"583":{"position":[[894,11]]}}}],["mandatori",{"_index":1655,"t":{"309":{"position":[[4403,9]]},"420":{"position":[[427,9]]}}}],["mani",{"_index":1676,"t":{"315":{"position":[[216,4]]},"329":{"position":[[3632,4]]},"438":{"position":[[613,4]]},"487":{"position":[[163,4]]},"604":{"position":[[1884,4]]},"631":{"position":[[1796,4]]},"701":{"position":[[1833,4]]}}}],["manifest",{"_index":803,"t":{"95":{"position":[[1564,9]]},"99":{"position":[[439,8]]},"206":{"position":[[21,8]]}}}],["manifest/issues/new",{"_index":1484,"t":{"256":{"position":[[314,19]]}}}],["manner",{"_index":2342,"t":{"504":{"position":[[551,7]]}}}],["mantra",{"_index":2599,"t":{"623":{"position":[[18,7]]}}}],["manual",{"_index":1026,"t":{"129":{"position":[[1735,8],[2022,8]]},"144":{"position":[[989,6]]},"146":{"position":[[139,6],[420,6]]},"148":{"position":[[316,8]]},"152":{"position":[[499,6]]},"313":{"position":[[310,8]]},"323":{"position":[[122,8]]},"327":{"position":[[1694,6]]},"367":{"position":[[657,7]]},"369":{"position":[[167,8]]},"442":{"position":[[193,6]]}}}],["manualsubscript",{"_index":1025,"t":{"129":{"position":[[1701,19]]}}}],["manufactur",{"_index":1951,"t":{"367":{"position":[[1088,12]]},"446":{"position":[[230,13]]}}}],["map",{"_index":589,"t":{"59":{"position":[[182,9]]},"71":{"position":[[0,4],[134,7],[1489,8],[1698,3]]},"226":{"position":[[112,6]]},"228":{"position":[[161,9]]},"514":{"position":[[1475,8],[1519,8],[1628,8]]}}}],["mark",{"_index":2224,"t":{"469":{"position":[[48,6]]}}}],["markdown",{"_index":22,"t":{"5":{"position":[[30,8]]},"18":{"position":[[72,8]]},"61":{"position":[[171,8]]},"63":{"position":[[218,8]]},"75":{"position":[[158,8]]},"218":{"position":[[192,8]]},"220":{"position":[[30,8]]},"240":{"position":[[67,8]]},"246":{"position":[[233,8]]}}}],["marketplac",{"_index":1901,"t":{"341":{"position":[[14,12]]},"343":{"position":[[234,12]]}}}],["master",{"_index":534,"t":{"53":{"position":[[108,8]]},"57":{"position":[[77,8],[688,7]]}}}],["match",{"_index":2329,"t":{"499":{"position":[[65,5]]}}}],["matter",{"_index":957,"t":{"123":{"position":[[246,6]]},"481":{"position":[[518,8]]},"483":{"position":[[1333,8]]}}}],["max_peer",{"_index":2110,"t":{"418":{"position":[[419,10]]}}}],["maxim",{"_index":924,"t":{"117":{"position":[[115,8]]},"119":{"position":[[230,10]]},"121":{"position":[[307,8]]},"487":{"position":[[1635,10]]}}}],["maximum",{"_index":1482,"t":{"256":{"position":[[109,7]]},"392":{"position":[[316,7]]},"516":{"position":[[510,7]]},"574":{"position":[[504,7]]}}}],["mdx",{"_index":25,"t":{"5":{"position":[[57,4]]}}}],["me!network",{"_index":1273,"t":{"195":{"position":[[853,17]]}}}],["setup",{"_index":583,"t":{"59":{"position":[[4,5]]},"61":{"position":[[41,5],[410,5]]},"65":{"position":[[14,5]]},"67":{"position":[[0,5],[43,5]]},"71":{"position":[[9,5]]},"170":{"position":[[3,5]]},"208":{"position":[[1431,5]]},"242":{"position":[[494,5]]},"281":{"position":[[74,7]]},"293":{"position":[[407,5]]},"309":{"position":[[440,5]]},"321":{"position":[[557,5]]},"351":{"position":[[155,5]]},"353":{"position":[[4,5]]},"392":{"position":[[701,5]]},"410":{"position":[[581,5]]},"420":{"position":[[197,5]]},"436":{"position":[[178,5]]},"438":{"position":[[434,6]]},"442":{"position":[[200,5],[737,6]]},"450":{"position":[[285,5]]},"508":{"position":[[141,5]]},"554":{"position":[[990,6]]},"569":{"position":[[308,6]]},"574":{"position":[[552,6]]},"581":{"position":[[491,6]]},"598":{"position":[[0,5]]},"649":{"position":[[40,5]]},"657":{"position":[[112,5]]}}}],["seven",{"_index":1714,"t":{"319":{"position":[[1194,5]]}}}],["sever",{"_index":1658,"t":{"309":{"position":[[4762,7]]},"315":{"position":[[444,7]]},"329":{"position":[[3670,7],[3792,7]]},"331":{"position":[[643,7]]},"612":{"position":[[621,7]]}}}],["shape",{"_index":2315,"t":{"492":{"position":[[208,7]]}}}],["shapella",{"_index":2658,"t":{"701":{"position":[[569,9]]}}}],["share",{"_index":857,"t":{"105":{"position":[[115,6]]},"107":{"position":[[150,5]]},"121":{"position":[[439,5]]},"123":{"position":[[319,5]]},"136":{"position":[[102,6]]},"502":{"position":[[660,5]]},"514":{"position":[[1780,5]]},"554":{"position":[[424,7]]},"556":{"position":[[1172,5]]},"569":{"position":[[835,7]]},"697":{"position":[[6,6]]}}}],["sheer",{"_index":984,"t":{"125":{"position":[[853,5]]}}}],["shell",{"_index":1207,"t":{"180":{"position":[[12,6]]}}}],["shift",{"_index":2545,"t":{"600":{"position":[[84,5]]}}}],["shift+c",{"_index":1930,"t":{"351":{"position":[[1327,10]]}}}],["shop",{"_index":2164,"t":{"432":{"position":[[561,5]]}}}],["short",{"_index":1404,"t":{"218":{"position":[[0,5]]},"250":{"position":[[318,5]]},"285":{"position":[[4,5]]},"291":{"position":[[544,5]]},"309":{"position":[[5903,5]]},"351":{"position":[[1815,5]]},"406":{"position":[[63,5]]}}}],["shortdescript",{"_index":1303,"t":{"208":{"position":[[88,19]]},"210":{"position":[[100,16]]}}}],["show",{"_index":340,"t":{"27":{"position":[[1542,4],[1601,4]]},"67":{"position":[[31,4]]},"71":{"position":[[728,4]]},"79":{"position":[[132,4]]},"81":{"position":[[9,4]]},"91":{"position":[[482,4],[680,4],[714,4]]},"93":{"position":[[458,4],[888,4],[922,4]]},"95":{"position":[[466,4],[1779,4],[1813,4]]},"99":{"position":[[1047,4],[1097,4],[1131,4]]},"224":{"position":[[73,5]]},"244":{"position":[[270,4],[471,4]]},"271":{"position":[[606,4],[903,5]]},"420":{"position":[[339,5]]},"560":{"position":[[159,4]]},"610":{"position":[[325,4]]},"637":{"position":[[187,5],[388,5]]},"705":{"position":[[127,5],[233,5]]}}}],["shown",{"_index":668,"t":{"71":{"position":[[574,5]]},"206":{"position":[[253,5]]},"216":{"position":[[157,5]]},"242":{"position":[[39,5],[327,5],[538,5],[819,5],[1028,5]]},"244":{"position":[[698,5]]},"246":{"position":[[17,5],[212,5]]},"258":{"position":[[74,5]]},"260":{"position":[[76,5],[183,5],[237,5]]},"271":{"position":[[365,5]]},"565":{"position":[[513,5]]},"567":{"position":[[820,5]]},"604":{"position":[[1620,5]]},"631":{"position":[[1532,5]]},"701":{"position":[[1569,5]]}}}],["shut",{"_index":2075,"t":{"410":{"position":[[526,4]]}}}],["shutdown",{"_index":2204,"t":{"458":{"position":[[117,8]]}}}],["side",{"_index":1270,"t":{"195":{"position":[[650,4]]},"285":{"position":[[219,5]]},"412":{"position":[[322,4]]},"487":{"position":[[581,4]]},"497":{"position":[[366,4]]},"619":{"position":[[289,4]]}}}],["sidebar",{"_index":1177,"t":{"174":{"position":[[678,7]]}}}],["sign",{"_index":1884,"t":{"337":{"position":[[167,9],[234,7],[303,8],[361,7],[425,7]]},"343":{"position":[[95,7],[129,4],[196,7]]},"550":{"position":[[590,6]]},"560":{"position":[[534,7]]},"604":{"position":[[273,7],[804,4]]},"631":{"position":[[237,7],[775,4]]},"701":{"position":[[236,7],[808,4]]}}}],["signal",{"_index":1717,"t":{"319":{"position":[[1250,7],[1359,7]]}}}],["signatur",{"_index":129,"t":{"14":{"position":[[384,10]]},"495":{"position":[[74,9],[121,9]]},"499":{"position":[[46,9],[234,9]]},"550":{"position":[[619,9]]},"556":{"position":[[1083,9]]},"695":{"position":[[205,9]]}}}],["signific",{"_index":1621,"t":{"309":{"position":[[501,11],[1262,11]]},"554":{"position":[[249,11]]},"569":{"position":[[668,11]]}}}],["significantli",{"_index":1556,"t":{"283":{"position":[[113,13]]}}}],["signing_bls_missing_identifier_count",{"_index":1892,"t":{"337":{"position":[[444,37]]}}}],["signing_bls_signing_dur",{"_index":1888,"t":{"337":{"position":[[257,29]]}}}],["signing_bls_signing_duration_count",{"_index":1890,"t":{"337":{"position":[[312,35]]}}}],["signing_bls_signing_duration_sum",{"_index":1891,"t":{"337":{"position":[[380,33]]}}}],["signing_signers_loaded_count",{"_index":1885,"t":{"337":{"position":[[177,29]]}}}],["silenc",{"_index":738,"t":{"91":{"position":[[426,7]]},"93":{"position":[[402,7]]},"95":{"position":[[410,7]]},"99":{"position":[[991,7]]}}}],["silent",{"_index":737,"t":{"91":{"position":[[419,6]]},"93":{"position":[[395,6]]},"95":{"position":[[403,6]]},"99":{"position":[[984,6]]}}}],["similar",{"_index":1649,"t":{"309":{"position":[[3400,7]]},"367":{"position":[[811,7],[1024,7]]},"629":{"position":[[0,7]]},"699":{"position":[[0,7]]}}}],["simpl",{"_index":126,"t":{"14":{"position":[[363,6]]},"59":{"position":[[234,6]]},"97":{"position":[[98,6]]},"144":{"position":[[131,7]]},"148":{"position":[[143,6]]},"152":{"position":[[630,6]]},"160":{"position":[[32,6],[164,6]]},"268":{"position":[[67,6]]},"416":{"position":[[2,6]]},"487":{"position":[[501,6]]},"514":{"position":[[1160,6]]},"602":{"position":[[24,6]]},"615":{"position":[[28,6],[317,6]]}}}],["simplest",{"_index":1065,"t":{"138":{"position":[[12,8]]},"144":{"position":[[838,8]]}}}],["simpli",{"_index":147,"t":{"18":{"position":[[61,6]]},"309":{"position":[[5843,6]]},"319":{"position":[[1613,7]]},"327":{"position":[[988,6]]},"351":{"position":[[1755,6]]},"355":{"position":[[38,6]]}}}],["simplic",{"_index":1286,"t":{"200":{"position":[[61,11]]},"623":{"position":[[0,10]]}}}],["simplif",{"_index":2343,"t":{"504":{"position":[[787,14]]}}}],["simplifi",{"_index":201,"t":{"20":{"position":[[489,8]]},"313":{"position":[[363,11]]},"367":{"position":[[150,10]]},"481":{"position":[[509,8]]},"483":{"position":[[42,11]]},"487":{"position":[[60,10]]},"583":{"position":[[1066,10]]},"598":{"position":[[573,10]]},"600":{"position":[[254,10]]}}}],["simul",{"_index":976,"t":{"125":{"position":[[505,12]]},"301":{"position":[[272,8]]}}}],["simultan",{"_index":1248,"t":{"189":{"position":[[471,12]]},"550":{"position":[[286,14]]},"563":{"position":[[351,14]]}}}],["singl",{"_index":907,"t":{"113":{"position":[[586,6]]},"152":{"position":[[1048,6]]},"250":{"position":[[844,6]]},"258":{"position":[[226,6]]},"472":{"position":[[153,7]]}}}],["sint",{"_index":463,"t":{"39":{"position":[[346,4]]},"47":{"position":[[346,4]]}}}],["sit",{"_index":3,"t":{"3":{"position":[[18,3],[170,3]]},"7":{"position":[[138,3],[290,3],[317,3],[469,3],[496,3],[648,3],[675,3],[827,3],[854,3],[1006,3],[1033,3],[1185,3],[1212,3],[1364,3],[1391,3],[1543,3],[1570,3],[1722,3],[1749,3],[1901,3],[1928,3],[2080,3],[2107,3],[2259,3],[2286,3],[2438,3],[2465,3],[2617,3],[2644,3],[2796,3],[2823,3],[2975,3]]},"39":{"position":[[19,3]]},"47":{"position":[[19,3]]},"661":{"position":[[237,7]]}}}],["site",{"_index":1341,"t":{"208":{"position":[[1618,7]]},"242":{"position":[[795,6]]}}}],["situat",{"_index":1108,"t":{"152":{"position":[[1682,9]]}}}],["size",{"_index":45,"t":{"7":{"position":[[97,4]]},"309":{"position":[[1913,4]]},"329":{"position":[[3075,4]]},"333":{"position":[[939,4]]},"556":{"position":[[224,4]]}}}],["skip",{"_index":2198,"t":{"454":{"position":[[315,4]]},"606":{"position":[[509,4]]},"703":{"position":[[509,4]]}}}],["skip_sav",{"_index":570,"t":{"57":{"position":[[306,9]]},"93":{"position":[[741,9]]}}}],["skip_upload",{"_index":774,"t":{"93":{"position":[[807,11]]}}}],["slash",{"_index":1883,"t":{"337":{"position":[[158,8]]}}}],["slot",{"_index":919,"t":{"115":{"position":[[511,5]]}}}],["small",{"_index":1038,"t":{"134":{"position":[[146,5]]},"309":{"position":[[1235,5]]},"404":{"position":[[523,5]]},"408":{"position":[[527,5]]}}}],["smaller",{"_index":331,"t":{"27":{"position":[[1291,7]]},"309":{"position":[[370,7]]},"406":{"position":[[1081,7]]}}}],["smart",{"_index":846,"t":{"101":{"position":[[503,5],[579,5]]},"111":{"position":[[62,5],[243,5]]},"113":{"position":[[9,5],[228,5],[311,5],[560,5]]},"115":{"position":[[565,5],[672,5],[926,5]]},"129":{"position":[[1829,5],[2099,5]]},"134":{"position":[[711,5]]},"176":{"position":[[1049,5]]},"392":{"position":[[440,5],[603,5]]},"516":{"position":[[14,5],[98,5],[336,5]]},"518":{"position":[[476,5]]},"536":{"position":[[256,5]]},"581":{"position":[[221,5]]},"600":{"position":[[43,5]]}}}],["smooth",{"_index":836,"t":{"101":{"position":[[62,6],[273,7],[309,6],[465,6],[556,7]]},"103":{"position":[[73,7],[140,6]]},"105":{"position":[[208,7],[508,6]]},"107":{"position":[[532,6],[617,7],[1054,7],[1222,6]]},"109":{"position":[[5,6],[251,6],[534,6]]},"111":{"position":[[0,6],[225,7]]},"113":{"position":[[336,6]]},"117":{"position":[[15,6],[145,7],[160,9],[264,7],[297,6],[333,6]]},"119":{"position":[[0,6],[16,9],[113,6],[283,6]]},"121":{"position":[[331,6]]},"123":{"position":[[202,7]]},"125":{"position":[[531,9],[663,9],[714,9]]},"127":{"position":[[2,6]]},"129":{"position":[[89,7],[1512,9],[1971,9]]},"134":{"position":[[319,7],[418,6],[476,7],[547,6],[629,6],[927,6],[976,6],[1078,6]]},"136":{"position":[[55,7]]},"138":{"position":[[41,7],[227,7],[303,7],[435,7],[548,7],[776,7]]},"140":{"position":[[176,6],[554,7],[700,6]]},"144":{"position":[[96,7],[208,7],[284,7],[416,7],[529,7],[757,7],[802,7]]},"146":{"position":[[408,7]]},"148":{"position":[[544,6],[812,7],[958,6]]},"152":{"position":[[46,6],[133,6],[777,6],[1599,6],[2543,7]]},"156":{"position":[[86,7],[221,7],[330,7],[431,6],[793,6]]},"158":{"position":[[849,7]]},"160":{"position":[[19,6],[86,6],[228,7]]},"164":{"position":[[96,7]]},"166":{"position":[[115,7],[566,7],[803,6]]},"189":{"position":[[893,7]]},"365":{"position":[[91,6]]},"438":{"position":[[518,6]]}}}],["smooth'",{"_index":841,"t":{"101":{"position":[[281,8],[483,8]]},"105":{"position":[[76,8],[380,8],[447,8]]},"107":{"position":[[301,8]]},"109":{"position":[[323,8],[373,8]]},"113":{"position":[[0,8]]},"134":{"position":[[702,8]]},"136":{"position":[[395,8]]},"138":{"position":[[112,8],[619,8]]},"140":{"position":[[108,8],[360,8],[461,8]]},"142":{"position":[[6,8]]},"144":{"position":[[600,8],[912,8],[1057,8],[1086,8]]},"146":{"position":[[240,8],[456,8]]},"148":{"position":[[46,8],[382,8],[630,8],[719,8]]},"150":{"position":[[6,8]]},"152":{"position":[[279,8],[894,8],[1104,8],[1469,8],[2413,8]]},"158":{"position":[[129,8],[466,8],[1126,8]]},"160":{"position":[[125,8]]},"162":{"position":[[6,8]]}}}],["snapshot",{"_index":107,"t":{"14":{"position":[[20,8],[75,8],[253,9],[339,8]]}}}],["softwar",{"_index":75,"t":{"12":{"position":[[285,8]]},"20":{"position":[[659,8]]},"208":{"position":[[2130,8]]},"216":{"position":[[46,8],[106,8]]},"246":{"position":[[305,8]]},"309":{"position":[[5131,9]]},"313":{"position":[[130,8],[353,9]]},"315":{"position":[[283,8]]},"388":{"position":[[49,8]]},"497":{"position":[[16,8]]},"602":{"position":[[1345,8]]},"606":{"position":[[479,8]]},"703":{"position":[[479,8]]}}}],["sole",{"_index":580,"t":{"57":{"position":[[759,6]]},"321":{"position":[[99,6]]}}}],["solo",{"_index":927,"t":{"117":{"position":[[207,4]]},"119":{"position":[[64,4],[127,4],[304,4]]},"121":{"position":[[42,4],[185,4]]},"125":{"position":[[179,4],[595,4],[646,4],[1006,4],[1122,4]]},"329":{"position":[[92,4]]},"554":{"position":[[101,4]]},"569":{"position":[[520,4]]},"574":{"position":[[0,4],[82,4]]},"576":{"position":[[479,4]]},"594":{"position":[[157,4],[331,4]]},"600":{"position":[[292,4]]},"619":{"position":[[147,4]]}}}],["solut",{"_index":76,"t":{"12":{"position":[[294,10]]},"256":{"position":[[600,10],[1056,10]]},"295":{"position":[[32,9]]},"331":{"position":[[276,8]]},"472":{"position":[[491,10]]},"483":{"position":[[32,9]]},"530":{"position":[[136,10],[1245,9]]},"532":{"position":[[37,9],[464,8]]},"536":{"position":[[31,9]]},"579":{"position":[[47,8]]},"655":{"position":[[38,8]]}}}],["solv",{"_index":1699,"t":{"319":{"position":[[399,6]]},"412":{"position":[[283,7]]}}}],["somebodi",{"_index":1012,"t":{"129":{"position":[[757,8]]}}}],["someon",{"_index":1586,"t":{"293":{"position":[[600,7]]},"309":{"position":[[4306,7]]}}}],["someth",{"_index":1126,"t":{"158":{"position":[[441,9],[773,9]]},"305":{"position":[[339,9]]},"329":{"position":[[2190,9],[2913,9]]},"514":{"position":[[1873,9],[2071,9]]},"681":{"position":[[216,9]]}}}],["sometim",{"_index":1729,"t":{"321":{"position":[[154,9]]},"406":{"position":[[991,10]]}}}],["somewher",{"_index":2048,"t":{"406":{"position":[[882,9]]},"604":{"position":[[1825,10]]},"631":{"position":[[1737,10]]},"701":{"position":[[1774,10]]}}}],["soon",{"_index":1142,"t":{"166":{"position":[[738,4]]},"285":{"position":[[96,4]]},"474":{"position":[[74,5]]},"541":{"position":[[601,5]]},"629":{"position":[[236,6]]},"639":{"position":[[3,4]]},"689":{"position":[[11,7]]},"691":{"position":[[10,7]]},"699":{"position":[[202,4]]}}}],["sourc",{"_index":859,"t":{"105":{"position":[[186,7]]},"111":{"position":[[178,6]]},"349":{"position":[[1358,7],[1429,7],[1500,7]]},"392":{"position":[[31,6]]},"429":{"position":[[1030,6]]},"442":{"position":[[104,7]]},"472":{"position":[[32,6]]},"495":{"position":[[261,7]]},"497":{"position":[[535,7]]}}}],["sourcecr",{"_index":248,"t":{"25":{"position":[[246,10]]}}}],["sovereign",{"_index":2341,"t":{"504":{"position":[[183,9]]}}}],["space",{"_index":227,"t":{"20":{"position":[[1109,6]]},"309":{"position":[[1143,5]]},"333":{"position":[[1017,5]]},"406":{"position":[[1089,6]]},"479":{"position":[[141,5]]},"481":{"position":[[285,6]]},"524":{"position":[[428,6]]},"530":{"position":[[949,6]]}}}],["spam",{"_index":1120,"t":{"156":{"position":[[280,4]]},"321":{"position":[[211,4]]},"327":{"position":[[360,4]]}}}],["spec",{"_index":769,"t":{"93":{"position":[[685,5]]},"95":{"position":[[1446,5]]},"329":{"position":[[1206,5],[1443,6]]}}}],["special",{"_index":1414,"t":{"222":{"position":[[58,7],[445,7]]},"374":{"position":[[153,7]]},"406":{"position":[[411,9]]},"508":{"position":[[443,7]]},"598":{"position":[[377,7]]},"602":{"position":[[1465,7]]}}}],["specif",{"_index":516,"t":{"49":{"position":[[105,8]]},"71":{"position":[[184,8],[1959,8]]},"95":{"position":[[1652,8]]},"152":{"position":[[1804,8]]},"170":{"position":[[283,8]]},"172":{"position":[[334,8]]},"240":{"position":[[40,8]]},"242":{"position":[[76,8]]},"244":{"position":[[21,8],[959,8]]},"279":{"position":[[640,14]]},"309":{"position":[[164,8],[3839,8]]},"313":{"position":[[29,12]]},"315":{"position":[[480,14]]},"329":{"position":[[2772,8]]},"353":{"position":[[143,8]]},"382":{"position":[[124,8]]},"432":{"position":[[171,15]]},"436":{"position":[[193,12]]},"438":{"position":[[271,8]]},"442":{"position":[[418,8],[758,8]]},"487":{"position":[[353,8],[813,8],[1704,8]]},"675":{"position":[[63,8],[233,8]]}}}],["specifi",{"_index":759,"t":{"93":{"position":[[512,7]]},"95":{"position":[[705,7],[854,7],[979,7],[1105,7],[1546,9]]},"99":{"position":[[713,7]]},"216":{"position":[[130,9]]},"232":{"position":[[0,7]]},"238":{"position":[[210,9]]},"256":{"position":[[127,9]]},"309":{"position":[[2139,9],[2222,9]]},"556":{"position":[[797,7]]},"576":{"position":[[519,7]]}}}],["specul",{"_index":104,"t":{"12":{"position":[[740,11]]}}}],["speed",{"_index":1287,"t":{"200":{"position":[[73,6]]},"442":{"position":[[684,6]]},"532":{"position":[[497,5]]},"536":{"position":[[94,6]]}}}],["spirit",{"_index":2650,"t":{"693":{"position":[[110,6]]}}}],["split",{"_index":986,"t":{"125":{"position":[[907,5]]},"477":{"position":[[74,6]]},"556":{"position":[[904,9],[960,6]]},"567":{"position":[[1850,9]]}}}],["ssd",{"_index":2134,"t":{"427":{"position":[[99,3],[562,3]]},"432":{"position":[[401,3]]}}}],["ssh",{"_index":1206,"t":{"180":{"position":[[0,3],[184,3]]},"182":{"position":[[114,3],[242,3],[255,4],[265,3],[317,3]]},"309":{"position":[[2360,3],[2436,4],[4548,3],[4583,3],[4734,3],[4793,3],[5023,3],[5257,3],[5680,4],[5724,3]]},"349":{"position":[[752,3],[1261,4],[1272,3]]},"351":{"position":[[611,3],[789,4],[858,3],[1008,3],[1625,4],[1669,3]]}}}],["ssid",{"_index":1610,"t":{"307":{"position":[[161,6]]},"429":{"position":[[364,5]]}}}],["ssv",{"_index":2466,"t":{"563":{"position":[[0,3],[136,3],[608,3]]},"565":{"position":[[286,3],[393,3],[419,3],[527,3],[686,3]]},"567":{"position":[[34,3],[83,3],[169,3],[834,3],[1204,3],[1714,3]]},"569":{"position":[[80,3],[136,3],[189,3]]}}}],["stabl",{"_index":1524,"t":{"271":{"position":[[1905,6]]},"572":{"position":[[148,6]]},"576":{"position":[[322,6]]}}}],["stack",{"_index":2561,"t":{"602":{"position":[[1389,6]]}}}],["staff",{"_index":2085,"t":{"412":{"position":[[203,5]]}}}],["stage",{"_index":2176,"t":{"442":{"position":[[325,7]]}}}],["stake",{"_index":96,"t":{"12":{"position":[[542,7],[714,6]]},"14":{"position":[[296,7]]},"27":{"position":[[1380,7],[1486,7]]},"29":{"position":[[339,7],[389,7]]},"35":{"position":[[16,7],[93,7]]},"119":{"position":[[69,7],[264,6],[309,7]]},"140":{"position":[[22,7]]},"148":{"position":[[188,7]]},"152":{"position":[[1957,7]]},"158":{"position":[[1151,7]]},"335":{"position":[[159,7]]},"337":{"position":[[54,7],[569,7],[650,7],[711,7],[784,7],[983,7]]},"371":{"position":[[459,7],[522,5]]},"438":{"position":[[1053,7]]},"474":{"position":[[379,7],[464,5],[590,5],[688,7]]},"502":{"position":[[177,5]]},"508":{"position":[[1082,5]]},"510":{"position":[[287,8],[342,7]]},"541":{"position":[[27,7],[126,5],[227,7],[266,7],[338,7]]},"563":{"position":[[665,7]]},"572":{"position":[[256,7],[298,7],[337,5],[372,6],[471,5]]},"574":{"position":[[16,8],[87,7],[109,7],[133,7],[170,7],[328,7]]},"576":{"position":[[391,7],[484,7],[505,7],[557,6],[615,8],[637,8],[694,7],[794,7],[906,7],[923,7]]},"579":{"position":[[39,7],[93,7],[345,7]]},"581":{"position":[[14,8],[59,7]]},"583":{"position":[[572,6],[1081,7]]},"589":{"position":[[248,7],[337,6]]},"594":{"position":[[53,7],[292,7],[379,6]]},"596":{"position":[[135,8],[196,7],[434,6]]},"598":{"position":[[272,8],[503,8]]},"600":{"position":[[127,5],[232,7]]},"602":{"position":[[774,7]]},"608":{"position":[[234,7]]},"610":{"position":[[29,7]]},"615":{"position":[[38,5],[66,5]]},"617":{"position":[[209,9]]},"619":{"position":[[59,6],[77,5],[216,5]]},"621":{"position":[[0,7]]},"623":{"position":[[48,7],[203,7],[226,8]]},"627":{"position":[[0,7]]},"629":{"position":[[465,7]]},"633":{"position":[[1407,7]]},"635":{"position":[[29,7],[350,7]]},"699":{"position":[[420,7]]},"705":{"position":[[1373,7]]}}}],["stakehous",{"_index":2527,"t":{"594":{"position":[[250,10]]},"596":{"position":[[114,10]]},"598":{"position":[[255,10],[562,10]]}}}],["stakehouse'",{"_index":2537,"t":{"598":{"position":[[22,12],[746,12]]}}}],["stakehouse’",{"_index":2524,"t":{"594":{"position":[[0,12]]}}}],["staker",{"_index":257,"t":{"25":{"position":[[342,7],[451,7]]},"117":{"position":[[212,7]]},"119":{"position":[[132,7]]},"121":{"position":[[47,6],[190,6]]},"125":{"position":[[184,7],[600,7],[651,7],[1011,7],[1127,7]]},"152":{"position":[[699,7]]},"329":{"position":[[97,6],[125,7],[2896,7],[3577,7]]},"487":{"position":[[193,6]]},"518":{"position":[[783,7]]},"522":{"position":[[174,7]]},"538":{"position":[[129,7]]},"541":{"position":[[164,7],[194,7]]},"543":{"position":[[93,7]]},"552":{"position":[[94,7]]},"554":{"position":[[106,9]]},"565":{"position":[[93,7]]},"567":{"position":[[1646,7]]},"569":{"position":[[525,9]]},"583":{"position":[[381,7]]},"587":{"position":[[64,7]]},"594":{"position":[[162,8],[336,7]]},"600":{"position":[[297,6]]},"602":{"position":[[90,7]]},"604":{"position":[[2615,7]]},"612":{"position":[[16,7]]},"615":{"position":[[256,7]]},"617":{"position":[[95,7]]},"625":{"position":[[177,7]]},"629":{"position":[[111,7]]},"631":{"position":[[2545,7]]},"637":{"position":[[464,7]]},"673":{"position":[[72,7]]},"675":{"position":[[308,7]]},"699":{"position":[[105,7]]},"701":{"position":[[2581,7]]}}}],["stakewis",{"_index":2480,"t":{"572":{"position":[[0,9],[122,9],[482,9]]},"574":{"position":[[25,9],[150,9],[414,9],[589,9],[667,9]]},"576":{"position":[[93,9],[145,9],[424,9],[818,9],[1006,9]]}}}],["stakewise'",{"_index":2501,"t":{"576":{"position":[[1206,11]]}}}],["stamp",{"_index":2317,"t":{"495":{"position":[[143,5]]}}}],["stand",{"_index":2307,"t":{"490":{"position":[[7,6]]},"538":{"position":[[9,6]]},"600":{"position":[[9,6]]},"625":{"position":[[13,6]]}}}],["standard",{"_index":1240,"t":{"186":{"position":[[86,10]]},"224":{"position":[[308,8]]},"309":{"position":[[5228,8]]},"695":{"position":[[51,9]]}}}],["start",{"_index":86,"t":{"12":{"position":[[413,5]]},"41":{"position":[[567,8]]},"121":{"position":[[544,5]]},"140":{"position":[[286,5]]},"144":{"position":[[1183,5]]},"146":{"position":[[376,5]]},"156":{"position":[[451,5]]},"228":{"position":[[107,5]]},"323":{"position":[[405,6],[619,5]]},"329":{"position":[[10,5],[752,5]]},"347":{"position":[[418,6]]},"371":{"position":[[453,5],[496,5]]},"374":{"position":[[0,5]]},"406":{"position":[[824,8],[920,8],[1060,5]]},"408":{"position":[[368,5]]},"427":{"position":[[792,5]]},"429":{"position":[[656,5]]},"474":{"position":[[664,5]]},"514":{"position":[[325,8],[445,8],[896,5]]},"530":{"position":[[403,7]]},"554":{"position":[[891,5]]},"558":{"position":[[537,5],[757,5]]},"581":{"position":[[347,5]]},"583":{"position":[[446,5],[468,8],[597,5]]},"589":{"position":[[469,8]]},"600":{"position":[[308,5]]},"602":{"position":[[768,5],[1145,6]]},"604":{"position":[[3132,5]]},"606":{"position":[[98,5]]},"629":{"position":[[459,5],[836,6]]},"631":{"position":[[3073,5]]},"633":{"position":[[93,5]]},"637":{"position":[[212,6]]},"649":{"position":[[261,5]]},"667":{"position":[[38,5]]},"699":{"position":[[414,5],[791,6]]},"701":{"position":[[3101,5]]},"703":{"position":[[98,5]]},"705":{"position":[[152,6]]}}}],["startup",{"_index":2194,"t":{"450":{"position":[[113,8]]}}}],["state",{"_index":838,"t":{"101":{"position":[[120,6],[395,7],[442,6]]},"107":{"position":[[78,6]]},"113":{"position":[[519,5],[626,5]]},"115":{"position":[[150,5]]},"127":{"position":[[38,6],[117,6],[177,6],[228,5]]},"129":{"position":[[21,5],[121,5],[254,6],[1068,6],[1406,5]]},"131":{"position":[[40,5]]},"152":{"position":[[363,5]]},"438":{"position":[[731,6],[967,6]]},"516":{"position":[[605,6]]},"536":{"position":[[172,6]]},"610":{"position":[[198,5],[365,5]]},"679":{"position":[[87,5]]}}}],["static",{"_index":1818,"t":{"329":{"position":[[1893,6]]}}}],["statu",{"_index":1003,"t":{"129":{"position":[[50,6]]},"224":{"position":[[91,6]]},"275":{"position":[[273,6],[311,6]]},"329":{"position":[[2145,6],[2179,7]]},"429":{"position":[[610,6]]},"514":{"position":[[561,7],[614,7]]},"530":{"position":[[266,7],[383,6]]}}}],["status",{"_index":1032,"t":{"131":{"position":[[26,9]]}}}],["stay",{"_index":1455,"t":{"238":{"position":[[294,4]]},"321":{"position":[[504,4]]},"396":{"position":[[138,4]]},"400":{"position":[[464,5]]},"404":{"position":[[387,4]]},"651":{"position":[[48,4]]}}}],["steadfast",{"_index":2251,"t":{"477":{"position":[[20,9]]}}}],["step",{"_index":538,"t":{"53":{"position":[[153,6]]},"57":{"position":[[230,6],[394,6],[816,5]]},"91":{"position":[[100,4]]},"144":{"position":[[169,5]]},"146":{"position":[[122,4]]},"148":{"position":[[208,4]]},"152":{"position":[[999,4]]},"154":{"position":[[5,4]]},"156":{"position":[[17,5]]},"180":{"position":[[544,5]]},"191":{"position":[[42,5]]},"193":{"position":[[56,4]]},"195":{"position":[[70,5],[366,5]]},"271":{"position":[[737,4]]},"273":{"position":[[47,4]]},"275":{"position":[[189,6]]},"303":{"position":[[402,5]]},"321":{"position":[[630,6]]},"329":{"position":[[34,5]]},"339":{"position":[[48,6]]},"347":{"position":[[5,4]]},"349":{"position":[[105,5],[962,5]]},"351":{"position":[[161,5],[559,4],[1347,4]]},"369":{"position":[[239,6]]},"371":{"position":[[185,6]]},"400":{"position":[[191,6]]},"412":{"position":[[155,5]]},"427":{"position":[[167,6]]},"454":{"position":[[325,5]]},"479":{"position":[[0,4]]},"481":{"position":[[497,5]]},"487":{"position":[[508,6]]},"508":{"position":[[0,4],[133,4]]},"554":{"position":[[744,5]]},"556":{"position":[[160,4],[280,5],[1046,4]]},"558":{"position":[[510,4]]},"598":{"position":[[100,5]]},"604":{"position":[[1587,5],[2561,4],[2763,4],[2997,4]]},"606":{"position":[[10,4],[657,5],[884,5],[1005,5]]},"615":{"position":[[324,5]]},"617":{"position":[[77,5],[302,4],[310,4]]},"623":{"position":[[169,4],[177,4]]},"631":{"position":[[1499,5],[2491,4],[2697,4],[2938,4]]},"633":{"position":[[10,4],[357,4],[811,5],[913,5]]},"635":{"position":[[116,4]]},"637":{"position":[[441,6],[1071,5]]},"659":{"position":[[10,4]]},"683":{"position":[[73,4],[81,4]]},"701":{"position":[[1536,5],[2527,4],[2726,4],[2966,4]]},"703":{"position":[[10,4],[657,5],[906,5]]},"705":{"position":[[10,4],[286,6],[293,4],[491,5],[536,4],[582,5],[588,4],[826,4],[1168,4],[1176,4]]}}}],["steward",{"_index":2259,"t":{"479":{"position":[[53,7]]}}}],["stick",{"_index":2179,"t":{"444":{"position":[[23,6]]},"446":{"position":[[33,6],[55,5],[314,5]]},"450":{"position":[[50,6]]},"602":{"position":[[812,5]]},"629":{"position":[[503,5]]},"699":{"position":[[458,5]]}}}],["still",{"_index":1014,"t":{"129":{"position":[[868,5],[962,5],[1023,5]]},"152":{"position":[[1338,5],[2035,5]]},"158":{"position":[[72,5],[208,5]]},"299":{"position":[[56,5]]},"309":{"position":[[5604,5]]},"319":{"position":[[2074,5]]},"327":{"position":[[1592,5]]},"329":{"position":[[3772,5]]},"331":{"position":[[989,5]]},"380":{"position":[[373,5]]},"404":{"position":[[564,5]]},"541":{"position":[[537,5]]}}}],["stint",{"_index":1559,"t":{"285":{"position":[[10,7]]}}}],["stop",{"_index":948,"t":{"121":{"position":[[515,4]]},"228":{"position":[[117,5]]},"285":{"position":[[66,4]]},"319":{"position":[[1340,5]]},"327":{"position":[[641,4],[701,8],[1072,4]]},"329":{"position":[[2368,7],[2405,8],[2460,8]]},"416":{"position":[[166,7]]},"418":{"position":[[262,7],[584,7]]},"427":{"position":[[174,4],[204,4]]},"429":{"position":[[697,4]]},"514":{"position":[[775,7]]},"526":{"position":[[446,8]]},"530":{"position":[[420,8]]},"569":{"position":[[121,7]]}}}],["storag",{"_index":1494,"t":{"256":{"position":[[1026,7],[1048,7]]},"287":{"position":[[135,7]]},"309":{"position":[[359,8],[912,7],[935,7],[1279,7],[1829,7],[1905,7],[5955,7],[6116,8]]},"311":{"position":[[139,7]]},"315":{"position":[[570,8],[602,7]]},"329":{"position":[[1322,7]]},"349":{"position":[[1631,8],[1670,7],[1700,7],[1869,7]]},"392":{"position":[[380,7],[924,7]]},"404":{"position":[[529,7]]},"432":{"position":[[313,7],[405,7]]},"502":{"position":[[30,7],[301,7],[651,8]]},"508":{"position":[[1107,7],[1182,7]]},"518":{"position":[[911,7]]},"530":{"position":[[993,8],[1012,7]]}}}],["store",{"_index":900,"t":{"113":{"position":[[389,7],[578,5]]},"191":{"position":[[438,5]]},"195":{"position":[[1122,6]]},"208":{"position":[[137,7],[225,7]]},"218":{"position":[[267,5],[342,7]]},"220":{"position":[[231,7]]},"238":{"position":[[441,6]]},"248":{"position":[[389,5],[659,5],[921,5]]},"256":{"position":[[75,6]]},"258":{"position":[[113,6]]},"271":{"position":[[2141,5]]},"303":{"position":[[34,6]]},"335":{"position":[[90,6]]},"376":{"position":[[285,5],[344,5],[419,6]]},"384":{"position":[[278,6]]},"398":{"position":[[310,5]]},"406":{"position":[[248,6]]},"469":{"position":[[334,5]]},"483":{"position":[[1435,6]]},"502":{"position":[[592,5]]},"532":{"position":[[125,7]]},"558":{"position":[[602,6]]},"576":{"position":[[729,5]]},"602":{"position":[[393,7]]},"604":{"position":[[243,7],[1767,6]]},"631":{"position":[[207,7],[1679,6]]},"701":{"position":[[206,7],[1716,6]]}}}],["straightforward",{"_index":1980,"t":{"390":{"position":[[25,15]]},"442":{"position":[[607,15]]},"485":{"position":[[94,16]]}}}],["stream",{"_index":284,"t":{"27":{"position":[[193,6]]}}}],["streamlin",{"_index":1285,"t":{"200":{"position":[[22,11]]},"268":{"position":[[78,11]]},"321":{"position":[[406,11]]},"538":{"position":[[584,10]]},"623":{"position":[[32,11]]}}}],["strict",{"_index":1702,"t":{"319":{"position":[[713,6]]}}}],["string",{"_index":642,"t":{"65":{"position":[[90,6]]},"67":{"position":[[229,6],[251,6],[279,6],[333,6],[369,6]]},"69":{"position":[[110,6]]},"71":{"position":[[1293,6],[1423,6],[1835,6],[2268,6],[2822,6]]},"73":{"position":[[47,6]]},"75":{"position":[[53,6]]},"79":{"position":[[206,6]]},"81":{"position":[[111,6]]},"83":{"position":[[145,8],[185,6]]},"91":{"position":[[299,8],[376,8]]},"93":{"position":[[275,8],[352,8]]},"95":{"position":[[283,8],[360,8],[644,8],[830,8],[929,8],[1062,8],[1361,8],[1481,8]]},"99":{"position":[[864,8],[941,8]]},"210":{"position":[[28,6],[52,6],[84,6],[117,6],[145,6],[212,6],[242,6],[408,6],[564,6],[593,8],[647,8],[743,6]]},"212":{"position":[[45,6]]},"214":{"position":[[62,6]]},"216":{"position":[[226,6]]},"218":{"position":[[297,6]]},"220":{"position":[[172,6]]},"222":{"position":[[140,6]]},"224":{"position":[[116,6]]},"226":{"position":[[157,6]]},"228":{"position":[[225,6],[324,6]]},"232":{"position":[[189,6],[343,6]]},"236":{"position":[[157,6]]},"238":{"position":[[703,6],[724,6],[748,6],[890,6],[1124,6],[1363,6]]},"240":{"position":[[105,6]]},"242":{"position":[[218,6],[243,6],[267,6],[292,6],[391,6],[631,6],[882,6],[1090,6]]},"244":{"position":[[187,6],[206,6],[234,6],[390,6],[602,6],[761,6]]},"246":{"position":[[175,6],[283,6]]},"248":{"position":[[195,6],[225,6],[262,6],[487,6],[752,6],[1015,6]]},"250":{"position":[[189,6],[217,6],[245,6],[296,6],[388,6],[518,6],[691,6]]},"252":{"position":[[122,6]]},"254":{"position":[[77,8],[117,6]]},"256":{"position":[[402,6]]},"258":{"position":[[150,8],[190,6]]},"260":{"position":[[385,6],[404,6],[424,6],[448,6],[589,6],[710,6],[835,6],[955,6]]},"262":{"position":[[194,6],[214,6],[240,6],[280,6],[354,6],[471,6]]},"264":{"position":[[120,6],[159,6]]},"266":{"position":[[46,6]]}}}],["strong",{"_index":1219,"t":{"182":{"position":[[213,6]]},"398":{"position":[[245,7]]},"483":{"position":[[14,6]]}}}],["stronger",{"_index":2442,"t":{"550":{"position":[[892,8]]}}}],["strongli",{"_index":1611,"t":{"307":{"position":[[211,8]]},"394":{"position":[[264,8]]},"497":{"position":[[634,8]]}}}],["structur",{"_index":110,"t":{"14":{"position":[[64,10]]},"87":{"position":[[146,9]]},"252":{"position":[[54,9]]},"254":{"position":[[189,9]]},"414":{"position":[[192,9]]},"574":{"position":[[403,10]]}}}],["struggl",{"_index":2021,"t":{"404":{"position":[[570,10]]}}}],["style",{"_index":1358,"t":{"208":{"position":[[2208,8]]},"210":{"position":[[507,5]]}}}],["subjug",{"_index":1585,"t":{"293":{"position":[[500,9]]}}}],["submit",{"_index":2452,"t":{"556":{"position":[[99,6]]},"558":{"position":[[38,9],[367,9]]},"560":{"position":[[181,6]]}}}],["subnet",{"_index":2243,"t":{"472":{"position":[[424,8]]}}}],["subscrib",{"_index":839,"t":{"101":{"position":[[141,10],[258,11],[454,10]]},"107":{"position":[[234,11]]},"113":{"position":[[650,10]]},"115":{"position":[[174,10]]},"129":{"position":[[60,10],[322,10],[840,10],[1203,10],[1344,10],[1744,10],[1915,10]]},"138":{"position":[[28,9],[133,11],[212,11],[289,10],[420,11],[535,9]]},"140":{"position":[[95,9],[247,9],[540,10]]},"142":{"position":[[207,11]]},"144":{"position":[[67,9],[193,11],[270,10],[401,11],[516,9],[789,9],[854,10],[933,9],[1106,9]]},"146":{"position":[[60,9]]},"148":{"position":[[84,11],[325,9],[450,10],[798,10]]},"152":{"position":[[33,9],[72,11],[113,11],[809,11],[2530,9]]},"156":{"position":[[58,9],[315,11],[417,10],[722,12]]},"160":{"position":[[42,11]]},"166":{"position":[[788,11]]},"345":{"position":[[230,11]]}}}],["subscribe_all_subnet",{"_index":2112,"t":{"418":{"position":[[436,22]]}}}],["subscript",{"_index":864,"t":{"107":{"position":[[31,12]]},"111":{"position":[[317,15]]},"113":{"position":[[153,14]]},"117":{"position":[[360,12]]},"144":{"position":[[820,13],[996,13]]},"146":{"position":[[146,12],[285,13],[427,12]]},"152":{"position":[[506,13]]},"154":{"position":[[132,12]]},"156":{"position":[[613,13]]},"158":{"position":[[833,12],[1187,12]]},"166":{"position":[[454,12]]}}}],["subsequ",{"_index":2355,"t":{"508":{"position":[[1131,12]]}}}],["subset",{"_index":2436,"t":{"550":{"position":[[324,6],[830,6]]},"563":{"position":[[389,6],[560,6]]}}}],["succeed",{"_index":2461,"t":{"560":{"position":[[18,9]]}}}],["success",{"_index":225,"t":{"20":{"position":[[1064,7]]},"134":{"position":[[660,10],[729,10]]},"136":{"position":[[563,10]]},"376":{"position":[[5,10]]},"412":{"position":[[217,8]]},"438":{"position":[[529,10]]},"469":{"position":[[446,7]]}}}],["successfulli",{"_index":862,"t":{"105":{"position":[[320,12]]},"129":{"position":[[653,12]]},"160":{"position":[[324,12]]},"351":{"position":[[394,12]]},"369":{"position":[[37,12],[212,13]]},"450":{"position":[[485,12]]},"545":{"position":[[6,12]]},"558":{"position":[[25,12],[778,12]]},"567":{"position":[[6,12],[1617,12]]},"705":{"position":[[1190,12]]}}}],["sucessfulli",{"_index":1140,"t":{"166":{"position":[[549,11]]}}}],["such",{"_index":24,"t":{"5":{"position":[[49,4]]},"18":{"position":[[225,4]]},"20":{"position":[[292,4]]},"136":{"position":[[289,4]]},"172":{"position":[[396,4]]},"222":{"position":[[75,4]]},"238":{"position":[[531,4]]},"315":{"position":[[522,4]]},"321":{"position":[[182,4]]},"347":{"position":[[434,4]]},"396":{"position":[[60,4]]},"418":{"position":[[860,4]]},"481":{"position":[[258,4]]},"483":{"position":[[1117,4]]},"487":{"position":[[1030,4]]},"506":{"position":[[160,5]]},"514":{"position":[[507,4],[2410,4]]},"615":{"position":[[79,4]]}}}],["sudo",{"_index":1275,"t":{"195":{"position":[[1167,4]]},"277":{"position":[[444,4],[578,4],[666,4]]},"351":{"position":[[981,4],[1003,4]]},"454":{"position":[[331,4],[382,4]]},"456":{"position":[[46,4],[93,4]]},"460":{"position":[[257,4],[304,4]]},"462":{"position":[[118,4]]}}}],["suffici",{"_index":1620,"t":{"309":{"position":[[423,11],[1173,10]]}}}],["suggest",{"_index":1806,"t":{"329":{"position":[[1421,7]]},"349":{"position":[[1767,11]]}}}],["suit",{"_index":1294,"t":{"204":{"position":[[466,5]]},"309":{"position":[[3829,4]]},"538":{"position":[[59,6]]},"649":{"position":[[285,4]]}}}],["suitabl",{"_index":1613,"t":{"309":{"position":[[92,8]]},"349":{"position":[[471,8]]}}}],["sum",{"_index":881,"t":{"109":{"position":[[84,3],[264,3]]},"136":{"position":[[1018,3]]},"337":{"position":[[414,3],[826,3]]}}}],["summar",{"_index":906,"t":{"113":{"position":[[505,9]]},"115":{"position":[[135,10],[238,10]]}}}],["summari",{"_index":39,"t":{"7":{"position":[[12,7]]},"208":{"position":[[1235,7]]},"240":{"position":[[128,7]]},"291":{"position":[[358,8]]},"349":{"position":[[2249,8],[2300,9]]}}}],["summer",{"_index":301,"t":{"27":{"position":[[454,6],[526,6],[602,6],[675,6],[752,6],[879,6],[951,6],[1023,6],[1096,6],[1169,6]]}}}],["sunt",{"_index":468,"t":{"39":{"position":[[384,4]]},"47":{"position":[[384,4]]}}}],["super",{"_index":2550,"t":{"602":{"position":[[18,5]]}}}],["superpow",{"_index":2529,"t":{"594":{"position":[[305,12]]}}}],["suppli",{"_index":231,"t":{"23":{"position":[[162,6]]},"27":{"position":[[26,6]]},"29":{"position":[[85,7],[453,6]]},"37":{"position":[[76,6]]},"469":{"position":[[279,7]]}}}],["support",{"_index":20,"t":{"5":{"position":[[11,7]]},"18":{"position":[[361,8]]},"25":{"position":[[68,11]]},"61":{"position":[[137,10]]},"63":{"position":[[209,8]]},"65":{"position":[[51,8]]},"71":{"position":[[63,9]]},"75":{"position":[[149,8]]},"105":{"position":[[487,7]]},"107":{"position":[[1176,7]]},"134":{"position":[[357,10]]},"172":{"position":[[455,8]]},"197":{"position":[[280,7]]},"240":{"position":[[58,8]]},"303":{"position":[[455,7]]},"337":{"position":[[1258,7]]},"369":{"position":[[87,7],[658,7]]},"392":{"position":[[831,7]]},"400":{"position":[[342,8]]},"450":{"position":[[651,8]]},"474":{"position":[[723,7]]},"492":{"position":[[65,10]]},"504":{"position":[[482,10]]},"514":{"position":[[2230,7]]},"520":{"position":[[141,7]]},"522":{"position":[[94,8]]},"532":{"position":[[420,8]]},"556":{"position":[[522,8]]},"560":{"position":[[668,8]]},"574":{"position":[[731,7]]},"598":{"position":[[824,8]]},"695":{"position":[[26,9]]}}}],["sure",{"_index":1089,"t":{"148":{"position":[[242,4]]},"152":{"position":[[955,4],[1150,4]]},"327":{"position":[[196,4],[1916,4]]},"329":{"position":[[664,4],[1086,4],[2089,4]]},"365":{"position":[[202,4]]},"367":{"position":[[1183,4]]},"406":{"position":[[1020,4],[1241,4]]},"427":{"position":[[389,4]]},"438":{"position":[[446,4]]},"446":{"position":[[444,4]]},"460":{"position":[[57,4]]},"530":{"position":[[636,4]]},"545":{"position":[[419,4]]},"558":{"position":[[400,4],[660,4]]},"567":{"position":[[318,4],[346,4]]},"569":{"position":[[41,4],[264,4]]},"576":{"position":[[714,4]]},"583":{"position":[[798,4],[1157,4]]},"591":{"position":[[119,4]]},"598":{"position":[[239,4]]},"602":{"position":[[580,4],[928,4]]},"604":{"position":[[2719,4]]},"606":{"position":[[1030,4]]},"629":{"position":[[619,4]]},"631":{"position":[[2653,4]]},"633":{"position":[[924,4]]},"637":{"position":[[13,4]]},"663":{"position":[[51,4]]},"699":{"position":[[574,4]]},"701":{"position":[[2682,4]]},"703":{"position":[[857,4],[1005,4]]},"705":{"position":[[549,4]]}}}],["surfac",{"_index":2062,"t":{"408":{"position":[[455,7]]}}}],["sushiswap",{"_index":94,"t":{"12":{"position":[[502,10]]},"29":{"position":[[231,9]]},"31":{"position":[[0,9]]},"33":{"position":[[68,9]]},"35":{"position":[[221,9]]}}}],["sustain",{"_index":224,"t":{"20":{"position":[[1045,14]]},"107":{"position":[[1204,14]]},"134":{"position":[[400,14]]}}}],["swap",{"_index":2348,"t":{"508":{"position":[[168,4]]}}}],["swarm",{"_index":797,"t":{"95":{"position":[[1159,8]]},"256":{"position":[[616,5],[1072,5]]},"502":{"position":[[0,5],[474,5],[552,6]]},"506":{"position":[[0,5],[93,5]]},"508":{"position":[[964,5]]},"510":{"position":[[230,5]]}}}],["swarm'",{"_index":2338,"t":{"502":{"position":[[629,7]]}}}],["swarm(direct",{"_index":2346,"t":{"508":{"position":[[52,12]]}}}],["swarm.dnp.dappnode.eth",{"_index":1325,"t":{"208":{"position":[[937,25]]},"230":{"position":[[357,25]]}}}],["swift",{"_index":1525,"t":{"271":{"position":[[1916,5]]}}}],["switch",{"_index":1178,"t":{"174":{"position":[[801,7]]},"195":{"position":[[1024,6]]},"323":{"position":[[606,6]]},"325":{"position":[[141,6]]},"329":{"position":[[841,6],[937,9]]},"499":{"position":[[244,6]]},"514":{"position":[[2033,6]]},"518":{"position":[[239,6]]},"530":{"position":[[876,9],[1280,6]]},"534":{"position":[[36,6]]},"602":{"position":[[844,6]]},"629":{"position":[[535,6]]},"699":{"position":[[490,6]]}}}],["symbol",{"_index":1964,"t":{"374":{"position":[[161,7]]}}}],["sync",{"_index":1420,"t":{"224":{"position":[[83,7]]},"329":{"position":[[540,6],[1241,4],[2707,8],[3003,7],[3163,5],[3388,5],[3608,7],[3735,6],[3778,7]]},"337":{"position":[[741,8],[814,8]]},"438":{"position":[[738,5],[809,6],[882,5]]},"514":{"position":[[902,7]]},"516":{"position":[[557,7]]},"518":{"position":[[193,7],[360,7],[643,7]]},"543":{"position":[[52,6]]},"552":{"position":[[52,6]]},"554":{"position":[[560,6],[644,6]]},"565":{"position":[[52,6]]},"583":{"position":[[262,6]]},"602":{"position":[[658,4],[682,7],[746,5],[916,6],[1093,7]]},"629":{"position":[[349,4],[373,7],[437,5],[607,6],[784,7]]},"667":{"position":[[44,7],[205,7]]},"679":{"position":[[28,6]]},"687":{"position":[[158,7]]},"699":{"position":[[304,4],[328,7],[392,5],[562,6],[739,7]]}}}],["synchron",{"_index":2558,"t":{"602":{"position":[[1156,15]]},"629":{"position":[[847,15]]},"699":{"position":[[802,15]]}}}],["syncron",{"_index":2509,"t":{"583":{"position":[[452,15]]}}}],["system",{"_index":1063,"t":{"136":{"position":[[831,7]]},"176":{"position":[[194,6]]},"178":{"position":[[324,6]]},"180":{"position":[[50,8]]},"195":{"position":[[106,6]]},"208":{"position":[[126,6],[214,6]]},"218":{"position":[[331,6]]},"220":{"position":[[220,6]]},"299":{"position":[[179,6]]},"303":{"position":[[318,7]]},"309":{"position":[[4923,6],[5149,6]]},"319":{"position":[[159,7]]},"321":{"position":[[597,7]]},"327":{"position":[[921,7],[1007,6],[1264,7]]},"335":{"position":[[587,6],[718,6]]},"353":{"position":[[76,6]]},"429":{"position":[[69,7],[972,7]]},"436":{"position":[[118,7]]},"438":{"position":[[320,8],[427,6]]},"440":{"position":[[79,6]]},"452":{"position":[[126,7]]},"469":{"position":[[236,8]]},"481":{"position":[[109,6]]},"483":{"position":[[103,6],[1101,6]]},"497":{"position":[[346,8]]},"499":{"position":[[109,7]]}}}],["systemctl",{"_index":2136,"t":{"427":{"position":[[194,9],[782,9]]}}}],["t",{"_index":763,"t":{"93":{"position":[[611,2]]},"95":{"position":[[1312,1],[1371,2]]}}}],["tab",{"_index":1777,"t":{"329":{"position":[[158,3]]},"351":{"position":[[802,3]]},"497":{"position":[[355,3]]},"514":{"position":[[1146,3]]},"518":{"position":[[791,4]]},"530":{"position":[[63,4]]},"556":{"position":[[483,4]]},"558":{"position":[[238,3]]},"565":{"position":[[546,3]]},"567":{"position":[[853,3]]},"569":{"position":[[145,4]]},"587":{"position":[[53,3]]},"633":{"position":[[269,4]]},"639":{"position":[[297,4]]}}}],["tabl",{"_index":292,"t":{"27":{"position":[[352,5],[776,5]]},"156":{"position":[[647,5]]},"166":{"position":[[621,6]]}}}],["tag",{"_index":168,"t":{"18":{"position":[[370,4]]},"57":{"position":[[708,4]]}}}],["tailor",{"_index":2238,"t":{"472":{"position":[[290,6]]}}}],["take",{"_index":121,"t":{"14":{"position":[[246,6]]},"119":{"position":[[294,4]]},"129":{"position":[[213,4]]},"134":{"position":[[292,5],[934,4],[992,4],[1090,5]]},"146":{"position":[[105,4]]},"152":{"position":[[1202,4]]},"156":{"position":[[575,4],[691,4]]},"158":{"position":[[355,4]]},"160":{"position":[[154,5]]},"329":{"position":[[3155,4],[3379,5],[3481,4],[3659,4],[3828,4]]},"351":{"position":[[1450,4]]},"384":{"position":[[48,6]]},"438":{"position":[[931,4]]},"545":{"position":[[123,4]]},"554":{"position":[[755,4]]},"596":{"position":[[172,5]]},"602":{"position":[[726,4],[1190,4]]},"606":{"position":[[439,4]]},"612":{"position":[[610,4]]},"627":{"position":[[64,5]]},"629":{"position":[[417,4],[881,4]]},"659":{"position":[[32,4]]},"699":{"position":[[372,4],[836,4]]},"703":{"position":[[439,4]]}}}],["taken",{"_index":1257,"t":{"191":{"position":[[207,5]]}}}],["tap",{"_index":106,"t":{"14":{"position":[[13,6]]},"195":{"position":[[181,3]]},"277":{"position":[[44,3],[244,3]]}}}],["tarbal",{"_index":1454,"t":{"238":{"position":[[254,8]]}}}],["target",{"_index":618,"t":{"63":{"position":[[42,7]]},"67":{"position":[[203,6]]},"71":{"position":[[469,8],[925,7],[1110,7],[1389,8],[1515,8],[1589,7],[2020,7],[2525,7],[2632,7]]},"77":{"position":[[177,6]]},"79":{"position":[[80,6]]},"81":{"position":[[73,6]]},"83":{"position":[[95,6]]},"244":{"position":[[7,8]]},"679":{"position":[[285,7]]}}}],["task",{"_index":1560,"t":{"285":{"position":[[127,5]]},"483":{"position":[[66,4]]},"600":{"position":[[350,6]]},"627":{"position":[[309,6]]}}}],["tb",{"_index":1627,"t":{"309":{"position":[[1409,2]]},"432":{"position":[[305,2],[385,2]]},"602":{"position":[[605,2]]}}}],["tcp",{"_index":693,"t":{"71":{"position":[[1793,3]]},"309":{"position":[[3034,3],[3082,3],[3411,4]]},"349":{"position":[[1384,4],[1402,3]]},"514":{"position":[[1602,3]]}}}],["team",{"_index":242,"t":{"25":{"position":[[125,4]]},"29":{"position":[[537,4]]},"337":{"position":[[1266,5]]},"497":{"position":[[100,4]]}}}],["tech",{"_index":2594,"t":{"619":{"position":[[28,5]]}}}],["technic",{"_index":1251,"t":{"189":{"position":[[642,11]]},"309":{"position":[[5372,9]]},"432":{"position":[[438,9]]},"504":{"position":[[840,9]]},"615":{"position":[[371,9]]},"685":{"position":[[193,9]]}}}],["techniqu",{"_index":2299,"t":{"487":{"position":[[1368,11]]},"490":{"position":[[147,10]]}}}],["technolog",{"_index":108,"t":{"14":{"position":[[29,10],[104,10]]},"197":{"position":[[308,13]]},"204":{"position":[[445,10]]},"465":{"position":[[116,10]]},"467":{"position":[[409,10]]},"469":{"position":[[192,10]]},"502":{"position":[[55,11]]},"528":{"position":[[447,11]]},"541":{"position":[[77,10]]},"550":{"position":[[141,10]]},"554":{"position":[[121,10]]},"569":{"position":[[540,10]]},"602":{"position":[[1654,10]]},"651":{"position":[[23,12]]}}}],["tediou",{"_index":2267,"t":{"481":{"position":[[394,8]]}}}],["teku",{"_index":1783,"t":{"329":{"position":[[297,5]]},"543":{"position":[[234,4]]},"552":{"position":[[235,4]]},"565":{"position":[[234,4]]},"602":{"position":[[269,5]]},"629":{"position":[[292,4]]},"699":{"position":[[264,4]]},"705":{"position":[[767,5]]}}}],["telegram",{"_index":1652,"t":{"309":{"position":[[3992,8],[4090,8],[4131,8],[4501,8],[4717,9],[5829,8]]},"319":{"position":[[1433,8],[1804,8]]},"321":{"position":[[38,8],[378,8]]},"323":{"position":[[7,8],[26,8],[565,8]]},"327":{"position":[[373,9],[854,9]]},"345":{"position":[[73,8]]},"347":{"position":[[86,9],[374,8]]},"349":{"position":[[2018,9]]},"351":{"position":[[94,8],[146,8],[1741,8]]},"655":{"position":[[79,8]]}}}],["telemetri",{"_index":1839,"t":{"331":{"position":[[34,9]]}}}],["tell",{"_index":1976,"t":{"382":{"position":[[189,4]]}}}],["temperatur",{"_index":2012,"t":{"404":{"position":[[178,13],[250,11],[434,12],[593,11]]},"406":{"position":[[750,13]]},"408":{"position":[[312,12],[789,12],[906,11]]},"410":{"position":[[39,11],[218,11],[484,11],[795,11],[885,11]]},"412":{"position":[[473,12],[536,12]]}}}],["templat",{"_index":1674,"t":{"313":{"position":[[506,8]]}}}],["tempor",{"_index":14,"t":{"3":{"position":[[121,6]]},"7":{"position":[[241,6],[420,6],[599,6],[778,6],[957,6],[1136,6],[1315,6],[1494,6],[1673,6],[1852,6],[2031,6],[2210,6],[2389,6],[2568,6],[2747,6],[2926,6]]},"39":{"position":[[73,6]]},"47":{"position":[[73,6]]}}}],["temporari",{"_index":1593,"t":{"299":{"position":[[131,9]]}}}],["temporarili",{"_index":1760,"t":{"327":{"position":[[660,12]]},"591":{"position":[[198,11]]}}}],["term",{"_index":347,"t":{"27":{"position":[[1809,4]]},"200":{"position":[[161,5]]},"291":{"position":[[349,5]]},"345":{"position":[[253,5]]}}}],["termin",{"_index":740,"t":{"91":{"position":[[444,8],[502,8]]},"93":{"position":[[420,8],[478,8]]},"95":{"position":[[428,8],[486,8]]},"99":{"position":[[1009,8],[1067,8]]},"176":{"position":[[827,8]]},"178":{"position":[[14,8],[379,8]]},"180":{"position":[[135,8]]},"189":{"position":[[971,9],[1070,9],[1100,9],[1199,9]]},"195":{"position":[[1071,9]]},"271":{"position":[[990,9],[1089,9],[1119,9],[1239,9]]},"309":{"position":[[4641,8],[5010,8],[5775,8]]},"351":{"position":[[692,9],[918,8],[1297,8]]},"380":{"position":[[468,9]]},"398":{"position":[[130,8]]},"429":{"position":[[173,8],[228,9],[766,9]]},"450":{"position":[[197,8]]},"454":{"position":[[166,8]]},"460":{"position":[[145,9]]},"514":{"position":[[2645,9]]},"705":{"position":[[841,8]]}}}],["test",{"_index":568,"t":{"57":{"position":[[152,5],[193,4]]},"93":{"position":[[755,7],[823,7]]},"97":{"position":[[149,5]]},"195":{"position":[[1199,7]]},"214":{"position":[[156,4]]},"232":{"position":[[437,4]]},"277":{"position":[[1123,7]]},"279":{"position":[[100,6],[492,4]]},"283":{"position":[[177,4]]},"301":{"position":[[101,4]]},"309":{"position":[[244,7],[279,7],[1079,8],[1098,7],[1227,7],[6012,7]]},"327":{"position":[[438,4],[519,4],[582,4],[690,4]]},"538":{"position":[[743,4]]},"541":{"position":[[554,7]]},"591":{"position":[[56,4]]}}}],["test.public.dappnode.eth",{"_index":2090,"t":{"416":{"position":[[75,25]]}}}],["test.public.dappnode.eth:0.1.0",{"_index":2091,"t":{"416":{"position":[[117,32]]}}}],["testament",{"_index":2605,"t":{"625":{"position":[[206,9]]}}}],["testnet",{"_index":1487,"t":{"256":{"position":[[701,8]]},"309":{"position":[[1484,8]]},"541":{"position":[[480,8]]},"543":{"position":[[517,7]]},"550":{"position":[[1005,8]]},"554":{"position":[[882,8]]},"563":{"position":[[217,8]]},"585":{"position":[[12,7],[25,7],[194,8]]},"587":{"position":[[27,7],[105,7]]},"589":{"position":[[56,7],[228,8],[495,7]]}}}],["text",{"_index":602,"t":{"61":{"position":[[180,4]]},"216":{"position":[[261,5]]},"349":{"position":[[2075,4]]}}}],["thank",{"_index":2555,"t":{"602":{"position":[[881,6]]},"619":{"position":[[5,6]]},"629":{"position":[[572,6]]},"699":{"position":[[527,6]]}}}],["that",{"_index":1744,"t":{"325":{"position":[[179,5]]}}}],["that'",{"_index":557,"t":{"55":{"position":[[66,6]]},"172":{"position":[[30,6]]},"193":{"position":[[119,6]]},"273":{"position":[[113,6]]},"329":{"position":[[3808,6]]},"398":{"position":[[269,6]]},"487":{"position":[[978,6]]},"693":{"position":[[174,6]]}}}],["themselv",{"_index":1938,"t":{"367":{"position":[[119,10]]}}}],["there'",{"_index":519,"t":{"51":{"position":[[22,7]]},"303":{"position":[[245,7]]},"319":{"position":[[172,7]]},"404":{"position":[[91,7]]},"406":{"position":[[449,7]]},"420":{"position":[[511,7]]},"518":{"position":[[500,7]]},"554":{"position":[[809,7]]},"655":{"position":[[93,7]]},"659":{"position":[[179,7]]},"681":{"position":[[208,7]]}}}],["therefor",{"_index":876,"t":{"107":{"position":[[759,10]]},"293":{"position":[[292,9]]},"506":{"position":[[78,10]]}}}],["thermal",{"_index":2056,"t":{"408":{"position":[[115,7],[201,7],[258,7],[353,7],[549,7]]}}}],["they'r",{"_index":2001,"t":{"402":{"position":[[179,7]]}}}],["thing",{"_index":1695,"t":{"319":{"position":[[186,5]]},"412":{"position":[[330,7]]},"487":{"position":[[1930,6]]},"543":{"position":[[10,5]]},"552":{"position":[[10,5]]},"565":{"position":[[10,5]]}}}],["third",{"_index":880,"t":{"109":{"position":[[29,5]]},"392":{"position":[[757,5]]}}}],["thorough",{"_index":2326,"t":{"497":{"position":[[739,8]]},"583":{"position":[[1168,8]]},"598":{"position":[[655,8]]},"608":{"position":[[130,8]]}}}],["thoroughli",{"_index":2063,"t":{"408":{"position":[[480,10]]}}}],["those",{"_index":88,"t":{"12":{"position":[[437,5],[673,5],[701,5]]},"125":{"position":[[584,5]]},"131":{"position":[[214,5]]},"136":{"position":[[467,5],[920,5]]},"176":{"position":[[344,5],[870,5]]},"299":{"position":[[4,5]]},"303":{"position":[[205,5]]},"309":{"position":[[1988,5],[2324,5]]},"412":{"position":[[291,5]]},"420":{"position":[[211,5]]},"438":{"position":[[252,5]]},"481":{"position":[[412,5]]},"526":{"position":[[98,5]]},"579":{"position":[[160,5]]},"594":{"position":[[171,5]]}}}],["though",{"_index":1081,"t":{"144":{"position":[[109,6]]},"174":{"position":[[587,6]]},"576":{"position":[[948,6]]},"598":{"position":[[512,6]]}}}],["thousand",{"_index":1715,"t":{"319":{"position":[[1200,8]]}}}],["three",{"_index":727,"t":{"89":{"position":[[25,5]]}}}],["thrive",{"_index":2261,"t":{"479":{"position":[[175,7]]}}}],["through",{"_index":194,"t":{"20":{"position":[[370,7]]},"109":{"position":[[558,7]]},"146":{"position":[[448,7]]},"160":{"position":[[117,7]]},"176":{"position":[[1152,7]]},"268":{"position":[[162,7]]},"309":{"position":[[1918,7],[5216,7]]},"319":{"position":[[1009,7],[1112,7]]},"325":{"position":[[310,7]]},"329":{"position":[[2059,7]]},"337":{"position":[[1096,7]]},"345":{"position":[[431,7]]},"390":{"position":[[75,7]]},"434":{"position":[[36,7]]},"442":{"position":[[305,7]]},"474":{"position":[[260,7]]},"479":{"position":[[183,7]]},"483":{"position":[[745,7]]},"487":{"position":[[90,7],[1207,7]]},"508":{"position":[[1006,7]]},"514":{"position":[[2635,7]]},"543":{"position":[[81,7],[424,7]]},"552":{"position":[[82,7]]},"565":{"position":[[81,7]]},"567":{"position":[[1592,7]]},"579":{"position":[[277,7]]},"615":{"position":[[244,7]]},"617":{"position":[[83,7]]},"641":{"position":[[39,7]]},"649":{"position":[[24,7]]},"651":{"position":[[110,7]]},"655":{"position":[[61,7]]},"657":{"position":[[92,7],[175,7]]},"661":{"position":[[54,7]]},"663":{"position":[[161,7]]},"665":{"position":[[60,7]]},"669":{"position":[[220,7]]}}}],["throughout",{"_index":2490,"t":{"572":{"position":[[415,10]]}}}],["throughput",{"_index":2401,"t":{"532":{"position":[[72,10]]}}}],["thu",{"_index":333,"t":{"27":{"position":[[1327,4]]}}}],["tight",{"_index":2053,"t":{"406":{"position":[[1411,6]]}}}],["time",{"_index":302,"t":{"27":{"position":[[461,5],[533,5],[609,5],[682,5],[759,5],[886,5],[958,5],[1030,5],[1103,5],[1176,5],[1219,4]]},"129":{"position":[[367,5]]},"134":{"position":[[501,4]]},"156":{"position":[[115,4]]},"160":{"position":[[100,5]]},"189":{"position":[[822,5]]},"197":{"position":[[423,5]]},"283":{"position":[[78,4]]},"291":{"position":[[458,5],[560,5]]},"305":{"position":[[242,5]]},"329":{"position":[[3616,4],[3838,5]]},"333":{"position":[[661,4]]},"357":{"position":[[80,4]]},"371":{"position":[[55,4]]},"390":{"position":[[123,5]]},"406":{"position":[[986,4]]},"408":{"position":[[191,5]]},"438":{"position":[[936,4],[1010,4],[1306,6]]},"481":{"position":[[30,5]]},"483":{"position":[[815,4]]},"560":{"position":[[95,4]]},"567":{"position":[[518,5]]},"572":{"position":[[350,4]]},"574":{"position":[[724,6]]},"602":{"position":[[738,4],[876,4]]},"604":{"position":[[2752,4]]},"612":{"position":[[598,5]]},"629":{"position":[[429,4],[567,4]]},"631":{"position":[[2686,4]]},"685":{"position":[[142,5]]},"699":{"position":[[384,4],[522,4]]},"701":{"position":[[2715,4]]}}}],["timeout",{"_index":764,"t":{"93":{"position":[[616,7],[648,8]]},"95":{"position":[[1376,7],[1408,8]]},"228":{"position":[[26,7]]}}}],["timestamp",{"_index":1866,"t":{"333":{"position":[[1084,9]]}}}],["timestr",{"_index":1432,"t":{"228":{"position":[[259,11]]}}}],["tip",{"_index":26,"t":{"5":{"position":[[62,3]]},"109":{"position":[[530,3]]},"125":{"position":[[608,3]]},"271":{"position":[[2126,3]]},"279":{"position":[[507,3]]},"309":{"position":[[1757,3],[3568,3]]},"319":{"position":[[1217,3]]},"321":{"position":[[0,3]]},"351":{"position":[[1060,3]]},"357":{"position":[[103,3]]},"394":{"position":[[257,3]]},"406":{"position":[[1192,3]]},"410":{"position":[[444,4]]},"429":{"position":[[136,3]]},"487":{"position":[[1575,5]]},"516":{"position":[[758,3]]},"524":{"position":[[640,3]]},"530":{"position":[[1231,4]]},"589":{"position":[[374,3]]},"604":{"position":[[2343,3]]},"631":{"position":[[2257,3]]},"701":{"position":[[2294,3]]}}}],["titan",{"_index":2542,"t":{"600":{"position":[[21,5]]}}}],["titl",{"_index":622,"t":{"63":{"position":[[107,6]]},"67":{"position":[[245,5]]},"73":{"position":[[4,5],[63,6]]}}}],["togeth",{"_index":848,"t":{"101":{"position":[[599,8]]},"111":{"position":[[104,8]]},"121":{"position":[[362,8]]},"125":{"position":[[390,8]]},"641":{"position":[[129,8]]},"669":{"position":[[196,9]]}}}],["toggl",{"_index":1176,"t":{"174":{"position":[[627,6],[768,6]]},"195":{"position":[[1013,6]]},"307":{"position":[[57,6]]},"323":{"position":[[595,6]]},"327":{"position":[[1034,6]]},"499":{"position":[[213,8]]},"530":{"position":[[186,6]]},"602":{"position":[[936,6]]},"629":{"position":[[627,6]]},"699":{"position":[[582,6]]}}}],["token",{"_index":105,"t":{"12":{"position":[[761,6]]},"23":{"position":[[0,5],[70,5],[184,7],[198,6]]},"27":{"position":[[1751,6]]},"29":{"position":[[79,5],[447,5]]},"136":{"position":[[282,6]]},"309":{"position":[[4034,6],[4185,6]]},"347":{"position":[[234,5],[268,6]]},"376":{"position":[[65,6],[77,5],[192,6],[247,7],[275,5],[355,5],[482,6]]},"378":{"position":[[37,5]]},"380":{"position":[[204,5],[321,6],[357,6],[521,5]]},"474":{"position":[[480,6],[645,6]]},"502":{"position":[[361,7],[387,6]]},"541":{"position":[[235,5]]},"574":{"position":[[123,9],[160,9]]},"635":{"position":[[290,5],[358,5],[490,6]]}}}],["token.txt",{"_index":1973,"t":{"380":{"position":[[605,9]]}}}],["tokenom",{"_index":2485,"t":{"572":{"position":[[212,11]]}}}],["toler",{"_index":2440,"t":{"550":{"position":[[762,8]]},"563":{"position":[[492,8]]}}}],["tool",{"_index":203,"t":{"20":{"position":[[598,5]]},"41":{"position":[[102,5]]},"97":{"position":[[33,4]]},"99":{"position":[[681,7]]},"208":{"position":[[2796,7]]},"238":{"position":[[1082,4]]},"256":{"position":[[632,5],[1099,7]]},"327":{"position":[[1529,5]]},"329":{"position":[[511,5]]},"369":{"position":[[273,5],[459,4],[508,5]]},"371":{"position":[[695,4]]},"427":{"position":[[378,5]]},"514":{"position":[[501,5]]},"547":{"position":[[14,4]]},"604":{"position":[[42,4],[124,4]]},"631":{"position":[[49,4],[122,4],[1356,5]]},"653":{"position":[[51,4]]},"697":{"position":[[74,5]]},"701":{"position":[[48,4],[121,4],[1248,4],[1393,5]]},"705":{"position":[[329,4]]}}}],["toolkit",{"_index":2275,"t":{"483":{"position":[[394,8]]}}}],["top",{"_index":726,"t":{"89":{"position":[[21,3]]},"195":{"position":[[572,3]]},"345":{"position":[[25,3]]},"396":{"position":[[146,3]]},"408":{"position":[[158,3]]},"514":{"position":[[18,3],[2052,3]]},"534":{"position":[[72,3]]},"604":{"position":[[2320,3]]},"612":{"position":[[225,3]]},"631":{"position":[[2234,3]]},"637":{"position":[[677,3]]},"701":{"position":[[2271,3]]}}}],["topic",{"_index":2086,"t":{"412":{"position":[[352,6]]},"683":{"position":[[110,6]]}}}],["tor",{"_index":1709,"t":{"319":{"position":[[1021,3],[1038,3],[1897,3]]},"325":{"position":[[243,3],[322,3]]},"337":{"position":[[1108,3]]}}}],["total",{"_index":229,"t":{"23":{"position":[[148,5]]},"29":{"position":[[73,5]]},"156":{"position":[[715,6]]},"331":{"position":[[429,5]]},"333":{"position":[[179,5],[372,5],[646,5],[723,5],[797,5],[933,5],[1220,5]]}}}],["touch",{"_index":2531,"t":{"594":{"position":[[371,7]]}}}],["trace",{"_index":2313,"t":{"490":{"position":[[213,5]]}}}],["tracing/arch",{"_index":2551,"t":{"602":{"position":[[523,15]]}}}],["track",{"_index":291,"t":{"27":{"position":[[332,7]]},"97":{"position":[[198,7]]},"101":{"position":[[611,5]]},"111":{"position":[[116,5],[268,5]]},"129":{"position":[[874,7],[968,7],[1310,7]]},"131":{"position":[[7,8]]},"256":{"position":[[913,5]]},"412":{"position":[[511,5]]},"518":{"position":[[633,5]]},"576":{"position":[[874,5]]},"583":{"position":[[812,5]]},"612":{"position":[[477,5]]},"637":{"position":[[929,5]]}}}],["tracker",{"_index":1506,"t":{"264":{"position":[[28,8]]}}}],["trade",{"_index":2405,"t":{"532":{"position":[[394,5]]},"574":{"position":[[203,6]]}}}],["tradit",{"_index":1552,"t":{"281":{"position":[[47,11]]},"469":{"position":[[214,11]]},"661":{"position":[[160,11]]}}}],["traffic",{"_index":1642,"t":{"309":{"position":[[2561,7],[2716,8],[3428,8]]},"319":{"position":[[1104,7]]},"481":{"position":[[322,7]]},"483":{"position":[[1133,8]]}}}],["transacion",{"_index":2475,"t":{"567":{"position":[[1576,10]]}}}],["transact",{"_index":889,"t":{"109":{"position":[[458,11]]},"115":{"position":[[546,11],[653,11],[907,11]]},"134":{"position":[[158,11]]},"156":{"position":[[355,11]]},"160":{"position":[[171,12]]},"166":{"position":[[302,11],[432,12],[467,11]]},"467":{"position":[[145,13]]},"477":{"position":[[205,11]]},"490":{"position":[[85,11],[169,11],[245,11]]},"504":{"position":[[426,13]]},"532":{"position":[[133,11]]},"536":{"position":[[82,11],[130,12]]},"538":{"position":[[425,12]]},"567":{"position":[[1493,11]]},"621":{"position":[[138,11]]},"639":{"position":[[464,11]]},"679":{"position":[[119,12]]},"695":{"position":[[174,11]]}}}],["transfer",{"_index":1048,"t":{"134":{"position":[[755,9]]},"275":{"position":[[409,8]]},"408":{"position":[[85,8],[668,10]]},"465":{"position":[[323,9]]},"510":{"position":[[149,8]]},"576":{"position":[[646,8]]}}}],["transform",{"_index":874,"t":{"107":{"position":[[653,11]]},"134":{"position":[[80,11]]},"483":{"position":[[592,9]]}}}],["transit",{"_index":998,"t":{"127":{"position":[[208,10]]},"129":{"position":[[194,12],[1412,11]]},"136":{"position":[[621,10]]},"309":{"position":[[2856,8]]}}}],["transmiss",{"_index":1899,"t":{"337":{"position":[[1076,12]]}}}],["transpar",{"_index":182,"t":{"20":{"position":[[142,12],[872,11]]},"315":{"position":[[1011,13]]},"331":{"position":[[435,12]]},"469":{"position":[[291,11]]},"574":{"position":[[387,11],[441,11]]},"581":{"position":[[267,12]]}}}],["trash",{"_index":2365,"t":{"514":{"position":[[832,5],[986,5]]}}}],["travis_tag=releas",{"_index":779,"t":{"95":{"position":[[589,18]]}}}],["travis_tag=release/[typ",{"_index":782,"t":{"95":{"position":[[618,25]]}}}],["treat",{"_index":1259,"t":{"191":{"position":[[525,5],[562,5]]},"271":{"position":[[2220,5]]}}}],["tree",{"_index":905,"t":{"113":{"position":[[487,5]]},"115":{"position":[[125,4],[210,5]]}}}],["tri",{"_index":1127,"t":{"158":{"position":[[527,3]]},"189":{"position":[[758,6]]},"271":{"position":[[2014,6]]},"309":{"position":[[5665,3]]},"329":{"position":[[933,3],[1678,3],[2027,6]]},"351":{"position":[[1477,3],[1610,3]]},"402":{"position":[[318,6]]},"404":{"position":[[610,3]]},"406":{"position":[[617,3]]},"412":{"position":[[144,5]]},"429":{"position":[[883,6]]},"530":{"position":[[118,3]]},"602":{"position":[[1495,3]]}}}],["trick",{"_index":2623,"t":{"641":{"position":[[237,6]]},"695":{"position":[[79,6]]}}}],["trigger",{"_index":576,"t":{"57":{"position":[[666,8],[859,9]]},"109":{"position":[[448,7]]},"129":{"position":[[113,7],[1396,7]]},"222":{"position":[[45,7]]},"444":{"position":[[180,7]]},"639":{"position":[[483,7]]}}}],["tripl",{"_index":1792,"t":{"329":{"position":[[672,6]]}}}],["troubl",{"_index":1752,"t":{"327":{"position":[[13,7]]}}}],["troubleshoot",{"_index":1104,"t":{"152":{"position":[[1370,17],[2067,17]]},"309":{"position":[[2489,15],[4940,16]]},"450":{"position":[[569,16]]},"514":{"position":[[743,15]]},"602":{"position":[[1249,16]]},"629":{"position":[[940,16]]},"699":{"position":[[895,16]]}}}],["true",{"_index":628,"t":{"63":{"position":[[249,4],[390,4]]},"77":{"position":[[255,4]]},"85":{"position":[[100,4]]},"208":{"position":[[1053,6]]},"234":{"position":[[275,6]]},"418":{"position":[[459,6],[681,6]]},"508":{"position":[[1055,4],[1177,4]]}}}],["trueblock",{"_index":2553,"t":{"602":{"position":[[563,11]]}}}],["truncat",{"_index":42,"t":{"7":{"position":[[57,8]]}}}],["trust",{"_index":2319,"t":{"495":{"position":[[375,7]]},"497":{"position":[[186,7],[266,7],[304,7],[423,7],[682,7]]},"499":{"position":[[82,7],[226,7]]},"516":{"position":[[730,5]]},"520":{"position":[[88,5]]},"524":{"position":[[526,5]]},"528":{"position":[[88,5]]},"554":{"position":[[261,5]]},"569":{"position":[[680,5]]},"697":{"position":[[66,7]]}}}],["trustworthi",{"_index":2446,"t":{"554":{"position":[[405,11]]},"569":{"position":[[816,11]]}}}],["tunnel",{"_index":1527,"t":{"275":{"position":[[77,7],[96,6],[254,7],[375,6]]},"277":{"position":[[258,8],[570,7],[599,6],[637,7],[778,9],[831,8],[1040,8],[1115,7]]},"355":{"position":[[20,6]]}}}],["tunnelblick",{"_index":1266,"t":{"195":{"position":[[515,11]]}}}],["turn",{"_index":1170,"t":{"174":{"position":[[317,7]]},"307":{"position":[[85,4]]},"327":{"position":[[1648,6]]},"357":{"position":[[60,7]]},"359":{"position":[[35,6]]},"365":{"position":[[277,4]]},"438":{"position":[[840,4],[908,4]]},"602":{"position":[[1605,4]]},"608":{"position":[[95,5]]}}}],["tutori",{"_index":2619,"t":{"641":{"position":[[53,10]]},"673":{"position":[[426,8]]},"681":{"position":[[26,9],[100,9]]},"685":{"position":[[46,9]]}}}],["tweak",{"_index":2079,"t":{"410":{"position":[[700,5]]}}}],["twice",{"_index":2193,"t":{"450":{"position":[[103,6]]},"458":{"position":[[109,7]]}}}],["two",{"_index":679,"t":{"71":{"position":[[770,3]]},"101":{"position":[[533,3]]},"111":{"position":[[22,3],[84,3]]},"129":{"position":[[441,3],[549,3]]},"144":{"position":[[774,3]]},"158":{"position":[[246,3]]},"189":{"position":[[10,3]]},"197":{"position":[[292,3]]},"256":{"position":[[94,3]]},"271":{"position":[[10,3]]},"307":{"position":[[39,3]]},"315":{"position":[[44,3]]},"329":{"position":[[1261,4]]},"351":{"position":[[64,3]]},"410":{"position":[[252,3]]},"434":{"position":[[44,3]]},"442":{"position":[[848,3]]},"483":{"position":[[239,3]]},"514":{"position":[[2451,3]]},"516":{"position":[[389,3]]},"524":{"position":[[217,3]]},"532":{"position":[[314,3]]},"543":{"position":[[399,3]]},"651":{"position":[[19,3]]}}}],["txt",{"_index":1513,"t":{"271":{"position":[[455,4]]}}}],["type",{"_index":619,"t":{"63":{"position":[[50,5]]},"65":{"position":[[84,5]]},"67":{"position":[[76,5],[88,5],[128,5],[181,4]]},"69":{"position":[[104,5]]},"71":{"position":[[560,4],[933,5],[1118,5],[1287,5],[1417,5],[1597,5],[1829,5],[2028,5],[2262,5],[2533,5],[2640,5],[2816,5]]},"73":{"position":[[41,5]]},"75":{"position":[[47,5]]},"77":{"position":[[224,5]]},"79":{"position":[[200,5]]},"81":{"position":[[105,5]]},"83":{"position":[[127,5],[139,5],[179,5]]},"85":{"position":[[67,5]]},"87":{"position":[[196,5]]},"95":{"position":[[507,4],[526,5]]},"99":{"position":[[395,6],[508,6],[567,6]]},"107":{"position":[[805,5]]},"109":{"position":[[35,4]]},"136":{"position":[[183,5],[273,5]]},"172":{"position":[[108,4]]},"180":{"position":[[178,5]]},"195":{"position":[[1256,4]]},"208":{"position":[[788,7],[3066,7]]},"210":{"position":[[9,4],[161,4]]},"212":{"position":[[39,5]]},"214":{"position":[[56,5]]},"216":{"position":[[220,5]]},"218":{"position":[[291,5]]},"220":{"position":[[166,5]]},"222":{"position":[[0,4],[134,5]]},"224":{"position":[[110,5]]},"226":{"position":[[151,5]]},"228":{"position":[[318,5]]},"230":{"position":[[240,5],[293,4]]},"232":{"position":[[99,5],[152,4],[337,5]]},"234":{"position":[[87,5],[140,4],[252,5]]},"236":{"position":[[101,5],[113,5],[151,5]]},"238":{"position":[[579,5],[591,5],[631,5],[684,4],[884,5],[1118,5],[1357,5]]},"240":{"position":[[99,5]]},"242":{"position":[[141,5],[194,4],[385,5],[625,5],[876,5],[1084,5]]},"244":{"position":[[55,5],[67,5],[107,5],[160,4],[384,5],[596,5],[755,5]]},"246":{"position":[[100,5],[153,4],[277,5]]},"248":{"position":[[109,5],[162,4],[481,5],[746,5],[1009,5]]},"250":{"position":[[65,5],[77,5],[117,5],[170,4],[382,5],[512,5],[685,5],[808,5]]},"252":{"position":[[116,5]]},"254":{"position":[[59,5],[71,5],[111,5]]},"256":{"position":[[346,5],[358,5],[396,5]]},"258":{"position":[[132,5],[144,5],[184,5]]},"260":{"position":[[309,5],[362,4],[583,5],[704,5],[829,5],[949,5]]},"262":{"position":[[122,5],[175,4],[189,4],[256,5],[274,5],[348,5],[465,5]]},"264":{"position":[[49,5],[102,4],[153,5]]},"266":{"position":[[40,5]]},"277":{"position":[[1180,4]]},"315":{"position":[[470,5],[594,4]]},"335":{"position":[[751,5]]},"349":{"position":[[413,5],[438,5],[1266,5],[1282,5],[1300,5],[1323,5],[1389,5],[1460,5],[1662,4]]},"508":{"position":[[451,4]]},"532":{"position":[[318,6]]},"604":{"position":[[1855,4]]},"612":{"position":[[279,4]]},"631":{"position":[[1767,4]]},"637":{"position":[[50,4],[731,4]]},"639":{"position":[[403,4]]},"701":{"position":[[1804,4]]},"705":{"position":[[451,4],[992,5]]}}}],["typic",{"_index":967,"t":{"125":{"position":[[278,9]]},"182":{"position":[[127,10]]},"414":{"position":[[184,7]]},"420":{"position":[[1090,7]]}}}],["ubuntu",{"_index":536,"t":{"53":{"position":[[139,6]]},"57":{"position":[[167,6],[348,6]]},"195":{"position":[[841,6]]},"351":{"position":[[961,6]]},"452":{"position":[[91,6]]}}}],["ubuntu@yourinstancedn",{"_index":1928,"t":{"351":{"position":[[1037,22]]}}}],["udp",{"_index":694,"t":{"71":{"position":[[1800,3]]},"309":{"position":[[3284,3],[3332,3],[3424,3],[3541,3]]},"329":{"position":[[1808,4]]},"349":{"position":[[1336,3],[1455,4],[1473,3]]},"514":{"position":[[1610,4]]}}}],["ui",{"_index":644,"t":{"67":{"position":[[61,2]]},"71":{"position":[[587,2]]},"152":{"position":[[707,3]]},"174":{"position":[[96,2],[578,3]]},"189":{"position":[[135,3]]},"206":{"position":[[272,3]]},"208":{"position":[[2919,5]]},"216":{"position":[[176,2]]},"224":{"position":[[70,2]]},"238":{"position":[[155,2]]},"248":{"position":[[93,3]]},"258":{"position":[[93,2]]},"260":{"position":[[133,3],[401,2],[651,3],[688,3]]},"271":{"position":[[88,3]]},"303":{"position":[[161,3]]},"309":{"position":[[1938,2],[5246,3]]},"327":{"position":[[1211,3]]},"349":{"position":[[37,2],[273,3]]},"380":{"position":[[424,3]]},"410":{"position":[[622,2]]},"508":{"position":[[905,3]]},"526":{"position":[[251,2]]},"534":{"position":[[96,2]]},"543":{"position":[[372,3]]},"545":{"position":[[109,3]]},"565":{"position":[[371,2]]},"569":{"position":[[415,3]]},"576":{"position":[[47,3],[460,3]]},"583":{"position":[[41,3]]},"602":{"position":[[98,2]]},"604":{"position":[[2592,2],[2926,3]]},"606":{"position":[[1348,3]]},"610":{"position":[[169,3]]},"612":{"position":[[136,3],[247,3]]},"615":{"position":[[264,3]]},"617":{"position":[[103,3]]},"629":{"position":[[119,2]]},"631":{"position":[[2522,2],[2867,3]]},"633":{"position":[[1342,3]]},"635":{"position":[[172,2]]},"637":{"position":[[588,3],[699,3]]},"699":{"position":[[113,2]]},"701":{"position":[[2558,2],[2895,3]]},"703":{"position":[[1359,3]]}}}],["ui)/dashboard",{"_index":2646,"t":{"687":{"position":[[75,14]]}}}],["ui/account/wallet",{"_index":2359,"t":{"510":{"position":[[236,18]]}}}],["ui/dashboard",{"_index":2361,"t":{"514":{"position":[[475,13]]}}}],["ullamco",{"_index":443,"t":{"39":{"position":[[176,7]]},"47":{"position":[[176,7]]}}}],["ultim",{"_index":2244,"t":{"472":{"position":[[433,10]]}}}],["ultrici",{"_index":11,"t":{"3":{"position":[[90,10]]},"7":{"position":[[210,10],[389,10],[568,10],[747,10],[926,10],[1105,10],[1284,10],[1463,10],[1642,10],[1821,10],[2000,10],[2179,10],[2358,10],[2537,10],[2716,10],[2895,10]]}}}],["un",{"_index":2487,"t":{"572":{"position":[[334,2]]}}}],["unalloc",{"_index":1563,"t":{"285":{"position":[[182,11]]}}}],["unalt",{"_index":2263,"t":{"479":{"position":[[323,10]]}}}],["unattend",{"_index":2175,"t":{"442":{"position":[[124,10],[434,10],[454,10]]},"448":{"position":[[232,10],[360,10]]}}}],["unauthor",{"_index":2321,"t":{"495":{"position":[[467,12]]},"663":{"position":[[59,12]]}}}],["unavail",{"_index":2380,"t":{"518":{"position":[[379,11]]},"524":{"position":[[627,12]]}}}],["uncensor",{"_index":64,"t":{"12":{"position":[[129,10]]},"504":{"position":[[221,12]]}}}],["uncertain",{"_index":1591,"t":{"299":{"position":[[62,10]]}}}],["unclaim",{"_index":885,"t":{"109":{"position":[[292,9]]},"136":{"position":[[543,12]]}}}],["under",{"_index":1457,"t":{"238":{"position":[[448,5]]},"319":{"position":[[2080,5]]},"331":{"position":[[995,5]]},"349":{"position":[[1070,5]]},"367":{"position":[[980,5]]},"465":{"position":[[181,5]]},"514":{"position":[[1135,5]]},"518":{"position":[[295,5]]},"556":{"position":[[468,5]]},"558":{"position":[[219,5],[421,5]]},"587":{"position":[[35,5]]},"596":{"position":[[125,5]]},"598":{"position":[[66,5],[266,5]]},"619":{"position":[[299,5]]},"633":{"position":[[251,5]]},"705":{"position":[[706,5]]}}}],["undergo",{"_index":2428,"t":{"541":{"position":[[543,10]]}}}],["underli",{"_index":1402,"t":{"216":{"position":[[95,10]]}}}],["understand",{"_index":500,"t":{"43":{"position":[[133,10]]},"101":{"position":[[208,13]]},"168":{"position":[[169,10]]},"178":{"position":[[403,10]]},"206":{"position":[[86,10]]},"309":{"position":[[2267,10]]},"331":{"position":[[552,13],[848,10]]},"481":{"position":[[157,13]]},"483":{"position":[[527,13]]},"554":{"position":[[24,10]]},"569":{"position":[[443,10]]},"576":{"position":[[1063,10]]},"583":{"position":[[1114,10]]},"589":{"position":[[162,13]]},"591":{"position":[[128,10]]},"606":{"position":[[372,10]]},"608":{"position":[[139,13]]},"633":{"position":[[604,10]]},"649":{"position":[[146,13]]},"683":{"position":[[213,13]]},"685":{"position":[[75,10]]},"687":{"position":[[210,13]]},"703":{"position":[[372,10]]}}}],["unevenli",{"_index":961,"t":{"125":{"position":[[58,9]]}}}],["unexpect",{"_index":2373,"t":{"514":{"position":[[1952,10]]},"655":{"position":[[101,10]]}}}],["uninstal",{"_index":2207,"t":{"462":{"position":[[18,9]]}}}],["unintend",{"_index":1202,"t":{"178":{"position":[[292,10]]}}}],["uninterrupt",{"_index":1252,"t":{"189":{"position":[[901,13]]},"398":{"position":[[506,13]]},"518":{"position":[[439,13]]}}}],["uniqu",{"_index":650,"t":{"69":{"position":[[0,6]]},"119":{"position":[[144,6]]},"327":{"position":[[1955,6]]},"398":{"position":[[253,6]]},"504":{"position":[[563,6]]},"532":{"position":[[374,6]]},"556":{"position":[[389,6]]},"572":{"position":[[205,6]]},"695":{"position":[[198,6]]}}}],["uniswap",{"_index":93,"t":{"12":{"position":[[489,8]]},"29":{"position":[[278,7]]},"31":{"position":[[69,7]]},"33":{"position":[[0,7]]},"35":{"position":[[151,7]]}}}],["univers",{"_index":349,"t":{"27":{"position":[[1892,8]]},"367":{"position":[[14,10]]},"479":{"position":[[31,8]]},"695":{"position":[[0,9],[131,9]]}}}],["unless",{"_index":1915,"t":{"349":{"position":[[1964,6]]},"416":{"position":[[159,6]]},"418":{"position":[[255,6],[577,6]]}}}],["unlock",{"_index":2290,"t":{"483":{"position":[[1181,7]]}}}],["unnecessarili",{"_index":2639,"t":{"679":{"position":[[230,13]]}}}],["unrecover",{"_index":2460,"t":{"558":{"position":[[836,14]]}}}],["unregist",{"_index":1133,"t":{"158":{"position":[[973,10]]},"327":{"position":[[874,10],[1352,10],[1754,10]]}}}],["unregistr",{"_index":1768,"t":{"327":{"position":[[1701,15]]}}}],["unreli",{"_index":2387,"t":{"524":{"position":[[613,10]]}}}],["unstabl",{"_index":2398,"t":{"530":{"position":[[857,9]]}}}],["unstopp",{"_index":2332,"t":{"502":{"position":[[127,12]]}}}],["unsubscrib",{"_index":1015,"t":{"129":{"position":[[930,13],[1000,11],[1995,12],[2031,12],[2069,11]]},"134":{"position":[[446,11],[516,13],[830,14],[899,14]]},"140":{"position":[[655,13]]},"148":{"position":[[913,13]]},"160":{"position":[[0,13],[69,11],[197,13],[299,13]]},"164":{"position":[[29,13],[79,11]]},"166":{"position":[[21,13],[98,11],[420,11],[536,12],[642,14]]}}}],["unsubscript",{"_index":897,"t":{"111":{"position":[[333,16]]},"113":{"position":[[168,16]]}}}],["unsur",{"_index":1943,"t":{"367":{"position":[[560,6],[879,7]]}}}],["until",{"_index":279,"t":{"27":{"position":[[143,5]]},"107":{"position":[[269,5],[492,5]]},"115":{"position":[[625,6],[880,5]]},"129":{"position":[[629,5]]},"146":{"position":[[26,5]]},"329":{"position":[[522,5],[742,5]]},"606":{"position":[[545,5]]},"703":{"position":[[545,5]]}}}],["untrack",{"_index":1020,"t":{"129":{"position":[[1277,11]]}}}],["unwav",{"_index":2254,"t":{"477":{"position":[[108,10]]}}}],["up",{"_index":973,"t":{"125":{"position":[[349,2],[562,2]]},"152":{"position":[[1207,2]]},"156":{"position":[[580,2]]},"158":{"position":[[360,2]]},"170":{"position":[[39,2]]},"176":{"position":[[1067,2],[1168,2]]},"186":{"position":[[123,2]]},"189":{"position":[[839,2]]},"246":{"position":[[229,3]]},"268":{"position":[[178,2]]},"271":{"position":[[753,2]]},"277":{"position":[[592,2]]},"287":{"position":[[57,2]]},"309":{"position":[[5978,2]]},"313":{"position":[[323,2]]},"327":{"position":[[53,3],[410,3],[1598,2]]},"329":{"position":[[58,2],[3664,2]]},"331":{"position":[[110,2],[266,2]]},"337":{"position":[[833,3]]},"343":{"position":[[103,3],[134,2],[168,2],[204,3]]},"367":{"position":[[90,2]]},"371":{"position":[[30,2]]},"374":{"position":[[17,2]]},"390":{"position":[[8,2]]},"394":{"position":[[341,2]]},"400":{"position":[[222,2],[370,2]]},"410":{"position":[[370,2]]},"438":{"position":[[950,2]]},"442":{"position":[[691,2]]},"543":{"position":[[41,2]]},"552":{"position":[[41,2]]},"556":{"position":[[531,2],[1282,2]]},"560":{"position":[[65,2]]},"565":{"position":[[41,2]]},"576":{"position":[[210,2]]},"583":{"position":[[212,2]]},"600":{"position":[[150,2]]},"610":{"position":[[330,2]]},"612":{"position":[[615,2]]},"629":{"position":[[64,2]]},"649":{"position":[[237,2]]},"657":{"position":[[199,2]]},"667":{"position":[[83,2]]},"671":{"position":[[16,2]]},"685":{"position":[[111,2]]},"687":{"position":[[101,2]]},"695":{"position":[[19,6]]},"699":{"position":[[64,2]]}}}],["updat",{"_index":517,"t":{"49":{"position":[[139,7]]},"51":{"position":[[43,6],[86,6]]},"95":{"position":[[519,6]]},"115":{"position":[[589,7],[696,7],[950,7]]},"138":{"position":[[373,6]]},"144":{"position":[[354,6]]},"152":{"position":[[1826,7]]},"156":{"position":[[661,7]]},"158":{"position":[[425,7],[564,7],[742,7],[872,6],[1025,6]]},"208":{"position":[[1527,9],[1575,6],[1946,6],[1970,6]]},"228":{"position":[[68,8],[123,8]]},"242":{"position":[[551,8],[704,9],[752,6]]},"244":{"position":[[30,6],[300,7],[501,7],[813,6],[837,6],[968,6]]},"309":{"position":[[5124,6]]},"319":{"position":[[2151,8]]},"329":{"position":[[888,7]]},"331":{"position":[[1044,7]]},"335":{"position":[[483,7],[575,7]]},"394":{"position":[[28,6],[77,6],[185,7],[299,7]]},"400":{"position":[[413,7]]},"460":{"position":[[165,6]]},"530":{"position":[[458,8],[512,7]]},"574":{"position":[[743,8]]}}}],["update=tru",{"_index":2206,"t":{"460":{"position":[[309,11]]}}}],["updatealert",{"_index":1349,"t":{"208":{"position":[[1876,15]]},"210":{"position":[[449,12]]}}}],["upfront",{"_index":1115,"t":{"156":{"position":[[120,7]]}}}],["upgrad",{"_index":2419,"t":{"538":{"position":[[460,8]]},"637":{"position":[[281,8]]},"701":{"position":[[579,9]]},"705":{"position":[[187,8]]}}}],["uphold",{"_index":2253,"t":{"477":{"position":[[94,9]]}}}],["uploa",{"_index":822,"t":{"99":{"position":[[367,5]]}}}],["upload",{"_index":590,"t":{"59":{"position":[[196,6]]},"71":{"position":[[361,6],[2586,9],[2728,6]]},"93":{"position":[[844,6]]},"95":{"position":[[1122,6]]},"195":{"position":[[203,6],[746,6],[951,6]]},"208":{"position":[[412,6]]},"220":{"position":[[418,6]]},"502":{"position":[[598,7]]},"514":{"position":[[2668,6]]},"604":{"position":[[2495,6],[2680,6]]},"606":{"position":[[555,7],[599,6],[1362,8]]},"612":{"position":[[57,6]]},"631":{"position":[[2409,6],[2614,6]]},"633":{"position":[[1356,8]]},"637":{"position":[[509,6]]},"641":{"position":[[283,8]]},"701":{"position":[[2446,6],[2643,6]]},"703":{"position":[[555,7],[599,6],[1373,8]]}}}],["upload_to",{"_index":796,"t":{"95":{"position":[[1095,9]]}}}],["upnp",{"_index":1812,"t":{"329":{"position":[[1640,4]]},"365":{"position":[[164,4]]},"367":{"position":[[9,4],[331,4],[903,4],[960,7],[1119,5],[1172,5]]},"369":{"position":[[60,5]]}}}],["upon",{"_index":1058,"t":{"136":{"position":[[556,4]]},"327":{"position":[[235,4],[1402,4]]},"376":{"position":[[0,4]]},"414":{"position":[[28,4]]},"487":{"position":[[293,4]]}}}],["upper",{"_index":2022,"t":{"404":{"position":[[627,5]]},"569":{"position":[[380,5]]},"633":{"position":[[1288,6]]},"703":{"position":[[1306,6]]},"705":{"position":[[735,5]]}}}],["upstream",{"_index":520,"t":{"51":{"position":[[59,8]]},"53":{"position":[[36,8],[240,8]]},"420":{"position":[[540,8]]},"514":{"position":[[294,8]]}}}],["upstream_vers",{"_index":2098,"t":{"418":{"position":[[137,17],[509,17],[881,17]]},"420":{"position":[[367,16],[398,16],[580,16],[641,16]]}}}],["upstreamrepo",{"_index":2119,"t":{"420":{"position":[[725,12],[885,15]]}}}],["upstreamvers",{"_index":1300,"t":{"208":{"position":[[55,18]]},"210":{"position":[[68,15]]},"420":{"position":[[705,15],[856,18]]}}}],["uptim",{"_index":2169,"t":{"438":{"position":[[572,6],[706,6],[1104,6]]},"528":{"position":[[517,6]]}}}],["url",{"_index":1247,"t":{"189":{"position":[[381,3],[1170,3]]},"191":{"position":[[9,3],[137,3]]},"195":{"position":[[333,3]]},"208":{"position":[[3081,6],[3179,6]]},"260":{"position":[[14,6],[474,3],[655,3],[765,3],[895,3]]},"262":{"position":[[60,3],[210,3],[331,4]]},"264":{"position":[[0,3],[116,3],[136,4]]},"323":{"position":[[95,3],[335,4],[386,4]]},"327":{"position":[[1792,3],[2059,4]]},"514":{"position":[[391,5]]},"530":{"position":[[653,3]]},"558":{"position":[[112,4],[215,3],[405,3]]},"677":{"position":[[247,3]]},"705":{"position":[[1058,4]]}}}],["url>/eth/v1/beacon/pool/bls_to_execution_chang",{"_index":2662,"t":{"705":{"position":[[909,49]]}}}],["us",{"_index":27,"t":{"5":{"position":[[66,3]]},"7":{"position":[[46,3]]},"18":{"position":[[446,3]]},"20":{"position":[[502,3]]},"27":{"position":[[1953,3]]},"41":{"position":[[92,5]]},"53":{"position":[[162,5],[508,4]]},"57":{"position":[[239,5],[403,5]]},"61":{"position":[[209,4]]},"69":{"position":[[62,3]]},"71":{"position":[[1049,4],[2422,3]]},"77":{"position":[[31,3]]},"79":{"position":[[100,3]]},"91":{"position":[[133,3]]},"93":{"position":[[21,4],[106,3]]},"95":{"position":[[23,4],[108,3],[1676,4]]},"99":{"position":[[706,4],[760,4]]},"113":{"position":[[497,4]]},"138":{"position":[[597,3]]},"144":{"position":[[578,3],[1078,3]]},"152":{"position":[[610,5],[1768,5],[1878,3]]},"156":{"position":[[264,4]]},"158":{"position":[[626,4],[676,5]]},"170":{"position":[[115,7]]},"172":{"position":[[174,3]]},"174":{"position":[[28,5],[269,3],[359,3],[418,3]]},"176":{"position":[[405,5]]},"178":{"position":[[373,5]]},"180":{"position":[[316,3],[612,3]]},"182":{"position":[[207,3],[260,4]]},"184":{"position":[[33,5]]},"189":{"position":[[598,3],[666,3]]},"193":{"position":[[170,3]]},"197":{"position":[[372,3],[444,3]]},"204":{"position":[[152,5],[325,5]]},"208":{"position":[[448,5],[604,3]]},"220":{"position":[[454,5],[610,3]]},"222":{"position":[[37,4]]},"224":{"position":[[370,4],[468,4]]},"236":{"position":[[60,5]]},"238":{"position":[[1046,3],[1302,4]]},"256":{"position":[[744,3]]},"260":{"position":[[21,6]]},"271":{"position":[[787,3],[1549,6],[1825,3],[2098,3]]},"273":{"position":[[164,3]]},"291":{"position":[[235,4],[429,3],[521,3]]},"295":{"position":[[159,3]]},"303":{"position":[[165,5]]},"309":{"position":[[807,3],[1015,4]]},"313":{"position":[[218,5],[515,4]]},"315":{"position":[[5,5],[265,3],[871,4]]},"319":{"position":[[691,6]]},"323":{"position":[[39,5]]},"325":{"position":[[557,3],[659,3]]},"327":{"position":[[932,5],[1439,5],[1523,5]]},"329":{"position":[[459,5],[1564,3],[2101,5],[3440,7]]},"331":{"position":[[501,5]]},"333":{"position":[[512,4]]},"347":{"position":[[113,5]]},"349":{"position":[[648,3],[1753,4]]},"351":{"position":[[255,5],[584,3],[684,3],[953,3],[1306,5],[1372,3]]},"353":{"position":[[91,6]]},"357":{"position":[[155,3]]},"359":{"position":[[186,5]]},"369":{"position":[[246,3],[504,3],[754,5]]},"371":{"position":[[217,5]]},"392":{"position":[[435,4]]},"400":{"position":[[63,4]]},"406":{"position":[[156,5],[932,3]]},"408":{"position":[[609,3]]},"410":{"position":[[747,5],[838,5]]},"420":{"position":[[621,4],[1098,3]]},"427":{"position":[[51,5],[362,5],[671,3]]},"429":{"position":[[50,4],[99,4],[478,3]]},"432":{"position":[[235,4]]},"436":{"position":[[72,5]]},"442":{"position":[[537,4]]},"444":{"position":[[52,5]]},"446":{"position":[[253,4]]},"448":{"position":[[293,5],[350,5]]},"450":{"position":[[517,5]]},"452":{"position":[[25,5],[87,3]]},"490":{"position":[[117,4]]},"497":{"position":[[481,6]]},"506":{"position":[[6,4]]},"508":{"position":[[316,3],[588,3]]},"514":{"position":[[732,6]]},"516":{"position":[[9,4],[625,5]]},"518":{"position":[[175,3],[539,3],[997,3]]},"520":{"position":[[8,3]]},"524":{"position":[[435,3],[571,6]]},"526":{"position":[[413,3],[485,5]]},"528":{"position":[[8,3]]},"530":{"position":[[691,5]]},"545":{"position":[[268,5],[315,4]]},"556":{"position":[[627,5]]},"563":{"position":[[36,3]]},"567":{"position":[[214,4]]},"576":{"position":[[810,3]]},"581":{"position":[[92,5]]},"594":{"position":[[588,3]]},"602":{"position":[[462,6],[501,3],[947,4],[1685,4]]},"604":{"position":[[21,3],[180,4],[1341,4],[1671,4]]},"606":{"position":[[217,5],[417,5]]},"629":{"position":[[638,4]]},"631":{"position":[[21,3],[1318,4],[1583,4]]},"651":{"position":[[14,4]]},"673":{"position":[[327,3]]},"697":{"position":[[52,4]]},"699":{"position":[[593,4]]},"701":{"position":[[21,3],[1356,4],[1620,4]]},"703":{"position":[[214,5],[417,5]]},"705":{"position":[[344,4],[672,5],[761,5]]}}}],["usag",{"_index":817,"t":{"99":{"position":[[189,6]]},"200":{"position":[[174,6]]},"333":{"position":[[189,5],[256,5],[323,5],[875,5],[1230,5]]},"396":{"position":[[108,6]]},"483":{"position":[[1161,6]]}}}],["usb",{"_index":1233,"t":{"184":{"position":[[114,3]]},"444":{"position":[[19,3],[115,3]]},"446":{"position":[[29,3],[51,3],[310,3],[377,4]]},"450":{"position":[[46,3]]}}}],["user",{"_index":208,"t":{"20":{"position":[[673,4]]},"41":{"position":[[585,4]]},"59":{"position":[[96,4],[127,5]]},"71":{"position":[[368,4],[457,4],[1503,4],[2135,4],[2596,4]]},"87":{"position":[[104,5]]},"103":{"position":[[206,5]]},"109":{"position":[[12,5],[258,5],[332,5],[552,5]]},"113":{"position":[[343,5]]},"168":{"position":[[262,6]]},"172":{"position":[[235,4]]},"176":{"position":[[310,4],[980,6]]},"180":{"position":[[511,5]]},"204":{"position":[[537,6]]},"208":{"position":[[1281,4]]},"218":{"position":[[143,6]]},"220":{"position":[[83,5]]},"232":{"position":[[47,5]]},"238":{"position":[[7,5]]},"240":{"position":[[174,4]]},"242":{"position":[[52,4]]},"244":{"position":[[295,4],[496,4]]},"246":{"position":[[30,4],[68,4]]},"260":{"position":[[36,4]]},"279":{"position":[[40,5]]},"295":{"position":[[54,6]]},"309":{"position":[[3790,5],[4001,4],[4140,4],[4510,4]]},"311":{"position":[[194,5]]},"313":{"position":[[242,5]]},"319":{"position":[[677,5],[773,6]]},"331":{"position":[[187,6],[786,5]]},"335":{"position":[[495,4]]},"347":{"position":[[383,4]]},"351":{"position":[[654,6],[968,4]]},"398":{"position":[[221,4]]},"420":{"position":[[152,5],[305,5],[1012,5]]},"436":{"position":[[141,5]]},"438":{"position":[[154,5],[1047,5]]},"442":{"position":[[224,4],[570,4]]},"448":{"position":[[405,5]]},"481":{"position":[[14,5]]},"495":{"position":[[175,5]]},"497":{"position":[[143,5],[493,5]]},"499":{"position":[[5,4]]},"504":{"position":[[167,5],[683,4]]},"508":{"position":[[1221,6]]},"514":{"position":[[45,4]]},"520":{"position":[[215,5]]},"526":{"position":[[104,5]]},"528":{"position":[[375,5],[579,4]]},"550":{"position":[[76,5]]},"563":{"position":[[632,5]]},"572":{"position":[[279,6],[316,5]]},"574":{"position":[[42,5],[193,5],[272,5],[491,5],[714,5]]},"576":{"position":[[1034,4]]},"579":{"position":[[68,5]]},"581":{"position":[[337,5]]},"585":{"position":[[86,5]]},"594":{"position":[[79,5],[496,6]]},"596":{"position":[[215,5],[341,5],[412,5]]},"604":{"position":[[1556,4]]},"631":{"position":[[1468,4]]},"663":{"position":[[72,5]]},"681":{"position":[[202,5]]},"685":{"position":[[203,6]]},"687":{"position":[[60,4]]},"701":{"position":[[1505,4]]}}}],["user'",{"_index":890,"t":{"109":{"position":[[514,6]]}}}],["userid",{"_index":1916,"t":{"349":{"position":[[2048,6]]}}}],["userid,bottoken",{"_index":1920,"t":{"349":{"position":[[2165,18]]}}}],["usernam",{"_index":1214,"t":{"180":{"position":[[347,9]]},"309":{"position":[[4214,8]]},"347":{"position":[[192,9]]},"367":{"position":[[690,8]]},"374":{"position":[[57,9]]},"378":{"position":[[90,8]]}}}],["usr/src/app/config.json",{"_index":1460,"t":{"238":{"position":[[1202,26]]}}}],["usr/src/config.json",{"_index":706,"t":{"71":{"position":[[2663,20],[2844,20]]}}}],["usr/src/dappnode/dncore/.dappnode_profil",{"_index":2159,"t":{"429":{"position":[[1037,42]]}}}],["usr/src/dappnode/dncore/admin",{"_index":1972,"t":{"380":{"position":[[565,30]]}}}],["usual",{"_index":813,"t":{"99":{"position":[[15,7]]},"268":{"position":[[277,5]]},"329":{"position":[[3465,7]]},"367":{"position":[[766,7]]},"420":{"position":[[600,7]]},"514":{"position":[[2129,7]]}}}],["ut",{"_index":432,"t":{"39":{"position":[[91,2],[125,2],[197,2]]},"47":{"position":[[91,2],[125,2],[197,2]]}}}],["util",{"_index":515,"t":{"49":{"position":[[97,7]]},"321":{"position":[[24,9]]},"384":{"position":[[30,7]]},"438":{"position":[[76,7]]},"481":{"position":[[219,11]]},"487":{"position":[[1479,7]]},"518":{"position":[[604,7]]},"538":{"position":[[171,7]]}}}],["utilis",{"_index":2488,"t":{"572":{"position":[[358,7]]}}}],["utmost",{"_index":1898,"t":{"337":{"position":[[1023,6]]}}}],["uuid",{"_index":2140,"t":{"427":{"position":[[357,4]]}}}],["uuid=b311b983",{"_index":2142,"t":{"427":{"position":[[484,13]]}}}],["ux",{"_index":2592,"t":{"615":{"position":[[240,3]]}}}],["v",{"_index":754,"t":{"91":{"position":[[701,2]]},"93":{"position":[[909,2]]},"95":{"position":[[1800,2]]},"99":{"position":[[1118,2]]}}}],["v0.2.36",{"_index":1433,"t":{"228":{"position":[[298,7]]}}}],["v1.0.0",{"_index":578,"t":{"57":{"position":[[720,8]]}}}],["v2",{"_index":383,"t":{"33":{"position":[[8,2]]}}}],["v4.0.7",{"_index":2099,"t":{"418":{"position":[[155,6],[527,6]]}}}],["v[0",{"_index":563,"t":{"57":{"position":[[88,4]]}}}],["valid",{"_index":144,"t":{"16":{"position":[[201,10]]},"63":{"position":[[316,5]]},"71":{"position":[[677,8],[2758,5]]},"79":{"position":[[170,10]]},"81":{"position":[[35,10],[159,5]]},"83":{"position":[[5,5]]},"87":{"position":[[52,5]]},"101":{"position":[[152,10],[373,11],[385,9],[472,10],[617,10]]},"103":{"position":[[179,11]]},"105":{"position":[[271,10],[310,9]]},"107":{"position":[[7,9],[197,10],[337,10],[449,9],[500,5],[547,10],[575,9],[593,5],[748,10],[789,9],[981,10],[1145,11]]},"109":{"position":[[635,11],[668,10]]},"111":{"position":[[122,10],[433,10]]},"113":{"position":[[532,11],[639,10]]},"115":{"position":[[81,10],[163,10],[768,11],[801,9]]},"121":{"position":[[106,9]]},"125":{"position":[[795,10],[870,10],[945,11],[1144,10]]},"127":{"position":[[9,9],[126,9],[194,9]]},"129":{"position":[[71,10],[263,9],[298,9],[392,9],[460,9],[521,9],[597,9],[709,9],[817,9],[889,10],[915,9],[986,9],[1079,9],[1127,9],[1172,9],[1293,9],[1440,9],[1461,5],[1556,9],[1642,9],[1725,9],[1798,9],[1888,9],[2012,9]]},"131":{"position":[[16,9],[125,11],[137,10]]},"134":{"position":[[461,9],[532,9]]},"136":{"position":[[404,10],[492,9],[596,10],[721,10],[890,9],[1139,9]]},"138":{"position":[[99,9],[240,10],[325,9],[512,10],[652,10],[760,10]]},"140":{"position":[[72,10],[214,10],[262,10],[444,9],[617,9]]},"142":{"position":[[70,10],[161,9],[319,10]]},"144":{"position":[[82,10],[221,10],[306,9],[493,10],[633,10],[741,10],[898,10],[1043,10],[1152,10]]},"148":{"position":[[33,9],[288,10],[461,9],[702,9],[875,9]]},"150":{"position":[[70,10]]},"152":{"position":[[11,9],[159,9],[259,9],[377,9],[439,9],[847,9],[1441,9],[1719,9],[1939,9],[2138,9],[2307,9],[2393,9],[2508,9]]},"154":{"position":[[52,9]]},"156":{"position":[[73,9],[299,10],[399,9],[636,10]]},"158":{"position":[[720,9],[1106,9]]},"160":{"position":[[213,9]]},"162":{"position":[[70,10]]},"164":{"position":[[57,9]]},"166":{"position":[[511,9]]},"208":{"position":[[1198,11]]},"238":{"position":[[1409,11]]},"248":{"position":[[455,5],[720,5],[983,5]]},"297":{"position":[[122,10]]},"329":{"position":[[16,11],[104,10],[179,8]]},"337":{"position":[[223,10]]},"371":{"position":[[502,10]]},"418":{"position":[[466,10],[493,9],[545,10],[734,9],[831,11]]},"438":{"position":[[1026,9]]},"467":{"position":[[136,8]]},"474":{"position":[[37,9],[512,10],[672,10]]},"497":{"position":[[73,10]]},"504":{"position":[[415,10]]},"514":{"position":[[2194,10],[2418,9]]},"530":{"position":[[599,9]]},"541":{"position":[[67,9],[311,10]]},"547":{"position":[[128,11]]},"550":{"position":[[131,9],[173,9],[215,10],[338,11],[451,9],[475,9],[521,9],[637,9],[711,9],[771,10],[809,10]]},"554":{"position":[[172,10],[315,9],[571,10],[788,9]]},"556":{"position":[[819,9],[885,10]]},"558":{"position":[[809,9],[920,11]]},"560":{"position":[[473,9]]},"563":{"position":[[20,10],[90,11],[240,9],[280,10],[441,9],[501,10],[539,10]]},"565":{"position":[[634,10]]},"567":{"position":[[126,11],[1152,10],[1691,11],[1787,11],[1860,9]]},"569":{"position":[[591,10],[734,9]]},"579":{"position":[[215,9]]},"587":{"position":[[113,11]]},"589":{"position":[[31,9]]},"591":{"position":[[61,10]]},"596":{"position":[[231,9]]},"600":{"position":[[426,9]]},"602":{"position":[[71,10],[1411,9]]},"604":{"position":[[64,9],[213,9],[424,9],[851,8],[1012,9],[1084,9],[1692,9],[3109,9],[3138,11]]},"606":{"position":[[31,9],[84,9],[114,10],[1196,9]]},"608":{"position":[[38,9]]},"610":{"position":[[141,9]]},"612":{"position":[[151,10],[201,9],[402,9]]},"615":{"position":[[48,8],[293,9]]},"617":{"position":[[183,9]]},"619":{"position":[[152,10]]},"621":{"position":[[108,10],[299,10]]},"625":{"position":[[155,10]]},"627":{"position":[[123,10],[385,9]]},"629":{"position":[[84,10]]},"631":{"position":[[71,9],[177,9],[395,9],[822,8],[982,9],[1054,9],[1604,9],[3050,9],[3079,11]]},"633":{"position":[[31,9],[79,9],[109,10],[449,8],[495,9],[1094,9]]},"635":{"position":[[144,9]]},"637":{"position":[[28,9],[94,9],[370,9],[603,10],[653,9],[854,9]]},"667":{"position":[[193,11]]},"697":{"position":[[181,9],[274,9]]},"699":{"position":[[78,10]]},"701":{"position":[[70,9],[176,9],[398,9],[855,8],[1016,9],[1089,9],[1641,9],[3078,9],[3107,10]]},"703":{"position":[[31,9],[84,9],[114,10],[1171,9]]},"705":{"position":[[41,9],[215,9],[1240,9]]}}}],["validating_from_dappnod",{"_index":2113,"t":{"418":{"position":[[635,24]]}}}],["validator'",{"_index":882,"t":{"109":{"position":[[100,11],[280,11]]},"146":{"position":[[211,11]]},"152":{"position":[[1563,11]]},"158":{"position":[[821,11]]},"166":{"position":[[609,11],[685,11]]},"560":{"position":[[118,11]]}}}],["validatordao",{"_index":134,"t":{"16":{"position":[[65,13],[136,12]]}}}],["validator’",{"_index":2467,"t":{"563":{"position":[[404,11]]}}}],["valu",{"_index":643,"t":{"65":{"position":[[97,6]]},"222":{"position":[[151,5],[208,6],[222,5]]},"224":{"position":[[127,5],[184,6],[198,5]]},"228":{"position":[[203,5]]},"230":{"position":[[100,6]]},"236":{"position":[[168,5],[225,6],[239,5]]},"248":{"position":[[461,7],[726,7],[989,7]]},"256":{"position":[[413,5],[470,6],[484,5]]},"293":{"position":[[318,5]]},"465":{"position":[[317,5]]},"469":{"position":[[343,5]]},"492":{"position":[[243,6]]}}}],["valuabl",{"_index":1693,"t":{"319":{"position":[[88,8]]},"487":{"position":[[1080,8],[1613,8]]},"683":{"position":[[160,8]]}}}],["var",{"_index":681,"t":{"71":{"position":[[862,3]]}}}],["var/lib/dock",{"_index":2149,"t":{"427":{"position":[[622,17]]}}}],["vari",{"_index":1606,"t":{"303":{"position":[[408,4]]},"315":{"position":[[430,4],[690,6]]},"367":{"position":[[1063,4]]},"446":{"position":[[198,6]]},"671":{"position":[[123,4]]}}}],["variabl",{"_index":550,"t":{"53":{"position":[[497,10]]},"59":{"position":[[166,10]]},"71":{"position":[[102,9],[442,9],[478,9],[803,10],[1032,8],[1231,8]]},"418":{"position":[[939,10]]},"420":{"position":[[12,10],[39,9],[229,9],[952,9],[991,8]]}}}],["varieti",{"_index":2350,"t":{"508":{"position":[[557,7]]}}}],["variou",{"_index":1004,"t":{"129":{"position":[[97,7]]},"260":{"position":[[0,7]]},"295":{"position":[[46,7]]},"309":{"position":[[3074,7],[3324,7]]},"327":{"position":[[566,7]]},"442":{"position":[[317,7]]},"504":{"position":[[339,7],[758,7]]},"530":{"position":[[794,7]]},"671":{"position":[[60,7]]},"677":{"position":[[126,7]]},"683":{"position":[[102,7]]}}}],["vast",{"_index":962,"t":{"125":{"position":[[72,4]]},"136":{"position":[[341,4]]}}}],["vc",{"_index":1504,"t":{"262":{"position":[[97,3]]}}}],["vcpu",{"_index":1617,"t":{"309":{"position":[[394,5],[669,5],[747,6]]}}}],["velit",{"_index":455,"t":{"39":{"position":[[285,5]]},"47":{"position":[[285,5]]}}}],["veniam",{"_index":439,"t":{"39":{"position":[[142,7]]},"47":{"position":[[142,7]]}}}],["verbos",{"_index":741,"t":{"91":{"position":[[465,8]]},"93":{"position":[[441,8]]},"95":{"position":[[449,8]]},"99":{"position":[[1030,8]]}}}],["veri",{"_index":40,"t":{"7":{"position":[[25,4]]},"113":{"position":[[461,4]]},"125":{"position":[[53,4],[101,4],[134,4],[155,4],[203,4]]},"242":{"position":[[0,4]]},"293":{"position":[[210,4]]},"329":{"position":[[3177,4]]},"406":{"position":[[270,4]]},"514":{"position":[[2455,4]]},"602":{"position":[[1645,4]]},"604":{"position":[[1551,4]]},"629":{"position":[[47,4]]},"631":{"position":[[1463,4]]},"699":{"position":[[47,4]]},"701":{"position":[[1500,4]]}}}],["verif",{"_index":2316,"t":{"495":{"position":[[88,13]]},"497":{"position":[[748,12]]}}}],["verifi",{"_index":1528,"t":{"275":{"position":[[288,6]]},"369":{"position":[[10,6]]},"528":{"position":[[406,9]]},"530":{"position":[[372,6]]},"567":{"position":[[893,6]]}}}],["versatil",{"_index":1189,"t":{"176":{"position":[[471,10]]},"202":{"position":[[95,9]]},"204":{"position":[[379,12]]},"295":{"position":[[22,9]]}}}],["version",{"_index":525,"t":{"51":{"position":[[142,8]]},"53":{"position":[[45,7]]},"57":{"position":[[700,7]]},"63":{"position":[[0,8]]},"65":{"position":[[27,8],[60,7]]},"91":{"position":[[706,7],[719,7]]},"93":{"position":[[41,7],[914,7],[927,7]]},"95":{"position":[[45,7],[1805,7],[1818,7]]},"99":{"position":[[256,7],[416,7],[540,7],[588,7],[1123,7],[1136,7]]},"208":{"position":[[35,10],[2016,8]]},"210":{"position":[[44,7]]},"214":{"position":[[26,7]]},"216":{"position":[[115,7],[199,8]]},"232":{"position":[[246,7]]},"238":{"position":[[353,9]]},"240":{"position":[[49,8]]},"244":{"position":[[337,7],[536,7],[883,8]]},"333":{"position":[[1176,8]]},"335":{"position":[[682,9],[699,8],[725,8]]},"394":{"position":[[162,8],[368,9]]},"416":{"position":[[50,8],[237,7]]},"418":{"position":[[63,8]]},"460":{"position":[[98,9],[204,8]]},"514":{"position":[[238,8],[278,7],[303,7]]},"530":{"position":[[498,8]]},"541":{"position":[[510,7]]}}}],["vertic",{"_index":2045,"t":{"406":{"position":[[802,8]]}}}],["via",{"_index":778,"t":{"95":{"position":[[585,3]]},"176":{"position":[[127,3]]},"184":{"position":[[81,3]]},"189":{"position":[[119,3],[958,3],[1053,3]]},"271":{"position":[[72,3],[977,3],[1072,3]]},"309":{"position":[[2432,3],[4086,3],[4544,3],[4579,3],[4713,3],[5019,3],[5676,3],[5825,3]]},"319":{"position":[[1274,3],[1889,3]]},"347":{"position":[[82,3],[139,3]]},"349":{"position":[[2014,3]]},"351":{"position":[[90,3],[607,3],[1621,3],[1737,3]]},"353":{"position":[[33,3]]},"363":{"position":[[297,3]]},"369":{"position":[[619,3]]},"380":{"position":[[464,3]]},"508":{"position":[[897,3]]},"602":{"position":[[82,3]]},"625":{"position":[[185,3]]},"673":{"position":[[293,3]]}}}],["video",{"_index":2618,"t":{"641":{"position":[[47,5]]},"649":{"position":[[95,7],[112,6],[316,6]]},"651":{"position":[[95,5]]},"653":{"position":[[5,5]]},"657":{"position":[[65,6]]},"663":{"position":[[194,6]]},"669":{"position":[[127,5]]},"681":{"position":[[15,6],[81,6]]},"685":{"position":[[40,5],[154,6]]}}}],["view",{"_index":47,"t":{"7":{"position":[[114,5]]},"218":{"position":[[273,5]]},"238":{"position":[[119,4]]},"260":{"position":[[99,4]]},"315":{"position":[[916,4]]},"329":{"position":[[2333,5]]},"369":{"position":[[103,4]]},"376":{"position":[[232,5]]},"420":{"position":[[315,4]]},"487":{"position":[[108,5],[712,5]]},"606":{"position":[[1293,4]]},"633":{"position":[[1253,4]]},"703":{"position":[[1271,4]]}}}],["virtual",{"_index":1278,"t":{"197":{"position":[[0,7],[203,9]]},"313":{"position":[[532,7]]}}}],["visibl",{"_index":2116,"t":{"420":{"position":[[103,7]]}}}],["visit",{"_index":1124,"t":{"156":{"position":[[768,5]]},"327":{"position":[[117,5]]},"343":{"position":[[115,5]]},"349":{"position":[[1607,5]]},"380":{"position":[[38,5]]},"485":{"position":[[230,8]]},"510":{"position":[[255,5]]},"530":{"position":[[350,5]]},"543":{"position":[[333,8]]},"565":{"position":[[332,8]]}}}],["vist",{"_index":886,"t":{"109":{"position":[[365,7]]}}}],["visual",{"_index":2270,"t":{"483":{"position":[[161,11],[717,13],[1217,9]]},"487":{"position":[[76,13],[1354,13]]}}}],["vital",{"_index":2320,"t":{"495":{"position":[[407,5]]},"576":{"position":[[1054,5]]}}}],["voic",{"_index":102,"t":{"12":{"position":[[686,5]]}}}],["voil",{"_index":2590,"t":{"612":{"position":[[636,6]]},"639":{"position":[[561,6]]}}}],["volum",{"_index":658,"t":{"71":{"position":[[201,6],[301,7],[1976,6],[2115,6],[2233,7],[2368,7],[2473,7]]},"329":{"position":[[3068,6]]},"418":{"position":[[162,8],[534,8],[703,8],[907,8]]},"460":{"position":[[248,8]]},"514":{"position":[[799,8]]},"530":{"position":[[531,7],[1042,8]]},"604":{"position":[[1748,6]]},"631":{"position":[[1660,6]]},"701":{"position":[[1697,6]]}}}],["volumenam",{"_index":699,"t":{"71":{"position":[[2056,11],[2084,11],[2284,11]]}}}],["volunt",{"_index":1712,"t":{"319":{"position":[[1139,11]]}}}],["volupt",{"_index":454,"t":{"39":{"position":[[275,9]]},"47":{"position":[[275,9]]}}}],["vote",{"_index":69,"t":{"12":{"position":[[203,4],[594,6]]},"14":{"position":[[137,6],[304,6]]}}}],["vpn",{"_index":1150,"t":{"170":{"position":[[47,3]]},"174":{"position":[[282,3],[363,3]]},"176":{"position":[[400,4]]},"186":{"position":[[29,3]]},"189":{"position":[[45,3],[190,3],[559,3]]},"195":{"position":[[295,3],[486,3],[551,4],[818,3],[908,3]]},"197":{"position":[[24,5],[304,3],[407,3],[448,4]]},"200":{"position":[[34,3]]},"202":{"position":[[30,3]]},"204":{"position":[[333,4],[343,3],[441,3]]},"208":{"position":[[1476,3],[1513,3],[2012,3]]},"242":{"position":[[653,3],[690,3]]},"244":{"position":[[879,3]]},"268":{"position":[[40,3]]},"271":{"position":[[45,3],[143,3]]},"273":{"position":[[21,3]]},"309":{"position":[[2920,3],[2983,3]]},"327":{"position":[[1542,4]]},"329":{"position":[[1609,4],[1938,4],[1971,3],[2012,4]]},"371":{"position":[[205,3]]},"429":{"position":[[411,3],[461,3]]},"657":{"position":[[183,4]]},"665":{"position":[[68,4],[125,4]]},"673":{"position":[[305,4]]},"687":{"position":[[151,3]]}}}],["vpn/wireguard",{"_index":1811,"t":{"329":{"position":[[1490,13]]}}}],["vs",{"_index":988,"t":{"125":{"position":[[991,2]]},"442":{"position":[[121,2]]}}}],["vulner",{"_index":1229,"t":{"182":{"position":[[421,16]]},"394":{"position":[[240,16]]}}}],["wagyu",{"_index":1788,"t":{"329":{"position":[[498,5]]},"604":{"position":[[29,5],[1224,5]]},"631":{"position":[[36,5],[109,5],[1201,5],[1343,5]]},"701":{"position":[[35,5],[108,5],[1235,5],[1380,5]]},"705":{"position":[[316,5]]}}}],["wait",{"_index":1083,"t":{"144":{"position":[[1135,7]]},"146":{"position":[[21,4],[319,7]]},"158":{"position":[[504,4]]},"309":{"position":[[5642,4],[5909,5]]},"329":{"position":[[517,4],[737,4],[1015,4]]},"351":{"position":[[1587,4],[1821,5]]},"604":{"position":[[2068,4],[2738,6]]},"612":{"position":[[593,4]]},"631":{"position":[[1981,4],[2672,6]]},"639":{"position":[[522,4]]},"701":{"position":[[2018,4],[2701,6]]}}}],["walk",{"_index":1509,"t":{"268":{"position":[[153,4]]},"390":{"position":[[66,4]]}}}],["wallet",{"_index":128,"t":{"14":{"position":[[377,6]]},"134":{"position":[[247,7]]},"142":{"position":[[44,7],[132,6]]},"150":{"position":[[44,7],[132,6]]},"162":{"position":[[44,7],[132,6]]},"510":{"position":[[52,6],[177,6]]},"545":{"position":[[182,6],[283,7],[300,6]]},"554":{"position":[[916,6]]},"560":{"position":[[451,6]]},"567":{"position":[[199,6],[372,6],[951,6]]},"606":{"position":[[825,6]]},"633":{"position":[[752,6]]},"639":{"position":[[160,7],[315,6],[499,7]]},"683":{"position":[[286,6]]},"703":{"position":[[825,6]]}}}],["wan",{"_index":1949,"t":{"367":{"position":[[1007,6]]}}}],["want",{"_index":171,"t":{"18":{"position":[[401,4]]},"41":{"position":[[470,4]]},"45":{"position":[[68,4]]},"71":{"position":[[1002,4]]},"134":{"position":[[438,4]]},"140":{"position":[[87,4]]},"152":{"position":[[25,4],[2251,4]]},"158":{"position":[[864,4]]},"164":{"position":[[71,4]]},"174":{"position":[[522,4]]},"197":{"position":[[436,4]]},"285":{"position":[[137,6]]},"291":{"position":[[513,4]]},"309":{"position":[[4048,4],[4528,4]]},"325":{"position":[[90,4],[651,4],[689,6]]},"329":{"position":[[171,4],[1159,4],[1233,4],[1381,4]]},"331":{"position":[[153,4],[527,4]]},"369":{"position":[[372,4]]},"380":{"position":[[8,4]]},"388":{"position":[[24,4]]},"410":{"position":[[179,4]]},"427":{"position":[[75,4]]},"438":{"position":[[164,4]]},"440":{"position":[[9,4]]},"446":{"position":[[88,4]]},"454":{"position":[[194,4],[274,4]]},"460":{"position":[[44,4]]},"497":{"position":[[238,4]]},"514":{"position":[[1644,4]]},"526":{"position":[[114,4],[373,4]]},"567":{"position":[[446,4],[970,4]]},"569":{"position":[[7,4]]},"587":{"position":[[85,4]]},"604":{"position":[[1898,4],[2350,5]]},"610":{"position":[[9,4]]},"612":{"position":[[166,4],[287,4]]},"631":{"position":[[1810,4],[2264,5]]},"635":{"position":[[9,4]]},"637":{"position":[[618,4],[739,4]]},"641":{"position":[[5,4]]},"667":{"position":[[111,4]]},"671":{"position":[[44,4]]},"701":{"position":[[1847,4],[2301,5]]}}}],["warn",{"_index":1113,"t":{"152":{"position":[[2027,7]]},"158":{"position":[[55,8],[64,7],[200,7]]},"166":{"position":[[64,7]]},"208":{"position":[[1317,11]]},"210":{"position":[[424,8]]},"556":{"position":[[488,7]]},"567":{"position":[[1703,7]]},"606":{"position":[[934,7]]},"633":{"position":[[859,7]]},"637":{"position":[[0,7]]},"703":{"position":[[956,7]]}}}],["wasn't",{"_index":1110,"t":{"152":{"position":[[1819,6]]}}}],["wast",{"_index":1562,"t":{"285":{"position":[[170,5]]}}}],["watch",{"_index":2625,"t":{"641":{"position":[[327,5]]},"649":{"position":[[80,8]]}}}],["way",{"_index":100,"t":{"12":{"position":[[650,3]]},"71":{"position":[[774,4],[1105,4]]},"121":{"position":[[502,4]]},"138":{"position":[[21,3]]},"144":{"position":[[847,3]]},"168":{"position":[[34,3]]},"176":{"position":[[260,4],[324,4],[891,3],[1196,5]]},"271":{"position":[[383,4]]},"319":{"position":[[546,4],[1489,4]]},"321":{"position":[[432,3]]},"327":{"position":[[574,4],[631,3]]},"331":{"position":[[829,4]]},"396":{"position":[[131,3]]},"406":{"position":[[135,3]]},"514":{"position":[[1773,3],[2692,3]]},"516":{"position":[[393,4]]},"520":{"position":[[202,3]]},"604":{"position":[[400,3],[1603,4]]},"631":{"position":[[371,3],[1515,4]]},"661":{"position":[[16,3]]},"665":{"position":[[9,3]]},"669":{"position":[[103,3]]},"701":{"position":[[374,3],[1552,4]]}}}],["we'll",{"_index":1197,"t":{"176":{"position":[[1136,5]]},"327":{"position":[[151,5]]},"558":{"position":[[117,5]]},"651":{"position":[[101,5]]},"663":{"position":[[152,5]]}}}],["we'r",{"_index":501,"t":{"45":{"position":[[0,5]]},"154":{"position":[[154,5]]}}}],["we'v",{"_index":2600,"t":{"623":{"position":[[26,5]]},"657":{"position":[[222,5]]}}}],["wealth",{"_index":2298,"t":{"487":{"position":[[1314,6]]}}}],["web",{"_index":62,"t":{"12":{"position":[[110,3]]},"20":{"position":[[581,3]]},"59":{"position":[[241,3]]},"172":{"position":[[92,3]]},"191":{"position":[[100,3]]},"208":{"position":[[467,3]]},"220":{"position":[[473,3]]},"303":{"position":[[157,3]]},"309":{"position":[[2622,3],[2752,3],[2808,3]]},"311":{"position":[[7,3]]},"323":{"position":[[16,4],[35,3]]},"355":{"position":[[55,3]]},"361":{"position":[[10,3]]},"367":{"position":[[382,3]]},"526":{"position":[[247,3]]},"567":{"position":[[181,3]]},"661":{"position":[[64,3]]}}}],["web3",{"_index":1545,"t":{"279":{"position":[[289,4]]},"510":{"position":[[47,4]]},"567":{"position":[[367,4]]},"639":{"position":[[342,4]]},"667":{"position":[[156,4]]}}}],["web3sign",{"_index":1786,"t":{"329":{"position":[[327,11],[631,11],[2134,10],[2207,10],[2252,11]]},"337":{"position":[[82,11],[245,11]]},"587":{"position":[[152,10]]},"596":{"position":[[17,11],[92,10],[161,10]]},"598":{"position":[[191,11]]},"604":{"position":[[2524,10],[2645,10],[2915,10]]},"606":{"position":[[1337,10]]},"612":{"position":[[88,10],[125,10]]},"629":{"position":[[320,10]]},"631":{"position":[[2434,10],[2579,10],[2849,10]]},"633":{"position":[[1324,10]]},"637":{"position":[[540,10],[577,10]]},"699":{"position":[[276,10]]},"701":{"position":[[2471,10],[2608,10],[2878,10]]},"703":{"position":[[1342,10]]}}}],["webapp",{"_index":2471,"t":{"567":{"position":[[388,7]]}}}],["webserv",{"_index":1320,"t":{"208":{"position":[[843,12]]},"226":{"position":[[174,11]]}}}],["websit",{"_index":887,"t":{"109":{"position":[[382,7]]},"138":{"position":[[628,7]]},"142":{"position":[[15,7],[267,8]]},"144":{"position":[[609,7],[1095,7]]},"146":{"position":[[465,8]]},"150":{"position":[[15,7]]},"152":{"position":[[784,7]]},"160":{"position":[[134,7]]},"162":{"position":[[15,7]]},"193":{"position":[[226,8]]},"208":{"position":[[254,9]]},"220":{"position":[[260,9]]},"260":{"position":[[562,8]]},"273":{"position":[[222,8]]},"343":{"position":[[182,7]]},"474":{"position":[[144,8]]},"502":{"position":[[729,8]]}}}],["website/contract",{"_index":1793,"t":{"329":{"position":[[719,17]]}}}],["week",{"_index":391,"t":{"37":{"position":[[12,6],[105,4],[272,4]]},"612":{"position":[[629,6]]}}}],["weekli",{"_index":392,"t":{"37":{"position":[[19,6]]}}}],["welcom",{"_index":477,"t":{"41":{"position":[[0,7]]},"43":{"position":[[3,7]]},"117":{"position":[[0,7]]},"208":{"position":[[182,9]]},"220":{"position":[[188,9]]},"325":{"position":[[381,7]]},"327":{"position":[[1375,7],[1726,7]]},"402":{"position":[[194,7]]},"508":{"position":[[909,7]]},"657":{"position":[[0,7]]},"681":{"position":[[0,7]]}}}],["welcome.md",{"_index":162,"t":{"18":{"position":[[245,10]]}}}],["welcome/index.md",{"_index":163,"t":{"18":{"position":[[267,16]]}}}],["well",{"_index":169,"t":{"18":{"position":[[378,5]]},"103":{"position":[[194,4]]},"202":{"position":[[13,4]]},"260":{"position":[[246,4]]},"275":{"position":[[396,4]]},"329":{"position":[[2642,5]]},"465":{"position":[[28,4]]},"481":{"position":[[295,4]]},"483":{"position":[[1026,5]]},"514":{"position":[[1573,4]]},"543":{"position":[[461,4]]}}}],["went",{"_index":1826,"t":{"329":{"position":[[2637,4]]}}}],["wether",{"_index":1873,"t":{"335":{"position":[[214,6],[295,6],[380,6],[471,6],[563,6]]},"337":{"position":[[699,6],[772,6]]}}}],["wg",{"_index":1537,"t":{"277":{"position":[[583,2],[671,2]]}}}],["wg0",{"_index":1539,"t":{"277":{"position":[[595,3],[685,4]]}}}],["wget",{"_index":2199,"t":{"454":{"position":[[336,4]]},"456":{"position":[[51,4]]},"460":{"position":[[262,4]]},"462":{"position":[[73,4]]}}}],["what'",{"_index":2631,"t":{"661":{"position":[[282,6]]}}}],["whenev",{"_index":861,"t":{"105":{"position":[[299,8]]},"329":{"position":[[2339,8],[2603,8]]},"514":{"position":[[2205,8],[2547,8]]}}}],["wherea",{"_index":352,"t":{"27":{"position":[[2047,7]]}}}],["wherev",{"_index":1959,"t":{"371":{"position":[[302,8]]}}}],["whether",{"_index":487,"t":{"41":{"position":[[209,7]]},"287":{"position":[[97,7]]},"487":{"position":[[1525,7]]},"504":{"position":[[401,7]]},"667":{"position":[[99,7]]},"681":{"position":[[161,7]]}}}],["white",{"_index":1364,"t":{"208":{"position":[[2305,8]]},"248":{"position":[[769,7]]}}}],["whole",{"_index":2264,"t":{"481":{"position":[[103,5]]},"606":{"position":[[387,5]]},"703":{"position":[[387,5]]}}}],["whose",{"_index":705,"t":{"71":{"position":[[2481,5]]},"256":{"position":[[953,5]]},"499":{"position":[[40,5]]}}}],["wi",{"_index":1167,"t":{"174":{"position":[[302,2],[392,2],[672,2]]},"303":{"position":[[93,2],[186,2],[266,2]]},"305":{"position":[[47,2],[258,2]]},"307":{"position":[[12,2],[64,2],[94,2],[119,2],[201,2]]},"359":{"position":[[144,2]]},"363":{"position":[[37,2],[67,2],[122,2],[301,2]]},"369":{"position":[[623,2],[666,2]]}}}],["wide",{"_index":1237,"t":{"186":{"position":[[13,6]]},"309":{"position":[[3117,4],[3367,4]]},"311":{"position":[[88,4]]},"563":{"position":[[774,4]]}}}],["wider",{"_index":211,"t":{"20":{"position":[[707,5]]},"550":{"position":[[676,5]]}}}],["widespread",{"_index":2226,"t":{"469":{"position":[[86,10]]}}}],["wifi",{"_index":1185,"t":{"176":{"position":[[302,5]]},"197":{"position":[[390,4],[500,4]]},"359":{"position":[[76,4]]},"371":{"position":[[402,5]]},"429":{"position":[[347,4]]},"673":{"position":[[297,4]]}}}],["will",{"_index":1975,"t":{"382":{"position":[[95,7]]}}}],["window",{"_index":1271,"t":{"195":{"position":[[678,7],[709,7]]},"277":{"position":[[982,7],[1013,7]]},"404":{"position":[[465,7]]},"705":{"position":[[850,6]]}}}],["wipe",{"_index":2173,"t":{"440":{"position":[[128,4]]},"514":{"position":[[861,4]]}}}],["wire",{"_index":2131,"t":{"423":{"position":[[70,5]]}}}],["wireguard",{"_index":1187,"t":{"176":{"position":[[418,9]]},"197":{"position":[[322,9]]},"200":{"position":[[0,9]]},"268":{"position":[[0,9],[181,9],[242,9]]},"271":{"position":[[149,10],[589,9],[674,9],[756,9]]},"273":{"position":[[70,9],[212,9]]},"275":{"position":[[40,9],[329,9]]},"277":{"position":[[736,9]]},"309":{"position":[[2865,9],[2910,9],[4326,9],[4691,9],[5462,9],[5514,9]]},"329":{"position":[[1750,9],[2049,9]]},"347":{"position":[[60,9]]},"349":{"position":[[1312,10],[1992,9]]},"351":{"position":[[14,9],[513,9],[1254,9]]},"353":{"position":[[37,9],[111,9],[214,9]]},"355":{"position":[[10,9]]},"371":{"position":[[230,9]]},"429":{"position":[[451,9]]}}}],["wish",{"_index":1934,"t":{"359":{"position":[[109,4]]},"384":{"position":[[22,4]]},"420":{"position":[[444,4]]},"576":{"position":[[549,4]]},"583":{"position":[[564,4]]},"589":{"position":[[407,4]]}}}],["withdraw",{"_index":883,"t":{"109":{"position":[[146,10],[603,10],[704,10]]},"134":{"position":[[196,10],[1058,10]]},"136":{"position":[[1113,10]]},"138":{"position":[[261,10],[346,10],[394,10],[486,10],[687,10]]},"142":{"position":[[95,10]]},"144":{"position":[[242,10],[327,10],[375,10],[467,10],[668,10]]},"150":{"position":[[95,10]]},"162":{"position":[[95,10]]},"604":{"position":[[552,11],[628,10],[872,10],[913,10],[1961,10]]},"610":{"position":[[63,8],[182,11],[341,10]]},"612":{"position":[[380,10],[672,10]]},"631":{"position":[[523,11],[599,10],[843,10],[884,10],[1873,10]]},"635":{"position":[[63,8],[236,11],[259,11],[372,11]]},"637":{"position":[[55,10],[168,10],[250,10],[832,10]]},"639":{"position":[[16,10],[413,10],[597,10]]},"701":{"position":[[526,11],[632,10],[876,10],[917,10],[1910,10]]},"705":{"position":[[66,10],[1326,10]]}}}],["withdrawn",{"_index":2613,"t":{"635":{"position":[[480,9]]}}}],["within",{"_index":860,"t":{"105":{"position":[[282,6]]},"129":{"position":[[82,6]]},"168":{"position":[[67,6]]},"271":{"position":[[1769,6]]},"275":{"position":[[318,6]]},"313":{"position":[[548,6]]},"319":{"position":[[314,6]]},"365":{"position":[[178,6]]},"420":{"position":[[247,6]]},"438":{"position":[[641,6]]},"472":{"position":[[144,6]]},"487":{"position":[[476,6],[1001,6]]},"497":{"position":[[377,6]]}}}],["without",{"_index":805,"t":{"95":{"position":[[1741,7]]},"99":{"position":[[794,7]]},"140":{"position":[[647,7]]},"144":{"position":[[1127,7]]},"148":{"position":[[905,7]]},"152":{"position":[[886,7]]},"168":{"position":[[97,7]]},"279":{"position":[[107,7]]},"283":{"position":[[281,7]]},"287":{"position":[[229,7]]},"297":{"position":[[133,7]]},"299":{"position":[[186,7]]},"301":{"position":[[124,7]]},"309":{"position":[[493,7],[1254,7]]},"313":{"position":[[292,7]]},"319":{"position":[[496,7],[857,7]]},"321":{"position":[[518,7]]},"406":{"position":[[1172,7],[1388,7]]},"412":{"position":[[209,7]]},"442":{"position":[[562,7]]},"460":{"position":[[213,7]]},"514":{"position":[[2621,7]]},"524":{"position":[[368,7]]},"576":{"position":[[985,7]]},"579":{"position":[[166,7]]},"585":{"position":[[233,7]]},"589":{"position":[[315,7]]},"594":{"position":[[465,7]]},"615":{"position":[[334,7]]},"619":{"position":[[231,7]]},"673":{"position":[[357,7]]}}}],["wizard",{"_index":584,"t":{"59":{"position":[[10,6]]},"65":{"position":[[20,6]]},"67":{"position":[[6,6],[49,6]]},"71":{"position":[[15,6]]},"420":{"position":[[203,7]]},"598":{"position":[[39,6]]}}}],["wizard.yml",{"_index":595,"t":{"61":{"position":[[47,10],[416,10]]}}}],["won't",{"_index":1112,"t":{"152":{"position":[[1882,5]]},"327":{"position":[[1457,5]]},"392":{"position":[[178,5]]},"404":{"position":[[381,5],[641,5]]},"558":{"position":[[740,5]]}}}],["wonder",{"_index":2630,"t":{"661":{"position":[[272,9]]}}}],["wont",{"_index":1130,"t":{"158":{"position":[[804,4]]}}}],["word",{"_index":261,"t":{"25":{"position":[[412,4]]},"129":{"position":[[697,6]]},"152":{"position":[[2480,6]]},"218":{"position":[[40,5]]}}}],["work",{"_index":325,"t":{"27":{"position":[[1208,5],[1564,5],[1623,5]]},"101":{"position":[[69,6],[594,4]]},"111":{"position":[[99,4]]},"115":{"position":[[284,5],[356,4]]},"117":{"position":[[340,6]]},"168":{"position":[[249,4]]},"172":{"position":[[305,5]]},"176":{"position":[[20,4]]},"180":{"position":[[599,5]]},"208":{"position":[[1440,4]]},"238":{"position":[[1090,4]]},"242":{"position":[[503,4]]},"271":{"position":[[1590,4],[1974,4]]},"327":{"position":[[488,7]]},"329":{"position":[[1510,8]]},"392":{"position":[[891,4]]},"406":{"position":[[1039,7],[1308,7]]},"420":{"position":[[824,5]]},"487":{"position":[[2055,4]]},"514":{"position":[[1895,7]]},"520":{"position":[[189,7]]},"530":{"position":[[246,6]]},"591":{"position":[[154,5]]},"600":{"position":[[104,4]]},"606":{"position":[[125,5]]},"633":{"position":[[120,5]]},"635":{"position":[[384,4]]},"649":{"position":[[181,5]]},"651":{"position":[[152,4]]},"661":{"position":[[122,5]]},"669":{"position":[[23,7]]},"703":{"position":[[125,5]]}}}],["workflow",{"_index":513,"t":{"49":{"position":[[29,9]]},"57":{"position":[[873,8]]}}}],["workshop",{"_index":2622,"t":{"641":{"position":[[186,9]]}}}],["world",{"_index":1599,"t":{"301":{"position":[[286,5]]},"371":{"position":[[326,6]]},"400":{"position":[[82,5]]},"465":{"position":[[134,6]]},"693":{"position":[[139,5]]}}}],["worldwid",{"_index":1711,"t":{"319":{"position":[[1128,10]]}}}],["worri",{"_index":949,"t":{"121":{"position":[[520,8]]},"297":{"position":[[141,8]]},"659":{"position":[[198,5]]}}}],["worth",{"_index":2297,"t":{"487":{"position":[[1246,5]]}}}],["wouldn't",{"_index":1749,"t":{"325":{"position":[[642,8]]}}}],["wrap",{"_index":1400,"t":{"216":{"position":[[32,4]]}}}],["write",{"_index":601,"t":{"61":{"position":[[163,7]]},"333":{"position":[[818,6]]},"639":{"position":[[282,5],[455,6]]}}}],["written",{"_index":2642,"t":{"681":{"position":[[92,7]]},"683":{"position":[[45,7]]}}}],["wrong",{"_index":1019,"t":{"129":{"position":[[1256,5],[1680,5]]},"329":{"position":[[2200,6],[2929,5]]}}}],["x",{"_index":2661,"t":{"705":{"position":[[891,1]]}}}],["x86",{"_index":1448,"t":{"236":{"position":[[291,3]]}}}],["xbzz",{"_index":2353,"t":{"508":{"position":[[704,6],[730,4]]}}}],["xdai",{"_index":51,"t":{"10":{"position":[[63,4]]},"12":{"position":[[573,4]]},"23":{"position":[[87,4]]},"27":{"position":[[786,4],[1696,4],[2006,4]]},"29":{"position":[[347,4]]},"35":{"position":[[101,4]]},"506":{"position":[[43,5]]},"629":{"position":[[193,4]]},"635":{"position":[[315,4]]},"639":{"position":[[178,4]]}}}],["xz",{"_index":2197,"t":{"454":{"position":[[90,2]]}}}],["y",{"_index":743,"t":{"91":{"position":[[522,2]]}}}],["yaml",{"_index":599,"t":{"61":{"position":[[120,4],[152,4]]}}}],["ye",{"_index":744,"t":{"91":{"position":[[527,3],[538,3]]},"606":{"position":[[832,5]]},"619":{"position":[[0,4]]}}}],["year",{"_index":275,"t":{"27":{"position":[[119,5]]},"121":{"position":[[142,5]]},"123":{"position":[[46,5]]}}}],["yellowcard",{"_index":865,"t":{"107":{"position":[[67,10]]},"129":{"position":[[376,11]]}}}],["yield",{"_index":2482,"t":{"572":{"position":[[75,6],[264,6],[408,6]]}}}],["you'd",{"_index":496,"t":{"43":{"position":[[48,5]]},"174":{"position":[[241,5]]},"191":{"position":[[556,5]]}}}],["you'll",{"_index":922,"t":{"117":{"position":[[43,6]]},"146":{"position":[[192,6],[357,6]]},"189":{"position":[[1018,6]]},"191":{"position":[[48,6]]},"197":{"position":[[453,6]]},"271":{"position":[[1037,6],[2083,6]]},"307":{"position":[[27,6]]},"329":{"position":[[814,6]]},"367":{"position":[[665,6]]},"376":{"position":[[30,6]]},"380":{"position":[[163,6],[255,6]]},"410":{"position":[[286,6]]},"418":{"position":[[777,6]]},"446":{"position":[[386,6]]},"448":{"position":[[35,6]]},"487":{"position":[[718,6],[1068,6]]},"514":{"position":[[195,6],[247,6],[1689,6],[2439,6],[2584,6]]},"543":{"position":[[16,6],[376,6]]},"545":{"position":[[48,6],[154,6]]},"552":{"position":[[16,6]]},"554":{"position":[[287,6],[658,6]]},"556":{"position":[[286,6],[782,6],[1157,6]]},"565":{"position":[[16,6],[446,6]]},"567":{"position":[[138,6],[1053,6],[1505,6],[1777,6]]},"569":{"position":[[706,6]]},"587":{"position":[[125,6]]},"633":{"position":[[274,6],[774,6]]},"657":{"position":[[41,6]]},"659":{"position":[[130,6]]},"673":{"position":[[398,6]]},"681":{"position":[[51,6]]},"697":{"position":[[201,6]]},"705":{"position":[[381,6],[521,6],[596,6],[773,6],[863,6]]}}}],["you'r",{"_index":488,"t":{"41":{"position":[[217,6],[530,6]]},"148":{"position":[[247,6]]},"170":{"position":[[24,6]]},"174":{"position":[[59,6]]},"176":{"position":[[548,6],[728,6]]},"204":{"position":[[47,6],[145,6]]},"271":{"position":[[2007,6]]},"287":{"position":[[105,6]]},"329":{"position":[[685,6],[2020,6],[2094,6]]},"367":{"position":[[553,6],[872,6]]},"402":{"position":[[296,6]]},"410":{"position":[[740,6],[831,6]]},"438":{"position":[[16,6]]},"448":{"position":[[343,6]]},"487":{"position":[[1533,6],[1685,6]]},"583":{"position":[[239,6]]},"589":{"position":[[237,6],[381,6]]},"591":{"position":[[3,6]]},"661":{"position":[[230,6],[294,6]]},"663":{"position":[[9,6]]},"667":{"position":[[172,6]]},"669":{"position":[[150,6]]},"673":{"position":[[257,6]]},"677":{"position":[[90,6]]},"681":{"position":[[169,6]]},"703":{"position":[[862,6]]},"705":{"position":[[665,6],[754,6]]}}}],["you'v",{"_index":1236,"t":{"184":{"position":[[229,6]]},"193":{"position":[[5,6]]},"380":{"position":[[331,6]]},"406":{"position":[[1008,6]]},"448":{"position":[[3,6],[211,6]]},"450":{"position":[[478,6]]},"671":{"position":[[5,6],[158,6]]},"673":{"position":[[3,6]]}}}],["yougetsign",{"_index":1954,"t":{"369":{"position":[[284,14]]}}}],["your_inst",{"_index":1772,"t":{"327":{"position":[[1932,13]]}}}],["yourkeypair",{"_index":1925,"t":{"351":{"position":[[865,12],[1015,12]]}}}],["yourself",{"_index":1078,"t":{"142":{"position":[[248,8]]},"329":{"position":[[2309,8]]},"497":{"position":[[315,9]]},"589":{"position":[[427,8]]}}}],["youtub",{"_index":2624,"t":{"641":{"position":[[299,7]]}}}],["you’r",{"_index":1305,"t":{"208":{"position":[[291,6]]},"220":{"position":[[297,6]]}}}],["you’v",{"_index":2510,"t":{"583":{"position":[[754,6]]},"604":{"position":[[2432,6]]},"631":{"position":[[2346,6]]},"701":{"position":[[2383,6]]}}}],["zk",{"_index":2404,"t":{"532":{"position":[[348,2]]}}}]],"pipeline":["stemmer"]}}] \ No newline at end of file diff --git a/search/index.html b/search/index.html new file mode 100644 index 000000000..d462f075e --- /dev/null +++ b/search/index.html @@ -0,0 +1,14 @@ + + + + + +Search the documentation + + + + + + + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 441bb4cb4..87156042a 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://docs.dappnode.io/blogweekly0.5https://docs.dappnode.io/blog/archiveweekly0.5https://docs.dappnode.io/blog/first-blog-postweekly0.5https://docs.dappnode.io/blog/long-blog-postweekly0.5https://docs.dappnode.io/blog/mdx-blog-postweekly0.5https://docs.dappnode.io/blog/tagsweekly0.5https://docs.dappnode.io/blog/tags/docusaurusweekly0.5https://docs.dappnode.io/blog/tags/facebookweekly0.5https://docs.dappnode.io/blog/tags/helloweekly0.5https://docs.dappnode.io/blog/tags/holaweekly0.5https://docs.dappnode.io/blog/welcomeweekly0.5https://docs.dappnode.io/docs/daoweekly0.5https://docs.dappnode.io/docs/dao/faqweekly0.5https://docs.dappnode.io/docs/dao/liquidity-miningweekly0.5https://docs.dappnode.io/docs/dao/node-basicsweekly0.5https://docs.dappnode.io/docs/dao/node-dropweekly0.5https://docs.dappnode.io/docs/dao/node-streamweekly0.5https://docs.dappnode.io/docs/devweekly0.5https://docs.dappnode.io/docs/dev/github-actionsweekly0.5https://docs.dappnode.io/docs/dev/references/docker-composeweekly0.5https://docs.dappnode.io/docs/dev/references/manifestweekly0.5https://docs.dappnode.io/docs/dev/references/setup-wizardweekly0.5https://docs.dappnode.io/docs/dev/sdk/commandsweekly0.5https://docs.dappnode.io/docs/dev/sdk/overviewweekly0.5https://docs.dappnode.io/docs/smoothweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/oracle-smweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/overviewweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/rewardsweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/statesweekly0.5https://docs.dappnode.io/docs/smooth/faq-glossaryweekly0.5https://docs.dappnode.io/docs/smooth/subscribe-to-smooth/automaticweekly0.5https://docs.dappnode.io/docs/smooth/subscribe-to-smooth/manualweekly0.5https://docs.dappnode.io/docs/smooth/subscribe-to-smooth/overviewweekly0.5https://docs.dappnode.io/docs/smooth/unsubscribe-from-smoothweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/localweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/overviewweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/terminalweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/openvpnweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/overviewweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/wireguardweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/wifiweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/overviewweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/providers/aws/faqsweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/providers/aws/overviewweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/providers/aws/set-up-instanceweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/providers/coming-soonweekly0.5https://docs.dappnode.io/docs/user/ethical-metrics/metricsweekly0.5https://docs.dappnode.io/docs/user/ethical-metrics/overviewweekly0.5https://docs.dappnode.io/docs/user/ethical-metrics/setupweekly0.5https://docs.dappnode.io/docs/user/ethical-metrics/troubleshootingweekly0.5https://docs.dappnode.io/docs/user/faqsweekly0.5https://docs.dappnode.io/docs/user/getting-started/access-dappnode-via-wifiweekly0.5https://docs.dappnode.io/docs/user/getting-started/choose-your-pathweekly0.5https://docs.dappnode.io/docs/user/getting-started/connect-dappnode-to-the-routerweekly0.5https://docs.dappnode.io/docs/user/getting-started/next-stepsweekly0.5https://docs.dappnode.io/docs/user/getting-started/registerweekly0.5https://docs.dappnode.io/docs/user/getting-started/setupweekly0.5https://docs.dappnode.io/docs/user/hardware/maintenanceweekly0.5https://docs.dappnode.io/docs/user/hardware/overviewweekly0.5https://docs.dappnode.io/docs/user/hardware/temperatureweekly0.5https://docs.dappnode.io/docs/user/install/armweekly0.5https://docs.dappnode.io/docs/user/install/dappnode-commandsweekly0.5https://docs.dappnode.io/docs/user/install/isoweekly0.5https://docs.dappnode.io/docs/user/install/overviewweekly0.5https://docs.dappnode.io/docs/user/install/scriptweekly0.5https://docs.dappnode.io/docs/user/packages/avalancheweekly0.5https://docs.dappnode.io/docs/user/packages/bitcoinweekly0.5https://docs.dappnode.io/docs/user/packages/dmsweekly0.5https://docs.dappnode.io/docs/user/packages/ethclassicweekly0.5https://docs.dappnode.io/docs/user/packages/moneroweekly0.5https://docs.dappnode.io/docs/user/packages/signatureweekly0.5https://docs.dappnode.io/docs/user/packages/swarmweekly0.5https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packagesweekly0.5https://docs.dappnode.io/docs/user/repository/ethereumweekly0.5https://docs.dappnode.io/docs/user/repository/ipfsweekly0.5https://docs.dappnode.io/docs/user/rollups/optimismweekly0.5https://docs.dappnode.io/docs/user/rollups/overviewweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/dvt-technologies/divaweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/dvt-technologies/obol-networkweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/dvt-technologies/ssv-networkweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/rocketpoolweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/stakehouseweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/stakewiseweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/solo/holeskyweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/solo/mainnetweekly0.5https://docs.dappnode.io/docs/user/staking/gnosis-chain/soloweekly0.5https://docs.dappnode.io/docs/user/staking/lukso/soloweekly0.5https://docs.dappnode.io/docs/user/staking/overviewweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/crash-courseweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/driving-school/configurationweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/driving-school/initial-setupweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/guides/connect-nodeweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/overviewweekly0.5https://docs.dappnode.io/weekly0.5 \ No newline at end of file +https://docs.dappnode.io/blogweekly0.5https://docs.dappnode.io/blog/archiveweekly0.5https://docs.dappnode.io/blog/first-blog-postweekly0.5https://docs.dappnode.io/blog/long-blog-postweekly0.5https://docs.dappnode.io/blog/mdx-blog-postweekly0.5https://docs.dappnode.io/blog/tagsweekly0.5https://docs.dappnode.io/blog/tags/docusaurusweekly0.5https://docs.dappnode.io/blog/tags/facebookweekly0.5https://docs.dappnode.io/blog/tags/helloweekly0.5https://docs.dappnode.io/blog/tags/holaweekly0.5https://docs.dappnode.io/blog/welcomeweekly0.5https://docs.dappnode.io/searchweekly0.5https://docs.dappnode.io/docs/daoweekly0.5https://docs.dappnode.io/docs/dao/faqweekly0.5https://docs.dappnode.io/docs/dao/liquidity-miningweekly0.5https://docs.dappnode.io/docs/dao/node-basicsweekly0.5https://docs.dappnode.io/docs/dao/node-dropweekly0.5https://docs.dappnode.io/docs/dao/node-streamweekly0.5https://docs.dappnode.io/docs/devweekly0.5https://docs.dappnode.io/docs/dev/github-actionsweekly0.5https://docs.dappnode.io/docs/dev/references/docker-composeweekly0.5https://docs.dappnode.io/docs/dev/references/manifestweekly0.5https://docs.dappnode.io/docs/dev/references/setup-wizardweekly0.5https://docs.dappnode.io/docs/dev/sdk/commandsweekly0.5https://docs.dappnode.io/docs/dev/sdk/overviewweekly0.5https://docs.dappnode.io/docs/smoothweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/oracle-smweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/overviewweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/rewardsweekly0.5https://docs.dappnode.io/docs/smooth/deep-dive-into-smooth/statesweekly0.5https://docs.dappnode.io/docs/smooth/faq-glossaryweekly0.5https://docs.dappnode.io/docs/smooth/subscribe-to-smooth/automaticweekly0.5https://docs.dappnode.io/docs/smooth/subscribe-to-smooth/manualweekly0.5https://docs.dappnode.io/docs/smooth/subscribe-to-smooth/overviewweekly0.5https://docs.dappnode.io/docs/smooth/unsubscribe-from-smoothweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/localweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/overviewweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/terminalweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/openvpnweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/overviewweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/vpn/wireguardweekly0.5https://docs.dappnode.io/docs/user/access-your-dappnode/wifiweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/overviewweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/providers/aws/faqsweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/providers/aws/overviewweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/providers/aws/set-up-instanceweekly0.5https://docs.dappnode.io/docs/user/dappnode-cloud/providers/coming-soonweekly0.5https://docs.dappnode.io/docs/user/ethical-metrics/metricsweekly0.5https://docs.dappnode.io/docs/user/ethical-metrics/overviewweekly0.5https://docs.dappnode.io/docs/user/ethical-metrics/setupweekly0.5https://docs.dappnode.io/docs/user/ethical-metrics/troubleshootingweekly0.5https://docs.dappnode.io/docs/user/faqsweekly0.5https://docs.dappnode.io/docs/user/getting-started/access-dappnode-via-wifiweekly0.5https://docs.dappnode.io/docs/user/getting-started/choose-your-pathweekly0.5https://docs.dappnode.io/docs/user/getting-started/connect-dappnode-to-the-routerweekly0.5https://docs.dappnode.io/docs/user/getting-started/next-stepsweekly0.5https://docs.dappnode.io/docs/user/getting-started/registerweekly0.5https://docs.dappnode.io/docs/user/getting-started/setupweekly0.5https://docs.dappnode.io/docs/user/hardware/maintenanceweekly0.5https://docs.dappnode.io/docs/user/hardware/overviewweekly0.5https://docs.dappnode.io/docs/user/hardware/temperatureweekly0.5https://docs.dappnode.io/docs/user/install/armweekly0.5https://docs.dappnode.io/docs/user/install/dappnode-commandsweekly0.5https://docs.dappnode.io/docs/user/install/isoweekly0.5https://docs.dappnode.io/docs/user/install/overviewweekly0.5https://docs.dappnode.io/docs/user/install/scriptweekly0.5https://docs.dappnode.io/docs/user/packages/avalancheweekly0.5https://docs.dappnode.io/docs/user/packages/bitcoinweekly0.5https://docs.dappnode.io/docs/user/packages/dmsweekly0.5https://docs.dappnode.io/docs/user/packages/ethclassicweekly0.5https://docs.dappnode.io/docs/user/packages/moneroweekly0.5https://docs.dappnode.io/docs/user/packages/signatureweekly0.5https://docs.dappnode.io/docs/user/packages/swarmweekly0.5https://docs.dappnode.io/docs/user/packages/understanding-dappnode-packagesweekly0.5https://docs.dappnode.io/docs/user/repository/ethereumweekly0.5https://docs.dappnode.io/docs/user/repository/ipfsweekly0.5https://docs.dappnode.io/docs/user/rollups/optimismweekly0.5https://docs.dappnode.io/docs/user/rollups/overviewweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/dvt-technologies/divaweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/dvt-technologies/obol-networkweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/dvt-technologies/ssv-networkweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/rocketpoolweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/stakehouseweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/lsd-pools/stakewiseweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/solo/holeskyweekly0.5https://docs.dappnode.io/docs/user/staking/ethereum/solo/mainnetweekly0.5https://docs.dappnode.io/docs/user/staking/gnosis-chain/soloweekly0.5https://docs.dappnode.io/docs/user/staking/lukso/soloweekly0.5https://docs.dappnode.io/docs/user/staking/overviewweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/crash-courseweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/driving-school/configurationweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/driving-school/initial-setupweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/guides/connect-nodeweekly0.5https://docs.dappnode.io/docs/user/videos-and-tutorials/overviewweekly0.5https://docs.dappnode.io/weekly0.5 \ No newline at end of file