diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..ca972efe --- /dev/null +++ b/404.html @@ -0,0 +1,20 @@ + + + + + +Spawn + + + + + + + +
Skip to main content
+ + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 00000000..45012264 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +ibc.cosmos.network diff --git a/assets/css/styles.c2f08f87.css b/assets/css/styles.c2f08f87.css new file mode 100644 index 00000000..614ea860 --- /dev/null +++ b/assets/css/styles.c2f08f87.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))}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.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);--docsearch-searchbox-shadow:inset 0 0 0 1px var(--docsearch-primary-color)}.markdown li,body{word-wrap:break-word}pre,table{overflow:auto}progress,sub,sup{vertical-align:initial}.button,code{vertical-align:middle}html .menu__link:hover,html .table-of-contents__link--active,html .table-of-contents__link:hover{text-shadow:.1px .1px 0 var(--ifm-font-color-base),-.1px -.1px 0 var(--ifm-font-color-base),.1px -.1px 0 var(--ifm-font-color-base),-.1px .1px 0 var(--ifm-font-color-base),-.1px 0 0 var(--ifm-font-color-base),.1px 0 0 var(--ifm-font-color-base),0 .1px 0 var(--ifm-font-color-base),0 -.1px 0 var(--ifm-font-color-base)}html .navbar,html .pagination-nav>a:hover,html[data-theme=dark] .navbar-sidebar__brand{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.markdown,html .markdown{--ifm-heading-vertical-rhythm-bottom:1}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}*,.loadingRing_RJI3 div,:after,:before{box-sizing:border-box}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list,menu,ol,ul{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}.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{color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility}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[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}.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 ul,ul ol,ul ul{margin:0}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}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);color:inherit;text-decoration:inherit}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)}.clean-btn,hr{color:inherit}.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;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,.inline-block,.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),html .DocSearch-Button .DocSearch-Search-Icon,html .DocSearch-Hits mark{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);display:flex;flex-direction:column;overflow:hidden}.card__image{padding-top:var(--ifm-card-vertical-spacing)}.card__image:first-child{padding-top:0}.card__body,.card__footer,.card__header{padding:var(--ifm-card-vertical-spacing) var(--ifm-card-horizontal-spacing)}.card__body:not(:last-child),.card__footer:not(:last-child),.card__header:not(:last-child){padding-bottom:0}.card__body>:last-child,.card__footer>:last-child,.card__header>:last-child{margin-bottom:0}.card__footer{margin-top:auto}.table-of-contents{font-size:.8rem;margin-bottom:0;padding:var(--ifm-toc-padding-vertical) 0}.table-of-contents,.table-of-contents ul{list-style:none;padding-left:var(--ifm-toc-padding-horizontal)}.table-of-contents li{margin:var(--ifm-toc-padding-vertical) var(--ifm-toc-padding-horizontal)}.table-of-contents__left-border{border-left:1px solid var(--ifm-toc-border-color)}.table-of-contents__link{color:var(--ifm-toc-link-color);display:block}.table-of-contents__link--active,.table-of-contents__link--active code,.table-of-contents__link:hover,.table-of-contents__link:hover code{color:var(--ifm-color-primary);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}.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)}.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,html .theme-doc-markdown li:last-child li:last-child{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox],dialog,fieldset,legend{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.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{height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;content:"";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)}.flex,.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;bottom:0;top:0;left: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,blockquote,dd,dl,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html .theme-doc-sidebar-container>div:first-child>a,p,pre{margin:0}.navbar__items--center+.navbar__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}#nprogress,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);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)}.pagination__link:hover{text-decoration:none}.pagination-nav{display:grid;grid-gap:var(--ifm-spacing-horizontal);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)}.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;--ifm-color-primary:#fff;--ifm-color-primary-dark:#e6e6e6;--ifm-color-primary-darker:#d9d9d9;--ifm-color-primary-darkest:#b3b3b3;--ifm-color-primary-light:#fff;--ifm-color-primary-lighter:#fff;--ifm-color-primary-lightest:#fff;--ifm-background-color:#000;--docusaurus-highlighted-code-line-bg:#00000054;--docsearch-modal-background:#000!important;--docsearch-highlight-color:#ffffff70!important;--docsearch-hit-background:#181818ab!important;--docsearch-key-gradient:linear-gradient(-26.5deg,#5d5d5d,#3c3c3c)!important;--docsearch-key-shadow:inset 0 -2px 0 0 #353535,inset 0 0 1px 1px #7a7a7b,0 2px 2px 0 #2d2d2d4d!important;--search-local-highlight-color:#d23669}:root{--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#5064fb;--ifm-color-primary-dark:#000;--ifm-color-primary-darker:#000;--ifm-color-primary-darkest:#000;--ifm-color-primary-light:#000;--ifm-color-primary-lighter:#000;--ifm-color-primary-lightest:#000;--ifm-code-font-size:95%;--ifm-breadcrumb-item-background-active:#0000;--ifm-breadcrumb-padding-horizontal:0;--ifm-list-paragraph-margin:0;--ifm-spacing-horizontal:2rem;--ifm-blockquote-border-color:#000;--ifm-menu-link-padding-vertical:0.6rem;--ifm-background-color:#fff;--ifm-footer-link-color:var(--ifm-font-color-base);--ifm-menu-link-sublist-icon:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSI2IiBmaWxsPSJub25lIj48cGF0aCBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiIHN0cm9rZS1vcGFjaXR5PSIuNjY3IiBkPSJtMSAxIDQgNCA0LTQiLz48L3N2Zz4=);--docsearch-searchbox-background:#f7f7f7;--docsearch-modal-background:#f7f7f7!important;--ifm-navbar-height:5.563rem;--ifm-navbar-sidebar-width:100vw;--docsearch-highlight-color:#181818ab!important;--aa-primary-color-rgb:0,0,0;--ifm-menu-color-background-active:none;--ifm-menu-color-background-hover:none;--docusaurus-highlighted-code-line-bg:#0000001a;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300);--docusaurus-collapse-button-bg:#0000;--docusaurus-collapse-button-bg-hover:#0000001a;--doc-sidebar-width:300px;--doc-sidebar-hidden-width:30px}#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}*,:after,:before{border:0 solid;margin:0}hr,html .footer{border-top-width:1px}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.content_knG7 a,.hitFooter_E9YW a,.suggestion_fB_2.cursor_eG29 mark{text-decoration:underline}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{display:block;margin-bottom:var(--ifm-spacing-vertical);border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}.admonitionHeading_Gvgb code,button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}html,html .navbar{background-color:var(--ifm-background-color)}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}menu,ol,ul{margin:0;padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}.dropdownNavbarItemMobile_S0Fm,[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[data-theme=dark] img[src$="#gh-light-mode-only"],[data-theme=light] img[src$="#gh-dark-mode-only"],[hidden],html .DocSearch-Button .DocSearch-Button-Keys,html .breadcrumbs__item:first-child>a>svg{display:none}html{font-family:Inter,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:"kern","liga","calt","zero" 0;-webkit-font-feature-settings:"kern","liga","calt","zero" 0;-webkit-text-size-adjust:100%;text-size-adjust:100%;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased;font-kerning:normal;font-variant-ligatures:contextual common-ligatures;text-rendering:optimizeLegibility}@supports (font-variation-settings:normal){html{font-family:Inter var,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}}.tags_jXut,svg{display:inline}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/spawn/assets/fonts/Inter-Regular-c8ba52b05a9ef10f47584d08ece2ec5c.woff2) format("woff2"),url(/spawn/assets/fonts/Inter-Regular-8c206db99195777c67691cbba9d64393.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/spawn/assets/fonts/Inter-Medium-293fd13dbca5a3e450ef1ebfb232a299.woff2) format("woff2"),url(/spawn/assets/fonts/Inter-Medium-9053572c46aeb4b16caafd643a543b8d.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/spawn/assets/fonts/Inter-Bold-ec64ea577b0349e055ad6646c1d8797a.woff2) format("woff2"),url(/spawn/assets/fonts/Inter-Bold-93c1301bd9f486c573b3d9001c6ec0e4.woff) format("woff")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:900;src:url(/spawn/assets/fonts/Inter-Black-15ca31c0a2a68f76d2d12055bdf97bd0.woff2) format("woff2"),url(/spawn/assets/fonts/Inter-Black-c6938660eec019fefd684894b6d00900.woff) format("woff")}@font-face{font-display:swap;font-family:Inter var;font-style:oblique 0deg 10deg;font-weight:100 900;src:url(/spawn/assets/fonts/Inter.var-c2fe3cb2b7c746f7966a973d869d21c3.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;src:url(/spawn/assets/fonts/JetBrainsMono-Regular-1e66c47aca088de94ae789a48719cb00.woff2) format("woff2")}.mb-4{margin-bottom:.75rem}.border{border-width:1px}.text-right{text-align:right}.invert{--tw-invert:invert(100%)}.filter,.invert{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}html[data-theme=dark] .markdown a{color:#85c1e9}html #__docusaurus>div[role=banner]{background-color:#00000008;font-weight:400;--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}html #__docusaurus>div[role=banner] a{font-size:.8125rem;text-decoration-line:none;width:100%}html .navbar{border-bottom-color:var(--ifm-color-emphasis-200);border-bottom-width:1px;height:auto;padding-bottom:.375rem;padding-top:.375rem}html .DocSearch-Button,html .navbar__toggle{height:3rem;width:3rem;--tw-bg-opacity:1;background-color:rgb(247 247 247/var(--tw-bg-opacity))}html .navbar__toggle{align-items:center;border-radius:.5rem;border-end-start-radius:1rem;border-start-start-radius:1rem;display:flex;justify-content:center}html .navbar__brand+*{margin-left:auto}html .menu__link,html .navbar__link--active{--tw-text-opacity:1;color:rgb(85 85 85/var(--tw-text-opacity))}html .navbar__items:not(:last-child){justify-content:space-between}html .navbar__items:not(:last-child) button{margin-right:0;order:2}html .navbar__items--right>:last-child{right:5rem}html[data-theme=dark] .menu__link,html[data-theme=dark] .navbar__item{color:#ffffffab}html[data-theme=dark] .navbar__toggle,html[data-theme=dark] .pagination-nav>a,html[data-theme=dark] .theme-doc-toc-mobile{background-color:#181818ab}html .github-icon:hover{opacity:.5}html .DocSearch-Button{border-radius:.625rem;justify-content:center;margin-right:.5rem;color:#00000054}html .navbar-sidebar__close,html[data-theme=dark] .DocSearch-Footer,html[data-theme=dark] .DocSearch-Modal,html[data-theme=dark] .navbar-sidebar{background-color:rgb(0 0 0/var(--tw-bg-opacity));--tw-bg-opacity:1}html .DocSearch-Button .DocSearch-Button-Placeholder{padding-right:6rem}html .DocSearch-Logo path{fill:var(--ifm-font-color-base)}html .navbar-sidebar{width:100%}html .navbar-sidebar__brand{height:auto;padding-left:1.5rem;padding-right:1.5rem}html .navbar-sidebar__item{padding-left:1.5rem;padding-right:1.5rem;width:100%}html .navbar-sidebar__back{display:none;padding-left:0;padding-right:0}html .navbar-sidebar__close{align-items:center;border-radius:.5rem;border-end-start-radius:1rem;border-start-start-radius:1rem;display:flex;height:3rem;justify-content:center;margin-left:0;width:3rem}html .navbar-sidebar__close>svg>g{stroke:#fff}html[data-theme=dark] .navbar-sidebar__brand{position:relative}html[data-theme=dark] .navbar-sidebar__brand:after{bottom:0;content:"";display:block;height:1px;left:0;margin-left:1.5rem;margin-right:1.5rem;position:absolute;right:.5rem;--tw-bg-opacity:1;background-color:rgb(85 85 85/var(--tw-bg-opacity))}html[data-theme=dark] .navbar-sidebar__close{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}html[data-theme=dark] .navbar-sidebar__close>svg>g{stroke:#000}html[data-theme=dark] .DocSearch-Button{background-color:#181818ab;color:#ffffff70}html[data-theme=dark] .DocSearch-Button-Key{border-color:#ffffff70;color:#ffffff70}html .breadcrumbs__item:first-child>a:after{content:"Docs"}html .breadcrumbs__item:not(:last-child):after{background-image:none;content:">"}html .breadcrumbs__link{color:#000!important}html[data-theme=dark] .breadcrumbs__link{color:#fff!important}html .theme-doc-toc-mobile{border-radius:1rem;--tw-bg-opacity:1;background-color:rgb(247 247 247/var(--tw-bg-opacity));padding:1.25rem 1.5rem 0}html .theme-doc-toc-mobile>button{display:flex;justify-content:space-between;padding:0 0 1.25rem}html .theme-doc-toc-mobile>button:after{background-image:var(--ifm-menu-link-sublist-icon);background-size:70%;margin-left:1rem;order:9999}html .theme-doc-toc-mobile ul li{margin:1rem 0}html[data-theme=dark] .theme-doc-sidebar-menu .menu__list:before{background-color:#ffffff70}html .theme-doc-sidebar-menu{font-weight:400}html .theme-doc-sidebar-menu .menu__list{padding-left:0;position:relative}html .theme-doc-sidebar-menu .menu__list:before{background-color:#00000012;content:"";display:block;height:100%;left:.5rem;position:absolute;top:0;width:2px}#__docusaurus-base-url-issue-banner-container,.hideAction_vcyE>svg,.navbarSearchContainer_Bca1:empty,.themedComponent_mlkZ,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html .footer__col:first-child .footer__title,html .footer__link-item>svg,html .menu__caret,html .menu__link>svg,html .theme-doc-sidebar-menu .menu__list ul:before,html li li .menu__link--sublist-caret:after,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}html .theme-doc-sidebar-menu .menu__link{padding-left:0;padding-right:1rem}html .theme-doc-sidebar-menu .menu__link--active:not(.menu__link--sublist){color:var(--ifm-font-color-base);font-weight:500}html .theme-doc-sidebar-menu li li{padding-left:2rem}html .theme-doc-sidebar-menu li li .menu__link--active:not(.menu__link--sublist){color:var(--ifm-font-color-base);font-weight:500;position:relative}html .theme-doc-sidebar-menu li li .menu__link--active:not(.menu__link--sublist):before{background-color:var(--ifm-font-color-base);content:"";display:block;height:100%;left:-1.5rem;position:absolute;top:0;width:2px}html .theme-doc-sidebar-menu li li li{padding-left:1rem}html .theme-doc-sidebar-menu li li li .menu__link--active:not(.menu__link--sublist):before{left:-2.5rem}html .theme-doc-sidebar-menu li li li li .menu__link--active:not(.menu__link--sublist):before{left:-3.5rem}html .theme-doc-sidebar-menu li li li li li .menu__link--active:not(.menu__link--sublist):before{left:-4.5rem}html .theme-doc-sidebar-menu li li li li li li .menu__link--active:not(.menu__link--sublist):before{left:-5.5rem}html .theme-doc-sidebar-menu li li li li li li li .menu__link--active:not(.menu__link--sublist):before{left:-6.5rem}html .theme-doc-sidebar-item-link .menu__link[target=_blank]:after{content:"\2197";margin-left:.25rem}html .menu__link:hover{color:var(--ifm-font-color-base)}html .menu__link--sublist-caret{display:flex}html .menu__link--sublist-caret:after{background-repeat:no-repeat;background-size:16px;margin-left:0;margin-right:.75rem;order:-9999}html .menu__list-item--collapsed .menu__caret:before,html .menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(0)}html .code-block-minus-diff-line{background-color:#ff000020;border-left:3px solid #ff000080}html .code-block-minus-diff-line,html .code-block-plus-diff-line{display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}html .code-block-plus-diff-line{background-color:#00ff0020;border-left:3px solid #00ff0080}html .pagination-nav{margin-top:4rem;padding-bottom:2rem}html .pagination-nav>a{border-color:#0000;border-radius:1rem;box-shadow:0 0 80px #00000012;grid-column:span 2/span 2;padding:1.5rem 1.5rem 3.25rem}html .pagination-nav .pagination-nav__link--next{text-align:left}html .pagination-nav .pagination-nav__sublabel{font-size:1rem;margin-bottom:.625rem;--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}html .pagination-nav .pagination-nav__label{font-size:1.3125rem;font-weight:600}html .footer{background-color:var(--ifm-background-color);border-top-color:var(--ifm-color-emphasis-200);margin-bottom:6rem;padding-top:6rem}html .footer__link-item:hover,html .theme-doc-markdown a:hover{text-decoration-line:underline}html .footer__bottom{margin:0 calc(var(--ifm-spacing-horizontal)*-1)}html .footer__copyright{font-size:.8125rem;margin-top:4rem;text-align:center}html .footer__col:not(:first-child){flex-basis:50%}html .theme-back-to-top-button{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}html .theme-back-to-top-button:after{width:50%}html .theme-code-block{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;margin-top:.5rem}html .markdown{--ifm-h1-vertical-rhythm-bottom:1}html .theme-doc-markdown{border-bottom-color:#00000012;border-bottom-width:1px;margin-top:2rem;padding-bottom:3rem}html .theme-doc-markdown h1{font-size:2.375rem;font-weight:700;letter-spacing:-.025em;line-height:2.5rem}html .theme-doc-markdown h2{font-size:2rem;font-weight:700;letter-spacing:-.025em;line-height:2.25rem}html .theme-doc-markdown h3{font-size:1.3125rem;font-weight:600;letter-spacing:-.025em;line-height:2rem}html .theme-doc-markdown h4{font-size:1rem;font-weight:600;letter-spacing:-.025em;line-height:1.75rem}html .theme-doc-markdown h5{font-size:1rem;font-weight:600;letter-spacing:.025em;line-height:1.5rem}html .theme-doc-markdown p{line-height:1.625}html .theme-doc-markdown blockquote,html .theme-doc-markdown ol,html .theme-doc-markdown p,html .theme-doc-markdown ul{font-size:1rem}html .theme-doc-markdown code{border-width:0;padding-left:.5rem;padding-right:.5rem}html .theme-doc-markdown blockquote{margin-bottom:2rem;margin-top:2rem}html .theme-doc-markdown a{text-decoration-line:none;color:var(--ifm-color-primary)}html .theme-doc-markdown ol,html .theme-doc-markdown ul{margin-bottom:1.5rem;margin-top:1.5rem}html .theme-doc-markdown ul li{margin-bottom:.75rem;padding-left:1.5rem;position:relative}html .theme-doc-markdown ul li:before{background-color:currentColor;content:var(--tw-content);display:block;height:4px;left:0;position:absolute;top:.5em;width:4px}html .theme-doc-markdown ul li li:before{background-color:initial;border-color:currentColor;border-width:1px;content:var(--tw-content)}html .theme-doc-markdown ul li li:last-child{margin-bottom:1.5rem}html .theme-doc-markdown ol{counter-reset:a;list-style-type:none}html .theme-doc-markdown ol>li{margin-bottom:1.25rem;padding-left:3rem;position:relative}html .theme-doc-markdown ol>li:before{content:counters(a,".",decimal-leading-zero) ".";counter-increment:a;display:flex;font-size:1rem;font-weight:600;left:0;letter-spacing:-.025em;position:absolute;top:.2rem}html .theme-doc-markdown ol ol{counter-reset:b}html .theme-doc-markdown ol ol>li:before{content:counters(b,".",decimal-leading-zero) ".";counter-increment:b}html .theme-doc-markdown li>ol,html .theme-doc-markdown li>ul{margin-bottom:1rem;margin-top:1rem}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}.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}.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);text-align:center}.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)}.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%}.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_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.lastUpdated_JAkA{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}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.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}.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}.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}: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:c;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(c);opacity:.4}.codeLineContent_feaV{padding-right:var(--ifm-pre-padding)}.theme-code-block:hover .copyButtonCopied_obH4{opacity:1!important}.copyButtonIcons_eSgA{height:1.125rem;position:relative;width:1.125rem}.copyButtonIcon_y97N,.copyButtonSuccessIcon_LjdS{left:0;position:absolute;top:0;fill:currentColor;height:inherit;opacity:inherit;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}.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}.admonitionIcon_Rf37{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_Rf37 svg{display:inline-block;height:1.6em;width:1.6em;fill:var(--ifm-alert-foreground-color)}.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}.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}.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}.docSidebarContainer_YfHR,.sidebarLogo_isFc{display:none}.docMainContainer_TBSr,.docRoot_UBD9{display:flex;width:100%}.docsWrapper_hBAB{display:flex;flex:1 0 auto}@media (min-width:997px){.collapseSidebarButton_PEFL,.expandButton_TmdG{background-color:var(--docusaurus-collapse-button-bg)}.tocMobile_ITEo,html .navbar__toggle{display:none}html .navbar__items:not(:last-child){justify-content:flex-start;padding-left:.5rem;padding-right:.5rem}html .DocSearch-Button{justify-content:space-between;width:auto}html .theme-doc-breadcrumbs{padding-top:1rem}html .theme-doc-sidebar-container{border-right-color:var(--ifm-color-emphasis-200);border-right-width:1px;margin-left:.75rem}html .pagination-nav>a{grid-column:span 1/span 1}.lastUpdated_JAkA,html .pagination-nav .pagination-nav__link--next{text-align:right}html .footer__col:not(:first-child){flex-basis:0}: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)}.docItemCol_VOVn{max-width:75%!important}.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}}@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,.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 (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}}@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-color-scheme:dark){html .pagination-nav .pagination-nav__sublabel{color:var(--ifm-font-color-base)}}@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/fonts/Inter-Black-15ca31c0a2a68f76d2d12055bdf97bd0.woff2 b/assets/fonts/Inter-Black-15ca31c0a2a68f76d2d12055bdf97bd0.woff2 new file mode 100644 index 00000000..68f64c9e Binary files /dev/null and b/assets/fonts/Inter-Black-15ca31c0a2a68f76d2d12055bdf97bd0.woff2 differ diff --git a/assets/fonts/Inter-Black-c6938660eec019fefd684894b6d00900.woff b/assets/fonts/Inter-Black-c6938660eec019fefd684894b6d00900.woff new file mode 100644 index 00000000..a18593a0 Binary files /dev/null and b/assets/fonts/Inter-Black-c6938660eec019fefd684894b6d00900.woff differ diff --git a/assets/fonts/Inter-Bold-93c1301bd9f486c573b3d9001c6ec0e4.woff b/assets/fonts/Inter-Bold-93c1301bd9f486c573b3d9001c6ec0e4.woff new file mode 100644 index 00000000..eaf3d4bf Binary files /dev/null and b/assets/fonts/Inter-Bold-93c1301bd9f486c573b3d9001c6ec0e4.woff differ diff --git a/assets/fonts/Inter-Bold-ec64ea577b0349e055ad6646c1d8797a.woff2 b/assets/fonts/Inter-Bold-ec64ea577b0349e055ad6646c1d8797a.woff2 new file mode 100644 index 00000000..2846f29c Binary files /dev/null and b/assets/fonts/Inter-Bold-ec64ea577b0349e055ad6646c1d8797a.woff2 differ diff --git a/assets/fonts/Inter-Medium-293fd13dbca5a3e450ef1ebfb232a299.woff2 b/assets/fonts/Inter-Medium-293fd13dbca5a3e450ef1ebfb232a299.woff2 new file mode 100644 index 00000000..f92498a2 Binary files /dev/null and b/assets/fonts/Inter-Medium-293fd13dbca5a3e450ef1ebfb232a299.woff2 differ diff --git a/assets/fonts/Inter-Medium-9053572c46aeb4b16caafd643a543b8d.woff b/assets/fonts/Inter-Medium-9053572c46aeb4b16caafd643a543b8d.woff new file mode 100644 index 00000000..d546843f Binary files /dev/null and b/assets/fonts/Inter-Medium-9053572c46aeb4b16caafd643a543b8d.woff differ diff --git a/assets/fonts/Inter-Regular-8c206db99195777c67691cbba9d64393.woff b/assets/fonts/Inter-Regular-8c206db99195777c67691cbba9d64393.woff new file mode 100644 index 00000000..62d3a618 Binary files /dev/null and b/assets/fonts/Inter-Regular-8c206db99195777c67691cbba9d64393.woff differ diff --git a/assets/fonts/Inter-Regular-c8ba52b05a9ef10f47584d08ece2ec5c.woff2 b/assets/fonts/Inter-Regular-c8ba52b05a9ef10f47584d08ece2ec5c.woff2 new file mode 100644 index 00000000..6c2b6893 Binary files /dev/null and b/assets/fonts/Inter-Regular-c8ba52b05a9ef10f47584d08ece2ec5c.woff2 differ diff --git a/assets/fonts/Inter.var-c2fe3cb2b7c746f7966a973d869d21c3.woff2 b/assets/fonts/Inter.var-c2fe3cb2b7c746f7966a973d869d21c3.woff2 new file mode 100644 index 00000000..365eedc5 Binary files /dev/null and b/assets/fonts/Inter.var-c2fe3cb2b7c746f7966a973d869d21c3.woff2 differ diff --git a/assets/fonts/JetBrainsMono-Regular-1e66c47aca088de94ae789a48719cb00.woff2 b/assets/fonts/JetBrainsMono-Regular-1e66c47aca088de94ae789a48719cb00.woff2 new file mode 100644 index 00000000..8c862e33 Binary files /dev/null and b/assets/fonts/JetBrainsMono-Regular-1e66c47aca088de94ae789a48719cb00.woff2 differ diff --git a/assets/js/0cd0e263.f71026b4.js b/assets/js/0cd0e263.f71026b4.js new file mode 100644 index 00000000..36994193 --- /dev/null +++ b/assets/js/0cd0e263.f71026b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[150],{1682:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"v0.50.x","label":"v0.50.x","banner":null,"badge":true,"noIndex":false,"className":"docs-version-v0.50.x","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Spawn Documentation","href":"/spawn/v0.50/","docId":"meet-spawn","unlisted":false},{"type":"category","label":"Installation","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"System Setup","href":"/spawn/v0.50/install/system-setup","docId":"setup/system-setup","unlisted":false},{"type":"link","label":"Install Spawn","href":"/spawn/v0.50/install/install-spawn","docId":"setup/install-spawn","unlisted":false},{"type":"link","label":"Debugging","href":"/spawn/v0.50/install/debugging","docId":"setup/debugging","unlisted":false}]},{"type":"category","label":"Build Your Application","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Build a Name Service","href":"/spawn/v0.50/build/name-service","docId":"build-your-application/nameservice","unlisted":false},{"type":"link","label":"Set Structure","href":"/spawn/v0.50/build/name-service-structure","docId":"build-your-application/proto-logic","unlisted":false},{"type":"link","label":"Application Logic","href":"/spawn/v0.50/build/name-service-application","docId":"build-your-application/application-logic","unlisted":false},{"type":"link","label":"Configure Client","href":"/spawn/v0.50/build/name-service-client","docId":"build-your-application/cli","unlisted":false},{"type":"link","label":"Testnet","href":"/spawn/v0.50/build/name-service-testnet","docId":"build-your-application/testnet","unlisted":false},{"type":"link","label":"Bonus","href":"/spawn/v0.50/build/name-service-bonus","docId":"build-your-application/extra-challenge","unlisted":false},{"type":"link","label":"Summary","href":"/spawn/v0.50/build/name-service-summary","docId":"build-your-application/conclusion","unlisted":false},{"type":"link","label":"IBC NameService (Part 2)","href":"/spawn/v0.50/build/name-service-ibc-module","docId":"build-your-application/ibc-module","unlisted":false},{"type":"link","label":"IBC Contract (Part 3)","href":"/spawn/v0.50/build/name-service-ibc-contract","docId":"build-your-application/ibc-cosmwasm","unlisted":false}]},{"type":"category","label":"Application Demos","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"IBC Transfers","href":"/spawn/v0.50/demo/ibc","docId":"demos/ibc-transfer-demo","unlisted":false},{"type":"link","label":"CosmWasm NFTs","href":"/spawn/v0.50/demo/cw-nft","docId":"demos/cw-nft-demo","unlisted":false},{"type":"link","label":"Token Factory","href":"/spawn/v0.50/demo/tokenfactory","docId":"demos/tokenfactory","unlisted":false},{"type":"link","label":"CosmWasm Validator Reviews","href":"/spawn/v0.50/demo/cw-validator-reviews","docId":"demos/cw-validator-reviews","unlisted":false}]},{"type":"category","label":"Learn","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Network Security Types","href":"/spawn/v0.50/learn/consensus-security","docId":"learn/consensus-algos","unlisted":false}]}]},"docs":{"build-your-application/application-logic":{"id":"build-your-application/application-logic","title":"Name Service","description":"You now need to set the data structure in the keeper to store the wallet to name pair. Keeper\'s are where the data is stored for future use.","sidebar":"defaultSidebar"},"build-your-application/cli":{"id":"build-your-application/cli","title":"Name Service","description":"Using the Cosmos-SDKs AutoCLI, you will easily set up the CLI client for transactions and queries.","sidebar":"defaultSidebar"},"build-your-application/conclusion":{"id":"build-your-application/conclusion","title":"Name Service","description":"You just crafted your first blockchain, module, and custom logic with Spawn. You have a fully functioning name service that allows users to set and retrieve their account names.","sidebar":"defaultSidebar"},"build-your-application/extra-challenge":{"id":"build-your-application/extra-challenge","title":"Name Service","description":"Challenge 1: Limit Input","sidebar":"defaultSidebar"},"build-your-application/ibc-cosmwasm":{"id":"build-your-application/ibc-cosmwasm","title":"IBC NameService Contract","description":"You will build a new IBC contract with CosmWasm, enabling the same features we just built out in the IBC module. While this is a part 3 of the series, it can be done standalone as it requires a new chain. It is a similar concept to the previous parts 1 and 2, but with a smart contract focus instead of a chain.","sidebar":"defaultSidebar"},"build-your-application/ibc-module":{"id":"build-your-application/ibc-module","title":"IBC NameService Module","description":"In this section, you will build on top of the Name Service tutorial to add cross chain functionality. This will allow you to sent a name from another network.","sidebar":"defaultSidebar"},"build-your-application/nameservice":{"id":"build-your-application/nameservice","title":"Name Service","description":"Building your first Cosmos-SDK blockchain with Spawn. This tutorial focuses on a \'nameservice\' where you set your account to a name you choose.","sidebar":"defaultSidebar"},"build-your-application/proto-logic":{"id":"build-your-application/proto-logic","title":"Name Service","description":"Extend the template module and add how to store and interact with data. Specifically, you need to set and retrieve a name.","sidebar":"defaultSidebar"},"build-your-application/testnet":{"id":"build-your-application/testnet","title":"Name Service","description":"Congrats!! You built your first network already. You are ready to run a local testnet environment to verify it works.","sidebar":"defaultSidebar"},"demos/cw-nft-demo":{"id":"demos/cw-nft-demo","title":"CW NFTs","description":"You will build a new chain with CosmWasm, enabling support for smart contracts on a new Cosmos-SDK application. You will download a pre-built contract, upload it, and interact with it to transfer the ownership of some data.","sidebar":"defaultSidebar"},"demos/cw-validator-reviews":{"id":"demos/cw-validator-reviews","title":"CW Validator Reviews","description":"You will build a new chain with CosmWasm, enabling a proof-of-stake validator review system. You will write a contract to collect and manage validator reviews, integrate it with the chain, and update validator data automatically through a Cosmos-SDK endblocker module.","sidebar":"defaultSidebar"},"demos/ibc-transfer-demo":{"id":"demos/ibc-transfer-demo","title":"IBC Transfers","description":"In this tutorial, we\'ll create and interact with a new Cosmos-SDK blockchain called \\"rollchain\\", with the token denomination \\"uroll\\". This chain has tokenfactory and Proof of Authority, but we\'ll disable cosmwasm.","sidebar":"defaultSidebar"},"demos/tokenfactory":{"id":"demos/tokenfactory","title":"Token Factory","description":"You will build a new chain with TokenFactory, enabling any account to create, transfer, and interact with fractionalized native tokens.","sidebar":"defaultSidebar"},"learn/consensus-algos":{"id":"learn/consensus-algos","title":"Network Security","description":"Prerequisites","sidebar":"defaultSidebar"},"meet-spawn":{"id":"meet-spawn","title":"Meet Spawn","description":"Spawn is the easiest way to build, maintain and scale a Cosmos SDK blockchain. Spawn solves all the key pain points engineers face when building new Cosmos-SDK networks.","sidebar":"defaultSidebar"},"setup/debugging":{"id":"setup/debugging","title":"Debugging","description":"This section will contain common setup problems and how to resolve them.","sidebar":"defaultSidebar"},"setup/install-spawn":{"id":"setup/install-spawn","title":"Install Spawn","description":"Install the Spawn CLI tool to your local machine","sidebar":"defaultSidebar"},"setup/system-setup":{"id":"setup/system-setup","title":"Setup Development Environment","description":"Setup your development environment with the essentials to get started building the blockchain.","sidebar":"defaultSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/138e0e15.205f518f.js b/assets/js/138e0e15.205f518f.js new file mode 100644 index 00000000..2f0a49a2 --- /dev/null +++ b/assets/js/138e0e15.205f518f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[524],{536:s=>{s.exports=JSON.parse('{"name":"@easyops-cn/docusaurus-search-local","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/16c976c4.b2206a4a.js b/assets/js/16c976c4.b2206a4a.js new file mode 100644 index 00000000..89dc4b37 --- /dev/null +++ b/assets/js/16c976c4.b2206a4a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[816],{1858:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>o,toc:()=>l});var r=n(5893),i=n(1151);const s={title:"Name Service",sidebar_label:"Application Logic",sidebar_position:3,slug:"/build/name-service-application"},a="Save Storage Structure",o={id:"build-your-application/application-logic",title:"Name Service",description:"You now need to set the data structure in the keeper to store the wallet to name pair. Keeper's are where the data is stored for future use.",source:"@site/versioned_docs/version-v0.50.x/02-build-your-application/03-application-logic.md",sourceDirName:"02-build-your-application",slug:"/build/name-service-application",permalink:"/spawn/v0.50/build/name-service-application",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:3,frontMatter:{title:"Name Service",sidebar_label:"Application Logic",sidebar_position:3,slug:"/build/name-service-application"},sidebar:"defaultSidebar",previous:{title:"Set Structure",permalink:"/spawn/v0.50/build/name-service-structure"},next:{title:"Configure Client",permalink:"/spawn/v0.50/build/name-service-client"}},c={},l=[{value:"Application Logic",id:"application-logic",level:2}];function p(e){const t={code:"code",h1:"h1",h2:"h2",hr:"hr",img:"img",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"save-storage-structure",children:"Save Storage Structure"}),"\n",(0,r.jsx)(t.p,{children:"You now need to set the data structure in the keeper to store the wallet to name pair. Keeper's are where the data is stored for future use."}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-go",metastring:'title="x/nameservice/keeper/keeper.go"',children:'\ntype Keeper struct {\n\t...\n\t// highlight-next-line\n\tNameMapping collections.Map[string, string]\n}\n\n...\n\nfunc NewKeeper() Keeper {\n ...\n\n k := Keeper{\n ...\n\t// highlight-next-line\n NameMapping: collections.NewMap(sb, collections.NewPrefix(1), "name_mapping", collections.StringKey, collections.StringValue),\n }\n\n}\n'})}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.img,{src:"https://github.com/rollchains/spawn/assets/31943163/47ed4a41-4df2-4a5d-9ac5-bfb23aeefd94",alt:"keeper NewKeeper NameMapping"})}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"application-logic",children:"Application Logic"}),"\n",(0,r.jsx)(t.p,{children:"Update the msg_server logic to set the name upon request from a user."}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-go",metastring:'title="x/nameservice/keeper/msg_server.go"',children:"func (ms msgServer) SetServiceName(ctx context.Context, msg *types.MsgSetServiceName) (*types.MsgSetServiceNameResponse, error) {\n\t// highlight-start\n\tif err := ms.k.NameMapping.Set(ctx, msg.Sender, msg.Name); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgSetServiceNameResponse{}, nil\n\t// highlight-end\n}\n"})}),"\n",(0,r.jsx)(t.p,{children:"and also for the query_server to retrieve the name."}),"\n",(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-go",metastring:'title="x/nameservice/keeper/query_server.go"',children:"func (k Querier) ResolveName(goCtx context.Context, req *types.QueryResolveNameRequest) (*types.QueryResolveNameResponse, error) {\n\t// highlight-start\n\tv, err := k.Keeper.NameMapping.Get(goCtx, req.Wallet)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.QueryResolveNameResponse{\n\t\tName: v,\n\t}, nil\n\t// highlight-end\n}\n"})}),"\n",(0,r.jsx)(t.hr,{})]})}function u(e={}){const{wrapper:t}={...(0,i.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:()=>o,a:()=>a});var r=n(7294);const i={},s=r.createContext(i);function a(e){const t=r.useContext(s);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/17896441.5683270e.js b/assets/js/17896441.5683270e.js new file mode 100644 index 00000000..9acb4fd8 --- /dev/null +++ b/assets/js/17896441.5683270e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[918],{8573:(e,r,s)=>{s.d(r,{Z:()=>a});s(7294);var n=s(3010),c=s.n(n),t=s(5893);function a(e){const{source:r,...s}=e;return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(c(),{...s}),r&&(0,t.jsx)("div",{className:"text-right mb-4",children:(0,t.jsx)("a",{href:r,target:"_blank",rel:"noopener noreferrer",children:"View Source"})})]})}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.328bf227.js b/assets/js/1a4e3797.328bf227.js new file mode 100644 index 00000000..7f49f0c0 --- /dev/null +++ b/assets/js/1a4e3797.328bf227.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[920],{2027:(e,t,r)=>{r.r(t),r.d(t,{default:()=>$});var s=r(7294),a=r(2263),n=r(8862),c=r(5742),l=r(3692),o=r(5999);const u=["zero","one","two","few","many","other"];function h(e){return u.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:h(["one","other"]),select:e=>1===e?"one":"other"};function m(){const{i18n:{currentLocale:e}}=(0,a.default)();return(0,s.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:h(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 d(){const e=m();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)}}var p=r(1728),g=r(6550),f=r(2389),x=r(1029);const y=function(){const e=(0,f.Z)(),t=(0,g.k6)(),r=(0,g.TH)(),{siteConfig:{baseUrl:s}}=(0,a.default)(),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(x.Kc)&&x.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 S=r(22),C=r(8202),j=r(2539),I=r(726),v=r(1073),w=r(311),R=r(3926);const P={searchContextInput:"searchContextInput_mXoe",searchQueryInput:"searchQueryInput_CFBF",searchResultItem:"searchResultItem_U687",searchResultItemPath:"searchResultItemPath_uIbk",searchResultItemSummary:"searchResultItemSummary_oZHr",searchQueryColumn:"searchQueryColumn_q7nx",searchContextColumn:"searchContextColumn_oWAF"};var b=r(51),_=r(5893);function F(){const{siteConfig:{baseUrl:e},i18n:{currentLocale:t}}=(0,a.default)(),{selectMessage:r}=d(),{searchValue:n,searchContext:l,searchVersion:u,updateSearchPath:h,updateSearchContext:i}=y(),[m,g]=(0,s.useState)(n),[f,j]=(0,s.useState)(),[I,v]=(0,s.useState)(),R=`${e}${u}`,F=(0,s.useMemo)((()=>m?(0,o.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:m}):(0,o.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"})),[m]);(0,s.useEffect)((()=>{h(m),f&&(m?f(m,(e=>{v(e)})):v(void 0))}),[m,f]);const $=(0,s.useCallback)((e=>{g(e.target.value)}),[]);return(0,s.useEffect)((()=>{n&&n!==m&&g(n)}),[n]),(0,s.useEffect)((()=>{!async function(){const{wrappedIndexes:e,zhDictionary:t}=!Array.isArray(x.Kc)||l||x.pQ?await(0,S.w)(R,l):{wrappedIndexes:[],zhDictionary:[]};j((()=>(0,C.v)(e,t,100)))}()}),[l,R]),(0,_.jsxs)(s.Fragment,{children:[(0,_.jsxs)(c.Z,{children:[(0,_.jsx)("meta",{property:"robots",content:"noindex, follow"}),(0,_.jsx)("title",{children:F})]}),(0,_.jsxs)("div",{className:"container margin-vert--lg",children:[(0,_.jsx)("h1",{children:F}),(0,_.jsxs)("div",{className:"row",children:[(0,_.jsx)("div",{className:(0,p.Z)("col",{[P.searchQueryColumn]:Array.isArray(x.Kc),"col--9":Array.isArray(x.Kc),"col--12":!Array.isArray(x.Kc)}),children:(0,_.jsx)("input",{type:"search",name:"q",className:P.searchQueryInput,"aria-label":"Search",onChange:$,value:m,autoComplete:"off",autoFocus:!0})}),Array.isArray(x.Kc)?(0,_.jsx)("div",{className:(0,p.Z)("col","col--3","padding-left--none",P.searchContextColumn),children:(0,_.jsxs)("select",{name:"search-context",className:P.searchContextInput,id:"context-selector",value:l,onChange:e=>i(e.target.value),children:[x.pQ&&(0,_.jsx)("option",{value:"",children:(0,o.I)({id:"theme.SearchPage.searchContext.everywhere",message:"everywhere"})}),x.Kc.map((e=>{const{label:r,path:s}=(0,b._)(e,t);return(0,_.jsx)("option",{value:s,children:r},s)}))]})}):null]}),!f&&m&&(0,_.jsx)("div",{children:(0,_.jsx)(w.Z,{})}),I&&(I.length>0?(0,_.jsx)("p",{children:r(I.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:I.length}))}):(0,_.jsx)("p",{children:(0,o.I)({id:"theme.SearchPage.noResultsText",message:"No documents were found",description:"The paragraph for empty search result"})})),(0,_.jsx)("section",{children:I&&I.map((e=>(0,_.jsx)(A,{searchResult:e},e.document.i)))})]})]})}function A(e){let{searchResult:{document:t,type:r,page:s,tokens:a,metadata:n}}=e;const c=0===r,o=2===r,u=(c?t.b:s.b).slice(),h=o?t.s:t.t;c||u.push(s.t);let i="";if(x.vc&&a.length>0){const e=new URLSearchParams;for(const t of a)e.append("_highlight",t);i=`?${e.toString()}`}return(0,_.jsxs)("article",{className:P.searchResultItem,children:[(0,_.jsx)("h2",{children:(0,_.jsx)(l.Z,{to:t.u+i+(t.h||""),dangerouslySetInnerHTML:{__html:o?(0,j.C)(h,a):(0,I.o)(h,(0,v.m)(n,"t"),a,100)}})}),u.length>0&&(0,_.jsx)("p",{className:P.searchResultItemPath,children:(0,R.e)(u)}),o&&(0,_.jsx)("p",{className:P.searchResultItemSummary,dangerouslySetInnerHTML:{__html:(0,I.o)(t.t,(0,v.m)(n,"t"),a,100)}})]})}const $=function(){return(0,_.jsx)(n.Z,{children:(0,_.jsx)(F,{})})}}}]); \ No newline at end of file diff --git a/assets/js/200b60cb.d5728b75.js b/assets/js/200b60cb.d5728b75.js new file mode 100644 index 00000000..3a795f4b --- /dev/null +++ b/assets/js/200b60cb.d5728b75.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[613],{8434:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>o,contentTitle:()=>c,default:()=>d,frontMatter:()=>r,metadata:()=>i,toc:()=>l});var a=t(5893),s=t(1151);const r={title:"IBC NameService Contract",sidebar_label:"IBC Contract (Part 3)",sidebar_position:8,slug:"/build/name-service-ibc-contract"},c="IBC Name Service Contract",i={id:"build-your-application/ibc-cosmwasm",title:"IBC NameService Contract",description:"You will build a new IBC contract with CosmWasm, enabling the same features we just built out in the IBC module. While this is a part 3 of the series, it can be done standalone as it requires a new chain. It is a similar concept to the previous parts 1 and 2, but with a smart contract focus instead of a chain.",source:"@site/versioned_docs/version-v0.50.x/02-build-your-application/09-ibc-cosmwasm.md",sourceDirName:"02-build-your-application",slug:"/build/name-service-ibc-contract",permalink:"/spawn/v0.50/build/name-service-ibc-contract",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:8,frontMatter:{title:"IBC NameService Contract",sidebar_label:"IBC Contract (Part 3)",sidebar_position:8,slug:"/build/name-service-ibc-contract"},sidebar:"defaultSidebar",previous:{title:"IBC NameService (Part 2)",permalink:"/spawn/v0.50/build/name-service-ibc-module"},next:{title:"IBC Transfers",permalink:"/spawn/v0.50/demo/ibc"}},o={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup the Chain",id:"setup-the-chain",level:2},{value:"Build CosmWasm Contract",id:"build-cosmwasm-contract",level:2},{value:"Update Contract Dependencies",id:"update-contract-dependencies",level:2},{value:"Setup State",id:"setup-state",level:2},{value:"Setup Interactions",id:"setup-interactions",level:2},{value:"Contract Logic",id:"contract-logic",level:2},{value:"Create Transaction acknowledgement",id:"create-transaction-acknowledgement",level:2},{value:"Setup Errors",id:"setup-errors",level:2},{value:"IBC Specific Logic",id:"ibc-specific-logic",level:2},{value:"Build Contract From Source",id:"build-contract-from-source",level:2},{value:"Start the chains and connect",id:"start-the-chains-and-connect",level:3},{value:"Store the Contract on both chains",id:"store-the-contract-on-both-chains",level:3},{value:"Instantiate our Contract on both chains",id:"instantiate-our-contract-on-both-chains",level:3},{value:"Relayer connect",id:"relayer-connect",level:3},{value:"Verify channels",id:"verify-channels",level:2},{value:"Transaction interaction",id:"transaction-interaction",level:2},{value:"Verify data",id:"verify-data",level:3},{value:"Summary",id:"summary",level:2},{value:"What you Learned",id:"what-you-learned",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"ibc-name-service-contract",children:"IBC Name Service Contract"}),"\n",(0,a.jsxs)(n.p,{children:["You will build a new IBC contract with ",(0,a.jsx)(n.a,{href:"https://cosmwasm.com",children:"CosmWasm"}),", enabling the same features we just built out in the IBC module. While this is a part 3 of the series, it can be done standalone as it requires a new chain. It is a similar concept to the previous parts 1 and 2, but with a smart contract focus instead of a chain."]}),"\n",(0,a.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/spawn/v0.50/install/system-setup",children:"System Setup"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/spawn/v0.50/install/install-spawn",children:"Install Spawn"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/spawn/v0.50/install/system-setup#cosmwasm",children:"Rust + CosmWasm"})}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"setup-the-chain",children:"Setup the Chain"}),"\n",(0,a.jsx)(n.p,{children:"Build a new blockchain with CosmWasm enabled."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"GITHUB_USERNAME=rollchains\n\nspawn new cwchain \\\n--consensus=proof-of-stake \\\n--bech32=roll \\\n--denom=uroll \\\n--bin=rolld \\\n--disabled=block-explorer \\\n--org=${GITHUB_USERNAME}\n\n# move into the chain directory\ncd cwchain\n\n# download latest dependencies\ngo mod tidy\n"})}),"\n",(0,a.jsx)(n.h2,{id:"build-cosmwasm-contract",children:"Build CosmWasm Contract"}),"\n",(0,a.jsxs)(n.p,{children:["CosmWasm has a template repository that is used to generate new contracts. A minimal contract will be built with the ",(0,a.jsx)(n.code,{children:"nameservice-contract"})," name provided on a ",(0,a.jsx)(n.a,{href:"https://github.com/CosmWasm/cw-template/commits/a2a169164324aa1b48ab76dd630f75f504e41d99/",children:"specific commit"}),"."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cargo generate --git https://github.com/CosmWasm/cw-template.git \\\n --name nameservice-contract \\\n --force-git-init \\\n -d minimal=true --tag a2a169164324aa1b48ab76dd630f75f504e41d99\n"})}),"\n",(0,a.jsx)(n.p,{children:"Open the contract in your code editor now to begin adding the application logic."}),"\n",(0,a.jsx)(n.admonition,{title:"Info",type:"note",children:(0,a.jsxs)(n.p,{children:["It is useful to install code rust extensions like ",(0,a.jsx)(n.a,{href:"https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer",children:"rust-analyzer"})," and ",(0,a.jsx)(n.a,{href:"https://marketplace.visualstudio.com/items?itemName=tamasfe.even-better-toml",children:"even better toml"})," for an increased editing experience."]})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# open using vscode in the terminal\ncode nameservice-contract/\n"})}),"\n",(0,a.jsx)(n.h2,{id:"update-contract-dependencies",children:"Update Contract Dependencies"}),"\n",(0,a.jsxs)(n.p,{children:["This version of the CosmWasm template has some outdated versions. Update these in the ",(0,a.jsx)(n.code,{children:"Cargo.toml"}),' file and add the "ibc3" capability (for IBC support).']}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-toml",metastring:'title="Cargo.toml"',children:'[dependencies]\n# highlight-start\ncosmwasm-schema = "1.5.7"\ncosmwasm-std = { version = "1.5.7", features = [\n # "cosmwasm_1_3",\n "ibc3"\n] }\n# highlight-end\n'})}),"\n",(0,a.jsx)(n.p,{children:"Update your local environment with the dependencies."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cargo update\n"})}),"\n",(0,a.jsx)(n.h2,{id:"setup-state",children:"Setup State"}),"\n",(0,a.jsx)(n.p,{children:"This Rust code defines the structure for a name service in a CosmWasm smart contract. It saves a map of all channels (outside chain connections) to a list of wallet address and their associated names."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/state.rs"',children:'// highlight-start\nuse std::collections::BTreeMap;\n\nuse cw_storage_plus::Map;\n\n// Pair the wallet address to the name a user provides.\npub type WalletMapping = BTreeMap;\n\n/// create a new empty wallet mapping for a channel.\n/// useful if a channel is opened and we have no data yet\npub fn new_wallet_mapping() -> WalletMapping {\n BTreeMap::new()\n}\n\n/// Name Service maps for each channel saved to a storage object\npub const NAME_SERVICE: Map = Map::new("nameservice");\n// highlight-end\n'})}),"\n",(0,a.jsx)(n.h2,{id:"setup-interactions",children:"Setup Interactions"}),"\n",(0,a.jsx)(n.p,{children:'Now that the state is setup, focus on modeling the users interaction with the contract. Users should be able to set a name. This also requires an input for a "channel" since a contract could connect to multiple chains. It could be written in a way that a user could set it to all channels, but for simplicity, we will require a channel to be specified. Just as is set, a user should get the name with the same format: a channel and a wallet address. Then a new message type is added specifically for IBCExecution messages. This is the packet transfered over the network, between chains, and gives the ability to set a name elsewhere on its contract.'}),"\n",(0,a.jsx)(n.p,{children:"The contract will call the IBCExecuteMsg when a user runs the ExecuteMsg.SendName function. This indirectly generates the packet and submits it for the user."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/msg.rs"',children:"use cosmwasm_schema::{cw_serde, QueryResponses};\n\n#[cw_serde]\npub struct InstantiateMsg {}\n\n#[cw_serde]\npub enum ExecuteMsg {\n // highlight-next-line\n SetName { channel: String, name: String },\n}\n\n#[cw_serde]\n#[derive(QueryResponses)]\npub enum QueryMsg {\n // highlight-start\n #[returns(GetNameResponse)]\n GetName { channel: String, wallet: String },\n // highlight-end\n}\n\n// highlight-start\n#[cw_serde]\npub enum IbcExecuteMsg {\n SetName { wallet: String, name: String },\n}\n\n#[cw_serde]\npub struct GetNameResponse {\n pub name: String,\n}\n// highlight-end\n"})}),"\n",(0,a.jsx)(n.h2,{id:"contract-logic",children:"Contract Logic"}),"\n",(0,a.jsx)(n.p,{children:"Here are all the imports used in this. Replace your files top."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/contract.rs"',children:'// highlight-start\n#[cfg(not(feature = "library"))]\nuse cosmwasm_std::entry_point;\nuse cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};\n\nuse crate::error::ContractError;\nuse crate::msg::{ExecuteMsg, IbcExecuteMsg, InstantiateMsg, QueryMsg};\n\nuse cosmwasm_std::{to_json_binary, IbcMsg, IbcTimeout, StdError};\n// highlight-end\n'})}),"\n",(0,a.jsx)(n.p,{children:"Instantiate creates a new version of this contract that you control. Rather than being unimplemented, return a basic response saying it was Ok (successful) and add some extra logging metadata."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/contract.rs"',children:'#[cfg_attr(not(feature = "library"), entry_point)]\npub fn instantiate(\n _deps: DepsMut,\n _env: Env,\n _info: MessageInfo,\n _msg: InstantiateMsg,\n) -> Result {\n // highlight-next-line\n Ok(Response::new().add_attribute("method", "instantiate"))\n}\n'})}),"\n",(0,a.jsx)(n.p,{children:"The ExecuteMsg::SetName method is allowed to be interacted from anyone. Just like instantiate we return a new Ok response. This time an add_message function is added. This will generate the packet as the user interacts, performing a new action from a previous action. This uses the IbcMsg::SendPacket built in type to create it for the user. Notice the data field includes the IbcExecuteMsg::SetName we defined before. This is transferred to the other version of this contract on another chain and processed."}),"\n",(0,a.jsx)(n.p,{children:"If the packet is not picked up by a relayer service provider within a few minutes, the packet will become void and stop attempting execution on the other chain's contract."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/contract.rs"',children:'#[cfg_attr(not(feature = "library"), entry_point)]\npub fn execute(\n _deps: DepsMut,\n // highlight-start\n env: Env, // removes the underscore _\n info: MessageInfo,\n msg: ExecuteMsg,\n // highlight-end\n) -> Result {\n // highlight-start\n match msg {\n ExecuteMsg::SetName { channel, name } => {\n Ok(Response::new()\n .add_attribute("method", "set_name")\n .add_attribute("channel", channel.clone())\n // outbound IBC message, where packet is then received on other chain\n .add_message(IbcMsg::SendPacket {\n channel_id: channel,\n data: to_json_binary(&IbcExecuteMsg::SetName {\n name: name,\n wallet: info.sender.into_string(),\n })?,\n // default timeout of two minutes.\n timeout: IbcTimeout::with_timestamp(env.block.time.plus_seconds(120)),\n }))\n }\n }\n // highlight-end\n}\n'})}),"\n",(0,a.jsxs)(n.p,{children:["The users name is not set, but it is only useful if you can also get said data. Read from the ",(0,a.jsx)(n.code,{children:"NAME_SERVICE"})," storage Map defined in ",(0,a.jsx)(n.code,{children:"state.rs"}),". Using may load grabs the data if the channel has a name set. If no channel is found (no users have set a name from this chain), it returns an error to the user requesting. If a channel of pairs is found, it loads them and checks if the wallet address requested is set in it. If it is, return what the wallets name is set to. If the user with this wallet did not set a name, return an error."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/contract.rs"',children:'#[cfg_attr(not(feature = "library"), entry_point)]\npub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult {\n // highlight-start\n match msg {\n QueryMsg::GetName { channel, wallet } => {\n crate::state::NAME_SERVICE\n .may_load(deps.storage, channel.clone())\n .and_then(|maybe_wallets| match maybe_wallets {\n Some(wallets) => match wallets.get(&wallet) {\n Some(wallet) => Ok(to_json_binary(&crate::msg::GetNameResponse {\n name: wallet.clone(),\n })?),\n None => Err(StdError::generic_err("No name set for wallet")),\n },\n None => Err(StdError::generic_err("Channel not found")),\n })\n }\n }\n // highlight-end\n}\n'})}),"\n",(0,a.jsxs)(n.p,{children:["The contract will receive a packet and must run logic to process it. This is called the ",(0,a.jsx)(n.code,{children:"try_set_name"})," method. It updates a given channel to include a new wallet. If the wallet already exists, it will overwrite the name. It then returns the users name back, or an error, for our future IBC logic to handle."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/contract.rs"',children:"// highlight-start\n/// called on IBC packet receive in other chain\npub fn try_set_name(\n deps: DepsMut,\n channel: String,\n wallet: String,\n name: String,\n) -> Result {\n crate::state::NAME_SERVICE.update(deps.storage, channel, |wallets| -> StdResult<_> {\n let mut wallets = wallets.unwrap_or_default();\n wallets.insert(wallet, name.clone());\n Ok(wallets)\n })?;\n Ok(name)\n}\n// highlight-end\n"})}),"\n",(0,a.jsx)(n.h2,{id:"create-transaction-acknowledgement",children:"Create Transaction acknowledgement"}),"\n",(0,a.jsxs)(n.p,{children:["Create a new file, ",(0,a.jsx)(n.code,{children:"ack.rs"}),", to handle the IBC ACK (acknowledgement) messages. This just returns back to the user if their interaction was a success or an error."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"touch src/ack.rs\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/ack.rs"',children:'// highlight-start\nuse cosmwasm_schema::cw_serde;\nuse cosmwasm_std::{to_json_binary, Binary};\n\n/// IBC ACK. See:\n/// https://github.com/cosmos/cosmos-sdk/blob/f999b1ff05a4db4a338a855713864497bedd4396/proto/ibc/core/channel/v1/channel.proto#L141-L147\n#[cw_serde]\npub enum Ack {\n Result(Binary),\n Error(String),\n}\n\npub fn make_ack_success() -> Binary {\n let res = Ack::Result(b"1".into());\n to_json_binary(&res).unwrap()\n}\n\npub fn make_ack_fail(err: String) -> Binary {\n let res = Ack::Error(err);\n to_json_binary(&res).unwrap()\n}\n// highlight-end\n'})}),"\n",(0,a.jsx)(n.admonition,{title:"Note",type:"note",children:(0,a.jsx)(n.p,{children:"Rust has a lib.rs file that is the entry point for the Rust library. All files that are used must be mentioned here to have access to them."})}),"\n",(0,a.jsx)(n.p,{children:"Add the ack logic to the lib.rs so the application can use it."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/lib.rs"',children:"// highlight-next-line\npub mod ack;\npub mod contract;\n...\n\npub use crate::error::ContractError;\n"})}),"\n",(0,a.jsx)(n.h2,{id:"setup-errors",children:"Setup Errors"}),"\n",(0,a.jsx)(n.p,{children:'If a relayer or contract try to connect to an unlike protocol, the InvalidVersion error will be returned to the attempted actor. This contract only supports 1 protocol version across networks because it must speak the same "language". If you speak english while another person speaks spanish, your interactions are incompatible. Contracts are like this too. They verify their protocol version in a format like "ics-20" or "ns-1" first to make sure they can communicate.'}),"\n",(0,a.jsx)(n.p,{children:"OrderedChannel is a type of flow control for network packets, or interactions. This tutorial uses unordered paths so any packet that times out or fails does not block future packets from going through. If a relayer tries to make this an ordered path, the contract returns this error to stop them from doing so."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/error.rs"',children:'use cosmwasm_std::StdError;\nuse thiserror::Error;\n\n#[derive(Error, Debug)]\npub enum ContractError {\n #[error("{0}")]\n Std(#[from] StdError),\n\n #[error("Unauthorized")]\n Unauthorized {},\n // Add any other custom errors you like here.\n // Look at https://docs.rs/thiserror/1.0.21/thiserror/ for details.\n\n // highlight-start\n #[error("invalid IBC channel version. Got ({actual}), expected ({expected})")]\n InvalidVersion { actual: String, expected: String },\n\n #[error("only unordered channels are supported")]\n OrderedChannel {},\n // highlight-end\n}\n\n// highlight-start\n// There is an IBC specific error that is never returned.\n#[derive(Error, Debug)]\npub enum Never {}\n// highlight-end\n'})}),"\n",(0,a.jsx)(n.h2,{id:"ibc-specific-logic",children:"IBC Specific Logic"}),"\n",(0,a.jsxs)(n.p,{children:["Create a new file ",(0,a.jsx)(n.code,{children:"ibc.rs"}),". Add this to the lib.rs. This is where our core IBC logic will go."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"touch src/ibc.rs\n"})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/lib.rs"',children:"// highlight-next-line\npub mod ibc;\npub mod ack;\npub mod contract;\nmod error;\npub mod helpers;\npub mod msg;\npub mod state;\n\npub use crate::error::ContractError;\n"})}),"\n",(0,a.jsx)(n.p,{children:'Place the following in the ibc.rs file. Import all the types needed, set the IBC version to "ns-1" to stand for "nameservice-1", and add the basic validation logic for the contract. You must ensure contracts that try to talk together are verified to work together. This is that logic.'}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/ibc.rs"',children:'// highlight-start\n#[cfg(not(feature = "library"))]\nuse cosmwasm_std::entry_point;\nuse cosmwasm_std::{\n from_json, DepsMut, Env, IbcBasicResponse, IbcChannel, IbcChannelCloseMsg,\n IbcChannelConnectMsg, IbcChannelOpenMsg, IbcChannelOpenResponse, IbcOrder, IbcPacketAckMsg,\n IbcPacketReceiveMsg, IbcPacketTimeoutMsg, IbcReceiveResponse,\n};\n\nuse crate::{\n ack::{make_ack_fail, make_ack_success},\n contract::try_set_name,\n msg::IbcExecuteMsg,\n state::NAME_SERVICE,\n ContractError,\n};\n\npub const IBC_VERSION: &str = "ns-1";\n\npub fn validate_order_and_version(\n channel: &IbcChannel,\n counterparty_version: Option<&str>,\n) -> Result<(), ContractError> {\n // We expect an unordered channel here. Ordered channels have the\n // property that if a message is lost the entire channel will stop\n // working until you start it again.\n if channel.order != IbcOrder::Unordered {\n return Err(ContractError::OrderedChannel {});\n }\n\n if channel.version != IBC_VERSION {\n return Err(ContractError::InvalidVersion {\n actual: channel.version.to_string(),\n expected: IBC_VERSION.to_string(),\n });\n }\n\n // Make sure that we\'re talking with a counterparty who speaks the\n // same "protocol" as us.\n //\n // For a connection between chain A and chain B being established\n // by chain A, chain B knows counterparty information during\n // `OpenTry` and chain A knows counterparty information during\n // `OpenAck`. We verify it when we have it but when we don\'t it\'s\n // alright.\n if let Some(counterparty_version) = counterparty_version {\n if counterparty_version != IBC_VERSION {\n return Err(ContractError::InvalidVersion {\n actual: counterparty_version.to_string(),\n expected: IBC_VERSION.to_string(),\n });\n }\n }\n\n Ok(())\n}\n// highlight-end\n'})}),"\n",(0,a.jsx)(n.p,{children:"The contract verifies data on an attempted open of a new connection. Ensure the contracts talk the same protocol language, and that all the validation basic logic is connect. Then when a channel is closed, clear the data from storage for it. It is very rare you would want to close a channel."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/ibc.rs"',children:'// highlight-start\n/// Handles the `OpenInit` and `OpenTry` parts of the IBC handshake.\n#[cfg_attr(not(feature = "library"), entry_point)]\npub fn ibc_channel_open(\n _deps: DepsMut,\n _env: Env,\n msg: IbcChannelOpenMsg,\n) -> Result {\n validate_order_and_version(msg.channel(), msg.counterparty_version())?;\n Ok(None)\n}\n\n#[cfg_attr(not(feature = "library"), entry_point)]\npub fn ibc_channel_close(\n deps: DepsMut,\n _env: Env,\n msg: IbcChannelCloseMsg,\n) -> Result {\n let channel = msg.channel().endpoint.channel_id.clone();\n NAME_SERVICE.remove(deps.storage, channel.clone());\n Ok(IbcBasicResponse::new()\n .add_attribute("method", "ibc_channel_close")\n .add_attribute("channel", channel))\n}\n// highlight-end\n'})}),"\n",(0,a.jsx)(n.p,{children:"When a successful connection is made, the contract saves a new blank wallet mapping to the channel's unique id. 'channel-0' is the first. All future connections are channel-1, channel-2, etc. This is the first step in the IBC process. The contract is now ready to receive packets once the handler logic is put in place on receive."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/ibc.rs"',children:'// highlight-start\n#[cfg_attr(not(feature = "library"), entry_point)]\npub fn ibc_channel_connect(\n deps: DepsMut,\n _env: Env,\n msg: IbcChannelConnectMsg,\n) -> Result {\n validate_order_and_version(msg.channel(), msg.counterparty_version())?;\n\n let channel = msg.channel().endpoint.channel_id.clone();\n NAME_SERVICE.save(\n deps.storage, channel.clone(), &crate::state::new_wallet_mapping(),\n )?;\n\n Ok(IbcBasicResponse::new()\n .add_attribute("method", "ibc_channel_connect")\n .add_attribute("channel_id", channel))\n}\n// highlight-end\n'})}),"\n",(0,a.jsxs)(n.p,{children:["ibc_packet_receive handles incoming packets from already connected networks. The packet is forwarded to this contract and processed in ",(0,a.jsx)(n.code,{children:"do_ibc_packet_receive"}),". It takes the channel and the packet data ",(0,a.jsx)(n.em,{children:"(the IbcMsg::SetName sent out from the ExecuteMsg earlier)"}),", and tries to set the name on a wallet for this channel. If successful, it returns an acknowledgment of success. If not, it returns an acknowledgment of failure. The user will see this in their log event output."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/ibc.rs"',children:'// highlight-start\n#[cfg_attr(not(feature = "library"), entry_point)]\npub fn ibc_packet_receive(\n deps: DepsMut,\n _env: Env,\n msg: IbcPacketReceiveMsg,\n) -> Result {\n // Regardless of if our processing of this packet works we need to\n // commit an ACK to the chain. As such, we wrap all handling logic\n // in a septate function and on error write out an error ack.\n match do_ibc_packet_receive(deps, msg) {\n Ok(response) => Ok(response),\n Err(error) => Ok(IbcReceiveResponse::new()\n .add_attribute("method", "ibc_packet_receive")\n .add_attribute("error", error.to_string())\n .set_ack(make_ack_fail(error.to_string()))),\n }\n}\n\npub fn do_ibc_packet_receive(\n deps: DepsMut,\n msg: IbcPacketReceiveMsg,\n) -> Result {\n // The channel this packet is being relayed along on this chain.\n let channel = msg.packet.dest.channel_id;\n let msg: IbcExecuteMsg = from_json(&msg.packet.data)?;\n\n match msg {\n IbcExecuteMsg::SetName { wallet, name } => {\n let name = try_set_name(deps, channel, wallet, name)?;\n\n Ok(IbcReceiveResponse::new()\n .add_attribute("method", "execute_increment")\n .add_attribute("name", name)\n .set_ack(make_ack_success()))\n }\n }\n}\n// highlight-end\n'})}),"\n",(0,a.jsx)(n.p,{children:"Sometimes after a failed acknowledgement the contract may want to rollback some data or make note of it for future reference. This contract is simple enough so no rollback or refunds are required. We just return a basic response to the user for both the ack or a timeout. Think of this similarly as a NoOp (no operation)."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-rust",metastring:'title="src/ibc.rs"',children:'// highlight-start\n#[cfg_attr(not(feature = "library"), entry_point)]\npub fn ibc_packet_ack(\n _deps: DepsMut,\n _env: Env,\n _ack: IbcPacketAckMsg,\n) -> Result {\n Ok(IbcBasicResponse::new().add_attribute("method", "ibc_packet_ack"))\n}\n\n#[cfg_attr(not(feature = "library"), entry_point)]\npub fn ibc_packet_timeout(\n _deps: DepsMut,\n _env: Env,\n _msg: IbcPacketTimeoutMsg,\n) -> Result {\n Ok(IbcBasicResponse::new().add_attribute("method", "ibc_packet_timeout"))\n}\n// highlight-end\n'})}),"\n",(0,a.jsx)(n.h2,{id:"build-contract-from-source",children:"Build Contract From Source"}),"\n",(0,a.jsx)(n.p,{children:"The contract can now be compiled from its source into the .wasm file. This is the binary executable that will be uploaded to the chain."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"cargo-run-script optimize\n"})}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h3,{id:"start-the-chains-and-connect",children:"Start the chains and connect"}),"\n",(0,a.jsxs)(n.p,{children:["Make sure you are in the ",(0,a.jsx)(n.code,{children:"cwchain"})," directory to begin interacting and uploading the contract to the chain. It is time to start the cosmwasm chain and launch a testnet that connects to itself. The ",(0,a.jsx)(n.code,{children:"self-ibc"})," chain is automatically generated for you on the creation with spawn. It launches 2 of your networks, localchain-1 and localchain-2, and connects them with a relayer operator at startup."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Build docker image, set configs, keys, and install binary\n#\n# Error 1 (ignored) codes are okay here if you already have\n# the keys and configs setup. If so you only have to `make local-image`\n# in future runs :)\nmake setup-testnet\n\nlocal-ic start self-ibc\n"})}),"\n",(0,a.jsx)(n.h3,{id:"store-the-contract-on-both-chains",children:"Store the Contract on both chains"}),"\n",(0,a.jsxs)(n.p,{children:["Get the ",(0,a.jsx)(n.a,{href:"https://www.techtarget.com/searchapparchitecture/definition/Remote-Procedure-Call-RPC",children:"RPC "})," interaction addresses for each network from the local-interchain testnet API. Upload the contract source to both chains using the different RPC addresses."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'RPC_1=`curl http://127.0.0.1:8080/info | jq -r .logs.chains[0].rpc_address`\nRPC_2=`curl http://127.0.0.1:8080/info | jq -r .logs.chains[1].rpc_address`\necho "Using RPC_1=$RPC_1 and RPC_2=$RPC_2"\n\nCONTRACT_SOURCE=./nameservice-contract/artifacts/nameservice_contract.wasm\nrolld tx wasm store $CONTRACT_SOURCE --from=acc0 --gas=auto --gas-adjustment=2.0 --yes --node=$RPC_1\n# rolld q wasm list-code --node=$RPC_1\n\nrolld tx wasm store $CONTRACT_SOURCE --from=acc0 --gas=auto --gas-adjustment=2.0 --yes --node=$RPC_2 --chain-id=localchain-2\n# rolld q wasm list-code --node=$RPC_2\n'})}),"\n",(0,a.jsx)(n.h3,{id:"instantiate-our-contract-on-both-chains",children:"Instantiate our Contract on both chains"}),"\n",(0,a.jsx)(n.p,{children:"You can now create your contract from the source on each chain."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rolld tx wasm instantiate 1 '{}' --no-admin --from=acc0 --label=\"ns-1\" --gas=auto --gas-adjustment=2.0 --yes --node=$RPC_1\nrolld tx wasm instantiate 1 '{}' --no-admin --from=acc0 --label=\"ns-1\" --gas=auto --gas-adjustment=2.0 --yes --node=$RPC_2 --chain-id=localchain-2\n\nrolld q wasm list-contracts-by-creator roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87\nrolld q wasm list-contracts-by-creator roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87 --node=$RPC_2\n\nNSERVICE_CONTRACT=roll14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjczpjh\n"})}),"\n",(0,a.jsx)(n.h3,{id:"relayer-connect",children:"Relayer connect"}),"\n",(0,a.jsxs)(n.p,{children:["The relayer must now connect the contracts together and create an IBC connection, link, between them. Use the Local-Interchain helper methods to connect the contracts across the chains. This command will take a second then show a bunch of logs. ",(0,a.jsx)(n.code,{children:"Error context canceled"})," is fine to see. You will verify they were opened in the next step."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Import the testnet interaction helper functions\n# for local-interchain\ncurl -s https://raw.githubusercontent.com/strangelove-ventures/interchaintest/main/local-interchain/bash/source.bash > ict_source.bash\nsource ./ict_source.bash\n\nAPI_ADDR="http://localhost:8080"\n\n# This will take a moment.\nICT_RELAYER_EXEC "$API_ADDR" "localchain-1" \\\n "rly tx link localchain-1_localchain-2 --src-port wasm.${NSERVICE_CONTRACT} --dst-port=wasm.${NSERVICE_CONTRACT} --order unordered --version ns-1"\n'})}),"\n",(0,a.jsx)(n.h2,{id:"verify-channels",children:"Verify channels"}),"\n",(0,a.jsx)(n.p,{children:"Verify the channels were created. Query either with the application binary of the relayer itself. If you see both a channel-0 and channel-1 in your logs, it was a success. If you only see channel-0 re-run the above relayer exec tx link command."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# app binary\nrolld q ibc channel channels\n\n# relayer\nICT_RELAYER_EXEC "$API_ADDR" "localchain-1" "rly q channels localchain-1"\n'})}),"\n",(0,a.jsx)(n.h2,{id:"transaction-interaction",children:"Transaction interaction"}),"\n",(0,a.jsx)(n.p,{children:"Using the ExecuteMsg::SetName method, set a name. This will be transferred to chain 2 behind the scenes. Flushing the relayer will force it to auto pick up pending IBC packets and transfer them across. Not running this may take up to 30 seconds for the relayer to automatically pick it up."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# Set the name from chain 1\nMESSAGE=\'{"set_name":{"channel":"channel-1","name":"myname"}}\'\nrolld tx wasm execute $NSERVICE_CONTRACT "$MESSAGE" --from=acc0 --gas=auto --gas-adjustment=2.0 --yes\n\n# This will take a moment\n# \'account sequence mismatch\' errors are fine.\nICT_RELAYER_EXEC "$API_ADDR" "localchain-1" "rly tx flush"\n'})}),"\n",(0,a.jsx)(n.hr,{}),"\n",(0,a.jsx)(n.h3,{id:"verify-data",children:"Verify data"}),"\n",(0,a.jsxs)(n.p,{children:["After the packet is sent over the network, processed, and acknowledged ",(0,a.jsx)(n.em,{children:"(something that can be done in less than 30 seconds)"}),", you can query the data on chain 2. You can also dump all the contract data out to get HEX and BASE64 encoded data for what the contract state storage looks like."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# query the name on chain 2, from chain 1\nrolld q wasm state smart $NSERVICE_CONTRACT \'{"get_name":{"channel":"channel-1","wallet":"roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87"}}\' --node=$RPC_2\n\n# dump contract state from the other chain\nrolld q wasm state all $NSERVICE_CONTRACT --node=$RPC_2\n'})}),"\n",(0,a.jsx)(n.h2,{id:"summary",children:"Summary"}),"\n",(0,a.jsx)(n.p,{children:"You just build an IBC protocol using cosmwasm! It allowed you to set a name on another network entirely and securely with IBC."}),"\n",(0,a.jsx)(n.h2,{id:"what-you-learned",children:"What you Learned"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Scaffolding an CosmWasm contract"}),"\n",(0,a.jsx)(n.li,{children:"Adding business logic for an IBC request"}),"\n",(0,a.jsx)(n.li,{children:"Implementing IBC in a contract"}),"\n",(0,a.jsx)(n.li,{children:"Connecting two CosmWasm contracts with a custom IBC protocol"}),"\n",(0,a.jsx)(n.li,{children:"Sending a packet from contract A to contract B"}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>c});var a=t(7294);const s={},r=a.createContext(s);function c(e){const n=a.useContext(r);return a.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(s):e.components||s:c(e.components),a.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/36759dfc.8a0d5220.js b/assets/js/36759dfc.8a0d5220.js new file mode 100644 index 00000000..8fe28880 --- /dev/null +++ b/assets/js/36759dfc.8a0d5220.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[599],{5672:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>c,default:()=>l,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var o=t(5893),s=t(1151);const r={slug:"/",sidebar_position:0},c="Unreleased Docs Here",i={id:"intro",title:"Unreleased Docs Here",description:"",source:"@site/docs/00-intro.md",sourceDirName:".",slug:"/",permalink:"/spawn/main/",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:0,frontMatter:{slug:"/",sidebar_position:0},sidebar:"defaultSidebar"},a={},d=[];function u(e){const n={h1:"h1",...(0,s.a)(),...e.components};return(0,o.jsx)(n.h1,{id:"unreleased-docs-here",children:"Unreleased Docs Here"})}function l(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(u,{...e})}):u(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>c});var o=t(7294);const s={},r=o.createContext(s);function c(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(s):e.components||s:c(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/443.6f81f902.js b/assets/js/443.6f81f902.js new file mode 100644 index 00000000..6002b020 --- /dev/null +++ b/assets/js/443.6f81f902.js @@ -0,0 +1,2 @@ +/*! For license information please see 443.6f81f902.js.LICENSE.txt */ +(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[443],{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"

"+e(t)+"

"}}(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('
'),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._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{"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{"use strict";t.exports={wrapper:'',dropdown:'',dataset:'
',suggestions:'',suggestion:'
'}},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('').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||"";var i=document.createElement("div");i.appendChild(document.createTextNode(e)),n=n||"";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{"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")),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=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;h126){if(d>=55296&&d<=56319&&h{"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&&++a1)for(var n=1;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/443.6f81f902.js.LICENSE.txt b/assets/js/443.6f81f902.js.LICENSE.txt new file mode 100644 index 00000000..4f7ccd8a --- /dev/null +++ b/assets/js/443.6f81f902.js.LICENSE.txt @@ -0,0 +1 @@ +/*! https://mths.be/cssesc v3.0.0 by @mathias */ diff --git a/assets/js/525.35e30ac6.js b/assets/js/525.35e30ac6.js new file mode 100644 index 00000000..502fc4fa --- /dev/null +++ b/assets/js/525.35e30ac6.js @@ -0,0 +1 @@ +(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[525],{5525:()=>{}}]); \ No newline at end of file diff --git a/assets/js/58117f0d.4e6d62b2.js b/assets/js/58117f0d.4e6d62b2.js new file mode 100644 index 00000000..0c0dc204 --- /dev/null +++ b/assets/js/58117f0d.4e6d62b2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[451],{4938:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>r});var s=t(5893),a=t(1151);const l={title:"Install Spawn",sidebar_label:"Install Spawn",sidebar_position:2,slug:"/install/install-spawn"},o="Overview",i={id:"setup/install-spawn",title:"Install Spawn",description:"Install the Spawn CLI tool to your local machine",source:"@site/versioned_docs/version-v0.50.x/01-setup/02-install-spawn.md",sourceDirName:"01-setup",slug:"/install/install-spawn",permalink:"/spawn/v0.50/install/install-spawn",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:2,frontMatter:{title:"Install Spawn",sidebar_label:"Install Spawn",sidebar_position:2,slug:"/install/install-spawn"},sidebar:"defaultSidebar",previous:{title:"System Setup",permalink:"/spawn/v0.50/install/system-setup"},next:{title:"Debugging",permalink:"/spawn/v0.50/install/debugging"}},c={},r=[{value:"Install Spawn",id:"install-spawn",level:2}];function p(n){const e={admonition:"admonition",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,a.a)(),...n.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.h1,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(e.admonition,{title:"Synopsis",type:"note",children:(0,s.jsx)(e.p,{children:"Install the Spawn CLI tool to your local machine"})}),"\n",(0,s.jsx)(e.h2,{id:"install-spawn",children:"Install Spawn"}),"\n",(0,s.jsx)(e.p,{children:"Install Spawn from source."}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-bash",children:"# Install from latest source\ngit clone https://github.com/rollchains/spawn.git --depth 1 --branch v0.50.8\n\n# Change to this directory\ncd spawn\n\n# Clear Go modules cache for a fresh install\ngo clean -modcache\n\n# Install Spawn\nmake install\n\n# Install Local Interchain (testnet runner)\nmake get-localic\n\n# Verify installations were successful\nspawn\n\nlocal-ic\n\n# If you get \"command 'spawn' not found\", run the following\n# Linux / Windows / Some MacOS\necho 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.bashrc\nsource ~/.bashrc\n\n# MacOS\necho 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.zshrc\nsource ~/.zshrc\n\n# Legacy MacOS Go\necho 'export PATH=$PATH:$HOME/go/bin' >> ~/.zshrc\nsource ~/.zshrc\n\n# Sometimes it can be good to also clear your cache\n# especially WSL users\ngo clean -cache\n"})})]})}function u(n={}){const{wrapper:e}={...(0,a.a)(),...n.components};return e?(0,s.jsx)(e,{...n,children:(0,s.jsx)(p,{...n})}):p(n)}},1151:(n,e,t)=>{t.d(e,{Z:()=>i,a:()=>o});var s=t(7294);const a={},l=s.createContext(a);function o(n){const e=s.useContext(l);return s.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function i(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(a):n.components||a:o(n.components),s.createElement(l.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/590f8f60.193427ae.js b/assets/js/590f8f60.193427ae.js new file mode 100644 index 00000000..20d55310 --- /dev/null +++ b/assets/js/590f8f60.193427ae.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[490],{7268:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var i=n(5893),o=n(1151);const s={title:"Name Service",sidebar_label:"Configure Client",sidebar_position:4,slug:"/build/name-service-client"},a="Command Line Client",r={id:"build-your-application/cli",title:"Name Service",description:"Using the Cosmos-SDKs AutoCLI, you will easily set up the CLI client for transactions and queries.",source:"@site/versioned_docs/version-v0.50.x/02-build-your-application/04-cli.md",sourceDirName:"02-build-your-application",slug:"/build/name-service-client",permalink:"/spawn/v0.50/build/name-service-client",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:4,frontMatter:{title:"Name Service",sidebar_label:"Configure Client",sidebar_position:4,slug:"/build/name-service-client"},sidebar:"defaultSidebar",previous:{title:"Application Logic",permalink:"/spawn/v0.50/build/name-service-application"},next:{title:"Testnet",permalink:"/spawn/v0.50/build/name-service-testnet"}},c={},l=[{value:"Query",id:"query",level:3},{value:"Transaction",id:"transaction",level:3}];function d(t){const e={code:"code",h1:"h1",h3:"h3",img:"img",p:"p",pre:"pre",...(0,o.a)(),...t.components},{Details:n}=e;return n||function(t,e){throw new Error("Expected "+(e?"component":"object")+" `"+t+"` to be defined: you likely forgot to import, pass, or provide it.")}("Details",!0),(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(e.h1,{id:"command-line-client",children:"Command Line Client"}),"\n",(0,i.jsx)(e.p,{children:"Using the Cosmos-SDKs AutoCLI, you will easily set up the CLI client for transactions and queries."}),"\n",(0,i.jsx)(e.h3,{id:"query",children:"Query"}),"\n",(0,i.jsx)(e.p,{children:"Update the autocli to allow someone to get the name of a wallet account."}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-go",metastring:'title="x/nameservice/autocli.go"',children:'\t\tQuery: &autocliv1.ServiceCommandDescriptor{\n Service: modulev1.Query_ServiceDesc.ServiceName,\n\t\t\tRpcCommandOptions: []*autocliv1.RpcCommandOptions{\n\t\t\t\t// highlight-start\n\t\t\t\t{\n\t\t\t\t\tRpcMethod: "ResolveName",\n\t\t\t\t\tUse: "resolve [wallet]",\n\t\t\t\t\tShort: "Resolve the name of a wallet address",\n\t\t\t\t\tPositionalArgs: []*autocliv1.PositionalArgDescriptor{\n\t\t\t\t\t\t{ProtoField: "wallet"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// highlight-end\n\t\t\t\t{\n\t\t\t\t\tRpcMethod: "Params",\n\t\t\t\t\tUse: "params",\n\t\t\t\t\tShort: "Query the current module parameters",\n\t\t\t\t},\n \t\t},\n \t},\n'})}),"\n",(0,i.jsxs)(n,{children:[(0,i.jsx)("summary",{children:"AutoCLI Query"}),(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{src:"https://github.com/rollchains/spawn/assets/31943163/fefe8c7d-88b5-42d5-afd9-cb33cd22df16",alt:"AutoCLI Query"})})]}),"\n",(0,i.jsx)(e.h3,{id:"transaction",children:"Transaction"}),"\n",(0,i.jsxs)(e.p,{children:["Also add interaction in ",(0,i.jsx)(e.code,{children:"x/nameservice/autocli.go"})," to set the name of a wallet account."]}),"\n",(0,i.jsx)(e.pre,{children:(0,i.jsx)(e.code,{className:"language-go",metastring:'title="x/nameservice/autocli.go"',children:'\t\tTx: &autocliv1.ServiceCommandDescriptor{\n\t\t\tService: modulev1.Msg_ServiceDesc.ServiceName,\n\t\t\tRpcCommandOptions: []*autocliv1.RpcCommandOptions{\n\t\t\t\t// highlight-start\n\t\t\t\t{\n\t\t\t\t\tRpcMethod: "SetServiceName",\n\t\t\t\t\tUse: "set [name]",\n\t\t\t\t\tShort: "Set the mapping to your wallet address",\n\t\t\t\t\tPositionalArgs: []*autocliv1.PositionalArgDescriptor{\n\t\t\t\t\t\t{ProtoField: "name"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// highlight-end\n {\n\t\t\t\t\t// NOTE: this is already included in the current source\n\t\t\t\t\tRpcMethod: "UpdateParams",\n\t\t\t\t\tSkip: false,\n\t\t\t\t},\n\t\t\t},\n\t\t},\n'})}),"\n",(0,i.jsxs)(n,{children:[(0,i.jsx)("summary",{children:"AutoCLI Tx"}),(0,i.jsx)(e.p,{children:(0,i.jsx)(e.img,{src:"https://github.com/rollchains/spawn/assets/31943163/e945c898-415c-4d22-8bb3-b8af34a44cee",alt:"AutoCLI Tx"})})]})]})}function u(t={}){const{wrapper:e}={...(0,o.a)(),...t.components};return e?(0,i.jsx)(e,{...t,children:(0,i.jsx)(d,{...t})}):d(t)}},1151:(t,e,n)=>{n.d(e,{Z:()=>r,a:()=>a});var i=n(7294);const o={},s=i.createContext(o);function a(t){const e=i.useContext(s);return i.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function r(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(o):t.components||o:a(t.components),i.createElement(s.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/5e95c892.44330d62.js b/assets/js/5e95c892.44330d62.js new file mode 100644 index 00000000..3e499591 --- /dev/null +++ b/assets/js/5e95c892.44330d62.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[661],{1892:(e,s,r)=>{r.r(s),r.d(s,{default:()=>l});r(7294);var c=r(512),u=r(1944),a=r(5281),d=r(8790),n=r(8862),t=r(5893);function l(e){return(0,t.jsx)(u.FG,{className:(0,c.Z)(a.k.wrapper.docsPages),children:(0,t.jsx)(n.Z,{children:(0,d.H)(e.route.routes)})})}}}]); \ No newline at end of file diff --git a/assets/js/675ad4a5.48014bca.js b/assets/js/675ad4a5.48014bca.js new file mode 100644 index 00000000..abdb5674 --- /dev/null +++ b/assets/js/675ad4a5.48014bca.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[719],{1123:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=o(5893),s=o(1151);const i={title:"Network Security",sidebar_label:"Network Security Types",slug:"/learn/consensus-security"},r="Network Security Types",a={id:"learn/consensus-algos",title:"Network Security",description:"Prerequisites",source:"@site/versioned_docs/version-v0.50.x/04-learn/01-consensus-algos.md",sourceDirName:"04-learn",slug:"/learn/consensus-security",permalink:"/spawn/v0.50/learn/consensus-security",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:1,frontMatter:{title:"Network Security",sidebar_label:"Network Security Types",slug:"/learn/consensus-security"},sidebar:"defaultSidebar",previous:{title:"CosmWasm Validator Reviews",permalink:"/spawn/v0.50/demo/cw-validator-reviews"}},l={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Choose for me (TLDR)",id:"choose-for-me-tldr",level:2},{value:"Proof of Authority (PoA)",id:"proof-of-authority-poa",level:2},{value:"Default",id:"default",level:3},{value:"What it does",id:"what-it-does",level:3},{value:"Create a PoA network",id:"create-a-poa-network",level:3},{value:"Considerations",id:"considerations",level:3},{value:"Benefits",id:"benefits",level:4},{value:"Downsides",id:"downsides",level:4},{value:"Proof of Stake (PoS)",id:"proof-of-stake-pos",level:2},{value:"What it does",id:"what-it-does-1",level:3},{value:"Create a PoS network",id:"create-a-pos-network",level:3},{value:"Considerations",id:"considerations-1",level:3},{value:"Benefits",id:"benefits-1",level:4},{value:"Downsides",id:"downsides-1",level:4},{value:"Interchain Security (ICS)",id:"interchain-security-ics",level:2},{value:"What it does",id:"what-it-does-2",level:3},{value:"Create an ICS Consumer network",id:"create-an-ics-consumer-network",level:3},{value:"Considerations",id:"considerations-2",level:3},{value:"Benefits",id:"benefits-2",level:4},{value:"Downsides",id:"downsides-2",level:4},{value:"Conclusion",id:"conclusion",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"network-security-types",children:"Network Security Types"}),"\n",(0,t.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/spawn/v0.50/install/system-setup",children:"System Setup"})}),"\n",(0,t.jsx)(n.li,{children:(0,t.jsx)(n.a,{href:"/spawn/v0.50/install/install-spawn",children:"Install Spawn"})}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Learn about the different network security methods you can create with spawn and the different pros and cons of each. These are called ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Consensus_(computer_science)",children:"consensus algorithms"})," and are how the network agrees on what actions get put through, and which are rejected."]}),"\n",(0,t.jsx)(n.admonition,{title:"Danger",type:"note",children:(0,t.jsx)(n.p,{children:"This topic is a little more advanced due to technical speak. It is condensed to as a high level of an overview as possible. Please contribute if you can make it more accessible to average readers."})}),"\n",(0,t.jsx)(n.h2,{id:"choose-for-me-tldr",children:"Choose for me (TLDR)"}),"\n",(0,t.jsxs)(n.p,{children:["If you just want to build an application and don't want to focus on tokenomics or game theory, use ",(0,t.jsx)(n.a,{href:"#proof-of-authority-poa",children:"proof of authority"}),". If a token is part of your product or required to financially reward users with some lock mechanism and long term incentives, use ",(0,t.jsx)(n.a,{href:"#proof-of-stake-pos",children:"proof of stake"}),". If you have plans for a large amount of value to be secured or don't want to run your own network nodes, use ",(0,t.jsx)(n.a,{href:"#interchain-security-ics",children:"interchain security"}),"."]}),"\n",(0,t.jsx)(n.h2,{id:"proof-of-authority-poa",children:"Proof of Authority (PoA)"}),"\n",(0,t.jsx)(n.h3,{id:"default",children:"Default"}),"\n",(0,t.jsxs)(n.p,{children:["If you do not know which security module best fits for you, use this one. The source code for this feature can be found ",(0,t.jsx)(n.a,{href:"https://github.com/strangelove-ventures/poa",children:"here"}),". The most popular example of this security model is ",(0,t.jsx)(n.a,{href:"https://www.circle.com/en/",children:"Circle's"})," USDC issuance network, ",(0,t.jsx)(n.a,{href:"https://www.noble.xyz/",children:"Noble"})," (",(0,t.jsx)(n.a,{href:"https://twitter.com/noble_xyz",children:"twitter"}),")."]}),"\n",(0,t.jsx)(n.h3,{id:"what-it-does",children:"What it does"}),"\n",(0,t.jsxs)(n.p,{children:["If you have an application and you want the network to run as efficiently as possible with a trusted set of internal nodes or external trusted 3 parties (validators), use ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Proof_of_authority",children:"Proof of Authority"}),"."]}),"\n",(0,t.jsx)(n.h3,{id:"create-a-poa-network",children:"Create a PoA network"}),"\n",(0,t.jsxs)(n.p,{children:["To create a new network with proof-of-authority, use the ",(0,t.jsx)(n.code,{children:"--consensus=proof-of-authority"})," flag. If ",(0,t.jsx)(n.code,{children:"--consensus"})," is not present, a selector UI will appear in your terminal to see all options."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"-> $ spawn new mychain\nConsensus Selector (( enter to toggle ))\n Done\n \u2714 proof-of-authority\n proof-of-stake\n interchain-security\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"spawn new rollchain \\\n --consensus=proof-of-authority \\\n --disabled=cosmwasm,block-explorer\n"})}),"\n",(0,t.jsx)(n.h3,{id:"considerations",children:"Considerations"}),"\n",(0,t.jsx)(n.h4,{id:"benefits",children:"Benefits"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Fast Transactions: Fewer people need to agree, so it can process transactions very quickly."}),"\n",(0,t.jsx)(n.li,{children:"Less Power Usage: Doesn\u2019t require much electricity, making it more eco-friendly."}),"\n",(0,t.jsx)(n.li,{children:"Easy to Maintain: Only a few trusted people are in charge, making it simpler to run."}),"\n",(0,t.jsx)(n.li,{children:"Stable Performance: Because only a few people make decisions, things tend to run smoothly and predictably."}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"downsides",children:"Downsides"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Centralized Control: A small group of people are in charge, which can lead to concerns about too much power in one place."}),"\n",(0,t.jsx)(n.li,{children:"Requires Trust: You have to trust the people in charge to make fair decisions, which can be risky."}),"\n",(0,t.jsx)(n.li,{children:"Less Diversity: Having fewer people in control means less variety in opinions and locations, which might be a problem if those people get compromised."}),"\n",(0,t.jsx)(n.li,{children:"Less Community Involvement: Regular users don\u2019t have much of a role in helping the system, so it feels less like a community effort."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"proof-of-stake-pos",children:"Proof of Stake (PoS)"}),"\n",(0,t.jsx)(n.h3,{id:"what-it-does-1",children:"What it does"}),"\n",(0,t.jsxs)(n.p,{children:["You can have the value of a network back itself by users risking their own tokens to prove they are trustworthy. This is called ",(0,t.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Proof_of_stake",children:"Proof of Stake"}),". Believers in an application lock their tokens to earn a small portion of rewards, similar to a bank account. However, if they misbehave by trying to cheat the system or submit bad actions, the network will take a portion of their value (usually 5 - 10%) as a penalty."]}),"\n",(0,t.jsx)(n.p,{children:"This security type is useful when you want a more distributed network that can be run by anyone with some holdings in the network. It is a trustless way to secure a network and the most popular security model in the ecosystem currently (Sept 2024)."}),"\n",(0,t.jsx)(n.h3,{id:"create-a-pos-network",children:"Create a PoS network"}),"\n",(0,t.jsxs)(n.p,{children:["To create a new network with proof-of-stake, use the ",(0,t.jsx)(n.code,{children:"--consensus=proof-of-stake"})," flag. If ",(0,t.jsx)(n.code,{children:"--consensus"})," is not present, a selector UI will appear in your terminal to see all options."]}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"-> $ spawn new mychain\nConsensus Selector (( enter to toggle ))\n Done\n proof-of-authority\n \u2714 proof-of-stake\n interchain-security\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"spawn new rollchain \\\n --consensus=proof-of-stake \\\n --disabled=cosmwasm,block-explorer\n"})}),"\n",(0,t.jsx)(n.h3,{id:"considerations-1",children:"Considerations"}),"\n",(0,t.jsx)(n.h4,{id:"benefits-1",children:"Benefits"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"More People Involved: Anyone can participate if they\u2019re willing to invest, which makes the system feel more balanced and community-driven."}),"\n",(0,t.jsx)(n.li,{children:"Eco-Friendly: Like PoA, PoS doesn\u2019t use much electricity, making it good for the environment."}),"\n",(0,t.jsx)(n.li,{children:"More Fairness: The system allows many people to help make decisions, reducing the chance of one group having too much control."}),"\n",(0,t.jsx)(n.li,{children:"Grows with the Community: More people can get involved as the system grows, making it scalable and inclusive."}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"downsides-1",children:"Downsides"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Slower Decision Making: Because more people are involved, it can take longer to reach a decision due to governance and politics"}),"\n",(0,t.jsx)(n.li,{children:"Wealthy Have More Power: The more you invest, the more influence you have, which can lead to rich people having more control."}),"\n",(0,t.jsx)(n.li,{children:"Complex to Get Started: It can be harder for someone new to understand how to participate compared to systems with fewer decision-makers."}),"\n",(0,t.jsx)(n.li,{children:"Risk of Losing Investment: If you make a mistake or act dishonestly, you could lose your money, which adds some financial risk."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"interchain-security-ics",children:"Interchain Security (ICS)"}),"\n",(0,t.jsx)(n.h3,{id:"what-it-does-2",children:"What it does"}),"\n",(0,t.jsxs)(n.p,{children:["Interchain security shares the economic proof of stake security of a larger parent provider with a sub network, called a consumer ",(0,t.jsx)(n.em,{children:"(since they consume security)"}),". This is useful when you want to create a new network that is secure from day one, without having to bootstrap a new set of network operators and validators, and have alignment with the parent. Current networks utilizing this are ",(0,t.jsx)(n.a,{href:"https://cosmos.network/interchain-security/",children:"CosmosHub"}),", ",(0,t.jsx)(n.a,{href:"https://www.stride.zone/",children:"Stride"}),", and ",(0,t.jsx)(n.a,{href:"https://www.neutron.org/",children:"Lido's Neutron"}),". If you are from ethereum, this is similar to an ",(0,t.jsx)(n.a,{href:"https://app.eigenlayer.xyz/avs",children:"Actively Validated Services (AVS) on Eigenlayer"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"The cost of running these networks is relatively low as you just pay a portion of your networks fees. This is a great way to take an application from a testnet to a mainnet with a trusted security model, especially if your application deals with a lot of possible monetary value. To compromise the network, an attacker would have to compromise the more secure parent network, which is a very high bar."}),"\n",(0,t.jsx)(n.h3,{id:"create-an-ics-consumer-network",children:"Create an ICS Consumer network"}),"\n",(0,t.jsxs)(n.p,{children:["To create a new network with interchain-security, use the ",(0,t.jsx)(n.code,{children:"--consensus=interchain-security"})," flag. If ",(0,t.jsx)(n.code,{children:"--consensus"})," is not present, a selector UI will appear in your terminal to see all options."]}),"\n",(0,t.jsx)(n.p,{children:"::note Note\nSpawn does not support creating provider networks.\n:::"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"-> $ spawn new mychain\nConsensus Selector (( enter to toggle ))\n Done\n proof-of-authority\n proof-of-stake\n \u2714 interchain-security\n"})}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"spawn new rollchain \\\n --consensus=interchain-security \\\n --disabled=cosmwasm,block-explorer\n"})}),"\n",(0,t.jsx)(n.h3,{id:"considerations-2",children:"Considerations"}),"\n",(0,t.jsx)(n.h4,{id:"benefits-2",children:"Benefits"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"No Need for Consumer Chain to Build Its Own Security: The smaller or newer chain doesn't have to recruit its own set of people to protect it. It automatically benefits from the protection of the parent network, saving time and effort."}),"\n",(0,t.jsx)(n.li,{children:"Easier Node Bootstrapping: Since the parent network provides the security, the consumer chain doesn\u2019t have to build a large number of participants to protect the system from scratch. This makes launching a new chain much faster and easier."}),"\n",(0,t.jsx)(n.li,{children:"Shared Trust: By using the same security as a well-known, established chain, the consumer chain inherits the trust and credibility of the parent network, making it more appealing to users and developers."}),"\n",(0,t.jsx)(n.li,{children:"Aligned Interests: Since the parent network's security also protects the consumer chain, both chains have an interest in maintaining a secure, well-functioning system. This alignment reduces the risk of conflicts between the two."}),"\n"]}),"\n",(0,t.jsx)(n.h4,{id:"downsides-2",children:"Downsides"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Dependence on Parent Network: The consumer chain becomes dependent on the parent network. If something goes wrong with the parent network\u2019s security or operations, the consumer chain is also affected, even if it is unrelated to the issue."}),"\n",(0,t.jsx)(n.li,{children:"Limited Autonomy: The consumer chain may have less control over its own security decisions, since it\u2019s tied to the security model of the parent network. This could limit flexibility in responding to specific needs or changes."}),"\n",(0,t.jsx)(n.li,{children:"Potential Congestion: If many consumer chains share the same parent network, the shared security system might become congested or stretched thin, leading to slower response times or performance issues."}),"\n",(0,t.jsx)(n.li,{children:"Complexity in Governance: Any changes to the shared security might require coordination between both the parent network and the consumer chain, adding complexity to decision-making and governance."}),"\n",(0,t.jsx)(n.li,{children:"Risk of Centralization: The reliance on a single parent network\u2019s security model might lead to centralization, where a handful of large chains dominate the ecosystem. This reduces the diversity of security models and could concentrate power."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,t.jsx)(n.p,{children:"You have now learned about different network security types, how to select different ones, and the pros and cons of each. You can now create a new chain with the security model that best fits your application's needs."})]})}function d(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},1151:(e,n,o)=>{o.d(n,{Z:()=>a,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 a(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/6c1d4545.9e6f7dc7.js b/assets/js/6c1d4545.9e6f7dc7.js new file mode 100644 index 00000000..446dc46c --- /dev/null +++ b/assets/js/6c1d4545.9e6f7dc7.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[316],{650:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var s=t(5893),i=t(1151);const o={slug:"/",sidebar_position:0,title:"Meet Spawn",sidebar_label:"Spawn Documentation"},a=void 0,r={id:"meet-spawn",title:"Meet Spawn",description:"Spawn is the easiest way to build, maintain and scale a Cosmos SDK blockchain. Spawn solves all the key pain points engineers face when building new Cosmos-SDK networks.",source:"@site/versioned_docs/version-v0.50.x/00-meet-spawn.md",sourceDirName:".",slug:"/",permalink:"/spawn/v0.50/",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:0,frontMatter:{slug:"/",sidebar_position:0,title:"Meet Spawn",sidebar_label:"Spawn Documentation"},sidebar:"defaultSidebar",next:{title:"System Setup",permalink:"/spawn/v0.50/install/system-setup"}},l={},c=[{value:"NameService Demo",id:"nameservice-demo",level:2},{value:"Testimonials",id:"testimonials",level:2},{value:"Spawn Overview",id:"spawn-overview",level:2},{value:"New Development",id:"new-development",level:2},{value:"Security Selection",id:"security-selection",level:3},{value:"Feature Selection",id:"feature-selection",level:3},{value:"Structure",id:"structure",level:2},{value:".github/",id:"github",level:3},{value:"app/",id:"app",level:3},{value:"chains/",id:"chains",level:3},{value:"cmd/",id:"cmd",level:3},{value:"explorer/",id:"explorer",level:3},{value:"interchaintest/",id:"interchaintest",level:3},{value:"proto/",id:"proto",level:3},{value:"scripts/",id:"scripts",level:3},{value:"chain_metadata.json",id:"chain_metadatajson",level:3},{value:"chain_registry.json & assets",id:"chain_registryjson--assets",level:3},{value:"Modules",id:"modules",level:2},{value:"Testnets",id:"testnets",level:2}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h2:"h2",h3:"h3",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"Spawn is the easiest way to build, maintain and scale a Cosmos SDK blockchain. Spawn solves all the key pain points engineers face when building new Cosmos-SDK networks."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Tailor-fit"}),": Pick and choose modules to create a network for your needs."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Commonality"}),": Use native Cosmos tools and standards you're already familiar with."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Integrations"}),": Github actions and end-to-end testing are configured right from the start."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"Iteration"}),": Quickly test between your new chain and established networks like the local Cosmos-Hub devnet."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"nameservice-demo",children:"NameService Demo"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"/spawn/v0.50/build/name-service",children:"Follow Along with the NameService demo"})}),"\n",(0,s.jsx)("video",{src:"https://github.com/rollchains/spawn/assets/31943163/ecc21ce4-c42c-4ff2-8e73-897c0ede27f0",width:"100%",height:"100%",controls:!0}),"\n",(0,s.jsx)(n.h2,{id:"testimonials",children:"Testimonials"}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.p,{children:['"Spawn is a marked transformation in CosmosSDK protocol development, allowing scaffolding and upgrading from 0.47 to 0.50 to be achievable and understandable. Without the tool, this would have been a dedicated multi-month effort" - Ash, ',(0,s.jsx)(n.a,{href:"https://twitter.com/burnt_xion",children:"Burnt.com"})]}),"\n"]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.p,{children:['"Spawn has truly streamlined the developer onboarding process into the Cosmos ecosystem, seamless and efficient." - ',(0,s.jsx)(n.a,{href:"https://x.com/anilcse_/status/1840444855576846355",children:"Anil"})," ",(0,s.jsx)(n.a,{href:"https://www.vitwit.com/",children:"VitWit"})]}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"spawn-overview",children:"Spawn Overview"}),"\n",(0,s.jsx)(n.p,{children:"Setting up a new blockchain used to take at least a week, requiring manual edits, debugging, and configuring tests. Now, with Spawn, you can create a custom network in just a few clicks. It generates a personalized network tailored to your project, letting you focus on writing product logic. The modular approach allows you to include or remove features, so you can start building quickly without the hassle of setting up everything from scratch. Spawn simplifies the process, especially for new developers, by removing guesswork and speeding up the setup."}),"\n",(0,s.jsx)(n.h2,{id:"new-development",children:"New Development"}),"\n",(0,s.jsxs)(n.p,{children:["Get started building using the ",(0,s.jsx)(n.code,{children:"new-chain"})," command. Spawn will guide you through the process of selecting the modules you need and configuring your new chain. Using ",(0,s.jsx)(n.code,{children:"--help"})," will showcase examples and other options you may want to consider for your new network."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"spawn new mychain --help\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'Create a new project\n\nUsage:\n spawn new-chain [project-name] [flags]\n\nAliases:\n new-chain, new, init, create\n\nFlags:\n -b, --binary string Application binary name (default "simd")\n --bypass-prompt Bypass UI prompter\n --denom string Bank token denomination (default "token")\n --org string Github organization name (default "rollchains")\n --skip-git No git repository created\n --wallet-prefix string Users wallet namespace (default "cosmos")\n'})}),"\n",(0,s.jsx)(n.h3,{id:"security-selection",children:"Security Selection"}),"\n",(0,s.jsxs)(n.p,{children:["You can read about different security models in the ",(0,s.jsx)(n.a,{href:"/spawn/v0.50/learn/consensus-security",children:"Consensus Security"})," section. If you don't know which to select, use proof of authority."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"spawn new mychain\n"})}),"\n",(0,s.jsx)(n.p,{children:"After running the new command, navigate with your arrow keys and press 'enter' to select the module you want to use. You can only use 1 from this consensus list. Then select done."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"Consensus Selector (( enter to toggle ))\n Done\n \u2714 proof-of-authority\n proof-of-stake\n interchain-security\n"})}),"\n",(0,s.jsx)(n.h3,{id:"feature-selection",children:"Feature Selection"}),"\n",(0,s.jsxs)(n.p,{children:["You now select which features you want to include in your base application. Usually you would have to do these manually, each taking about 15 minutes to integrate. With spawn, you select them right away. It automatically configures them ",(0,s.jsx)(n.strong,{children:"and"})," give you testing for the assurance it works."]}),"\n",(0,s.jsx)(n.p,{children:"An information guide will be displayed for each feature at the bottom of the UI, sharing information about what the feature does. Select the following then press 'enter' on done to continue."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"Feature Selector (( enter to toggle ))\n Done\n \u2714 tokenfactory\n \u2714 ibc-packetforward\n \u2714 ibc-ratelimit\n cosmwasm\n wasm-light-client\n \u2714 optimistic-execution\n \u2714 block-explorer\ntokenfactory: Native token minting, sending, and burning on the chain\n"})}),"\n",(0,s.jsx)(n.p,{children:"Just like that, an entire network is generated. Everything you need to get started and more! Let's dive in."}),"\n",(0,s.jsx)(n.h2,{id:"structure",children:"Structure"}),"\n",(0,s.jsxs)(n.p,{children:["Opening up this newly generated ",(0,s.jsx)(n.code,{children:"mychain/"})," gives you a general view into the entire layout."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",metastring:'title="ls -laG"',children:".github/\napp/\nchains/\ncmd/\ncontrib/\nexplorer/\ninterchaintest/\nproto/\nscripts/\n\n.gitignore\n.goreleaser.yaml\nchain_metadata.json\nchain_registry_assets.json\nchain_registry.json\nchains.yaml\ndocker-compose.yml\nDockerfile\ngo.mod\ngo.sum\nMakefile\nREADME.md\n"})}),"\n",(0,s.jsx)(n.h3,{id:"github",children:".github/"}),"\n",(0,s.jsx)(n.p,{children:"This directory contains all the workflow actions for native github integration out of the box. It handles"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Integration & Unit tests for every code change"}),"\n",(0,s.jsxs)(n.li,{children:["Docker images saved to ",(0,s.jsx)(n.a,{href:"https://github.com/features/packages",children:"ghcr"})," on a new version tag"]}),"\n",(0,s.jsx)(n.li,{children:"Public cloud or private hosted testnets"}),"\n",(0,s.jsx)(n.li,{children:"App binary releases"}),"\n",(0,s.jsx)(n.li,{children:"PR title formatting"}),"\n",(0,s.jsx)(n.li,{children:"Markdown file valid link reviews"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"app",children:"app/"}),"\n",(0,s.jsx)(n.p,{children:"App is the main location for all of the application connection logic."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"decorators/"})," - Initial logic as new transactions are received. Used to override input data, block requests, or add additional logic before the action begins initial processing."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"upgrades/"})," - You have to run an upgrade when you add or remove logic and nodes are already running different logic. This is where you put the upgrade information and state migrations."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"ante.go"})," - The decorators for the entire network, wired together."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"app.go"})," - The entire application connected and given access to the cosmos-sdk. The brain of the program."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"upgrades.go"})," - Registers the upgrades/ folder logic when one is pending processing."]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"chains",children:"chains/"}),"\n",(0,s.jsxs)(n.p,{children:["The chains/ directory is where the local and public testnet configuration files are placed. Reference the ",(0,s.jsx)(n.a,{href:"#testnets",children:"testnets"})," section for more information"]}),"\n",(0,s.jsx)(n.h3,{id:"cmd",children:"cmd/"}),"\n",(0,s.jsxs)(n.p,{children:["The cmd/ directory is the entry point for the wiring connections and is where the main.go file is located. This is where the application is started and the chain is initialized when you run the binary. By default, ",(0,s.jsx)(n.code,{children:"simd"})," is the binary name and is saved to your $GOPATH (/home/user/go/bin/)."]}),"\n",(0,s.jsx)(n.h3,{id:"explorer",children:"explorer/"}),"\n",(0,s.jsxs)(n.p,{children:["If you enabled the explorer in the feature selection, this is where the ",(0,s.jsx)(n.a,{href:"https://ping.pub/",children:"ping.pub"})," explorer files are located. When running a testnet with ",(0,s.jsx)(n.code,{children:"make sh-testnet"})," or ",(0,s.jsx)(n.code,{children:"make testnet"}),", you can launch the explorer along side the chain to view activity in real time. Blocks, transactions, uptime, connections, and more are all viewable. Easily launch it with the ",(0,s.jsx)(n.code,{children:"docker compose up"})," command in the root of the directory."]}),"\n",(0,s.jsx)(n.h3,{id:"interchaintest",children:"interchaintest/"}),"\n",(0,s.jsxs)(n.p,{children:["Interchaintest is a generalized integration test environment for the Interchain and beyond. It supports Cosmos, Ethereum, UTXO (Bitcoin), and other chain types. By default you will see many test like ",(0,s.jsx)(n.code,{children:"ibc_test.go"}),", ",(0,s.jsx)(n.code,{children:"ibc_rate_limit_test.go"})," and ",(0,s.jsx)(n.code,{children:"tokenfactory_test.go"})," after generation. Any features you select are placed here automatically to confirm your network is working as expected. This are run with the github action automatically on every code change ",(0,s.jsx)(n.strong,{children:"or"})," you can run them manually with ",(0,s.jsx)(n.code,{children:"make local-image && make ictest-*"}),", where the * is the testname ",(0,s.jsx)(n.em,{children:"(ictest-ibc, ictest-tokenfactory, etc)"}),"."]}),"\n",(0,s.jsx)(n.h3,{id:"proto",children:"proto/"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://protobuf.dev/",children:"Proto, also called protocol buffers"}),", are a generalized way to define the structure of data. Discussed this more in the ",(0,s.jsx)(n.a,{href:"#modules",children:"Modules"})," sub section."]}),"\n",(0,s.jsx)(n.h3,{id:"scripts",children:"scripts/"}),"\n",(0,s.jsxs)(n.p,{children:["Scripts automate some more complex requirements list setting up a fast testnet or generating code on the fly. You should not need to modify anything here until you are more advanced. These are shown in the ",(0,s.jsx)(n.code,{children:"make help"})," command to abstract away complexity."]}),"\n",(0,s.jsx)(n.h3,{id:"chain_metadatajson",children:"chain_metadata.json"}),"\n",(0,s.jsxs)(n.p,{children:["A cosmetic file showcasing a format for the network. Fill in the data here once you push to the public so developers can easily see what your network is about. This is required for ",(0,s.jsx)(n.a,{href:"/spawn/v0.50/learn/consensus-security#create-an-ics-consumer-network",children:"ICS consumer networks"}),". If you do not use ICS, you can delete this file if you wish."]}),"\n",(0,s.jsx)(n.h3,{id:"chain_registryjson--assets",children:"chain_registry.json & assets"}),"\n",(0,s.jsxs)(n.p,{children:["These files are the format needed to upload to ",(0,s.jsx)(n.a,{href:"https://cosmos.directory/",children:"https://cosmos.directory/"})," (",(0,s.jsx)(n.a,{href:"https://github.com/cosmos/chain-registry",children:"github"}),"). Frontends use this data to connect to the network, especially in the ",(0,s.jsx)(n.a,{href:"#testnets",children:"local-interchain testnet tool"}),"."]}),"\n",(0,s.jsx)(n.h2,{id:"modules",children:"Modules"}),"\n",(0,s.jsxs)(n.p,{children:["We're all here to build new logic on top. The SDK calls these modules, or e",(0,s.jsx)(n.strong,{children:"x"}),"tensions, x/ for short. To make this easy spawn has a build in generator for a module."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"spawn module new --help\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"Usage:\n spawn module new [name] [flags]\n\nAliases:\n new, c, create\n\nExamples:\n spawn module new mymodule [--ibc-module]\n\nFlags:\n --ibc-middleware Set the module as an IBC Middleware\n --ibc-module Set the module as an IBC Module\n"})}),"\n",(0,s.jsxs)(n.p,{children:["All you need to have is the name you wish to call it, and if you want standard or an IBC module. IBC enables cross network communication of the logic. This is a powerful feature that allows you to build a network of networks. You can try this out with the ",(0,s.jsx)(n.a,{href:"/spawn/v0.50/build/name-service-ibc-module",children:"IBC module demo"})," demo."]}),"\n",(0,s.jsxs)(n.p,{children:["For now, just create a default module called ",(0,s.jsx)(n.code,{children:"example"})]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"spawn module new example\n"})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"\ud83c\udf89 New Module 'example' generated!\n\ud83c\udfc5 Commands:\n - $ make proto-gen # convert proto files into code\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This created a new x/example module and the ",(0,s.jsx)(n.a,{href:"#proto",children:"proto/"})," files in the expected structure. ",(0,s.jsx)(n.code,{children:"genesis.proto"})," contains the data saved and more hardcoded. ",(0,s.jsx)(n.code,{children:"query.proto"})," is how you allow external actors to grab data from the network and ",(0,s.jsx)(n.code,{children:"tx.proto"})," is how you allow external actors to send data to the network. Spawn also connects it to the application if you look through your ",(0,s.jsx)(n.code,{children:"app/app.go"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Learn how to make a new module with the ",(0,s.jsx)(n.a,{href:"/spawn/v0.50/build/name-service",children:"Name Service"})," guide."]}),"\n",(0,s.jsx)(n.h2,{id:"testnets",children:"Testnets"}),"\n",(0,s.jsxs)(n.p,{children:["This uses the ",(0,s.jsx)(n.a,{href:"https://github.com/strangelove-ventures/interchaintest/tree/main/local-interchain",children:"local-interchain"})," format and supports JSON or YAML. By default, 2 IBC network defaults are included. ",(0,s.jsx)(n.strong,{children:"self-ibc"})," and ",(0,s.jsx)(n.strong,{children:"testnet"}),". Run the testnet with ",(0,s.jsx)(n.code,{children:"make testnet"})," to automatically build, setup, and launch a complex network simply."]}),"\n",(0,s.jsxs)(n.p,{children:["Self IBC is really only useful if you are building ",(0,s.jsx)(n.a,{href:"/spawn/v0.50/build/name-service-ibc-module",children:"IBC Modules"}),". Follow that guide to see how to use it."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,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 r(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/6eb1ecaa.6bb4907a.js b/assets/js/6eb1ecaa.6bb4907a.js new file mode 100644 index 00000000..6ff78f50 --- /dev/null +++ b/assets/js/6eb1ecaa.6bb4907a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[670],{430:e=>{e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":"unreleased","badge":true,"noIndex":false,"className":"docs-version-current","isLast":false,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Unreleased Docs Here","href":"/spawn/main/","docId":"intro","unlisted":false}]},"docs":{"intro":{"id":"intro","title":"Unreleased Docs Here","description":"","sidebar":"defaultSidebar"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/772.585e834a.js b/assets/js/772.585e834a.js new file mode 100644 index 00000000..026cae66 --- /dev/null +++ b/assets/js/772.585e834a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[772],{5658:(e,t,n)=>{n.d(t,{Z:()=>a});n(7294);var i=n(512),o=n(5999),s=n(2503),r=n(5893);function a(e){let{className:t}=e;return(0,r.jsx)("main",{className:(0,i.Z)("container margin-vert--xl",t),children:(0,r.jsx)("div",{className:"row",children:(0,r.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,r.jsx)(s.Z,{as:"h1",className:"hero__title",children:(0,r.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,r.jsx)("p",{children:(0,r.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,r.jsx)("p",{children:(0,r.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."})})]})})})}},1772:(e,t,n)=>{n.r(t),n.d(t,{default:()=>d});n(7294);var i=n(5999),o=n(1944),s=n(8862),r=n(5658),a=n(5893);function d(){const e=(0,i.I)({id:"theme.NotFound.title",message:"Page Not Found"});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(o.d,{title:e}),(0,a.jsx)(s.Z,{children:(0,a.jsx)(r.Z,{})})]})}}}]); \ No newline at end of file diff --git a/assets/js/901.ff04e7f4.js b/assets/js/901.ff04e7f4.js new file mode 100644 index 00000000..0e5de210 --- /dev/null +++ b/assets/js/901.ff04e7f4.js @@ -0,0 +1 @@ +(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[901],{1262:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});n(7294);var s=n(2389),o=n(5893);function i(e){let{children:t,fallback:n}=e;return(0,s.Z)()?(0,o.jsx)(o.Fragment,{children:t?.()}):n??null}},9286:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>z});var s=n(7294),o=n(2389),i=n(512),a=n(2949),r=n(6668);function l(){const{prism:e}=(0,r.L)(),{colorMode:t}=(0,a.I)(),n=e.theme,s=e.darkTheme||n;return"dark"===t?s:n}var c=n(5281),d=n(7594),u=n.n(d);const m=/title=(?["'])(?.*?)\1/,h=/\{(?<range>[\d,-]+)\}/,p={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},f={...p,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},g=Object.keys(p);function b(e,t){const n=e.map((e=>{const{start:n,end:s}=f[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 x(e,t){let n=e.replace(/\n$/,"");const{language:s,magicComments:o,metastring:i}=t;if(i&&h.test(i)){const e=i.match(h).groups.range;if(0===o.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${i}), 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=u()(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 a=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);case"tex":case"latex":case"matlab":return b(["tex"],t);case"lua":case"haskell":case"sql":return b(["lua"],t);case"wasm":return b(["wasm"],t);case"vb":case"vba":case"visual-basic":return b(["vb","rem"],t);case"vbnet":return b(["vbnet","rem"],t);case"batch":return b(["rem"],t);case"basic":return b(["rem","f90"],t);case"fsharp":return b(["js","ml"],t);case"ocaml":case"sml":return b(["ml"],t);case"fortran":return b(["f90"],t);case"cobol":return b(["cobol"],t);default:return b(g,t)}}(s,o),r=n.split("\n"),l=Object.fromEntries(o.map((e=>[e.className,{start:0,range:""}]))),c=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]}))),m=Object.fromEntries(o.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let u=0;u<r.length;){const e=r[u].match(a);if(!e){u+=1;continue}const t=e.slice(1).find((e=>void 0!==e));c[t]?l[c[t]].range+=`${u},`:d[t]?l[d[t]].start=u:m[t]&&(l[m[t]].range+=`${l[m[t]].start}-${u-1},`),r.splice(u,1)}n=r.join("\n");const p={};return Object.entries(l).forEach((e=>{let[t,{range:n}]=e;u()(n).forEach((e=>{p[e]??=[],p[e].push(t)}))})),{lineClassNames:p,code:n}}const v={codeBlockContainer:"codeBlockContainer_Ckt0"};var j=n(5893);function k(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 i=t[s];i&&"string"==typeof o&&(n[i]=o)})),n}(l());return(0,j.jsx)(t,{...n,style:s,className:(0,i.Z)(n.className,v.codeBlockContainer,c.k.common.codeBlock)})}const y={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(0,j.jsx)(k,{as:"pre",tabIndex:0,className:(0,i.Z)(y.codeBlockStandalone,"thin-scrollbar",n),children:(0,j.jsx)("code",{className:y.codeBlockLines,children:t})})}var N=n(902);const L={attributes:!0,characterData:!0,childList:!0,subtree:!0};function w(e,t){const[n,o]=(0,s.useState)(),i=(0,s.useCallback)((()=>{o(e.current?.closest("[role=tabpanel][hidden]"))}),[e,o]);(0,s.useEffect)((()=>{i()}),[i]),function(e,t,n){void 0===n&&(n=L);const o=(0,N.zX)(t),i=(0,N.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(o);return e&&t.observe(e,i),()=>t.disconnect()}),[e,o,i])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),i())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var _=n(2573);const T={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function B(e){let{line:t,classNames:n,showLineNumbers:s,getLineProps:o,getTokenProps:a}=e;1===t.length&&"\n"===t[0].content&&(t[0].content="");const r=o({line:t,className:(0,i.Z)(n,s&&T.codeLine)}),l=t.map(((e,t)=>(0,j.jsx)("span",{...a({token:e})},t)));return(0,j.jsxs)("span",{...r,children:[s?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)("span",{className:T.codeLineNumber}),(0,j.jsx)("span",{className:T.codeLineContent,children:l})]}):l,(0,j.jsx)("br",{})]})}var Z=n(5999);function E(e){return(0,j.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,j.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 M(e){return(0,j.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,j.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const H={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function S(e){let{code:t,className:n}=e;const[o,a]=(0,s.useState)(!1),r=(0,s.useRef)(void 0),l=(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 i=document.getSelection(),a=i.rangeCount>0&&i.getRangeAt(0);n.append(s),s.select(),s.selectionStart=0,s.selectionEnd=e.length;let r=!1;try{r=document.execCommand("copy")}catch{}s.remove(),a&&(i.removeAllRanges(),i.addRange(a)),o&&o.focus()}(t),a(!0),r.current=window.setTimeout((()=>{a(!1)}),1e3)}),[t]);return(0,s.useEffect)((()=>()=>window.clearTimeout(r.current)),[]),(0,j.jsx)("button",{type:"button","aria-label":o?(0,Z.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,Z.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,Z.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,i.Z)("clean-btn",n,H.copyButton,o&&H.copyButtonCopied),onClick:l,children:(0,j.jsxs)("span",{className:H.copyButtonIcons,"aria-hidden":"true",children:[(0,j.jsx)(E,{className:H.copyButtonIcon}),(0,j.jsx)(M,{className:H.copyButtonSuccessIcon})]})})}function A(e){return(0,j.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,j.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 R={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function I(e){let{className:t,onClick:n,isEnabled:s}=e;const o=(0,Z.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,j.jsx)("button",{type:"button",onClick:n,className:(0,i.Z)("clean-btn",t,s&&R.wordWrapButtonEnabled),"aria-label":o,title:o,children:(0,j.jsx)(A,{className:R.wordWrapButtonIcon,"aria-hidden":"true"})})}function O(e){let{children:t,className:n="",metastring:o,title:a,showLineNumbers:c,language:d}=e;const{prism:{defaultLanguage:u,magicComments:h}}=(0,r.L)(),p=function(e){return e?.toLowerCase()}(d??function(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return t?.replace(/language-/,"")}(n)??u),f=l(),g=function(){const[e,t]=(0,s.useState)(!1),[n,o]=(0,s.useState)(!1),i=(0,s.useRef)(null),a=(0,s.useCallback)((()=>{const n=i.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[i,e]),r=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=i.current,n=e>t||i.current.querySelector("code").hasAttribute("style");o(n)}),[i]);return w(i,r),(0,s.useEffect)((()=>{r()}),[e,r]),(0,s.useEffect)((()=>(window.addEventListener("resize",r,{passive:!0}),()=>{window.removeEventListener("resize",r)})),[r]),{codeBlockRef:i,isEnabled:e,isCodeScrollable:n,toggle:a}}(),b=function(e){return e?.match(m)?.groups.title??""}(o)||a,{lineClassNames:v,code:C}=x(t,{metastring:o,language:p,magicComments:h}),N=c??function(e){return Boolean(e?.includes("showLineNumbers"))}(o);return(0,j.jsxs)(k,{as:"div",className:(0,i.Z)(n,p&&!n.includes(`language-${p}`)&&`language-${p}`),children:[b&&(0,j.jsx)("div",{className:y.codeBlockTitle,children:b}),(0,j.jsxs)("div",{className:y.codeBlockContent,children:[(0,j.jsx)(_.y$,{theme:f,code:C,language:p??"text",children:e=>{let{className:t,style:n,tokens:s,getLineProps:o,getTokenProps:a}=e;return(0,j.jsx)("pre",{tabIndex:0,ref:g.codeBlockRef,className:(0,i.Z)(t,y.codeBlock,"thin-scrollbar"),style:n,children:(0,j.jsx)("code",{className:(0,i.Z)(y.codeBlockLines,N&&y.codeBlockLinesWithNumbering),children:s.map(((e,t)=>(0,j.jsx)(B,{line:e,getLineProps:o,getTokenProps:a,classNames:v[t],showLineNumbers:N},t)))})})}}),(0,j.jsxs)("div",{className:y.buttonGroup,children:[(g.isEnabled||g.isCodeScrollable)&&(0,j.jsx)(I,{className:y.codeButton,onClick:()=>g.toggle(),isEnabled:g.isEnabled}),(0,j.jsx)(S,{className:y.codeButton,code:C})]})]})]})}function z(e){let{children:t,...n}=e;const i=(0,o.Z)(),a=function(e){return s.Children.toArray(e).some((e=>(0,s.isValidElement)(e)))?e:Array.isArray(e)?e.join(""):e}(t),r="string"==typeof a?O:C;return(0,j.jsx)(r,{...n,children:a},String(i))}},4831:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>xt});var s=n(7294),o=n(1944),i=n(902),a=n(5893);const r=s.createContext(null);function l(e){let{children:t,content:n}=e;const o=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,a.jsx)(r.Provider,{value:o,children:t})}function c(){const e=(0,s.useContext)(r);if(null===e)throw new i.i6("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:n}=c();return(0,a.jsx)(o.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var u=n(512),m=n(7524),h=n(5999),p=n(3692);function f(e){const{permalink:t,title:n,subLabel:s,isNext:o}=e;return(0,a.jsxs)(p.Z,{className:(0,u.Z)("pagination-nav__link",o?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[s&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:s}),(0,a.jsx)("div",{className:"pagination-nav__label",children:n})]})}function g(e){const{previous:t,next:n}=e;return(0,a.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,a.jsx)(f,{...t,subLabel:(0,a.jsx)(h.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,a.jsx)(f,{...n,subLabel:(0,a.jsx)(h.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}function b(){const{metadata:e}=c();return(0,a.jsx)(g,{previous:e.previous,next:e.next})}var x=n(2263),v=n(143),j=n(5281),k=n(373),y=n(4477);const C={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,a.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,a.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,a.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,a.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function N(e){const t=C[e.versionMetadata.banner];return(0,a.jsx)(t,{...e})}function L(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,a.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,a.jsx)("b",{children:(0,a.jsx)(p.Z,{to:n,onClick:s,children:(0,a.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 w(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:s}}=(0,x.default)(),{pluginId:o}=(0,v.gA)({failfast:!0}),{savePreferredVersionName:i}=(0,k.J)(o),{latestDocSuggestion:r,latestVersionSuggestion:l}=(0,v.Jo)(o),c=r??(d=l).docs.find((e=>e.id===d.mainDocId));var d;return(0,a.jsxs)("div",{className:(0,u.Z)(t,j.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,a.jsx)("div",{children:(0,a.jsx)(N,{siteTitle:s,versionMetadata:n})}),(0,a.jsx)("div",{className:"margin-top--md",children:(0,a.jsx)(L,{versionLabel:l.label,to:c.path,onClick:()=>i(l.name)})})]})}function _(e){let{className:t}=e;const n=(0,y.E)();return n.banner?(0,a.jsx)(w,{className:t,versionMetadata:n}):null}function T(e){let{className:t}=e;const n=(0,y.E)();return n.badge?(0,a.jsx)("span",{className:(0,u.Z)(t,j.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,a.jsx)(h.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}const B={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};function Z(e){let{permalink:t,label:n,count:s,description:o}=e;return(0,a.jsxs)(p.Z,{href:t,title:o,className:(0,u.Z)(B.tag,s?B.tagWithCount:B.tagRegular),children:[n,s&&(0,a.jsx)("span",{children:s})]})}const E={tags:"tags_jXut",tag:"tag_QGVx"};function M(e){let{tags:t}=e;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("b",{children:(0,a.jsx)(h.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,a.jsx)("ul",{className:(0,u.Z)(E.tags,"padding--none","margin-left--sm"),children:t.map((e=>(0,a.jsx)("li",{className:E.tag,children:(0,a.jsx)(Z,{...e})},e.permalink)))})]})}const H={iconEdit:"iconEdit_Z9Sw"};function S(e){let{className:t,...n}=e;return(0,a.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,u.Z)(H.iconEdit,t),"aria-hidden":"true",...n,children:(0,a.jsx)("g",{children:(0,a.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 A(e){let{editUrl:t}=e;return(0,a.jsxs)(p.Z,{to:t,className:j.k.common.editThisPage,children:[(0,a.jsx)(S,{}),(0,a.jsx)(h.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}function R(e){void 0===e&&(e={});const{i18n:{currentLocale:t}}=(0,x.default)(),n=function(){const{i18n:{currentLocale:e,localeConfigs:t}}=(0,x.default)();return t[e].calendar}();return new Intl.DateTimeFormat(t,{calendar:n,...e})}function I(e){let{lastUpdatedAt:t}=e;const n=new Date(t),s=R({day:"numeric",month:"short",year:"numeric",timeZone:"UTC"}).format(n);return(0,a.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,a.jsx)("b",{children:(0,a.jsx)("time",{dateTime:n.toISOString(),itemProp:"dateModified",children:s})})},children:" on {date}"})}function O(e){let{lastUpdatedBy:t}=e;return(0,a.jsx)(h.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,a.jsx)("b",{children:t})},children:" by {user}"})}function z(e){let{lastUpdatedAt:t,lastUpdatedBy:n}=e;return(0,a.jsxs)("span",{className:j.k.common.lastUpdated,children:[(0,a.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?(0,a.jsx)(I,{lastUpdatedAt:t}):"",byUser:n?(0,a.jsx)(O,{lastUpdatedBy:n}):""},children:"Last updated{atDate}{byUser}"}),!1]})}const P={lastUpdated:"lastUpdated_JAkA"};function U(e){let{className:t,editUrl:n,lastUpdatedAt:s,lastUpdatedBy:o}=e;return(0,a.jsxs)("div",{className:(0,u.Z)("row",t),children:[(0,a.jsx)("div",{className:"col",children:n&&(0,a.jsx)(A,{editUrl:n})}),(0,a.jsx)("div",{className:(0,u.Z)("col",P.lastUpdated),children:(s||o)&&(0,a.jsx)(z,{lastUpdatedAt:s,lastUpdatedBy:o})})]})}function V(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s,tags:o}=e,i=o.length>0,r=!!(t||n||s);return i||r?(0,a.jsxs)("footer",{className:(0,u.Z)(j.k.docs.docFooter,"docusaurus-mt-lg"),children:[i&&(0,a.jsx)("div",{className:(0,u.Z)("row margin-top--sm",j.k.docs.docFooterTagsRow),children:(0,a.jsx)("div",{className:"col",children:(0,a.jsx)(M,{tags:o})})}),r&&(0,a.jsx)(U,{className:(0,u.Z)("margin-top--sm",j.k.docs.docFooterEditMetaRow),editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s})]}):null}var $=n(6043),D=n(6668);function F(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,...o}=e;n>=0?t[n].children.push(o):s.push(o)})),s}function W(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return t.flatMap((e=>{const t=W({toc:e.children,minHeadingLevel:n,maxHeadingLevel:s});return function(e){return e.level>=n&&e.level<=s}(e)?[{...e,children:t}]:t}))}function q(e){const t=e.getBoundingClientRect();return t.top===t.bottom?q(e.parentNode):t}function G(e,t){let{anchorTopOffset:n}=t;const s=e.find((e=>q(e).top>=n));if(s){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(q(s))?s:e[e.indexOf(s)-1]??null}return e[e.length-1]??null}function J(){const e=(0,s.useRef)(0),{navbar:{hideOnScroll:t}}=(0,D.L)();return(0,s.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function Y(e){const t=(0,s.useRef)(void 0),n=J();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:o,minHeadingLevel:i,maxHeadingLevel:a}=e;function r(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),r=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const s=[];for(let o=t;o<=n;o+=1)s.push(`h${o}.anchor`);return Array.from(document.querySelectorAll(s.join()))}({minHeadingLevel:i,maxHeadingLevel:a}),l=G(r,{anchorTopOffset:n.current}),c=e.find((e=>l&&l.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(o),e.classList.add(o),t.current=e):e.classList.remove(o)}(e,e===c)}))}return document.addEventListener("scroll",r),document.addEventListener("resize",r),r(),()=>{document.removeEventListener("scroll",r),document.removeEventListener("resize",r)}}),[e,n])}function Q(e){let{toc:t,className:n,linkClassName:s,isChild:o}=e;return t.length?(0,a.jsx)("ul",{className:o?void 0:n,children:t.map((e=>(0,a.jsxs)("li",{children:[(0,a.jsx)(p.Z,{to:`#${e.id}`,className:s??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,a.jsx)(Q,{isChild:!0,toc:e.children,className:n,linkClassName:s})]},e.id)))}):null}const X=s.memo(Q);function K(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:o="table-of-contents__link",linkActiveClassName:i,minHeadingLevel:r,maxHeadingLevel:l,...c}=e;const d=(0,D.L)(),u=r??d.tableOfContents.minHeadingLevel,m=l??d.tableOfContents.maxHeadingLevel,h=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:o}=e;return(0,s.useMemo)((()=>W({toc:F(t),minHeadingLevel:n,maxHeadingLevel:o})),[t,n,o])}({toc:t,minHeadingLevel:u,maxHeadingLevel:m});return Y((0,s.useMemo)((()=>{if(o&&i)return{linkClassName:o,linkActiveClassName:i,minHeadingLevel:u,maxHeadingLevel:m}}),[o,i,u,m])),(0,a.jsx)(X,{toc:h,className:n,linkClassName:o,...c})}const ee={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function te(e){let{collapsed:t,...n}=e;return(0,a.jsx)("button",{type:"button",...n,className:(0,u.Z)("clean-btn",ee.tocCollapsibleButton,!t&&ee.tocCollapsibleButtonExpanded,n.className),children:(0,a.jsx)(h.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const ne={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function se(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:o}=e;const{collapsed:i,toggleCollapsed:r}=(0,$.u)({initialState:!0});return(0,a.jsxs)("div",{className:(0,u.Z)(ne.tocCollapsible,!i&&ne.tocCollapsibleExpanded,n),children:[(0,a.jsx)(te,{collapsed:i,onClick:r}),(0,a.jsx)($.z,{lazy:!0,className:ne.tocCollapsibleContent,collapsed:i,children:(0,a.jsx)(K,{toc:t,minHeadingLevel:s,maxHeadingLevel:o})})]})}const oe={tocMobile:"tocMobile_ITEo"};function ie(){const{toc:e,frontMatter:t}=c();return(0,a.jsx)(se,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.Z)(j.k.docs.docTocMobile,oe.tocMobile)})}const ae={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"},re="table-of-contents__link toc-highlight",le="table-of-contents__link--active";function ce(e){let{className:t,...n}=e;return(0,a.jsx)("div",{className:(0,u.Z)(ae.tableOfContents,"thin-scrollbar",t),children:(0,a.jsx)(K,{...n,linkClassName:re,linkActiveClassName:le})})}function de(){const{toc:e,frontMatter:t}=c();return(0,a.jsx)(ce,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:j.k.docs.docTocDesktop})}var ue=n(2503),me=n(1151),he=n(5742),pe=n(8573);function fe(e){return(0,a.jsx)("code",{...e})}var ge=n(8138),be=n(2389);const xe={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function ve(e){return!!e&&("SUMMARY"===e.tagName||ve(e.parentElement))}function je(e,t){return!!e&&(e===t||je(e.parentElement,t))}function ke(e){let{summary:t,children:n,...o}=e;(0,ge.Z)().collectAnchor(o.id);const i=(0,be.Z)(),r=(0,s.useRef)(null),{collapsed:l,setCollapsed:c}=(0,$.u)({initialState:!o.open}),[d,m]=(0,s.useState)(o.open),h=s.isValidElement(t)?t:(0,a.jsx)("summary",{children:t??"Details"});return(0,a.jsxs)("details",{...o,ref:r,open:d,"data-collapsed":l,className:(0,u.Z)(xe.details,i&&xe.isBrowser,o.className),onMouseDown:e=>{ve(e.target)&&e.detail>1&&e.preventDefault()},onClick:e=>{e.stopPropagation();const t=e.target;ve(t)&&je(t,r.current)&&(e.preventDefault(),l?(c(!1),m(!0)):c(!0))},children:[h,(0,a.jsx)($.z,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:e=>{c(e),m(!e)},children:(0,a.jsx)("div",{className:xe.collapsibleContent,children:n})})]})}const ye={details:"details_b_Ee"},Ce="alert alert--info";function Ne(e){let{...t}=e;return(0,a.jsx)(ke,{...t,className:(0,u.Z)(Ce,ye.details,t.className)})}function Le(e){const t=s.Children.toArray(e.children),n=t.find((e=>s.isValidElement(e)&&"summary"===e.type)),o=(0,a.jsx)(a.Fragment,{children:t.filter((e=>e!==n))});return(0,a.jsx)(Ne,{...e,summary:n,children:o})}function we(e){return(0,a.jsx)(ue.Z,{...e})}const _e={containsTaskList:"containsTaskList_mC6p"};function Te(e){if(void 0!==e)return(0,u.Z)(e,e?.includes("contains-task-list")&&_e.containsTaskList)}const Be={img:"img_ev3q"};function Ze(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=s.Children.toArray(e),n=t.find((e=>s.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),o=t.filter((e=>e!==n)),i=n?.props.children;return{mdxAdmonitionTitle:i,rest:o.length>0?(0,a.jsx)(a.Fragment,{children:o}):null}}(e.children),o=e.title??t;return{...e,...o&&{title:o},children:n}}const Ee={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function Me(e){let{type:t,className:n,children:s}=e;return(0,a.jsx)("div",{className:(0,u.Z)(j.k.common.admonition,j.k.common.admonitionType(t),Ee.admonition,n),children:s})}function He(e){let{icon:t,title:n}=e;return(0,a.jsxs)("div",{className:Ee.admonitionHeading,children:[(0,a.jsx)("span",{className:Ee.admonitionIcon,children:t}),n]})}function Se(e){let{children:t}=e;return t?(0,a.jsx)("div",{className:Ee.admonitionContent,children:t}):null}function Ae(e){const{type:t,icon:n,title:s,children:o,className:i}=e;return(0,a.jsxs)(Me,{type:t,className:i,children:[s||n?(0,a.jsx)(He,{title:s,icon:n}):null,(0,a.jsx)(Se,{children:o})]})}function Re(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.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 Ie={icon:(0,a.jsx)(Re,{}),title:(0,a.jsx)(h.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function Oe(e){return(0,a.jsx)(Ae,{...Ie,...e,className:(0,u.Z)("alert alert--secondary",e.className),children:e.children})}function ze(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.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 Pe={icon:(0,a.jsx)(ze,{}),title:(0,a.jsx)(h.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function Ue(e){return(0,a.jsx)(Ae,{...Pe,...e,className:(0,u.Z)("alert alert--success",e.className),children:e.children})}function Ve(e){return(0,a.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,a.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 $e={icon:(0,a.jsx)(Ve,{}),title:(0,a.jsx)(h.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function De(e){return(0,a.jsx)(Ae,{...$e,...e,className:(0,u.Z)("alert alert--info",e.className),children:e.children})}function Fe(e){return(0,a.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,a.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 We={icon:(0,a.jsx)(Fe,{}),title:(0,a.jsx)(h.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function qe(e){return(0,a.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,a.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 Ge={icon:(0,a.jsx)(qe,{}),title:(0,a.jsx)(h.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const Je={icon:(0,a.jsx)(Fe,{}),title:(0,a.jsx)(h.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const Ye={...{note:Oe,tip:Ue,info:De,warning:function(e){return(0,a.jsx)(Ae,{...We,...e,className:(0,u.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,a.jsx)(Ae,{...Ge,...e,className:(0,u.Z)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,a.jsx)(Oe,{title:"secondary",...e}),important:e=>(0,a.jsx)(De,{title:"important",...e}),success:e=>(0,a.jsx)(Ue,{title:"success",...e}),caution:function(e){return(0,a.jsx)(Ae,{...Je,...e,className:(0,u.Z)("alert alert--warning",e.className),children:e.children})}}};function Qe(e){const t=Ze(e),n=(s=t.type,Ye[s]||(console.warn(`No admonition component found for admonition type "${s}". Using Info as fallback.`),Ye.info));var s;return(0,a.jsx)(n,{...t})}const Xe={Head:he.Z,details:Le,Details:Le,code:function(e){return function(e){return void 0!==e.children&&s.Children.toArray(e.children).every((e=>"string"==typeof e&&!e.includes("\n")))}(e)?(0,a.jsx)(fe,{...e}):(0,a.jsx)(pe.Z,{...e})},a:function(e){return(0,a.jsx)(p.Z,{...e})},pre:function(e){return(0,a.jsx)(a.Fragment,{children:e.children})},ul:function(e){return(0,a.jsx)("ul",{...e,className:Te(e.className)})},li:function(e){return(0,ge.Z)().collectAnchor(e.id),(0,a.jsx)("li",{...e})},img:function(e){return(0,a.jsx)("img",{decoding:"async",loading:"lazy",...e,className:(t=e.className,(0,u.Z)(t,Be.img))});var t},h1:e=>(0,a.jsx)(we,{as:"h1",...e}),h2:e=>(0,a.jsx)(we,{as:"h2",...e}),h3:e=>(0,a.jsx)(we,{as:"h3",...e}),h4:e=>(0,a.jsx)(we,{as:"h4",...e}),h5:e=>(0,a.jsx)(we,{as:"h5",...e}),h6:e=>(0,a.jsx)(we,{as:"h6",...e}),admonition:Qe,mermaid:()=>null};function Ke(e){let{children:t}=e;return(0,a.jsx)(me.Z,{components:Xe,children:t})}function et(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,a.jsxs)("div",{className:(0,u.Z)(j.k.docs.docMarkdown,"markdown"),children:[n&&(0,a.jsx)("header",{children:(0,a.jsx)(ue.Z,{as:"h1",children:n})}),(0,a.jsx)(Ke,{children:t})]})}var tt=n(2802),nt=n(8596),st=n(4996);function ot(e){return(0,a.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,a.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 it={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function at(){const e=(0,st.ZP)("/");return(0,a.jsx)("li",{className:"breadcrumbs__item",children:(0,a.jsx)(p.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,a.jsx)(ot,{className:it.breadcrumbHomeIcon})})})}const rt={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function lt(e){let{children:t,href:n,isLast:s}=e;const o="breadcrumbs__link";return s?(0,a.jsx)("span",{className:o,itemProp:"name",children:t}):n?(0,a.jsx)(p.Z,{className:o,href:n,itemProp:"item",children:(0,a.jsx)("span",{itemProp:"name",children:t})}):(0,a.jsx)("span",{className:o,children:t})}function ct(e){let{children:t,active:n,index:s,addMicrodata:o}=e;return(0,a.jsxs)("li",{...o&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,u.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,a.jsx)("meta",{itemProp:"position",content:String(s+1)})]})}function dt(){const e=(0,tt.s1)(),t=(0,nt.Ns)();return e?(0,a.jsx)("nav",{className:(0,u.Z)(j.k.docs.docBreadcrumbs,rt.breadcrumbsContainer),"aria-label":(0,h.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,a.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,a.jsx)(at,{}),e.map(((t,n)=>{const s=n===e.length-1,o="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,a.jsx)(ct,{active:s,index:n,addMicrodata:!!o,children:(0,a.jsx)(lt,{href:o,isLast:s,children:t.label})},n)}))]})}):null}function ut(){return(0,a.jsx)(h.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function mt(){return(0,a.jsx)(h.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 ht(){return(0,a.jsx)(he.Z,{children:(0,a.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}function pt(e){let{className:t}=e;return(0,a.jsx)(Qe,{type:"caution",title:(0,a.jsx)(ut,{}),className:(0,u.Z)(t,j.k.common.unlistedBanner),children:(0,a.jsx)(mt,{})})}function ft(e){return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(ht,{}),(0,a.jsx)(pt,{...e})]})}const gt={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function bt(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),s=e.hide_table_of_contents,o=!s&&t.length>0;return{hidden:s,mobile:o?(0,a.jsx)(ie,{}):void 0,desktop:!o||"desktop"!==n&&"ssr"!==n?void 0:(0,a.jsx)(de,{})}}(),{metadata:{unlisted:s}}=c();return(0,a.jsxs)("div",{className:"row",children:[(0,a.jsxs)("div",{className:(0,u.Z)("col",!n.hidden&>.docItemCol),children:[s&&(0,a.jsx)(ft,{}),(0,a.jsx)(_,{}),(0,a.jsxs)("div",{className:gt.docItemContainer,children:[(0,a.jsxs)("article",{children:[(0,a.jsx)(dt,{}),(0,a.jsx)(T,{}),n.mobile,(0,a.jsx)(et,{children:t}),(0,a.jsx)(V,{})]}),(0,a.jsx)(b,{})]})]}),n.desktop&&(0,a.jsx)("div",{className:"col col--3",children:n.desktop})]})}function xt(e){const t=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,a.jsx)(l,{content:e.content,children:(0,a.jsxs)(o.FG,{className:t,children:[(0,a.jsx)(d,{}),(0,a.jsx)(bt,{children:(0,a.jsx)(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,i]=t;if(s&&i){s=parseInt(s),i=parseInt(i);const e=s<i?1:-1;"-"!==o&&".."!==o&&"\u2025"!==o||(i+=e);for(let t=s;t!==i;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},7965:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useCodeblockThemeConfig=void 0;var s=n(1506);Object.defineProperty(t,"useCodeblockThemeConfig",{enumerable:!0,get:function(){return s.useCodeblockThemeConfig}})},1506:function(e,t,n){"use strict";var s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useCodeblockThemeConfig=void 0;const o=s(n(2263)),i={showGithubLink:!0,githubLinkLabel:"View on GitHub",showRunmeLink:!1,runmeLinkLabel:"Checkout via Runme"};t.useCodeblockThemeConfig=function(){const{siteConfig:{themeConfig:e}}=(0,o.default)();return Object.assign(i,e.codeblock||{})}},3010:function(e,t,n){"use strict";var s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=s(n(7294)),i=s(n(7381)),a=s(n(9286));t.default=(a.default,e=>function(e){return e.reference||e.metastring?.split(" ").includes("reference")}(e)?o.default.createElement(i.default,{...e}):o.default.createElement(a.default,{...e}))},8339:function(e,t,n){"use strict";var s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getRunmeLink=t.RunmeLink=void 0;const o=s(n(7294)),i=s(n(1262)),a=n(7965),r=n(6275),l=n(4354),c=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,d=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i;function u(e){let{reference:t,metastring:n}=e;const s=navigator.userAgent||navigator.vendor||window.opera,i=(0,a.useCodeblockThemeConfig)(),r=!function(e){return c.test(e)||d.test(e.substr(0,4))}(s)&&i.showRunmeLink&&n;return r?o.default.createElement("a",{href:`vscode://stateful.runme?${m(t,n)}`,className:"runmeLink",target:"_blank",style:l.buttonStyles},i.runmeLinkLabel):null}function m(e,t){const n=new URLSearchParams({command:"setup"}),s=t.match(/runmeRepository="(?<repository>[^"]*)"/),o=t.match(/runmeFileToOpen="(?<fileToOpen>[^"]*)"/),i=t.match(/useHTTPS|useHTTPS=(false|true)/);if(e.endsWith(".md"))return n.set("fileToOpen",(0,r.parseReference)(e).url),n.toString();if(o?.groups?.fileToOpen)return n.set("fileToOpen",o.groups.fileToOpen),s?.groups?.repository&&n.set("repository",s.groups.repository),n.toString();const{org:a,repo:l,title:c}=(0,r.parseReference)(e),d=i&&i.input&&(i.input.includes("useHTTPS=true")||i.input.includes(" useHTTPS ")||i.input.endsWith("useHTTPS"))?"https://github.com/":"git@github.com:";return n.set("repository",`${d}${a}/${l}.git`),n.set("fileToOpen",c.split("/").slice(0,-1).join("/")+"/README.md"),n.toString()}t.RunmeLink=function(e){return o.default.createElement(i.default,null,(()=>o.default.createElement(u,{...e})))},t.getRunmeLink=m},4354:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.buttonStyles=t.initialFetchResultState=void 0,t.initialFetchResultState={code:"loading...",error:null,loading:null},t.buttonStyles={margin:"0 10px"}},7381:function(e,t,n){"use strict";var s=this&&this.__createBinding||(Object.create?function(e,t,n,s){void 0===s&&(s=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,s,o)}:function(e,t,n,s){void 0===s&&(s=n),e[s]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&s(t,e,n);return o(t,e),t},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const r=i(n(7294)),l=a(n(9286)),c=n(7965),d=n(8339),u=n(6275),m=n(4354),h={fontSize:".9em",fontWeight:600,color:"#0E75DD",textAlign:"right",paddingBottom:"13px",textDecoration:"underline"};t.default=function(e){const[t,n]=(0,r.useReducer)(u.codeReducer,m.initialFetchResultState),s=(0,u.parseReference)(e.children);!1!==t.loading&&(0,u.fetchCode)(s,n);const o=e.metastring?.match(/title="(?<title>[^"]*)"/),i={...e,metastring:o?.groups?.title?` title="${o?.groups?.title}"`:` title="${s.title}"`,children:m.initialFetchResultState.code},a=(0,c.useCodeblockThemeConfig)(),p=a.showGithubLink||a.showRunmeLink;return r.default.createElement("div",{className:"docusaurus-theme-github-codeblock"},r.default.createElement(l.default,{...i},t.code),p&&r.default.createElement("div",{style:h},r.default.createElement(d.RunmeLink,{reference:e.children,metastring:e.metastring}),a.showGithubLink&&r.default.createElement("a",{href:e.children,className:"githubLink",style:m.buttonStyles,target:"_blank"},a.githubLinkLabel)))}},6275:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.codeReducer=t.fetchCode=t.parseReference=void 0;const s=n(4354);t.parseReference=function(e){const t=e.slice(e.indexOf("https")),[s,o]=t.split("#"),[i,a,r,l,...c]=new n.g.URL(s).pathname.split("/").slice(1),[d,u]=o?o.split("-").map((e=>parseInt(e.slice(1),10)-1)):[0,1/0];return{url:`https://raw.githubusercontent.com/${i}/${a}/${l}/${c.join("/")}`,fromLine:d,toLine:u,title:c.join("/"),org:i,repo:a}},t.fetchCode=async function(e,t){let n,{url:s,fromLine:o,toLine:i}=e;try{n=await fetch(s)}catch(l){return t({type:"error",value:l})}if(200!==n.status){return t({type:"error",value:await n.text()})}const a=(await n.text()).split("\n").slice(o,(i||o)+1),r=a.reduce(((e,t)=>{if(0===t.length)return e;const n=t.match(/^\s+/);return n?Math.min(e,n[0].length):0}),1/0);return 0===a.length?t({type:"error",value:`Error: No code found at ${s} from line ${o} to line ${i}`}):t({type:"loaded",value:a.map((e=>e.slice(r))).join("\n")})},t.codeReducer=function(e,t){let{type:n,value:o}=t;switch(n){case"reset":return s.initialFetchResultState;case"loading":return{...e,loading:!0};case"loaded":case"error":return{...e,code:o,loading:!1};default:return e}}},1151:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r,a:()=>a});var s=n(7294);const o={},i=s.createContext(o);function a(e){const t=s.useContext(i);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(o):e.components||o:a(e.components),s.createElement(i.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a0b73a2e.73b73e1d.js b/assets/js/a0b73a2e.73b73e1d.js new file mode 100644 index 00000000..bc5f0286 --- /dev/null +++ b/assets/js/a0b73a2e.73b73e1d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[375],{7946:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>i,default:()=>h,frontMatter:()=>a,metadata:()=>o,toc:()=>l});var s=n(5893),r=n(1151);const a={title:"CW Validator Reviews",sidebar_label:"CosmWasm Validator Reviews",slug:"/demo/cw-validator-reviews"},i="CosmWasm Validator Reviews",o={id:"demos/cw-validator-reviews",title:"CW Validator Reviews",description:"You will build a new chain with CosmWasm, enabling a proof-of-stake validator review system. You will write a contract to collect and manage validator reviews, integrate it with the chain, and update validator data automatically through a Cosmos-SDK endblocker module.",source:"@site/versioned_docs/version-v0.50.x/03-demos/04-cw-validator-reviews.md",sourceDirName:"03-demos",slug:"/demo/cw-validator-reviews",permalink:"/spawn/v0.50/demo/cw-validator-reviews",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:4,frontMatter:{title:"CW Validator Reviews",sidebar_label:"CosmWasm Validator Reviews",slug:"/demo/cw-validator-reviews"},sidebar:"defaultSidebar",previous:{title:"Token Factory",permalink:"/spawn/v0.50/demo/tokenfactory"},next:{title:"Network Security Types",permalink:"/spawn/v0.50/learn/consensus-security"}},d={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Setup the Chain",id:"setup-the-chain",level:2},{value:"CosmWasm Build Contract",id:"cosmwasm-build-contract",level:2},{value:"Set State",id:"set-state",level:3},{value:"Set Inputs",id:"set-inputs",level:3},{value:"Set new error",id:"set-new-error",level:3},{value:"Imports",id:"imports",level:3},{value:"Modify Instantiate Message",id:"modify-instantiate-message",level:3},{value:"Add Execute Logic",id:"add-execute-logic",level:3},{value:"Add Queries",id:"add-queries",level:3},{value:"Add New Sudo Message Type",id:"add-new-sudo-message-type",level:3},{value:"Build the Contract",id:"build-the-contract",level:3},{value:"Modify the Module",id:"modify-the-module",level:2},{value:"Setup the Keeper",id:"setup-the-keeper",level:3},{value:"'Fix' keeper_test",id:"fix-keeper_test",level:3},{value:"Dependency Inject (v2)",id:"dependency-inject-v2",level:3},{value:"Fix app.go references",id:"fix-appgo-references",level:3},{value:"Module Core Logic",id:"module-core-logic",level:3},{value:"Implement the EndBlocker",id:"implement-the-endblocker",level:3},{value:"Test Deployment",id:"test-deployment",level:2},{value:"Start Testnet",id:"start-testnet",level:3},{value:"Upload Contract",id:"upload-contract",level:3},{value:"Instantiate our Contract",id:"instantiate-our-contract",level:3},{value:"Verify data",id:"verify-data",level:3},{value:"Write a review",id:"write-a-review",level:2},{value:"Verify the review",id:"verify-the-review",level:3},{value:"Write a review for a non-validator",id:"write-a-review-for-a-non-validator",level:3}];function c(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"cosmwasm-validator-reviews",children:"CosmWasm Validator Reviews"}),"\n",(0,s.jsxs)(t.p,{children:["You will build a new chain with ",(0,s.jsx)(t.a,{href:"https://cosmwasm.com",children:"CosmWasm"}),", enabling a proof-of-stake validator review system. You will write a contract to collect and manage validator reviews, integrate it with the chain, and update validator data automatically through a Cosmos-SDK endblocker module."]}),"\n",(0,s.jsx)(t.p,{children:"There are easy ways to get validators in a cosmwasm smart contract. The goal of this tutorial is to teach how to pass data from the SDK to a contract."}),"\n",(0,s.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/spawn/v0.50/install/system-setup",children:"System Setup"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/spawn/v0.50/install/install-spawn",children:"Install Spawn"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/spawn/v0.50/install/system-setup#cosmwasm",children:"Rust + CosmWasm"})}),"\n"]}),"\n",(0,s.jsx)(t.h2,{id:"setup-the-chain",children:"Setup the Chain"}),"\n",(0,s.jsx)(t.p,{children:"Build a new blockchain with CosmWasm enabled. THen generate a new module from the template for the reviews."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"GITHUB_USERNAME=rollchains\n\nspawn new rollchain \\\n--consensus=proof-of-stake \\\n--bech32=roll \\\n--denom=uroll \\\n--bin=rolld \\\n--disabled=block-explorer \\\n--org=${GITHUB_USERNAME}\n\n\n# move into the chain directory\ncd rollchain\n\n# Generate the Cosmos-SDK reviews module\nspawn module new reviews\n\n# build the proto to code\nmake proto-gen\n"})}),"\n",(0,s.jsx)(t.p,{children:"Once the chain is started, continue on to the contract building steps"}),"\n",(0,s.jsx)(t.h2,{id:"cosmwasm-build-contract",children:"CosmWasm Build Contract"}),"\n",(0,s.jsxs)(t.p,{children:["CosmWasm has a template repository that is used to generate new contracts. A minimal contract will be built with the ",(0,s.jsx)(t.code,{children:"validator-reviews-contract"})," name provided on a specific commit."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"cargo generate --git https://github.com/CosmWasm/cw-template.git \\\n --name validator-reviews-contract \\\n -d minimal=true --tag a2a169164324aa1b48ab76dd630f75f504e41d99\n"})}),"\n",(0,s.jsx)(t.p,{children:"A new folder will be created with the contract template."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"code validator-reviews-contract/\n"})}),"\n",(0,s.jsx)(t.h3,{id:"set-state",children:"Set State"}),"\n",(0,s.jsx)(t.p,{children:"The contract state and base structure is set in the state.rs file. There are 2 groups of data that must be managed, validators and the reviews for validators."}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"Validators"})," have unique addresses and name stored on the chain. This data will be passed from the Cosmos-SDK to the contract."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"Reviews"})," will save a user wallets address and their text reviews for a validator."]}),"\n"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'title="src/state.rs"',children:'use std::collections::BTreeMap;\n\nuse cosmwasm_schema::cw_serde;\nuse cw_storage_plus::{Item, Map};\n\n#[cw_serde]\npub struct Validator {\n pub address: String,\n pub moniker: String,\n}\npub const VALIDATORS: Item<Vec<Validator>> = Item::new("validators");\n\n// user -> text\npub type Reviews = BTreeMap<String, String>;\n\n// validator_address -> reviews\npub const REVIEWS: Map<&str, Reviews> = Map::new("reviews");\n'})}),"\n",(0,s.jsx)(t.h3,{id:"set-inputs",children:"Set Inputs"}),"\n",(0,s.jsxs)(t.p,{children:["By default contracts get 3 messages, ",(0,s.jsx)(t.code,{children:"InstantiateMsg"}),", ",(0,s.jsx)(t.code,{children:"ExecuteMsg"}),", and ",(0,s.jsx)(t.code,{children:"QueryMsg"}),"."]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Instantiate"})," allows initial contracts setup with a configuration desired. This is not used for us. Keep it empty."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Execute"})," is where the main logic of the contract is. Add a ",(0,s.jsx)(t.code,{children:"WriteReview"})," message to allow users to write reviews. The user must know who they want to write a review for and what it says."]}),"\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.strong,{children:"Query"})," is for reading data from the contract. Add 2 queries, one to get all validators available and one to get reviews for a specific validator."]}),"\n"]}),"\n",(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"SudoMsg"})," is a default type not typically used. ",(0,s.jsx)(t.code,{children:"Sudo"})," stands for ",(0,s.jsx)(t.code,{children:"Super User DO"})," where the super user is the chain. ",(0,s.jsx)(t.strong,{children:"Only"})," the chain can submit data to this message type. A ",(0,s.jsx)(t.code,{children:"SetValidators"})," message is added to allow the chain to update the validators list within the contract. This is the pass through from the Cosmos-SDK to the contract."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'title="src/msg.rs"',children:"use cosmwasm_schema::{cw_serde, QueryResponses};\n\n#[cw_serde]\npub struct InstantiateMsg {}\n\n#[cw_serde]\npub enum ExecuteMsg {\n // highlight-next-line\n WriteReview { val_addr: String, review: String },\n}\n\n#[cw_serde]\n#[derive(QueryResponses)]\npub enum QueryMsg {\n // highlight-start\n #[returns(Vec<crate::state::Validator>)]\n Validators {},\n\n #[returns(crate::state::Reviews)]\n Reviews { address: String },\n // highlight-end\n}\n\n// highlight-start\n#[cw_serde]\npub enum SudoMsg {\n SetValidators {\n validators: Vec<crate::state::Validator>,\n },\n}\n// highlight-end\n"})}),"\n",(0,s.jsx)(t.h3,{id:"set-new-error",children:"Set new error"}),"\n",(0,s.jsx)(t.p,{children:"For a better experience, a new error is added to the contract. This will be used when a validator is not found in the list of validators. Users should not be allowed to post reviews for non existent validators."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'title="src/error.rs"',children:'use cosmwasm_std::StdError;\nuse thiserror::Error;\n\n#[derive(Error, Debug)]\npub enum ContractError {\n #[error("{0}")]\n Std(#[from] StdError),\n\n #[error("Unauthorized")]\n Unauthorized {},\n\n // Add any other custom errors you like here.\n // Look at https://docs.rs/thiserror/1.0.21/thiserror/ for details.\n // highlight-start\n #[error("The validator is not found")]\n NoValidatorFound {},\n // highlight-end\n}\n'})}),"\n",(0,s.jsx)(t.h3,{id:"imports",children:"Imports"}),"\n",(0,s.jsx)(t.p,{children:"The imports required for this next section are provided here. Paste these at the top of the file to get syntax highlighting."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'title="src/contract.rs"',children:"// highlight-start\nuse crate::state::{Reviews, REVIEWS, VALIDATORS};\nuse cosmwasm_std::to_json_binary;\nuse std::collections::BTreeMap;\n// highlight-end\n"})}),"\n",(0,s.jsx)(t.h3,{id:"modify-instantiate-message",children:"Modify Instantiate Message"}),"\n",(0,s.jsxs)(t.p,{children:["Even though no extra data is passed through to the setup method, an empty list of validators is saved to storage. This way if we try to get validators from the contract ",(0,s.jsx)(t.strong,{children:"before"})," any have been set by the chain, it returns nothing instead of an error."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'title="src/contract.rs"',children:'#[cfg_attr(not(feature = "library"), entry_point)]\npub fn instantiate(\n // highlight-next-line\n deps: DepsMut, // removes the underscore\n _env: Env,\n _info: MessageInfo,\n _msg: InstantiateMsg,\n) -> Result<Response, ContractError> {\n // highlight-start\n VALIDATORS.save(deps.storage, &Vec::new())?;\n Ok(Response::default())\n // highlight-end\n}\n'})}),"\n",(0,s.jsx)(t.h3,{id:"add-execute-logic",children:"Add Execute Logic"}),"\n",(0,s.jsx)(t.p,{children:"When the user sends a message, the contract needs to first check if the validator exist. It does this by loading the validators state and looping through all the validators to see if the one the user requested if in the list. If it is not, it returns to the user that the validator is not found. If it is found then the contract loads all reviews a validator has. If there are none, it creates an empty list of reviews since this will be the first one. The user's review is then added to the list and saved back to storage."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'title="src/contract.rs"',children:'#[cfg_attr(not(feature = "library"), entry_point)]\npub fn execute(\n // highlight-next-line\n deps: DepsMut, // removes the underscore\n _env: Env,\n _info: MessageInfo,\n // highlight-next-line\n msg: ExecuteMsg, // removes the underscore\n) -> Result<Response, ContractError> {\n // highlight-start\n match msg {\n ExecuteMsg::WriteReview { val_addr, review } => {\n let active_validators = VALIDATORS.load(deps.storage)?;\n if active_validators.iter().find(|v| v.address == val_addr).is_none() {\n return Err(ContractError::NoValidatorFound {});\n }\n\n // Get current validator reviews if any. If there are none, create a new empty review map.\n let mut all_revs: Reviews = match REVIEWS.may_load(deps.storage, &val_addr) {\n Ok(Some(rev)) => rev,\n _ => BTreeMap::new(),\n };\n\n // Set this users review for the validator.\n all_revs.insert(val_addr.clone(), review);\n\n // Save the updated reviews\n REVIEWS.save(deps.storage, &val_addr, &all_revs)?;\n }\n }\n\n Ok(Response::default())\n // highlight-end\n}\n'})}),"\n",(0,s.jsx)(t.h3,{id:"add-queries",children:"Add Queries"}),"\n",(0,s.jsxs)(t.p,{children:["It is only useful to set reviews if you can also get them back. The first query for ",(0,s.jsx)(t.code,{children:"Validators"})," is just a helper method so users can see who they are allowed to review. The second query is for ",(0,s.jsx)(t.code,{children:"Reviews"})," and takes a validator address as a parameter. This will return all reviews for that validator."]}),"\n",(0,s.jsxs)(t.p,{children:["To get reviews for all validators, a user would need to query ",(0,s.jsx)(t.code,{children:"Validators"}),", then iterate through all the addresses and query ",(0,s.jsx)(t.code,{children:"Reviews"})," for each one."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'title="src/contract.rs"',children:'#[cfg_attr(not(feature = "library"), entry_point)]\n// highlight-start\npub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {\n // note: ^^ deps & msg are not underscored ^^\n match msg {\n QueryMsg::Validators {} => {\n let validators = VALIDATORS.load(deps.storage)?;\n Ok(to_json_binary(&validators)?)\n }\n QueryMsg::Reviews { address } => {\n let reviews = REVIEWS.load(deps.storage, &address)?;\n Ok(to_json_binary(&reviews)?)\n }\n }\n// highlight-end\n}\n'})}),"\n",(0,s.jsx)(t.h3,{id:"add-new-sudo-message-type",children:"Add New Sudo Message Type"}),"\n",(0,s.jsx)(t.p,{children:"The chain extended portion of this contract is now added. It is where the validator logic is actually set and saved to storage. As the validator set changes (nodes stop, new nodes come online), the chain will update the contract right away."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'title="src/contract.rs"',children:'// highlight-start\n// Insert at the bottom of the file\n#[cfg_attr(not(feature = "library"), entry_point)]\npub fn sudo(deps: DepsMut, _env: Env, msg: crate::msg::SudoMsg) -> Result<Response, ContractError> {\n match msg {\n crate::msg::SudoMsg::SetValidators { validators } => {\n VALIDATORS.save(deps.storage, &validators)?;\n Ok(Response::new())\n }\n }\n}\n// highlight-end\n'})}),"\n",(0,s.jsx)(t.h3,{id:"build-the-contract",children:"Build the Contract"}),"\n",(0,s.jsxs)(t.p,{children:["Build the contract to get the cosmwasm wasm binary. This converts it from english programming rust text to 0s and 1s that the chain can understand. The ",(0,s.jsx)(t.code,{children:"optimize"})," script requires docker to be installed and running. Make sure you followed the setup prerequisites at the top of the page and have the docker service or docker desktop installed."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"# run the build optimizer (from source -> contract wasm binary)\ncargo run-script optimize\n"})}),"\n",(0,s.jsxs)(t.p,{children:["The .wasm file is then saved to ",(0,s.jsx)(t.code,{children:"./artifacts/validator_reviews_contract.wasm"}),"."]}),"\n",(0,s.jsx)(t.h2,{id:"modify-the-module",children:"Modify the Module"}),"\n",(0,s.jsx)(t.p,{children:"The contract is complete but we need to pass the data into the contract from the chain. This is done through the cosmos-sdk reviews module generated earlier. The module will be updated to include the wasm contract and the endblocker will be updated to pass the validator data to the contract."}),"\n",(0,s.jsx)(t.h3,{id:"setup-the-keeper",children:"Setup the Keeper"}),"\n",(0,s.jsx)(t.p,{children:"We must give our code access to other modules on the chain. The wasm module is required to interact with the contract. The staking module is required to get the list of validators. This keeper is the access point for all the specific logic."}),"\n",(0,s.jsx)(t.p,{children:"Add the imports, keeper setup, and new keeper output."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-go",metastring:'title="x/reviews/keeper.go"',children:'import (\n\t...\n\n // highlight-start\n\twasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"\n\twasmtypes "github.com/CosmWasm/wasmd/x/wasm/types"\n\tstakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"\n // highlight-end\n)\n\ntype Keeper struct\n ...\n\n // highlight-start\n WasmKeeper *wasmkeeper.Keeper\n\tContractKeeper wasmtypes.ContractOpsKeeper\n\tStakingKeeper *stakingkeeper.Keeper\n // highlight-end\n}\n\nfunc NewKeeper(\n ...\n // highlight-start\n wasmKeeper *wasmkeeper.Keeper, // since wasm may not be created yet.\n\tstakingKeeper *stakingkeeper.Keeper,\n // highlight-end\n authority string,\n) Keeper {\n ...\n\n k := Keeper{\n ...\n\n // highlight-start\n WasmKeeper: wasmKeeper,\n ContractKeeper: wasmkeeper.NewDefaultPermissionKeeper(wasmKeeper),\n StakingKeeper: stakingKeeper,\n // highlight-end\n\n authority: authority,\n\t}\n}\n'})}),"\n",(0,s.jsx)(t.h3,{id:"fix-keeper_test",children:"'Fix' keeper_test"}),"\n",(0,s.jsx)(t.admonition,{title:"Warning",type:"note",children:(0,s.jsx)(t.p,{children:"Testing wasm requires significantly more setup for the test environment. For now, just add a blank reference here."})}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-go",metastring:'title="x/reviews/keeper/keeper_test.go"',children:"func SetupTest(t *testing.T) *testFixture\n ...\n\n\t// Setup Keeper.\n // highlight-next-line\n\tf.k = keeper.NewKeeper(encCfg.Codec, storeService, logger, &wasmkeeper.Keeper{}, f.stakingKeeper, f.govModAddr)\n}\n"})}),"\n",(0,s.jsx)(t.h3,{id:"dependency-inject-v2",children:"Dependency Inject (v2)"}),"\n",(0,s.jsx)(t.p,{children:"Similar to the keeper_test issue, CosmWasm does not have support for Cosmos-SDK v2 depinject. This will be updated in the future. For now, set the keeper to nil and provide Staking reference. You do not need to know what this does. Just resolve the error on the line with a copy paste."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-go",metastring:'title="x/reviews/depinject.go"',children:"func ProvideModule(in ModuleInputs) ModuleOutputs {\n ...\n\n // highlight-next-line\n k := keeper.NewKeeper(in.Cdc, in.StoreService, log.NewLogger(os.Stderr), nil, &in.StakingKeeper, govAddr)\n}\n"})}),"\n",(0,s.jsx)(t.h3,{id:"fix-appgo-references",children:"Fix app.go references"}),"\n",(0,s.jsx)(t.p,{children:"The main application needs the access to the wasm and staking logic as well. Fix the missing imports and add them in like so."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-go",metastring:'title="app/app.go"',children:"\tapp.ReviewsKeeper = reviewskeeper.NewKeeper(\n\t\tappCodec,\n\t\truntime.NewKVStoreService(keys[reviewstypes.StoreKey]),\n\t\tlogger,\n // highlight-start\n\t\t&app.WasmKeeper,\n\t\tapp.StakingKeeper,\n // highlight-end\n\t\tauthtypes.NewModuleAddress(govtypes.ModuleName).String(),\n\t)\n"})}),"\n",(0,s.jsx)(t.p,{children:"it is now time to use these modules and write the logic to pass data to the contract from the chain."}),"\n",(0,s.jsx)(t.h3,{id:"module-core-logic",children:"Module Core Logic"}),"\n",(0,s.jsxs)(t.p,{children:["The CosmWasm contract requires data in a specific format. You can review this back in the ",(0,s.jsx)(t.code,{children:"src/state.rs"})," file. Since the chain only is passing validator data over, we need to convert this into Go code manually. The ",(0,s.jsx)(t.code,{children:"Validator"})," struct is created to match the contract. The CosmWasm contract expects a JSON formatted input. This input is put together with the ",(0,s.jsx)(t.code,{children:"Formatted"})," method on a list of validators. The chain could have just 1 validator, or several hundred. This method will convert them all into the correct format for the list we are to pass."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-go",metastring:'title="x/reviews/module.go"',children:'// Add this below AppModule struct {\n\n// highlight-start\ntype Validator struct {\n\tAddress string `json:"address"`\n\tMoniker string `json:"moniker"`\n}\n\ntype Validators []Validator\n\nfunc (vs Validators) Formatted() string {\n\toutput := ""\n\tfor _, val := range vs {\n\t\toutput += fmt.Sprintf(`{"address":"%s","moniker":"%s"},`, val.Address, val.Moniker)\n\t}\n\n // remove the trailing comma from the last output append.\n\treturn output[:len(output)-1]\n}\n// highlight-end\n'})}),"\n",(0,s.jsx)(t.h3,{id:"implement-the-endblocker",children:"Implement the EndBlocker"}),"\n",(0,s.jsxs)(t.p,{children:["To pass data we must first get the data. Using the ",(0,s.jsx)(t.code,{children:"GetAllValidators"})," method from the staking module, all validators are now accessible for the logic to use. Loop through these validators and only add the ones that are bonded (active) to the list of validators. If they are bonded, they are added to the list."]}),"\n",(0,s.jsxs)(t.p,{children:["Once all validators have been processed the ",(0,s.jsx)(t.code,{children:"endBlockSudoMsg"})," gets them into the JSON format required. The format is out of scope but a high level overview"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsxs)(t.li,{children:[(0,s.jsx)(t.code,{children:"SetValidators"})," in the code becomes ",(0,s.jsx)(t.code,{children:"set_validators"}),", called ",(0,s.jsx)(t.a,{href:"https://simple.wikipedia.org/wiki/Snake_case",children:"snake case"}),"."]}),"\n",(0,s.jsxs)(t.li,{children:["The ",(0,s.jsx)(t.code,{children:"SetValidators"})," type in rust has the element called ",(0,s.jsx)(t.code,{children:"validators"})," which is an array of ",(0,s.jsx)(t.code,{children:"Validator"})," objects. This is the ",(0,s.jsx)(t.code,{children:"validators"})," array in the JSON."]}),"\n",(0,s.jsxs)(t.li,{children:["Each ",(0,s.jsx)(t.code,{children:"Validator"})," object has an ",(0,s.jsx)(t.code,{children:"address"})," and ",(0,s.jsx)(t.code,{children:"moniker"})," field. These are the ",(0,s.jsx)(t.code,{children:"address"})," and ",(0,s.jsx)(t.code,{children:"moniker"})," fields in the JSON, called from the Formatted() method."]}),"\n"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-go",metastring:'title="x/reviews/module.go"',children:'// Paste this anywhere within the file\n// highlight-start\nfunc (am AppModule) EndBlock(ctx context.Context) error {\n\tstakingVals, err := am.keeper.StakingKeeper.GetAllValidators(ctx)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvalidators := Validators{}\n\tfor _, val := range stakingVals {\n // if it is not active, skip it\n\t\tif !val.IsBonded() {\n\t\t\tcontinue\n\t\t}\n\n\t\tvalidators = append(validators, Validator{\n\t\t\tAddress: val.OperatorAddress,\n\t\t\tMoniker: val.Description.Moniker,\n\t\t})\n\t}\n\n // The first contract created from acc0\n addr := "roll14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjczpjh"\n\tcontract := sdk.MustAccAddressFromBech32(addr)\n\n // SudoMsg format for the contract input.\n // example: {"set_validators":{"validators":[{"address":"ADDRESS","moniker": "NAME"}]}}\n endBlockSudoMsg := fmt.Sprintf(`{"set_validators":{"validators":[%s]}}`, validators.Formatted())\n\tfmt.Println("EndBlockSudoMessage Format:", endBlockSudoMsg)\n\n // When the network first starts up there is no contract to execute against (until uploaded)\n // This returns an error but is expected behavior initially.\n // You can not return errors in the EndBlocker as it is not a transaction. It will halt the network.\n //\n // This is why the error is only printed to the logs and not returned.\n //\n // A more proper solution would set the contract via a SDK message after it is uploaded.\n // This is out of scope for this tutorial, but a future challenge for you.\n\tres, err := am.keeper.ContractKeeper.Sudo(sdk.UnwrapSDKContext(ctx), contract, []byte(endBlockSudoMsg))\n if err != nil {\n fmt.Println("EndBlockSudoResult", res)\n fmt.Println("EndBlockSudoError", err)\n }\n\n\treturn nil\n}\n// highlight-end\n'})}),"\n",(0,s.jsx)(t.h2,{id:"test-deployment",children:"Test Deployment"}),"\n",(0,s.jsx)(t.h3,{id:"start-testnet",children:"Start Testnet"}),"\n",(0,s.jsx)(t.p,{children:"Begin the CosmWasm testnet with the custom EndBlocker logic. You will see errors every block. This is expected and is explained in the EndBlock code why this is the case."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"make sh-testnet\n"})}),"\n",(0,s.jsx)(t.h3,{id:"upload-contract",children:"Upload Contract"}),"\n",(0,s.jsxs)(t.p,{children:["Make sure you are in the ",(0,s.jsx)(t.code,{children:"rollchain"})," directory to begin interacting and uploading the contract to the chain."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"CONTRACT_SOURCE=./validator-reviews-contract/artifacts/validator_reviews_contract.wasm\nrolld tx wasm store $CONTRACT_SOURCE --from=acc0 --gas=auto --gas-adjustment=2.0 --yes\n# rolld q wasm list-code\n"})}),"\n",(0,s.jsx)(t.h3,{id:"instantiate-our-contract",children:"Instantiate our Contract"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"rolld tx wasm instantiate 1 '{}' --no-admin --from=acc0 --label=\"reviews\" \\\n --gas=auto --gas-adjustment=2.0 --yes\n\nrolld q wasm list-contracts-by-creator roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87\n\nREVIEWS_CONTRACT=roll14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjczpjh\n"})}),"\n",(0,s.jsx)(t.h3,{id:"verify-data",children:"Verify data"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"rolld q wasm state smart $REVIEWS_CONTRACT '{\"validators\":{}}'\n"})}),"\n",(0,s.jsx)(t.h2,{id:"write-a-review",children:"Write a review"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'MESSAGE=\'{"write_review":{"val_addr":"rollvaloper1hj5fveer5cjtn4wd6wstzugjfdxzl0xpmhf3p6","review":"hi reviewing."}}\'\nrolld tx wasm execute $REVIEWS_CONTRACT "$MESSAGE" --from=acc0 \\\n --gas=auto --gas-adjustment=2.0 --yes\n'})}),"\n",(0,s.jsx)(t.h3,{id:"verify-the-review",children:"Verify the review"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'rolld q wasm state smart $REVIEWS_CONTRACT \'{"reviews":{"address":"rollvaloper1hj5fveer5cjtn4wd6wstzugjfdxzl0xpmhf3p6"}}\'\n'})}),"\n",(0,s.jsx)(t.h3,{id:"write-a-review-for-a-non-validator",children:"Write a review for a non-validator"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'MESSAGE=\'{"write_review":{"val_addr":"NotAValidator","review":"hi this is a review"}}\'\n\nrolld tx wasm execute $REVIEWS_CONTRACT "$MESSAGE" --from=acc0 \\\n --gas=auto --gas-adjustment=2.0 --yes\n'})})]})}function h(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>o,a:()=>i});var s=n(7294);const r={},a=s.createContext(r);function i(e){const t=s.useContext(a);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function o(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),s.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/a7bd4aaa.ced71ed2.js b/assets/js/a7bd4aaa.ced71ed2.js new file mode 100644 index 00000000..70cecdf9 --- /dev/null +++ b/assets/js/a7bd4aaa.ced71ed2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[518],{8564:(n,s,e)=>{e.r(s),e.d(s,{default:()=>l});e(7294);var r=e(1944),o=e(3320),t=e(4477),c=e(8790),i=e(197),u=e(5893);function a(n){const{version:s}=n;return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(i.Z,{version:s.version,tag:(0,o.os)(s.pluginId,s.version)}),(0,u.jsx)(r.d,{children:s.noIndex&&(0,u.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})]})}function d(n){const{version:s,route:e}=n;return(0,u.jsx)(r.FG,{className:s.className,children:(0,u.jsx)(t.q,{version:s,children:(0,c.H)(e.routes)})})}function l(n){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(a,{...n}),(0,u.jsx)(d,{...n})]})}}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.12653146.js b/assets/js/a94703ab.12653146.js new file mode 100644 index 00000000..f50422c6 --- /dev/null +++ b/assets/js/a94703ab.12653146.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[368],{2674:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(7294),o=n(512),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),k=n(1327);function v(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 _={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",_.collapseSidebarButton),onClick:t,children:(0,b.jsx)(v,{className:_.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(3692),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}),"aria-expanded":!t,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)(),k=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),v=(0,l._F)(t,i),_=(0,Z.Mg)(x,i),{collapsed:g,setCollapsed:C}=(0,B.u)({initialState:()=>!!h&&(!v&&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:v,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":_}),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":v}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":_?"page":void 0,role:h&&!x?"button":void 0,"aria-expanded":h&&!x?!g:void 0,href:h?k??"#":k,...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.n)(),[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)(k.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)(v,{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(512),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/aba21aa0.07cbdb4f.js b/assets/js/aba21aa0.07cbdb4f.js new file mode 100644 index 00000000..98f57784 --- /dev/null +++ b/assets/js/aba21aa0.07cbdb4f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[629],{1765:s=>{s.exports=JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"default"}')}}]); \ No newline at end of file diff --git a/assets/js/ac49df54.4e753bbe.js b/assets/js/ac49df54.4e753bbe.js new file mode 100644 index 00000000..405910e1 --- /dev/null +++ b/assets/js/ac49df54.4e753bbe.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[221],{3307:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>r,toc:()=>l});var s=t(5893),a=t(1151);const o={title:"IBC Transfers",sidebar_label:"IBC Transfers",slug:"/demo/ibc"},i="IBC Demo",r={id:"demos/ibc-transfer-demo",title:"IBC Transfers",description:'In this tutorial, we\'ll create and interact with a new Cosmos-SDK blockchain called "rollchain", with the token denomination "uroll". This chain has tokenfactory and Proof of Authority, but we\'ll disable cosmwasm.',source:"@site/versioned_docs/version-v0.50.x/03-demos/01-ibc-transfer-demo.md",sourceDirName:"03-demos",slug:"/demo/ibc",permalink:"/spawn/v0.50/demo/ibc",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:1,frontMatter:{title:"IBC Transfers",sidebar_label:"IBC Transfers",slug:"/demo/ibc"},sidebar:"defaultSidebar",previous:{title:"IBC Contract (Part 3)",permalink:"/spawn/v0.50/build/name-service-ibc-contract"},next:{title:"CosmWasm NFTs",permalink:"/spawn/v0.50/demo/cw-nft"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Create your chain",id:"create-your-chain",level:2},{value:"Spin up an IBC testnet",id:"spin-up-an-ibc-testnet",level:2},{value:"Send a Transaction",id:"send-a-transaction",level:2},{value:"Send an IBC transaction",id:"send-an-ibc-transaction",level:2},{value:"(optional) Push to GitHub",id:"optional-push-to-github",level:2},{value:"Conclusion",id:"conclusion",level:2}];function h(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"ibc-demo",children:"IBC Demo"}),"\n",(0,s.jsx)(n.p,{children:'In this tutorial, we\'ll create and interact with a new Cosmos-SDK blockchain called "rollchain", with the token denomination "uroll". This chain has tokenfactory and Proof of Authority, but we\'ll disable cosmwasm.'}),"\n",(0,s.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/spawn/v0.50/install/system-setup",children:"System Setup"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/spawn/v0.50/install/install-spawn",children:"Install Spawn"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"create-your-chain",children:"Create your chain"}),"\n",(0,s.jsxs)(n.p,{children:["Create your chain using the spawn command line tool. Change the ",(0,s.jsx)(n.code,{children:"GITHUB_USERNAME"})," to your github username.\nIf you do not have a github, leaving it as default is fine."]}),"\n",(0,s.jsxs)(n.p,{children:["Create a ",(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Proof_of_authority",children:"Proof of Authority"})," network to focus on the application logic rather than worry about the security model. This is a great starting point for new chains."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"GITHUB_USERNAME=rollchains\n\n# If the `--consensus` or `--disabled` flags are not present,\n# a selector UI will appear in your terminal to see all options.\nspawn new rollchain \\\n--consensus=proof-of-authority \\\n--bech32=roll \\\n--denom=uroll \\\n--bin=rolld \\\n--disabled=cosmwasm,block-explorer \\\n--org=${GITHUB_USERNAME}\n"})}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"NOTE:"})," ",(0,s.jsx)(n.code,{children:"spawn"})," creates a ready to use repository complete with ",(0,s.jsx)(n.code,{children:"git"})," and GitHub CI. It can be quickly pushed to a new repository getting you and your team up and running quickly."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"spin-up-an-ibc-testnet",children:"Spin up an IBC testnet"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"chains/testnet.json"})," file contains the configuration for the testnet. It is a simple JSON file that contains the chain configurations for the testnet. By default it starts 2 networks, configures a relayer, and connects the two chains via IBC."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"cd rollchain\n\n# Starts 2 networks for the IBC testnet at http://127.0.0.1:8080.\n# - Builds the docker image of your chain\n# - Launches a testnet with IBC automatically connected and relayed\n#\n# Note: you can run a single node, non IBC testnet, with `make sh-testnet`.\nmake testnet\n"})}),"\n",(0,s.jsx)(n.h2,{id:"send-a-transaction",children:"Send a Transaction"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:'# list the keys that have been provisioned with funds at launch\nrolld keys list\n\n# send a transaction from one account to another\nrolld tx bank send acc0 $(rolld keys show acc1 -a) 1337uroll --chain-id=localchain-1\n\n# enter "y" to confirm the transaction\n# then query your balances for proof the transaction executed successfully\nrolld q bank balances $(rolld keys show acc1 -a)\n'})}),"\n",(0,s.jsx)(n.h2,{id:"send-an-ibc-transaction",children:"Send an IBC transaction"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# submit a cross chain transfer from acc0 to the other address\nrolld tx ibc-transfer transfer transfer channel-0 cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr 7uroll --from=acc0 --chain-id=localchain-1 --yes\n\n# Query the other side to confirm it went through\nsleep 10\n\n# Interact with the other chain without having to install the cosmos binary\n# - Endpoints found at: GET http://127.0.0.1:8080/info\n# - make get-localic\nlocal-ic interact localcosmos-1 query 'bank balances cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr'\n"})}),"\n",(0,s.jsx)(n.h2,{id:"optional-push-to-github",children:"(optional) Push to GitHub"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Create a new repository on GitHub from the gh cli\ngh repo create rollchain --source=. --remote=upstream --push --private\n"})}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.p,{children:["You can also push it the old fashioned way with ",(0,s.jsx)(n.a,{href:"https://github.com/new",children:"https://github.com/new"})]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,s.jsx)(n.p,{children:"In this tutorial, you configured a new custom chain, launched a testnet for it, tested a cross chain token transfer, and confirmed it was successful. This tutorial demonstrates just how easy it is to create a brand new custom Cosmos-SDK blockchain from scratch with spawn."})]})}function d(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>i});var s=t(7294);const a={},o=s.createContext(a);function i(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(a):e.components||a:i(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b13fbd5d.9136380e.js b/assets/js/b13fbd5d.9136380e.js new file mode 100644 index 00000000..fc9c1220 --- /dev/null +++ b/assets/js/b13fbd5d.9136380e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[99],{7854:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var i=t(5893),a=t(1151);const r={title:"IBC NameService Module",sidebar_label:"IBC NameService (Part 2)",sidebar_position:8,slug:"/build/name-service-ibc-module"},s="IBC Name Service Module",o={id:"build-your-application/ibc-module",title:"IBC NameService Module",description:"In this section, you will build on top of the Name Service tutorial to add cross chain functionality. This will allow you to sent a name from another network.",source:"@site/versioned_docs/version-v0.50.x/02-build-your-application/08-ibc-module.md",sourceDirName:"02-build-your-application",slug:"/build/name-service-ibc-module",permalink:"/spawn/v0.50/build/name-service-ibc-module",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:8,frontMatter:{title:"IBC NameService Module",sidebar_label:"IBC NameService (Part 2)",sidebar_position:8,slug:"/build/name-service-ibc-module"},sidebar:"defaultSidebar",previous:{title:"Summary",permalink:"/spawn/v0.50/build/name-service-summary"},next:{title:"IBC Contract (Part 3)",permalink:"/spawn/v0.50/build/name-service-ibc-contract"}},l={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Create your chain",id:"create-your-chain",level:2},{value:"Scaffold the IBC Module",id:"scaffold-the-ibc-module",level:2},{value:"Use the NameService Module",id:"use-the-nameservice-module",level:2},{value:"Provide NameService to the IBC Module",id:"provide-nameservice-to-the-ibc-module",level:2},{value:"Set Name on IBC Packet",id:"set-name-on-ibc-packet",level:2},{value:"Start Testnet",id:"start-testnet",level:2},{value:"Import Testnet Helpers",id:"import-testnet-helpers",level:2},{value:"Connect Your IBC Modules",id:"connect-your-ibc-modules",level:2},{value:"Submit Name Service Name Over IBC",id:"submit-name-service-name-over-ibc",level:2},{value:"Summary",id:"summary",level:2},{value:"What you Learned",id:"what-you-learned",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(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,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"ibc-name-service-module",children:"IBC Name Service Module"}),"\n",(0,i.jsx)(n.p,{children:"In this section, you will build on top of the Name Service tutorial to add cross chain functionality. This will allow you to sent a name from another network."}),"\n",(0,i.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/spawn/v0.50/install/system-setup",children:"System Setup"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/spawn/v0.50/install/install-spawn",children:"Install Spawn"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"/spawn/v0.50/build/name-service",children:"Build Your Name Service Chain Tutorial"})}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"create-your-chain",children:"Create your chain"}),"\n",(0,i.jsxs)(n.p,{children:["You should already have a network, ",(0,i.jsx)(n.code,{children:"rollchain"}),", with the nameservice module from the nameservice tutorial. If you do not, complete that tutorial now."]}),"\n",(0,i.jsx)(n.admonition,{title:"warning",type:"note",children:(0,i.jsxs)(n.p,{children:["Make sure you do not have the previous testnet still running by stopping it with: ",(0,i.jsx)(n.code,{children:"killall -9 rolld"})]})}),"\n",(0,i.jsx)(n.h2,{id:"scaffold-the-ibc-module",children:"Scaffold the IBC Module"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# if you are not already in the chain directory:\ncd rollchain\n\n# scaffold the base IBC module for The\n# cross chain name service\nspawn module new nsibc --ibc-module\n\n# compile latest code with matching module name\n# failure to do this will result in: `panic: reflect: New(nil)`\nmake proto-gen\n"})}),"\n",(0,i.jsx)(n.h2,{id:"use-the-nameservice-module",children:"Use the NameService Module"}),"\n",(0,i.jsx)(n.p,{children:"You now use the nameservice module you built previously within this new IBC module. This will allow you to save the name mapping on the name service, making it available for both IBC and native chain interactions."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-go",metastring:'title="x/nsibc/keeper/keeper.go"',children:'import (\n\t...\n\t// highlight-next-line\n\tnameservicekeeper "github.com/rollchains/rollchain/x/nameservice/keeper"\n)\n\ntype Keeper struct {\n\t...\n\t// highlight-next-line\n\tNameServiceKeeper *nameservicekeeper.Keeper\n}\n'})}),"\n",(0,i.jsxs)(t,{children:[(0,i.jsx)("summary",{children:"Keeper Setup Image"}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://github.com/user-attachments/assets/4dd3e50d-1528-4ae4-91a2-a27612bf69d7",alt:"View"})})]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-go",metastring:'title="x/nsibc/keeper/keeper.go"',children:"// NewKeeper creates a new Keeper instance.\nfunc NewKeeper(\n\t...\n\t// highlight-next-line\n\tnsk *nameservicekeeper.Keeper,\n) Keeper {\n ...\n\n\tk := Keeper{\n\t\t...\n\t\t// highlight-next-line\n\t\tNameServiceKeeper: nsk,\n\t}\n"})}),"\n",(0,i.jsxs)(t,{children:[(0,i.jsx)("summary",{children:"NewKeeper Image"}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://github.com/user-attachments/assets/7639e468-a354-468d-8368-6bedd3c142a7",alt:"View"})})]}),"\n",(0,i.jsx)(n.h2,{id:"provide-nameservice-to-the-ibc-module",children:"Provide NameService to the IBC Module"}),"\n",(0,i.jsxs)(n.p,{children:["You must now give the IBC module access to nameservice keeper. It needs this reference so that the logic and connections can be shared. This is done in the ",(0,i.jsx)(n.code,{children:"app/app.go"})," file. Find where the NameService IBC line is and update it to include the ",(0,i.jsx)(n.code,{children:"&app.NameserviceKeeper,"})," reference."]}),"\n",(0,i.jsxs)(n.p,{children:["You can find the ",(0,i.jsx)(n.code,{children:"NameserviceKeeper"})," set just after the ",(0,i.jsx)(n.code,{children:"NsibcKeeper"})," is set. If you would like to re-order the original NameService keeper, you can do so."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-go",metastring:'title="app/app.go"',children:"\t// Create the nsibc IBC Module Keeper\n\tapp.NsibcKeeper = nsibckeeper.NewKeeper(\n\t\tappCodec,\n\t\truntime.NewKVStoreService(keys[nsibctypes.StoreKey]),\n\t\tapp.IBCKeeper.ChannelKeeper,\n\t\tapp.IBCKeeper.PortKeeper,\n\t\tscopedNsibc,\n\t\t// highlight-next-line\n\t\t&app.NameserviceKeeper, // This line added here\n\t\tauthtypes.NewModuleAddress(govtypes.ModuleName).String(),\n\t)\n"})}),"\n",(0,i.jsxs)(t,{children:[(0,i.jsx)("summary",{children:"Application NameService Reference Image"}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://github.com/user-attachments/assets/6da58e1d-481b-46ba-bb66-d6c4a96971d0",alt:"View"})})]}),"\n",(0,i.jsx)(n.h2,{id:"set-name-on-ibc-packet",children:"Set Name on IBC Packet"}),"\n",(0,i.jsxs)(n.p,{children:["Now that the IBC module has access to the nameservice, you can add the logic to set a name received from another chain (called the counterparty). To implement, the ",(0,i.jsx)(n.code,{children:"OnRecvPacket"})," method has a placeholder for where the logic should run called ",(0,i.jsx)(n.code,{children:"handleOnRecvLogic"}),". Find the ",(0,i.jsx)(n.code,{children:"OnRecvPacket"})," in the ibc_module.go file, then find where the ",(0,i.jsx)(n.code,{children:"handleOnRecvLogic"})," method resides."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-go",metastring:'title="x/nsibc/ibc_module.go"',children:"// Find this method in the file\nfunc (im ExampleIBCModule) handleOnRecvLogic(ctx context.Context, data types.ExamplePacketData) error {\n\t...\n\treturn nil\n}\n"})}),"\n",(0,i.jsxs)(t,{children:[(0,i.jsx)("summary",{children:"handleOnRecvLogic location"}),(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:"https://github.com/user-attachments/assets/011cb6cb-6664-47b9-a09e-fe1b62862987",alt:"View"})})]}),"\n",(0,i.jsx)(n.p,{children:"Once found, remove the lines within and replace with the following return."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-go",metastring:'title="x/nsibc/ibc_module.go"',children:'func (im ExampleIBCModule) handleOnRecvLogic(ctx context.Context, data types.ExamplePacketData) error {\n\t// highlight-start\n\tif len(data.SomeData) > 32 {\n\t\treturn fmt.Errorf("name cannot be longer than 32 characters")\n\t}\n\treturn im.keeper.NameServiceKeeper.NameMapping.Set(ctx, data.Sender, data.SomeData)\n\t// highlight-end\n}\n'})}),"\n",(0,i.jsx)(n.p,{children:"This sets the name mapping from the sender to some data (the name) in the original nameservice module."}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"This is for example to show cross module interaction / extension with IBC.\nYou could just as easily write the NameMapping in the ibc keeper store as well."})}),"\n",(0,i.jsx)(n.h2,{id:"start-testnet",children:"Start Testnet"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# build chain binary\nmake install\n\n# verify the binary works. if you get a panic,\n# `make proto-gen`, then re `make install`\nrolld\n\n# build docker image\nmake local-image\n\n# run testnet between itself and an IBC relayer\n# this will take a minute\nlocal-ic start self-ibc\n"})}),"\n",(0,i.jsx)(n.h2,{id:"import-testnet-helpers",children:"Import Testnet Helpers"}),"\n",(0,i.jsxs)(n.p,{children:["Pasting the following lines in your terminal will import helper functions to interact with the testnet.\nThe source is publicly available on GitHub to review. It gives you the ability to interact with the testnet easily using special ",(0,i.jsx)(n.code,{children:"ICT_"})," commands."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'# Import the testnet interaction helper functions\n# for local-interchain\ncurl -s https://raw.githubusercontent.com/strangelove-ventures/interchaintest/main/local-interchain/bash/source.bash > ict_source.bash\nsource ./ict_source.bash\n\nAPI_ADDR="http://localhost:8080"\n\n# Waits for the testnet to start\nICT_POLL_FOR_START $API_ADDR 50 && echo "Testnet started"\n'})}),"\n",(0,i.jsx)(n.h2,{id:"connect-your-ibc-modules",children:"Connect Your IBC Modules"}),"\n",(0,i.jsxs)(n.p,{children:["You are ready to connect the two chains with your IBC module protocol. The ",(0,i.jsx)(n.a,{href:"https://github.com/cosmos/relayer",children:"cosmos/relayer"})," is already running between the 2 networks now."]}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsx)(n.p,{children:"A Channel is a connection between two chains, like a highway. A port is a specific protocol (or logic) that can connect with itself on another chain.\nFor example; transfer to transfer, nsibc to nsibc, but transfer to nsibc can not be done. The version is just extra information (metadata) about the connection."}),(0,i.jsx)(n.p,{children:'These values are found in the keys.go file as the module name. By default version is just the module name + "-1".'})]}),"\n",(0,i.jsx)(n.p,{children:"Execute the command on the testnet to connect the two chains with the IBC module with the relayer."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'# This will take a minute.\nICT_RELAYER_EXEC $API_ADDR "localchain-1" "rly tx connect localchain-1_localchain-2 --src-port=nsibc --dst-port=nsibc --order=unordered --version=nsibc-1"\n\n# Running the channels command now shows 2 channels, one for `transfer`\n# and 1 for `nsibc`, marked as channel-1.\necho `ICT_RELAYER_CHANNELS $API_ADDR "localchain-1"`\n'})}),"\n",(0,i.jsx)(n.h2,{id:"submit-name-service-name-over-ibc",children:"Submit Name Service Name Over IBC"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:'# Set the IBC name from chain 1.\n# view this command in x/nsibc/client/tx.go\nrolld tx nsibc example-tx nsibc channel-1 testname --from acc0 --chain-id localchain-1 --yes\n\n# View the logs\nrolld q tx 8A2009667022BE432B60158498C2256AEED0E86E9DFF79BD11CC9EA70DEC4A8A\n\n# Verify chain 2 set the name (\n# `rolld keys show -a acc0` from chain-1\nICT_QUERY "http://localhost:8080" "localchain-2" "nameservice resolve roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87"\n'})}),"\n",(0,i.jsx)(n.h2,{id:"summary",children:"Summary"}),"\n",(0,i.jsx)(n.p,{children:"You just build an IBC module that interacts with your other nameservice module! It allowed you to set your name from a different network entirely and securely with IBC."}),"\n",(0,i.jsx)(n.h2,{id:"what-you-learned",children:"What you Learned"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Scaffolding an IBC module"}),"\n",(0,i.jsx)(n.li,{children:"Importing another module"}),"\n",(0,i.jsx)(n.li,{children:"Adding business logic for an IBC request"}),"\n",(0,i.jsx)(n.li,{children:"Connecting two chains with a custom IBC protocol"}),"\n",(0,i.jsx)(n.li,{children:"Sending your first IBC packet from chain A"}),"\n",(0,i.jsx)(n.li,{children:"Processing the packet on chain B and verifying it was set"}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(h,{...e})}):h(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>o,a:()=>s});var i=t(7294);const a={},r=i.createContext(a);function s(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b9ff4302.c2988704.js b/assets/js/b9ff4302.c2988704.js new file mode 100644 index 00000000..1401cce7 --- /dev/null +++ b/assets/js/b9ff4302.c2988704.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[429],{6663:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>o,contentTitle:()=>a,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>c});var r=n(5893),l=n(1151);const s={title:"Name Service",sidebar_label:"Bonus",sidebar_position:6,slug:"/build/name-service-bonus"},a="Extra Challenges",i={id:"build-your-application/extra-challenge",title:"Name Service",description:"Challenge 1: Limit Input",source:"@site/versioned_docs/version-v0.50.x/02-build-your-application/06-extra-challenge.md",sourceDirName:"02-build-your-application",slug:"/build/name-service-bonus",permalink:"/spawn/v0.50/build/name-service-bonus",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:6,frontMatter:{title:"Name Service",sidebar_label:"Bonus",sidebar_position:6,slug:"/build/name-service-bonus"},sidebar:"defaultSidebar",previous:{title:"Testnet",permalink:"/spawn/v0.50/build/name-service-testnet"},next:{title:"Summary",permalink:"/spawn/v0.50/build/name-service-summary"}},o={},c=[{value:"Challenge 1: Limit Input",id:"challenge-1-limit-input",level:2},{value:"Challenge 2: Resolve Wallet From Name",id:"challenge-2-resolve-wallet-from-name",level:2}];function m(e){const t={blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,l.a)(),...e.components},{Details:n}=t;return n||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,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"extra-challenges",children:"Extra Challenges"}),"\n",(0,r.jsx)(t.h2,{id:"challenge-1-limit-input",children:"Challenge 1: Limit Input"}),"\n",(0,r.jsxs)(t.p,{children:["It seems the nameservice will let you set any name length you want. Add a validation check in ",(0,r.jsx)(t.code,{children:"SetServiceName"})," to ensure the name is less than 32 characters long."]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Hint #1"}),(0,r.jsxs)("p",{children:["The ",(0,r.jsx)(t.code,{children:"SetServiceName"})," in the msg_server.go looks like an interesting place to start. It should return an error if the name is too long."]})]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Solution"}),(0,r.jsx)(t.p,{children:"If a user attempts to submit a name longer than 32 characters, it will return an error that is not allowed."}),(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-go",metastring:'title="x/nameservice/keeper/msg_server.go"',children:'// SetServiceName implements types.MsgServer.\nfunc (ms msgServer) SetServiceName(ctx context.Context, msg *types.MsgSetServiceName) (*types.MsgSetServiceNameResponse, error) {\n\tif len(msg.Name) > 32 {\n\t\treturn nil, fmt.Errorf("name cannot be longer than 32 characters")\n\t}\n\n\tif err := ms.k.NameMapping.Set(ctx, msg.Sender, msg.Name); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn &types.MsgSetServiceNameResponse{}, nil\n}\n'})})]}),"\n",(0,r.jsx)(t.h2,{id:"challenge-2-resolve-wallet-from-name",children:"Challenge 2: Resolve Wallet From Name"}),"\n",(0,r.jsxs)(t.p,{children:["Currently the nameservice only allows you to resolve a name given a wallet. If someone has a name they should be able to resolve the wallet address. Add a new query to the ",(0,r.jsx)(t.code,{children:"query_server"})," and autocli client to resolve a wallet address from a name."]}),"\n",(0,r.jsxs)(t.blockquote,{children:["\n",(0,r.jsx)(t.p,{children:"This challenge is signinicantly harder and will some previous Go programming knowledge with iterators. You can also just copy the solutions."}),"\n"]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Hint #1"}),(0,r.jsx)("p",{children:"Create a new query.proto for ResolveWallet that takes in a name string"})]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Solution #1"}),(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-protobuf",metastring:'title="proto/nameservice/v1/query.proto"',children:'// Query provides defines the gRPC querier service.\nservice Query {\n // Params queries all parameters of the module.\n rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {\n option (google.api.http).get = "/nameservice/v1/params";\n }\n\n // ResolveName allows a user to resolve the name of an account.\n rpc ResolveName(QueryResolveNameRequest) returns (QueryResolveNameResponse) {\n option (google.api.http).get = "/nameservice/v1/name/{wallet}";\n }\n\n // highlight-start\n // ResolveWallet allows a user to resolve the wallet of a name.\n rpc ResolveWallet(QueryResolveWalletRequest) returns (QueryResolveWalletResponse) {\n option (google.api.http).get = "/nameservice/v1/wallet/{name}";\n }\n // highlight-end\n}\n\n// highlight-start\nmessage QueryResolveWalletRequest {\n string name = 1;\n}\n\nmessage QueryResolveWalletResponse {\n string wallet = 1;\n}\n// highlight-end\n'})}),(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-bash",children:"make proto-gen\n"})})]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Hint #2"}),(0,r.jsxs)("p",{children:["Iterate through the ",(0,r.jsx)(t.code,{children:"k.Keeper.NameMapping"}),", check the Value(). if it matches the name requested, return that wallet (Key)"]})]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Solution #2"}),(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-go",metastring:'title="x/nameservice/keeper/query_server.go"',children:'// ResolveWallet implements types.QueryServer.\nfunc (k Querier) ResolveWallet(goCtx context.Context, req *types.QueryResolveWalletRequest) (*types.QueryResolveWalletResponse, error) {\n\t// highlight-start\n\t// create a way to iterate over all the name mappings.\n\titer, err := k.Keeper.NameMapping.Iterate(goCtx, nil)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\tdefer iter.Close()\n\n\tfor ; iter.Valid(); iter.Next() {\n\t\t// get the value (name)\n\t\tv, err := iter.Value()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\n\t\t// if current name matches the requested name,\n\t\t// return the wallet address for the name\n\t\tif v == req.Name {\n\t\t\twalletAddr, err := iter.Key()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, err\n\t\t\t}\n\n\t\t\treturn &types.QueryResolveWalletResponse{\n\t\t\t\tWallet: walletAddr,\n\t\t\t}, nil\n\t\t}\n\t}\n\n\treturn nil, fmt.Errorf("wallet not found for name %s", req.Name)\n\t// highlight-end\n}\n\n\n'})}),(0,r.jsxs)(t.p,{children:["This is not the most efficient way to do this. If you would like, create a new WalletMapping collection that maps name->sender when ",(0,r.jsx)(t.code,{children:"SetServiceName"})," is called. This way you can resolve the wallet from the name in O(1) time (i.e. instant) instead of looping through all possible wallets."]})]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Hint #3"}),(0,r.jsxs)("p",{children:["Add the AutoCLI method to ",(0,r.jsx)(t.code,{children:"ResolveWallet"})," with the ",(0,r.jsx)(t.code,{children:"ProtoField"}),' "name" to match the .proto file']})]}),"\n",(0,r.jsxs)(n,{children:[(0,r.jsx)("summary",{children:"Solution #3"}),(0,r.jsx)(t.pre,{children:(0,r.jsx)(t.code,{className:"language-go",metastring:'title="x/nameservice/autocli.go"',children:'func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions {\n\treturn &autocliv1.ModuleOptions{\n\t\tQuery: &autocliv1.ServiceCommandDescriptor{\n\t\t\tService: modulev1.Query_ServiceDesc.ServiceName,\n\t\t\tRpcCommandOptions: []*autocliv1.RpcCommandOptions{\n\t\t\t\t{\n\t\t\t\t\tRpcMethod: "ResolveName",\n\t\t\t\t\tUse: "resolve [wallet]",\n\t\t\t\t\tShort: "Resolve the name of a wallet address",\n\t\t\t\t\tPositionalArgs: []*autocliv1.PositionalArgDescriptor{\n\t\t\t\t\t\t{ProtoField: "wallet"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// highlight-start\n\t\t\t\t{\n\t\t\t\t\tRpcMethod: "ResolveWallet",\n\t\t\t\t\tUse: "wallet [name]",\n\t\t\t\t\tShort: "Resolve the wallet address from a given name",\n\t\t\t\t\tPositionalArgs: []*autocliv1.PositionalArgDescriptor{\n\t\t\t\t\t\t{ProtoField: "name"},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t// highlight-end\n\t\t\t\t{\n\t\t\t\t\tRpcMethod: "Params",\n\t\t\t\t\tUse: "params",\n\t\t\t\t\tShort: "Query the current module parameters",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t...\n'})}),(0,r.jsxs)(t.p,{children:["Then ",(0,r.jsx)(t.code,{children:"make install"})," and re-run the testnet to verify ",(0,r.jsx)(t.code,{children:"rolld q nameservice wallet <name>"})," returns the expected wallet address."]})]})]})}function h(e={}){const{wrapper:t}={...(0,l.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(m,{...e})}):m(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>a});var r=n(7294);const l={},s=r.createContext(l);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(l):e.components||l:a(e.components),r.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c401c2e6.da808446.js b/assets/js/c401c2e6.da808446.js new file mode 100644 index 00000000..11acdd6a --- /dev/null +++ b/assets/js/c401c2e6.da808446.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[167],{8541:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>t,default:()=>h,frontMatter:()=>s,metadata:()=>c,toc:()=>l});var i=o(5893),r=o(1151);const s={title:"Debugging",sidebar_label:"Debugging",sidebar_position:3,slug:"/install/debugging"},t=void 0,c={id:"setup/debugging",title:"Debugging",description:"This section will contain common setup problems and how to resolve them.",source:"@site/versioned_docs/version-v0.50.x/01-setup/03-debugging.md",sourceDirName:"01-setup",slug:"/install/debugging",permalink:"/spawn/v0.50/install/debugging",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:3,frontMatter:{title:"Debugging",sidebar_label:"Debugging",sidebar_position:3,slug:"/install/debugging"},sidebar:"defaultSidebar",previous:{title:"Install Spawn",permalink:"/spawn/v0.50/install/install-spawn"},next:{title:"Build a Name Service",permalink:"/spawn/v0.50/build/name-service"}},d={},l=[{value:"Golang",id:"golang",level:2},{value:"/bin/sh: 1: go: not found",id:"binsh-1-go-not-found",level:3},{value:"build constraints excluded all Go files in /usr/local/go/ ...",id:"build-constraints-excluded-all-go-files-in-usrlocalgo-",level:3},{value:"make: heighliner: Permission denied",id:"make-heighliner-permission-denied",level:3},{value:"Windows / WSL",id:"windows--wsl",level:2},{value:"make: /mnt/c/Program: No such file or directory",id:"make-mntcprogram-no-such-file-or-directory",level:3},{value:"Docker",id:"docker",level:2},{value:"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.",id:"cannot-connect-to-the-docker-daemon-at-unixvarrundockersock-is-the-docker-daemon-running",level:3},{value:"docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock",id:"docker-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket-at-unixvarrundockersock",level:3},{value:"Generation",id:"generation",level:2},{value:"remote: Repository not found. fatal: reposity not found",id:"remote-repository-not-found-fatal-reposity-not-found",level:3},{value:"Application",id:"application",level:2},{value:"Running the binary gives me <code>panic: reflect: New(nil)</code>",id:"running-the-binary-gives-me-panic-reflect-newnil",level:3}];function a(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",...(0,r.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"This section will contain common setup problems and how to resolve them."}),"\n",(0,i.jsx)(n.h2,{id:"golang",children:"Golang"}),"\n",(0,i.jsx)(n.h3,{id:"binsh-1-go-not-found",children:"/bin/sh: 1: go: not found"}),"\n",(0,i.jsxs)(n.p,{children:["Just add the following lines to ",(0,i.jsx)(n.code,{children:"~/.bashrc"})," (or ",(0,i.jsx)(n.code,{children:"~/.zshrc"})," if MacOs) and this will persist. ",(0,i.jsx)(n.a,{href:"https://stackoverflow.com/a/21012349",children:"Source"}),"\nIf you run the above in your terminal, it will apply to the current session but not on new terminal sessions."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"export GOPATH=$HOME/go\nexport PATH=$PATH:$GOROOT/bin:$GOPATH/bin\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Then apply it with ",(0,i.jsx)(n.code,{children:"source ~/.bashrc"})," or ",(0,i.jsx)(n.code,{children:"source ~/.zshrc"})]}),"\n",(0,i.jsx)(n.h3,{id:"build-constraints-excluded-all-go-files-in-usrlocalgo-",children:"build constraints excluded all Go files in /usr/local/go/ ..."}),"\n",(0,i.jsxs)(n.p,{children:["Your Go install is not properly setup. Follow the install instructions above or install directly from source with ",(0,i.jsx)(n.a,{href:"https://go.dev/doc/install",children:"go.dev"}),"."]}),"\n",(0,i.jsx)(n.h3,{id:"make-heighliner-permission-denied",children:"make: heighliner: Permission denied"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"make get-heighliner\nchmod +x $(which heighliner)\n"})}),"\n",(0,i.jsxs)(n.p,{children:["If the above does not work, your user or directory permissions may not be setup. Or your ",(0,i.jsx)(n.code,{children:"ls -la $(go env GOPATH)/bin"})," path is to a bad."]}),"\n",(0,i.jsxs)(n.p,{children:["If using WSL, try ",(0,i.jsx)(n.a,{href:"https://superuser.com/questions/1352207/windows-wsl-ubuntu-sees-wrong-permissions-on-files-in-mounted-disk",children:"https://superuser.com/questions/1352207/windows-wsl-ubuntu-sees-wrong-permissions-on-files-in-mounted-disk"}),"."]}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.h2,{id:"windows--wsl",children:"Windows / WSL"}),"\n",(0,i.jsx)(n.h3,{id:"make-mntcprogram-no-such-file-or-directory",children:"make: /mnt/c/Program: No such file or directory"}),"\n",(0,i.jsxs)(n.p,{children:["Delete your GOMODCACHE directory: ",(0,i.jsx)(n.code,{children:"go clean -modcache"})," or run the direct command ",(0,i.jsx)(n.code,{children:"rm -rf $(go env GOMODCACHE)"}),"."]}),"\n",(0,i.jsx)(n.hr,{}),"\n",(0,i.jsx)(n.h2,{id:"docker",children:"Docker"}),"\n",(0,i.jsx)(n.h3,{id:"cannot-connect-to-the-docker-daemon-at-unixvarrundockersock-is-the-docker-daemon-running",children:"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?."}),"\n",(0,i.jsxs)(n.p,{children:["Start the docker daemon. Run ",(0,i.jsx)(n.a,{href:"https://docs.docker.com/engine/",children:"docker engine"})," or ",(0,i.jsx)(n.code,{children:"systemctl start docker && systemctl enable docker"})," for Linux."]}),"\n",(0,i.jsx)(n.h3,{id:"docker-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket-at-unixvarrundockersock",children:"docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock"}),"\n",(0,i.jsx)(n.p,{children:"You don't have permissions to interact with the Docker daemon."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:["\n",(0,i.jsxs)(n.p,{children:["Install properly with ",(0,i.jsx)(n.a,{href:"https://docs.docker.com/get-started/get-docker/",children:"https://docs.docker.com/get-started/get-docker/"})]}),"\n"]}),"\n",(0,i.jsx)(n.li,{}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo groupadd docker\nsudo usermod -aG docker $USER\nnewgrp docker\n\nreboot # if you still get the error\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Technically you can also ",(0,i.jsx)(n.code,{children:"sudo chmod 666 /var/run/docker.sock"})," but this is NOT advised. --\x3e"]}),"\n",(0,i.jsx)(n.h2,{id:"generation",children:"Generation"}),"\n",(0,i.jsx)(n.h3,{id:"remote-repository-not-found-fatal-reposity-not-found",children:"remote: Repository not found. fatal: reposity not found"}),"\n",(0,i.jsxs)(n.p,{children:["This error is due to not having properly ",(0,i.jsx)(n.code,{children:"make proto-gen"}),"ed the project. View the ",(0,i.jsx)(n.a,{href:"#running-the-binary-gives-me-panic-reflect-newnil",children:"Application"})," section for the solution."]}),"\n",(0,i.jsx)(n.h2,{id:"application",children:"Application"}),"\n",(0,i.jsxs)(n.h3,{id:"running-the-binary-gives-me-panic-reflect-newnil",children:["Running the binary gives me ",(0,i.jsx)(n.code,{children:"panic: reflect: New(nil)"})]}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"make proto-gen"})," command was either not run, or is causing issues. This could be due to your users permissions or the filesystem. By default, the protoc docker image uses your current users id and group. Try switching as a super user (i.e. ",(0,i.jsx)(n.code,{children:"su -"}),") or fixing your permissions. A very ugly hack is to run ",(0,i.jsx)(n.code,{children:"chmod a+rwx -R ./rollchain"})," where ",(0,i.jsx)(n.code,{children:"./rollchain"})," is the project you generated. This will cause git to change all files, but it does fix it. Unsure of the long term side effects that may come up from this."]})]})}function h(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,o)=>{o.d(n,{Z:()=>c,a:()=>t});var i=o(7294);const r={},s=i.createContext(r);function t(e){const n=i.useContext(s);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:t(e.components),i.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/cf8bc188.f2af40ce.js b/assets/js/cf8bc188.f2af40ce.js new file mode 100644 index 00000000..f7869e5c --- /dev/null +++ b/assets/js/cf8bc188.f2af40ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[308],{4273:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var s=n(5893),a=n(1151);const o={title:"CW NFTs",sidebar_label:"CosmWasm NFTs",slug:"/demo/cw-nft"},r="Non-fungible Token Demo",i={id:"demos/cw-nft-demo",title:"CW NFTs",description:"You will build a new chain with CosmWasm, enabling support for smart contracts on a new Cosmos-SDK application. You will download a pre-built contract, upload it, and interact with it to transfer the ownership of some data.",source:"@site/versioned_docs/version-v0.50.x/03-demos/02-cw-nft-demo.md",sourceDirName:"03-demos",slug:"/demo/cw-nft",permalink:"/spawn/v0.50/demo/cw-nft",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:2,frontMatter:{title:"CW NFTs",sidebar_label:"CosmWasm NFTs",slug:"/demo/cw-nft"},sidebar:"defaultSidebar",previous:{title:"IBC Transfers",permalink:"/spawn/v0.50/demo/ibc"},next:{title:"Token Factory",permalink:"/spawn/v0.50/demo/tokenfactory"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Create your chain",id:"create-your-chain",level:2},{value:"Start the testnet",id:"start-the-testnet",level:2},{value:"Verify CosmWasm is enabled",id:"verify-cosmwasm-is-enabled",level:2},{value:"Upload the contract to the network",id:"upload-the-contract-to-the-network",level:2},{value:"Verify the code was uploaded",id:"verify-the-code-was-uploaded",level:2},{value:"Create a new NFT collection",id:"create-a-new-nft-collection",level:2},{value:"Contract address",id:"contract-address",level:2},{value:"Create an NFT in the collection",id:"create-an-nft-in-the-collection",level:2},{value:"Grab this NFT data",id:"grab-this-nft-data",level:2},{value:"Transfer the NFT to another account",id:"transfer-the-nft-to-another-account",level:2},{value:"Conclusion",id:"conclusion",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,a.a)(),...e.components},{Details:n}=t;return n||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,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"non-fungible-token-demo",children:"Non-fungible Token Demo"}),"\n",(0,s.jsxs)(t.p,{children:["You will build a new chain with ",(0,s.jsx)(t.a,{href:"https://cosmwasm.com/",children:"CosmWasm"}),", enabling support for smart contracts on a new Cosmos-SDK application. You will download a pre-built contract, upload it, and interact with it to transfer the ownership of some data."]}),"\n",(0,s.jsxs)(t.p,{children:["If you do not know what an NFT is, you can read about them here: ",(0,s.jsx)(t.a,{href:"https://www.investopedia.com/non-fungible-tokens-nft-5115211",children:"investopedia.com/non-fungible-tokens-nft"}),"."]}),"\n",(0,s.jsx)(t.admonition,{title:"Warning",type:"note",children:(0,s.jsxs)(t.p,{children:["Some parts of this tutorial will not have the added context about spawn's inner workings or how commands work. Run through ",(0,s.jsx)(t.a,{href:"/spawn/v0.50/build/name-service",children:"Build Your Application"})," for this context."]})}),"\n",(0,s.jsx)(t.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/spawn/v0.50/install/system-setup",children:"System Setup"})}),"\n",(0,s.jsx)(t.li,{children:(0,s.jsx)(t.a,{href:"/spawn/v0.50/install/install-spawn",children:"Install Spawn"})}),"\n"]}),"\n",(0,s.jsxs)(t.admonition,{title:"Danger",type:"note",children:[(0,s.jsx)(t.p,{children:"Some machines like Windows will not work with running the testnet. This is a limitation of the operating system hardware with wasm and required C language libraries / DLLs."}),(0,s.jsxs)(t.p,{children:["For the best experience, try ",(0,s.jsx)(t.code,{children:"make testnet"})," or use a Linux machine or a cloud-based linux instance from ",(0,s.jsx)(t.a,{href:"https://www.hetzner.com/cloud/",children:"Hetzner"})," or ",(0,s.jsx)(t.a,{href:"https://www.digitalocean.com/pricing/droplets",children:"Digital Ocean"})," for $6 per month."]})]}),"\n",(0,s.jsx)(t.h2,{id:"create-your-chain",children:"Create your chain"}),"\n",(0,s.jsx)(t.p,{children:"Build a new chain that has CosmWasm configured."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"GITHUB_USERNAME=rollchains\n\nspawn new rollchain \\\n--consensus=proof-of-stake \\\n--bech32=roll \\\n--denom=uroll \\\n--bin=rolld \\\n--disabled=block-explorer \\\n--org=${GITHUB_USERNAME}\n"})}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"View UI Selector"}),(0,s.jsxs)(t.p,{children:["If you remove the ",(0,s.jsx)(t.code,{children:"--disabled"})," flag; a more intuitive UI selection approach will be taken. Make sure CosmWasm is selected with the green arrow, then press ",(0,s.jsx)(t.code,{children:"done"}),"."]}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{src:"https://github.com/user-attachments/assets/16698f3f-143b-4258-9ff2-fc429764b58c",alt:"Image"})})]}),"\n",(0,s.jsx)(t.h2,{id:"start-the-testnet",children:"Start the testnet"}),"\n",(0,s.jsx)(t.admonition,{title:"Note",type:"note",children:(0,s.jsxs)(t.p,{children:["If ",(0,s.jsx)(t.code,{children:"make sh-testnet"})," does not start due to a port bind error, you can kill your previously running testnet with ",(0,s.jsx)(t.code,{children:"killall -9 rolld"}),", then try again."]})}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"# move into the chain directory\ncd rollchain\n\n# - Installs the binary\n# - Setups the default keys with funds\n# - Starts the chain in your shell\nmake sh-testnet\n"})}),"\n",(0,s.jsx)(t.h2,{id:"verify-cosmwasm-is-enabled",children:"Verify CosmWasm is enabled"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"rolld q wasm params\n"})}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Expected Output"}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"code_upload_access:\n addresses: []\n permission: Everybody\n instantiate_default_permission: Everybody\n"})})]}),"\n",(0,s.jsx)(t.h2,{id:"upload-the-contract-to-the-network",children:"Upload the contract to the network"}),"\n",(0,s.jsxs)(t.p,{children:["You will use the ",(0,s.jsx)(t.a,{href:"https://github.com/public-awesome/cw-nfts",children:"CW721"})," contract for your NFT journey. CW721 stands for CosmWasm 721. ",(0,s.jsx)(t.a,{href:"https://www.coinbase.com/learn/crypto-glossary/what-is-erc-721",children:"721 corresponds to the Ethereum specification for NFTs"}),". Understanding this is out of scope for this tutorial. Just know you can create, transfer, and query data."]}),"\n",(0,s.jsx)(t.p,{children:"Download the contract code from the CosmWasm NFTs repository, then upload it to the network with the application binary."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"# Download the the NFT contract to your machine\ncurl -LO https://github.com/public-awesome/cw-nfts/releases/download/v0.19.0/cw721_base.wasm\n\n# Upload the source code to the chain\n# - gas is is amount of compute resources to allocate.\nrolld tx wasm store ./cw721_base.wasm --from=acc0 \\\n --gas=auto --gas-adjustment=2.0 --yes\n"})}),"\n",(0,s.jsx)(t.h2,{id:"verify-the-code-was-uploaded",children:"Verify the code was uploaded"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'# Code id: "1" is available\nrolld q wasm list-code\n\n# See the details (A lot of spam)\nrolld q tx 4601FBACBDF93E4309D92E968F8B4E7F9177BCB132B65AA363AFDC26FE6B5CB6\n'})}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Expected Code Info"}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'(main) -> $ rolld q wasm list-code\ncode_infos:\n- code_id: "1"\n creator: roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87\n data_hash: E13AA30E0D70EA895B294AD1BC809950E60FE081B322B1657F75B67BE6021B1C\n instantiate_permission:\n addresses: []\n permission: Everybody\npagination:\n next_key: null\n total: "0"\n'})})]}),"\n",(0,s.jsx)(t.h2,{id:"create-a-new-nft-collection",children:"Create a new NFT collection"}),"\n",(0,s.jsx)(t.p,{children:"With the source now uploaded, anyone can create a new NFT collection with this base contract code now on the chain. This will be a new contract that only you control. Now, instantiate the contract to create the new NFT collection."}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Instantiate Format Source"}),(0,s.jsx)(t.p,{children:"You can find the instantiate, execute, and query messages (json) formats in the contract source code."}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'reference title="packages/cw721/src/msg.rs"',children:"https://github.com/public-awesome/cw-nfts/blob/v0.19.0/packages/cw721/src/msg.rs#L126-L143\n"})})]}),"\n",(0,s.jsxs)(t.admonition,{title:"Warning",type:"note",children:[(0,s.jsx)(t.p,{children:"Notice the MESSAGE= below has no spaces in the JSON. This is required for the command line to parse it correctly. Failure to do so will result in the error"}),(0,s.jsx)(t.p,{children:(0,s.jsx)(t.code,{children:'ERR failure when running app err="accepts 2 arg(s), received 3"'})})]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'# Get our account address for the acc0 wallet / key.\nrolld keys show acc0 -a # roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87\n\n# Create the NFT collection with our account\n# as the authorized minter / creator for new NFTs.\nMESSAGE=\'{"name":"Roll","symbol":"ROLL","minter":"roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87"}\'\n\n# Create the NFT collection\nrolld tx wasm instantiate 1 $MESSAGE --no-admin --from=acc0 --label="my-nft" \\\n --gas=auto --gas-adjustment=2.0 --yes\n'})}),"\n",(0,s.jsx)(t.h2,{id:"contract-address",children:"Contract address"}),"\n",(0,s.jsxs)(t.p,{children:["A contract address is where all the collection and information is stored. It never changes and is the unique identifier for interaction. Think of this similar to a website, google.com always brings you to google search. ",(0,s.jsx)(t.code,{children:"NFT_CONTRACT"})," is always the RollNFTs collection."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"# View all contract addresses a wallet has created\nrolld q wasm list-contracts-by-creator roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87\n\n# The contract address for the NFT collection just created\nNFT_CONTRACT=roll14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjczpjh\n"})}),"\n",(0,s.jsx)(t.h2,{id:"create-an-nft-in-the-collection",children:"Create an NFT in the collection"}),"\n",(0,s.jsx)(t.p,{children:"The acc0 account now must create the first NFT in the collection since it is the minter. Specify the unique ID (1), the owner (acc0), and some data to be associated with this NFT. Set the url of a sunflower image as the metadata for this tutorial."}),"\n",(0,s.jsx)(t.admonition,{title:"Note",type:"note",children:(0,s.jsxs)(t.p,{children:["The ",(0,s.jsx)(t.code,{children:"token_uri"})," is a URL that points to the metadata of the NFT. This can be a ",(0,s.jsx)(t.a,{href:"https://eips.ethereum.org/EIPS/eip-721#specification",children:"JSON object"})," or a URL to a JSON object.\nThis URL can be a link to an external service like ",(0,s.jsx)(t.a,{href:"https://ipfs.tech/",children:"IPFS"}),", or the raw text directly. The contract does not care, it is up to you to manage the data and build the services around it."]})}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Execute Format Source"}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'reference title="packages/cw721/src/msg.rs"',children:"https://github.com/public-awesome/cw-nfts/blob/v0.19.0/packages/cw721/src/msg.rs#L80-L91\n"})})]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'MESSAGE=\'{"mint":{"token_id":"1","owner":"roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87","token_uri":"https://onlinejpgtools.com/images/examples-onlinejpgtools/sunflower.jpg"}}\'\n\nrolld tx wasm execute $NFT_CONTRACT $MESSAGE --from=acc0 \\\n --gas=auto --gas-adjustment=2.0 --yes\n'})}),"\n",(0,s.jsx)(t.h2,{id:"grab-this-nft-data",children:"Grab this NFT data"}),"\n",(0,s.jsxs)(t.p,{children:["There is now an NFT with the ID of 1 owned by ",(0,s.jsx)(t.code,{children:"roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87"}),". Now query the contract to see the data and verify it is correct."]}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Query Format Source"}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'reference title="packages/cw721/src/msg.rs"',children:"https://github.com/public-awesome/cw-nfts/blob/v0.19.0/packages/cw721/src/msg.rs#L157-L161\n"})}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'reference title="packages/cw721/src/msg.rs"',children:"https://github.com/public-awesome/cw-nfts/blob/v0.19.0/packages/cw721/src/msg.rs#L236-L240\n"})})]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'# Get who is the owner of ID 1\nrolld q wasm state smart $NFT_CONTRACT \'{"owner_of":{"token_id":"1"}}\'\n\n# Retrieve the NFT info\nrolld q wasm state smart $NFT_CONTRACT \'{"nft_info":{"token_id":"1"}}\'\n'})}),"\n",(0,s.jsx)(t.h2,{id:"transfer-the-nft-to-another-account",children:"Transfer the NFT to another account"}),"\n",(0,s.jsx)(t.p,{children:"Now move the token from the originally minted account (acc0) to another account (acc1). This is a simple transfer of ownership to move who owns the data."}),"\n",(0,s.jsxs)(n,{children:[(0,s.jsx)("summary",{children:"Execute Format Source"}),(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-rust",metastring:'reference title="packages/cw721/src/msg.rs"',children:"https://github.com/public-awesome/cw-nfts/blob/v0.19.0/packages/cw721/src/msg.rs#L44-L48\n"})})]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:'# Recipient account\nrolld keys show acc1 -a # roll1efd63aw40lxf3n4mhf7dzhjkr453axur57cawh\n\nMESSAGE=\'{"transfer_nft":{"recipient":"roll1efd63aw40lxf3n4mhf7dzhjkr453axur57cawh","token_id":"1"}}\'\nrolld tx wasm execute $NFT_CONTRACT $MESSAGE --from=acc0 --gas=auto --gas-adjustment=2.0 --yes\n\n# Get who is the owner of 1\n# Moved to: roll1efd63aw40lxf3n4mhf7dzhjkr453axur57cawh\nrolld q wasm state smart $NFT_CONTRACT \'{"owner_of":{"token_id":"1"}}\'\n'})}),"\n",(0,s.jsx)(t.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,s.jsx)(t.p,{children:"In this tutorial, you built a new chain with CosmWasm enabled, launched a testnet for it, and launched an NFT collection! You uploaded a contract, created an NFT, and transferred it to another account. This is the foundation for building a new unique marketplace or game on the Interchain."})]})}function h(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>r});var s=n(7294);const a={},o=s.createContext(a);function r(e){const t=s.useContext(o);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(a):e.components||a:r(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/def0e9a3.c113600b.js b/assets/js/def0e9a3.c113600b.js new file mode 100644 index 00000000..561bc480 --- /dev/null +++ b/assets/js/def0e9a3.c113600b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[104],{2776:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>c});var s=t(5893),i=t(1151);const r={title:"Name Service",sidebar_label:"Testnet",sidebar_position:5,slug:"/build/name-service-testnet"},a="Running your Application",o={id:"build-your-application/testnet",title:"Name Service",description:"Congrats!! You built your first network already. You are ready to run a local testnet environment to verify it works.",source:"@site/versioned_docs/version-v0.50.x/02-build-your-application/05-testnet.md",sourceDirName:"02-build-your-application",slug:"/build/name-service-testnet",permalink:"/spawn/v0.50/build/name-service-testnet",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:5,frontMatter:{title:"Name Service",sidebar_label:"Testnet",sidebar_position:5,slug:"/build/name-service-testnet"},sidebar:"defaultSidebar",previous:{title:"Configure Client",permalink:"/spawn/v0.50/build/name-service-client"},next:{title:"Bonus",permalink:"/spawn/v0.50/build/name-service-bonus"}},l={},c=[{value:"Launch The Network",id:"launch-the-network",level:3},{value:"Interact Set Name",id:"interact-set-name",level:3},{value:"Interaction Get Name",id:"interaction-get-name",level:2}];function d(e){const n={admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",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:"running-your-application",children:"Running your Application"}),"\n",(0,s.jsxs)(n.admonition,{title:"Synopsis",type:"note",children:[(0,s.jsx)(n.p,{children:"Congrats!! You built your first network already. You are ready to run a local testnet environment to verify it works."}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Building your application executable"}),"\n",(0,s.jsx)(n.li,{children:"Running a local testnet"}),"\n",(0,s.jsx)(n.li,{children:"Interacting with the network"}),"\n"]})]}),"\n",(0,s.jsx)(n.h3,{id:"launch-the-network",children:"Launch The Network"}),"\n",(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.code,{children:"sh-testnet"})," command ",(0,s.jsx)(n.em,{children:"(short for shell testnet)"})," to quickly build your application, generate example wallet accounts, and start the local network on your machine."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"# Run a quick shell testnet\nmake sh-testnet\n"})}),"\n",(0,s.jsx)(n.p,{children:"The chain will begin to create (mint) new blocks. You can see the logs of the network running in the terminal."}),"\n",(0,s.jsx)(n.h3,{id:"interact-set-name",children:"Interact Set Name"}),"\n",(0,s.jsxs)(n.p,{children:["Using the newly built binary ",(0,s.jsx)(n.em,{children:"(rolld from the --bin flag when the chain was created)"}),", you are going to execute the ",(0,s.jsx)(n.code,{children:"set"}),' transaction to your name. In this example, use "alice". This links account ',(0,s.jsx)(n.code,{children:"acc1"})," address to the desired name in the keeper."]}),"\n",(0,s.jsxs)(n.p,{children:["Then, resolve this name with the nameservice lookup. ",(0,s.jsx)(n.code,{children:"$(rolld keys show acc1 -a)"})," is a substitute for the acc1's address. You can also use just ",(0,s.jsx)(n.code,{children:"roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87"})," here."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"rolld tx nameservice set alice --from=acc1 --yes\n\n# You can verify this transaction was successful\n# By querying it's unique ID.\nrolld q tx 565CE77057ACBF6FB5D174231455E61E65009CD628971937C19201328E0A1FFD\n"})}),"\n",(0,s.jsx)(n.h2,{id:"interaction-get-name",children:"Interaction Get Name"}),"\n",(0,s.jsxs)(n.p,{children:["Now you are going to get the name of a wallet. A nested command ",(0,s.jsx)(n.code,{children:"$(rolld keys show acc1 -a)"})," gets the unique address of the acc1 account added when you started the testnet."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"rolld q nameservice resolve roll1efd63aw40lxf3n4mhf7dzhjkr453axur57cawh --output=json\n\nrolld q nameservice resolve $(rolld keys show acc1 -a) --output=json\n"})}),"\n",(0,s.jsx)(n.p,{children:"The expected result should be:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",children:'{\n "name": "alice"\n}\n'})}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["When you are ready to stop the testnet, you can use ",(0,s.jsx)(n.code,{children:"ctrl + c"})," or ",(0,s.jsx)(n.code,{children:"killall -9 rolld"}),"."]})}),"\n",(0,s.jsx)(n.p,{children:"Your network is now running and you have successfully set and resolved a name! \ud83c\udf89"})]})}function u(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},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/e3e7a55f.f0fb7f96.js b/assets/js/e3e7a55f.f0fb7f96.js new file mode 100644 index 00000000..1c085472 --- /dev/null +++ b/assets/js/e3e7a55f.f0fb7f96.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[838],{8839:(n,e,t)=>{t.r(e),t.d(e,{assets:()=>r,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var s=t(5893),l=t(1151);const i={title:"Setup Development Environment",sidebar_label:"System Setup",sidebar_position:1,slug:"/install/system-setup"},o="Overview",a={id:"setup/system-setup",title:"Setup Development Environment",description:"Setup your development environment with the essentials to get started building the blockchain.",source:"@site/versioned_docs/version-v0.50.x/01-setup/01-system-setup.md",sourceDirName:"01-setup",slug:"/install/system-setup",permalink:"/spawn/v0.50/install/system-setup",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:1,frontMatter:{title:"Setup Development Environment",sidebar_label:"System Setup",sidebar_position:1,slug:"/install/system-setup"},sidebar:"defaultSidebar",previous:{title:"Spawn Documentation",permalink:"/spawn/v0.50/"},next:{title:"Install Spawn",permalink:"/spawn/v0.50/install/install-spawn"}},r={},c=[{value:"System Requirements",id:"system-requirements",level:2},{value:"Windows",id:"windows",level:2},{value:"MacOS",id:"macos",level:2},{value:"Linux (Ubuntu)",id:"linux-ubuntu",level:2},{value:"CosmWasm",id:"cosmwasm",level:2}];function u(n){const e={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...n.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.h1,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(e.admonition,{title:"Synopsis",type:"note",children:(0,s.jsx)(e.p,{children:"Setup your development environment with the essentials to get started building the blockchain."})}),"\n",(0,s.jsx)(e.h2,{id:"system-requirements",children:"System Requirements"}),"\n",(0,s.jsx)(e.p,{children:"Before you can install and interact with spawn, you must have the following core tools installed:"}),"\n",(0,s.jsxs)(e.ul,{children:["\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://go.dev/doc/install",children:(0,s.jsx)(e.code,{children:"Go 1.22+"})})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://docs.docker.com/get-docker/",children:(0,s.jsx)(e.code,{children:"Docker"})})}),"\n",(0,s.jsx)(e.li,{children:(0,s.jsx)(e.a,{href:"https://git-scm.com/",children:(0,s.jsx)(e.code,{children:"Git"})})}),"\n"]}),"\n",(0,s.jsx)(e.p,{children:"If you do not have these components installed, follow the instructions below to install them."}),"\n",(0,s.jsx)(e.h2,{id:"windows",children:"Windows"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-bash",children:'# Install WSL in powershell\nwsl --install\nRestart-Computer\n\n# Setup WSL Ubuntu Image\nwsl.exe --install Ubuntu-24.04\n\n# Open wsl instance\nwsl\n\n# update and add snap if not already installed\nsudo apt update && sudo apt install snapd\n\n# Install Go (Snap)\nsudo snap install go --channel=1.23/stable --classic\n\n# Install Base\nsudo apt install make gcc git jq wget\n\n# Install github-cli\nsudo snap install gh\n\n# Install docker\nhttps://docs.docker.com/desktop/wsl/#turn-on-docker-desktop-wsl-2\n# or snap:\nsudo snap install docker\n\n# Fix versioning for interaction of commands\nsudo chmod 666 /var/run/docker.sock\n\n# Setup base git config\ngit config --global user.email "yourEmail@gmail.com"\ngit config --global user.name "Your Name"\n'})}),"\n",(0,s.jsx)(e.h2,{id:"macos",children:"MacOS"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-bash",children:'# Base\nbrew install make\nbrew install gcc\nbrew install wget\nbrew install jq\n\n# Github CLI - https://github.com/cli/cli\nbrew install gh\ngh auth login\n\n# Golang\nbrew install go\n\n# Docker\nbrew install --cask docker\nopen -a Docker # start docker desktop\n# settings -> General -> Start Docker Desktop when you sign in to your computer\n# Apply & Restart\n\n# Setup base git config\ngit config --global user.email "yourEmail@gmail.com"\ngit config --global user.name "Your Name"\n'})}),"\n",(0,s.jsx)(e.h2,{id:"linux-ubuntu",children:"Linux (Ubuntu)"}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-bash",children:'# Base\nsudo apt install make gcc git jq wget\n\n# (optional) Github CLI - https://github.com/cli/cli\ncurl -sS https://webi.sh/gh | sh\ngh auth login\n\n# Golang\nGO_VERSION=1.23.0\nwget https://go.dev/dl/go$GO_VERSION.linux-amd64.tar.gz\nsudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go$GO_VERSION.linux-amd64.tar.gz\n\n# Docker\nsudo apt -y install docker.io\n\n# Setup base git config\ngit config --global user.email "yourEmail@gmail.com"\ngit config --global user.name "Your Name"\n'})}),"\n",(0,s.jsx)(e.h2,{id:"cosmwasm",children:"CosmWasm"}),"\n",(0,s.jsxs)(e.p,{children:["Some tutorials require CosmWasm (Rust smart contracts) setup. This section is option, unless a tutorial is CosmWasm focused.\nCosmWasm requires ",(0,s.jsx)(e.a,{href:"https://www.rust-lang.org/",children:"Rust"}),". You must have this installed as the contract will be built locally."]}),"\n",(0,s.jsx)(e.pre,{children:(0,s.jsx)(e.code,{className:"language-bash",children:"# Install rust - https://www.rust-lang.org/tools/install\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\n# or Update if you have it\nrustup update\n\n# Install other dependencies\nrustup target add wasm32-unknown-unknown\n\ncargo install cargo-generate --features vendored-openssl\ncargo install cargo-run-script\n"})})]})}function d(n={}){const{wrapper:e}={...(0,l.a)(),...n.components};return e?(0,s.jsx)(e,{...n,children:(0,s.jsx)(u,{...n})}):u(n)}},1151:(n,e,t)=>{t.d(e,{Z:()=>a,a:()=>o});var s=t(7294);const l={},i=s.createContext(l);function o(n){const e=s.useContext(i);return s.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function a(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(l):n.components||l:o(n.components),s.createElement(i.Provider,{value:e},n.children)}}}]); \ No newline at end of file diff --git a/assets/js/ecd46386.28d9a771.js b/assets/js/ecd46386.28d9a771.js new file mode 100644 index 00000000..08dec192 --- /dev/null +++ b/assets/js/ecd46386.28d9a771.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[602],{5294:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var s=n(5893),r=n(1151);const o={title:"Name Service",sidebar_label:"Set Structure",sidebar_position:2,slug:"/build/name-service-structure"},a="Set Data Structure",i={id:"build-your-application/proto-logic",title:"Name Service",description:"Extend the template module and add how to store and interact with data. Specifically, you need to set and retrieve a name.",source:"@site/versioned_docs/version-v0.50.x/02-build-your-application/02-proto-logic.md",sourceDirName:"02-build-your-application",slug:"/build/name-service-structure",permalink:"/spawn/v0.50/build/name-service-structure",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:2,frontMatter:{title:"Name Service",sidebar_label:"Set Structure",sidebar_position:2,slug:"/build/name-service-structure"},sidebar:"defaultSidebar",previous:{title:"Build a Name Service",permalink:"/spawn/v0.50/build/name-service"},next:{title:"Application Logic",permalink:"/spawn/v0.50/build/name-service-application"}},c={},l=[{value:"Set Name",id:"set-name",level:3},{value:"Get Name",id:"get-name",level:3},{value:"Generate Code",id:"generate-code",level:2}];function d(e){const t={code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",...(0,r.a)(),...e.components},{Details:n}=t;return n||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,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"set-data-structure",children:"Set Data Structure"}),"\n",(0,s.jsx)(t.p,{children:"Extend the template module and add how to store and interact with data. Specifically, you need to set and retrieve a name."}),"\n",(0,s.jsx)(t.h3,{id:"set-name",children:"Set Name"}),"\n",(0,s.jsxs)(t.p,{children:["Open the ",(0,s.jsx)(t.code,{children:"proto/nameservice/v1"})," directory. Edit ",(0,s.jsx)(t.code,{children:"tx.proto"})," to add the transaction setter message."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-protobuf",metastring:'title="proto/nameservice/v1/tx.proto"',children:'\n // SetServiceName allows a user to set their accounts name.\n rpc SetServiceName(MsgSetServiceName) returns (MsgSetServiceNameResponse);\n}\n\n// MsgSetServiceName defines the structure for setting a name.\nmessage MsgSetServiceName {\n option (cosmos.msg.v1.signer) = "sender";\n\n string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];\n\n string name = 2;\n}\n\n// MsgSetServiceNameResponse is an empty reply.\nmessage MsgSetServiceNameResponse {}\n'})}),"\n",(0,s.jsx)(n,{children:(0,s.jsxs)(t.p,{children:["proto/nameservice/v1/tx.proto file\n",(0,s.jsx)(t.img,{src:"https://github.com/rollchains/spawn/assets/31943163/73a583e2-9edd-471f-ada6-1010d0dbf072",alt:"proto/nameservice/v1/tx.proto file"})]})}),"\n",(0,s.jsx)(t.h3,{id:"get-name",children:"Get Name"}),"\n",(0,s.jsxs)(t.p,{children:["Find ",(0,s.jsx)(t.code,{children:"query.proto"})," and add the following"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-protobuf",metastring:'title="proto/nameservice/v1/query.proto"',children:'\n // ResolveName allows a user to resolve the name of an account.\n rpc ResolveName(QueryResolveNameRequest) returns (QueryResolveNameResponse) {\n option (google.api.http).get = "/nameservice/v1/name/{wallet}";\n }\n}\n\n// QueryResolveNameRequest grabs the name of a wallet.\nmessage QueryResolveNameRequest {\n string wallet = 1;\n}\n\n// QueryResolveNameResponse grabs the wallet linked to a name.\nmessage QueryResolveNameResponse {\n string name = 1;\n}\n'})}),"\n",(0,s.jsx)(n,{children:(0,s.jsxs)(t.p,{children:["proto/nameservice/v1/query.proto\n",(0,s.jsx)(t.img,{src:"https://github.com/rollchains/spawn/assets/31943163/234a13d7-be62-492d-961c-63e92d7543d9",alt:"proto/nameservice/v1/query.proto file"})]})}),"\n",(0,s.jsx)(t.h2,{id:"generate-code",children:"Generate Code"}),"\n",(0,s.jsx)(t.p,{children:"These .proto file templates will be converted into Golang source code for you to use. Build the Go source code using the command:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"make proto-gen\n"})}),"\n",(0,s.jsx)(n,{children:(0,s.jsxs)(t.p,{children:["make proto-gen expected output\n",(0,s.jsx)(t.img,{src:"https://github.com/rollchains/spawn/assets/31943163/c51bf57c-e83a-4004-8041-9b1f3d3a24f4",alt:"make proto-gen"})]})})]})}function u(e={}){const{wrapper:t}={...(0,r.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>i,a:()=>a});var s=n(7294);const r={},o=s.createContext(r);function a(e){const t=s.useContext(o);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:a(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f5a87c92.e92da417.js b/assets/js/f5a87c92.e92da417.js new file mode 100644 index 00000000..f2abeade --- /dev/null +++ b/assets/js/f5a87c92.e92da417.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[273],{6384:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var a=t(5893),o=t(1151);const s={title:"Token Factory",sidebar_label:"Token Factory",slug:"/demo/tokenfactory"},r="Tokenfactory",i={id:"demos/tokenfactory",title:"Token Factory",description:"You will build a new chain with TokenFactory, enabling any account to create, transfer, and interact with fractionalized native tokens.",source:"@site/versioned_docs/version-v0.50.x/03-demos/03-tokenfactory.md",sourceDirName:"03-demos",slug:"/demo/tokenfactory",permalink:"/spawn/v0.50/demo/tokenfactory",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:3,frontMatter:{title:"Token Factory",sidebar_label:"Token Factory",slug:"/demo/tokenfactory"},sidebar:"defaultSidebar",previous:{title:"CosmWasm NFTs",permalink:"/spawn/v0.50/demo/cw-nft"},next:{title:"CosmWasm Validator Reviews",permalink:"/spawn/v0.50/demo/cw-validator-reviews"}},c={},l=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Create your chain",id:"create-your-chain",level:2},{value:"Start the testnet",id:"start-the-testnet",level:2},{value:"Confirm tokenfactory is enabled",id:"confirm-tokenfactory-is-enabled",level:2},{value:"Create a token",id:"create-a-token",level:2},{value:"Verify the token was created",id:"verify-the-token-was-created",level:2},{value:"Modify token metadata",id:"modify-token-metadata",level:2},{value:"Verify the token metadata",id:"verify-the-token-metadata",level:2},{value:"Create new tokens to transfer",id:"create-new-tokens-to-transfer",level:2},{value:"Create new tokens for another account",id:"create-new-tokens-for-another-account",level:2},{value:"Transfer tokens",id:"transfer-tokens",level:2},{value:"Burn tokens",id:"burn-tokens",level:2},{value:"Conclusion",id:"conclusion",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.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,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"tokenfactory",children:"Tokenfactory"}),"\n",(0,a.jsxs)(n.p,{children:["You will build a new chain with ",(0,a.jsx)(n.a,{href:"https://github.com/strangelove-ventures/tokenfactory",children:"TokenFactory"}),", enabling any account to create, transfer, and interact with fractionalized native tokens."]}),"\n",(0,a.jsx)(n.admonition,{title:"Warning",type:"note",children:(0,a.jsxs)(n.p,{children:["Some parts of this tutorial will not have the added context about spawn's inner workings or how commands work. Run through ",(0,a.jsx)(n.a,{href:"/spawn/v0.50/build/name-service",children:"Build Your Application"})," for this context."]})}),"\n",(0,a.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/spawn/v0.50/install/system-setup",children:"System Setup"})}),"\n",(0,a.jsx)(n.li,{children:(0,a.jsx)(n.a,{href:"/spawn/v0.50/install/install-spawn",children:"Install Spawn"})}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"create-your-chain",children:"Create your chain"}),"\n",(0,a.jsx)(n.p,{children:"Build a new chain that has TokenFactory configured. By default, it is enabled."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"GITHUB_USERNAME=rollchains\n\nspawn new rollchain \\\n--consensus=proof-of-stake \\\n--bech32=roll \\\n--denom=uroll \\\n--bin=rolld \\\n--disabled=cosmwasm,block-explorer \\\n--org=${GITHUB_USERNAME}\n"})}),"\n",(0,a.jsx)(n.h2,{id:"start-the-testnet",children:"Start the testnet"}),"\n",(0,a.jsx)(n.admonition,{title:"Note",type:"note",children:(0,a.jsxs)(n.p,{children:["If ",(0,a.jsx)(n.code,{children:"make sh-testnet"})," does not start due to a port bind error, you can kill your previously running testnet with ",(0,a.jsx)(n.code,{children:"killall -9 rolld"}),", then try again."]})}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# move into the chain directory\ncd rollchain\n\n# - Installs the binary\n# - Setups the default keys with funds\n# - Starts the chain in your shell\nmake sh-testnet\n"})}),"\n",(0,a.jsx)(n.h2,{id:"confirm-tokenfactory-is-enabled",children:"Confirm tokenfactory is enabled"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rolld q tokenfactory params\n"})}),"\n",(0,a.jsxs)(t,{children:[(0,a.jsx)("summary",{children:"params output"}),(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"denom_creation_fee"})," is a cost the application can set for creating new tokens by default, there is no cost."]}),(0,a.jsxs)(n.p,{children:["The ",(0,a.jsx)(n.code,{children:"denom_creation_gas_consume"})," is the amount of indirect resource cost to consume for creating a new token.\nIt is a more indirect approach to charging and is a better experience overall for developers on a network."]}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'params:\n denom_creation_fee: []\n denom_creation_gas_consume: "100000"\n'})})]}),"\n",(0,a.jsx)(n.h2,{id:"create-a-token",children:"Create a token"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Create a denom (native token)\n# - gas is is amount of compute resources to allocate.\nrolld tx tokenfactory create-denom mytoken --from=acc0 --chain-id=localchain-1 --yes\n"})}),"\n",(0,a.jsx)(n.h2,{id:"verify-the-token-was-created",children:"Verify the token was created"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Get our account address for the acc0 wallet / key.\n# acc0 is roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87\nrolld q tokenfactory denoms-from-creator $(rolld keys show acc0 -a)\n"})}),"\n",(0,a.jsxs)(t,{children:[(0,a.jsx)("summary",{children:"denoms-from-creator output"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"denoms:\n- factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken\n"})})]}),"\n",(0,a.jsxs)(n.p,{children:["The output shows a denom with the named ",(0,a.jsx)(n.code,{children:"factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken"})]}),"\n",(0,a.jsxs)(n.admonition,{title:"Note",type:"note",children:[(0,a.jsx)(n.p,{children:"Why did it add extra data to the token?"}),(0,a.jsxs)(n.p,{children:["Imagine there are 2 people, both named John. If only the name John is used, which John is it talking about? More information must be added to the name to make it unique. This is the same concept, but with tokens. The extra data is added to ensure the token is unique while it can still contain the same base name. With tokenfactory, the creators name is placed in the token. Read more about ",(0,a.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Naming_collision",children:"naming collisions"}),"."]})]}),"\n",(0,a.jsx)(n.h2,{id:"modify-token-metadata",children:"Modify token metadata"}),"\n",(0,a.jsx)(n.p,{children:"Clients (websites, frontends, users) may wish to see more information about the token. This is where metadata comes in. You can add a ticker symbol, description, and decimal places to the token."}),"\n",(0,a.jsxs)(n.p,{children:["The Interchain uses 6 decimal places as the default standard. This process of expressing fractions of a value in whole numbers is called ",(0,a.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Fixed-point_arithmetic",children:"fixed-point arithmetic"})," and is used for financial precision. This means that 1 token is really 1,000,000 (10^6) of these micro base tokens. If I want to send you 0.5 of a token, I really send you 500,000 of these micro base tokens on the backend."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'# \'Denom\' is short for denomination.\nDENOM=factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken\nDESCRIPTION="My token description"\n\nrolld tx tokenfactory modify-metadata $DENOM MYTOKEN "$DESCRIPTION" 6 --from acc0 --yes\n'})}),"\n",(0,a.jsx)(n.h2,{id:"verify-the-token-metadata",children:"Verify the token metadata"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rolld q bank denom-metadata $DENOM\n"})}),"\n",(0,a.jsxs)(t,{children:[(0,a.jsx)("summary",{children:"bank denom-metadata output"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"metadata:\n base: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken\n denom_units:\n - aliases:\n - MYTOKEN\n denom: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken\n - aliases:\n - factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken\n denom: MYTOKEN\n exponent: 6\n description: My token description\n display: MYTOKEN\n name: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken\n symbol: MYTOKEN\n"})})]}),"\n",(0,a.jsx)(n.h2,{id:"create-new-tokens-to-transfer",children:"Create new tokens to transfer"}),"\n",(0,a.jsx)(n.p,{children:"The base token structure is created, but no tokens actually exists yet. Mint new tokens to then be able to transfer them between accounts."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Mint 5,000,000 micro mytoken. By default this goes to the token creator.\nrolld tx tokenfactory mint 5000000$DENOM --from acc0 --yes\n\n# Verify token creator balance: roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87\nrolld q bank balances $(rolld keys show acc0 -a)\n"})}),"\n",(0,a.jsxs)(t,{children:[(0,a.jsx)("summary",{children:"bank balances output"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'balances:\n- amount: "5000000"\n denom: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken\n- amount: "900"\n denom: test\n- amount: "9000000"\n denom: uroll\npagination:\n total: "3"\n'})})]}),"\n",(0,a.jsx)(n.h2,{id:"create-new-tokens-for-another-account",children:"Create new tokens for another account"}),"\n",(0,a.jsxs)(n.p,{children:["While you could mint tokens followed by a manual ",(0,a.jsx)(n.code,{children:"tx bank send"})," transfer, you can also mint-to another account directly."]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Mint 1,000,000 to another account\nrolld tx tokenfactory mint-to $(rolld keys show acc1 -a) 1000000$DENOM --from acc0 --yes\n\nrolld q bank balances $(rolld keys show acc1 -a)\n"})}),"\n",(0,a.jsxs)(t,{children:[(0,a.jsx)("summary",{children:"mint-to output"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'balances:\n- amount: "1000000"\n denom: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken\n- amount: "800"\n denom: test\n- amount: "10000000"\n denom: uroll\npagination:\n total: "3"\n'})}),(0,a.jsx)(n.p,{children:"note, you can check for just a specific token balance with"}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"rolld q bank balance $(rolld keys show acc0 -a) $DENOM\n"})}),(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:'balance:\n amount: "5000000"\n denom: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken\n'})})]}),"\n",(0,a.jsx)(n.h2,{id:"transfer-tokens",children:"Transfer tokens"}),"\n",(0,a.jsx)(n.p,{children:"Now with tokens minted, either user can transfer them as they please between any accounts. Even ones that do not yet have any tokens."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Send 7 base micro tokens from acc0 to acc1\nrolld tx bank send acc0 $(rolld keys show acc1 -a) 7$DENOM --from acc0 --yes\n\n# Verify the 7 base tokens sent and has increased to 1000007, or 1.000007\nrolld q bank balances $(rolld keys show acc1 -a)\n"})}),"\n",(0,a.jsx)(n.h2,{id:"burn-tokens",children:"Burn tokens"}),"\n",(0,a.jsx)(n.p,{children:"If you wish to remove tokens from the system, you can burn them from the admin account."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# Burn micro tokens from account\nrolld tx tokenfactory burn 123$DENOM --from acc0 --yes\n\n# Verify the tokens have been reduced\nrolld q bank balances $(rolld keys show acc0 -a)\n"})}),"\n",(0,a.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,a.jsxs)(n.p,{children:["In this tutorial, you built a new chain with the TokenFactory feature, launched a testnet for it, and created a new native token. You minted tokens, transferred them between accounts, and burned them. These tokens could be kept internally for some personal or application based accounting, or transferred to other chains via IBC. This is showcased in the ",(0,a.jsx)(n.a,{href:"/spawn/v0.50/demo/ibc",children:"IBC Transfer Demo"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},1151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>r});var a=t(7294);const o={},s=a.createContext(o);function r(e){const n=a.useContext(s);return a.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:r(e.components),a.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f873aaa2.e3b9fb4d.js b/assets/js/f873aaa2.e3b9fb4d.js new file mode 100644 index 00000000..b116fc11 --- /dev/null +++ b/assets/js/f873aaa2.e3b9fb4d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[447],{7834:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var t=i(5893),s=i(1151);const a={title:"Name Service",sidebar_label:"Summary",sidebar_position:7,slug:"/build/name-service-summary"},r="Conclusion",o={id:"build-your-application/conclusion",title:"Name Service",description:"You just crafted your first blockchain, module, and custom logic with Spawn. You have a fully functioning name service that allows users to set and retrieve their account names.",source:"@site/versioned_docs/version-v0.50.x/02-build-your-application/07-conclusion.md",sourceDirName:"02-build-your-application",slug:"/build/name-service-summary",permalink:"/spawn/v0.50/build/name-service-summary",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:7,frontMatter:{title:"Name Service",sidebar_label:"Summary",sidebar_position:7,slug:"/build/name-service-summary"},sidebar:"defaultSidebar",previous:{title:"Bonus",permalink:"/spawn/v0.50/build/name-service-bonus"},next:{title:"IBC NameService (Part 2)",permalink:"/spawn/v0.50/build/name-service-ibc-module"}},l={},c=[{value:"What you Learned",id:"what-you-learned",level:2},{value:"What's Next?",id:"whats-next",level:2}];function u(e){const n={a:"a",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"conclusion",children:"Conclusion"}),"\n",(0,t.jsx)(n.p,{children:"You just crafted your first blockchain, module, and custom logic with Spawn. You have a fully functioning name service that allows users to set and retrieve their account names."}),"\n",(0,t.jsx)(n.h2,{id:"what-you-learned",children:"What you Learned"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Generating a new chain with your desired characteristics"}),"\n",(0,t.jsx)(n.li,{children:"Scaffolding a module"}),"\n",(0,t.jsx)(n.li,{children:"Setting the protobuf structure for transactions, queries, and Storage"}),"\n",(0,t.jsx)(n.li,{children:"Adding custom business logic to a module's server handlers"}),"\n",(0,t.jsx)(n.li,{children:"Configuring the command line client"}),"\n",(0,t.jsx)(n.li,{children:"Running a local testnet"}),"\n",(0,t.jsx)(n.li,{children:"Interacting with the network"}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"whats-next",children:"What's Next?"}),"\n",(0,t.jsxs)(n.p,{children:["Extend the NameService to include IBC support with the ",(0,t.jsx)(n.a,{href:"/spawn/v0.50/build/name-service-ibc-module",children:"ibc-module"})," tutorial."]})]})}function d(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(u,{...e})}):u(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>o,a:()=>r});var t=i(7294);const s={},a=t.createContext(s);function r(e){const n=t.useContext(a);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(s):e.components||s:r(e.components),t.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f8891bd3.ae69a959.js b/assets/js/f8891bd3.ae69a959.js new file mode 100644 index 00000000..283d516e --- /dev/null +++ b/assets/js/f8891bd3.ae69a959.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[294],{6859:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>t,contentTitle:()=>l,default:()=>u,frontMatter:()=>s,metadata:()=>a,toc:()=>c});var r=i(5893),o=i(1151);const s={title:"Name Service",sidebar_label:"Build a Name Service",sidebar_position:1,slug:"/build/name-service"},l="Overview",a={id:"build-your-application/nameservice",title:"Name Service",description:"Building your first Cosmos-SDK blockchain with Spawn. This tutorial focuses on a 'nameservice' where you set your account to a name you choose.",source:"@site/versioned_docs/version-v0.50.x/02-build-your-application/01-nameservice.md",sourceDirName:"02-build-your-application",slug:"/build/name-service",permalink:"/spawn/v0.50/build/name-service",draft:!1,unlisted:!1,tags:[],version:"v0.50.x",sidebarPosition:1,frontMatter:{title:"Name Service",sidebar_label:"Build a Name Service",sidebar_position:1,slug:"/build/name-service"},sidebar:"defaultSidebar",previous:{title:"Debugging",permalink:"/spawn/v0.50/install/debugging"},next:{title:"Set Structure",permalink:"/spawn/v0.50/build/name-service-structure"}},t={},c=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Video Walkthrough",id:"video-walkthrough",level:2},{value:"Generate a New Chain",id:"generate-a-new-chain",level:2},{value:"Scaffold the Module",id:"scaffold-the-module",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",p:"p",pre:"pre",ul:"ul",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"overview",children:"Overview"}),"\n",(0,r.jsxs)(n.admonition,{title:"Synopsis",type:"note",children:[(0,r.jsx)(n.p,{children:"Building your first Cosmos-SDK blockchain with Spawn. This tutorial focuses on a 'nameservice' where you set your account to a name you choose."}),(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Generating a new chain"}),"\n",(0,r.jsx)(n.li,{children:"Creating a new module"}),"\n",(0,r.jsx)(n.li,{children:"Adding custom logic"}),"\n",(0,r.jsx)(n.li,{children:"Run locally"}),"\n",(0,r.jsx)(n.li,{children:"Interacting with the network"}),"\n"]})]}),"\n",(0,r.jsx)(n.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/spawn/v0.50/install/system-setup",children:"System Setup"})}),"\n",(0,r.jsx)(n.li,{children:(0,r.jsx)(n.a,{href:"/spawn/v0.50/install/install-spawn",children:"Install Spawn"})}),"\n"]}),"\n",(0,r.jsx)(n.h2,{id:"video-walkthrough",children:"Video Walkthrough"}),"\n",(0,r.jsx)("iframe",{width:"560",height:"315",src:"https://www.youtube.com/embed/4gFSuLUlP4I?si=A_VqEwhOh2ZPxNsb",title:"YouTube video player",frameborder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen",referrerpolicy:"strict-origin-when-cross-origin",allowfullscreen:!0}),"\n",(0,r.jsx)(n.h2,{id:"generate-a-new-chain",children:"Generate a New Chain"}),"\n",(0,r.jsx)(n.p,{children:"Let's create a new chain called 'rollchain'. You are going to set defining characteristics such as"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Which modules to disable from the template ",(0,r.jsx)(n.em,{children:"if any"})]}),"\n",(0,r.jsx)(n.li,{children:"Proof of Stake consensus"}),"\n",(0,r.jsx)(n.li,{children:"Wallet prefix (bech32)"}),"\n",(0,r.jsx)(n.li,{children:"Token name (denom)"}),"\n",(0,r.jsx)(n.li,{children:"Binary executable (bin)"}),"\n"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"spawn new rollchain --consensus=pos --disable=cosmwasm --bech32=roll --denom=uroll --bin=rolld\n"})}),"\n",(0,r.jsx)(n.p,{children:"\ud83c\udf89 Your new blockchain 'rollchain' is now generated!"}),"\n",(0,r.jsx)(n.h2,{id:"scaffold-the-module",children:"Scaffold the Module"}),"\n",(0,r.jsx)(n.p,{children:"Now it is time to build the nameservice module structure."}),"\n",(0,r.jsx)(n.p,{children:"Move into the 'rollchain' directory and generate the new module with the following commands:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# moves into the rollchain directory you just generated\ncd rollchain\n\n# scaffolds your new nameservice module\nspawn module new nameservice\n\n# proto-gen proto files to go\n#\n# If you get a /.cache permission error, run:\n# sudo chmod -R 777 $(pwd)/.cache\n# sudo chown -R $USER $(pwd)/.cache\n#\n# If you get a cannot find module error\n# go clean -modcache\n#\n\nmake proto-gen\n"})}),"\n",(0,r.jsxs)(n.p,{children:["This creates a new template module with the name ",(0,r.jsx)(n.code,{children:"nameservice"})," in the ",(0,r.jsx)(n.code,{children:"x"})," and ",(0,r.jsx)(n.code,{children:"proto"})," directories. It also automatically connected to your application and is ready for use."]})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},1151:(e,n,i)=>{i.d(n,{Z:()=>a,a:()=>l});var r=i(7294);const o={},s=r.createContext(o);function l(e){const n=r.useContext(s);return r.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:l(e.components),r.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/main.698d1b94.js b/assets/js/main.698d1b94.js new file mode 100644 index 00000000..978ccfb8 --- /dev/null +++ b/assets/js/main.698d1b94.js @@ -0,0 +1,2 @@ +/*! For license information please see main.698d1b94.js.LICENSE.txt */ +(self.webpackChunkdocs=self.webpackChunkdocs||[]).push([[179],{1728:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n);else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});n(7294);var r=n(8356),a=n.n(r),o=n(6887);const i={"0cd0e263":[()=>n.e(150).then(n.t.bind(n,1682,19)),"@generated/docusaurus-plugin-content-docs/default/p/spawn-v-0-50-70f.json",1682],"138e0e15":[()=>n.e(524).then(n.t.bind(n,536,19)),"@generated/@easyops-cn/docusaurus-search-local/default/__plugin.json",536],"16c976c4":[()=>n.e(816).then(n.bind(n,1858)),"@site/versioned_docs/version-v0.50.x/02-build-your-application/03-application-logic.md",1858],17896441:[()=>Promise.all([n.e(532),n.e(901),n.e(918)]).then(n.bind(n,4831)),"@theme/DocItem",4831],"1a4e3797":[()=>Promise.all([n.e(532),n.e(920)]).then(n.bind(n,2027)),"@theme/SearchPage",2027],"200b60cb":[()=>n.e(613).then(n.bind(n,8434)),"@site/versioned_docs/version-v0.50.x/02-build-your-application/09-ibc-cosmwasm.md",8434],"36759dfc":[()=>n.e(599).then(n.bind(n,5672)),"@site/docs/00-intro.md",5672],"58117f0d":[()=>n.e(451).then(n.bind(n,4938)),"@site/versioned_docs/version-v0.50.x/01-setup/02-install-spawn.md",4938],"590f8f60":[()=>n.e(490).then(n.bind(n,7268)),"@site/versioned_docs/version-v0.50.x/02-build-your-application/04-cli.md",7268],"5e95c892":[()=>n.e(661).then(n.bind(n,1892)),"@theme/DocsRoot",1892],"675ad4a5":[()=>n.e(719).then(n.bind(n,1123)),"@site/versioned_docs/version-v0.50.x/04-learn/01-consensus-algos.md",1123],"6c1d4545":[()=>n.e(316).then(n.bind(n,650)),"@site/versioned_docs/version-v0.50.x/00-meet-spawn.md",650],"6eb1ecaa":[()=>n.e(670).then(n.t.bind(n,430,19)),"@generated/docusaurus-plugin-content-docs/default/p/spawn-main-24b.json",430],a0b73a2e:[()=>n.e(375).then(n.bind(n,7946)),"@site/versioned_docs/version-v0.50.x/03-demos/04-cw-validator-reviews.md",7946],a7bd4aaa:[()=>n.e(518).then(n.bind(n,8564)),"@theme/DocVersionRoot",8564],a94703ab:[()=>Promise.all([n.e(532),n.e(368)]).then(n.bind(n,2674)),"@theme/DocRoot",2674],aba21aa0:[()=>n.e(629).then(n.t.bind(n,1765,19)),"@generated/docusaurus-plugin-content-docs/default/__plugin.json",1765],ac49df54:[()=>n.e(221).then(n.bind(n,3307)),"@site/versioned_docs/version-v0.50.x/03-demos/01-ibc-transfer-demo.md",3307],b13fbd5d:[()=>n.e(99).then(n.bind(n,7854)),"@site/versioned_docs/version-v0.50.x/02-build-your-application/08-ibc-module.md",7854],b9ff4302:[()=>n.e(429).then(n.bind(n,6663)),"@site/versioned_docs/version-v0.50.x/02-build-your-application/06-extra-challenge.md",6663],c401c2e6:[()=>n.e(167).then(n.bind(n,8541)),"@site/versioned_docs/version-v0.50.x/01-setup/03-debugging.md",8541],cf8bc188:[()=>n.e(308).then(n.bind(n,4273)),"@site/versioned_docs/version-v0.50.x/03-demos/02-cw-nft-demo.md",4273],def0e9a3:[()=>n.e(104).then(n.bind(n,2776)),"@site/versioned_docs/version-v0.50.x/02-build-your-application/05-testnet.md",2776],e3e7a55f:[()=>n.e(838).then(n.bind(n,8839)),"@site/versioned_docs/version-v0.50.x/01-setup/01-system-setup.md",8839],ecd46386:[()=>n.e(602).then(n.bind(n,5294)),"@site/versioned_docs/version-v0.50.x/02-build-your-application/02-proto-logic.md",5294],f5a87c92:[()=>n.e(273).then(n.bind(n,6384)),"@site/versioned_docs/version-v0.50.x/03-demos/03-tokenfactory.md",6384],f873aaa2:[()=>n.e(447).then(n.bind(n,7834)),"@site/versioned_docs/version-v0.50.x/02-build-your-application/07-conclusion.md",7834],f8891bd3:[()=>n.e(294).then(n.bind(n,6859)),"@site/versioned_docs/version-v0.50.x/02-build-your-application/01-nameservice.md",6859]};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 u=n(9670),c=n(226);function d(e,t){if("*"===e)return a()({loading:l,loader:()=>n.e(772).then(n.bind(n,1772)),modules:["@theme/NotFound"],webpack:()=>[1772],render(e,t){const n=e.default;return(0,s.jsx)(c.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},f=[],p=[],h=(0,u.Z)(r);return Object.entries(h).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],f.push(r[1]),p.push(r[2]))})),a().Map({loading:l,loader:d,modules:f,webpack:()=>p,render(t,n){const a=JSON.parse(JSON.stringify(r));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 i=a;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;delete a.__context;const l=a.__props;return delete a.__props,(0,s.jsx)(c.z,{value:i,children:(0,s.jsx)(o,{...a,...l,...n})})}})}const f=[{path:"/spawn/search/",component:d("/spawn/search/","d33"),exact:!0},{path:"/spawn/",component:d("/spawn/","d29"),routes:[{path:"/spawn/main/",component:d("/spawn/main/","1ae"),routes:[{path:"/spawn/main/",component:d("/spawn/main/","ec1"),routes:[{path:"/spawn/main/",component:d("/spawn/main/","e69"),exact:!0,sidebar:"defaultSidebar"}]}]},{path:"/spawn/v0.50/",component:d("/spawn/v0.50/","b5b"),routes:[{path:"/spawn/v0.50/",component:d("/spawn/v0.50/","2a3"),routes:[{path:"/spawn/v0.50/",component:d("/spawn/v0.50/","a41"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/build/name-service-application/",component:d("/spawn/v0.50/build/name-service-application/","423"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/build/name-service-bonus/",component:d("/spawn/v0.50/build/name-service-bonus/","d9b"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/build/name-service-client/",component:d("/spawn/v0.50/build/name-service-client/","faf"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/build/name-service-ibc-contract/",component:d("/spawn/v0.50/build/name-service-ibc-contract/","9f4"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/build/name-service-ibc-module/",component:d("/spawn/v0.50/build/name-service-ibc-module/","749"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/build/name-service-structure/",component:d("/spawn/v0.50/build/name-service-structure/","493"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/build/name-service-summary/",component:d("/spawn/v0.50/build/name-service-summary/","1fd"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/build/name-service-testnet/",component:d("/spawn/v0.50/build/name-service-testnet/","a4a"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/build/name-service/",component:d("/spawn/v0.50/build/name-service/","4b5"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/demo/cw-nft/",component:d("/spawn/v0.50/demo/cw-nft/","837"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/demo/cw-validator-reviews/",component:d("/spawn/v0.50/demo/cw-validator-reviews/","f60"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/demo/ibc/",component:d("/spawn/v0.50/demo/ibc/","23c"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/demo/tokenfactory/",component:d("/spawn/v0.50/demo/tokenfactory/","984"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/install/debugging/",component:d("/spawn/v0.50/install/debugging/","f32"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/install/install-spawn/",component:d("/spawn/v0.50/install/install-spawn/","716"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/install/system-setup/",component:d("/spawn/v0.50/install/system-setup/","c5f"),exact:!0,sidebar:"defaultSidebar"},{path:"/spawn/v0.50/learn/consensus-security/",component:d("/spawn/v0.50/learn/consensus-security/","51f"),exact:!0,sidebar:"defaultSidebar"}]}]}]},{path:"*",component:d("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>i});var r=n(7294),a=n(5893);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},7221:(e,t,n)=>{"use strict";var r=n(7294),a=n(745),o=n(405),i=n(3727),s=n(6809),l=n(412);const u=[n(2497),n(3310),n(8320),n(2295)];var c=n(723),d=n(6550),f=n(8790),p=n(5893);function h(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var g=n(5742),m=n(2263),y=n(4996),v=n(6668),b=n(1944),w=n(4711),x=n(9727),k=n(3320),S=n(8780),E=n(197);function _(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,m.default)(),r=(0,w.l)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,p.jsxs)(g.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:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function C(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,m.default)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,m.default)(),{pathname:r}=(0,d.TH)();return e+(0,S.applyTrailingSlash)((0,y.ZP)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,p.jsxs)(g.Z,{children:[(0,p.jsx)("meta",{property:"og:url",content:a}),(0,p.jsx)("link",{rel:"canonical",href:a})]})}function T(){const{i18n:{currentLocale:e}}=(0,m.default)(),{metadata:t,image:n}=(0,v.L)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(g.Z,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:x.h})]}),n&&(0,p.jsx)(b.d,{image:n}),(0,p.jsx)(C,{}),(0,p.jsx)(_,{}),(0,p.jsx)(E.Z,{tag:k.HX,locale:e}),(0,p.jsx)(g.Z,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const N=new Map;var L=n(8934),P=n(8940),O=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 a=u.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const I=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,O.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)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 R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,f.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class j extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=l.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}),R(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)(I,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(d.AW,{location:t,render:()=>e})})}}const F=j,D="__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 = '${D}';\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.default)();return(0,p.jsx)(p.Fragment,{children:!l.Z.canUseDOM&&(0,p.jsx)(g.Z,{children:(0,p.jsx)("script",{children:B(e)})})})}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,m.default)(),{pathname:n}=(0,d.TH)();return t&&n===e?(0,p.jsx)($,{}):null}function H(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:a}}=(0,m.default)(),o=(0,y.ZP)(e),{htmlLang:i,direction:s}=a[r];return(0,p.jsxs)(g.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:o})]})}var Q=n(4763),Z=n(2389);function V(){const e=(0,Z.Z)();return(0,p.jsx)(g.Z,{children:(0,p.jsx)("html",{"data-has-hydrated":e})})}const W=(0,f.H)(c.Z);function q(){const e=function(e){if(N.has(e.pathname))return{...e,pathname:N.get(e.pathname)};if((0,f.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return N.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return N.set(e.pathname,t),{...e,pathname:t}}((0,d.TH)());return(0,p.jsx)(F,{location:e,children:W})}function G(){return(0,p.jsx)(Q.Z,{children:(0,p.jsx)(P.M,{children:(0,p.jsxs)(L.t,{children:[(0,p.jsxs)(h,{children:[(0,p.jsx)(H,{}),(0,p.jsx)(T,{}),(0,p.jsx)(U,{}),(0,p.jsx)(q,{})]}),(0,p.jsx)(V,{})]})})})}var Y=n(6887);const K=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 a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.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 X=n(9670);const J=new Set,ee=new Set,te=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ne={prefetch:e=>{if(!(e=>!te()&&!ee.has(e)&&!J.has(e))(e))return!1;J.add(e);const t=(0,f.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(Y).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,X.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!te()&&!ee.has(e))(e)&&(ee.add(e),R(e))},re=Object.freeze(ne);function ae(e){let{children:t}=e;return"hash"===s.default.future.experimental_router?(0,p.jsx)(i.UT,{children:t}):(0,p.jsx)(i.VK,{children:t})}const oe=Boolean(!0);if(l.Z.canUseDOM){window.docusaurus=re;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(o.B6,{children:(0,p.jsx)(ae,{children:(0,p.jsx)(G,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},i=()=>{if(window.docusaurusRoot)window.docusaurusRoot.render(t);else if(oe)window.docusaurusRoot=a.hydrateRoot(e,t,{onRecoverableError:n});else{const r=a.createRoot(e,{onRecoverableError:n});r.render(t),window.docusaurusRoot=r}};R(window.location.pathname).then((()=>{(0,r.startTransition)(i)}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>f});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/spawn/","versions":[{"name":"current","label":"Next","isLast":false,"path":"/spawn/main","mainDocId":"intro","docs":[{"id":"intro","path":"/spawn/main/","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/spawn/main/","label":"intro"}}}},{"name":"v0.50.x","label":"v0.50.x","isLast":true,"path":"/spawn/v0.50","mainDocId":"meet-spawn","docs":[{"id":"build-your-application/application-logic","path":"/spawn/v0.50/build/name-service-application","sidebar":"defaultSidebar"},{"id":"build-your-application/cli","path":"/spawn/v0.50/build/name-service-client","sidebar":"defaultSidebar"},{"id":"build-your-application/conclusion","path":"/spawn/v0.50/build/name-service-summary","sidebar":"defaultSidebar"},{"id":"build-your-application/extra-challenge","path":"/spawn/v0.50/build/name-service-bonus","sidebar":"defaultSidebar"},{"id":"build-your-application/ibc-cosmwasm","path":"/spawn/v0.50/build/name-service-ibc-contract","sidebar":"defaultSidebar"},{"id":"build-your-application/ibc-module","path":"/spawn/v0.50/build/name-service-ibc-module","sidebar":"defaultSidebar"},{"id":"build-your-application/nameservice","path":"/spawn/v0.50/build/name-service","sidebar":"defaultSidebar"},{"id":"build-your-application/proto-logic","path":"/spawn/v0.50/build/name-service-structure","sidebar":"defaultSidebar"},{"id":"build-your-application/testnet","path":"/spawn/v0.50/build/name-service-testnet","sidebar":"defaultSidebar"},{"id":"demos/cw-nft-demo","path":"/spawn/v0.50/demo/cw-nft","sidebar":"defaultSidebar"},{"id":"demos/cw-validator-reviews","path":"/spawn/v0.50/demo/cw-validator-reviews","sidebar":"defaultSidebar"},{"id":"demos/ibc-transfer-demo","path":"/spawn/v0.50/demo/ibc","sidebar":"defaultSidebar"},{"id":"demos/tokenfactory","path":"/spawn/v0.50/demo/tokenfactory","sidebar":"defaultSidebar"},{"id":"learn/consensus-algos","path":"/spawn/v0.50/learn/consensus-security","sidebar":"defaultSidebar"},{"id":"meet-spawn","path":"/spawn/v0.50/","sidebar":"defaultSidebar"},{"id":"setup/debugging","path":"/spawn/v0.50/install/debugging","sidebar":"defaultSidebar"},{"id":"setup/install-spawn","path":"/spawn/v0.50/install/install-spawn","sidebar":"defaultSidebar"},{"id":"setup/system-setup","path":"/spawn/v0.50/install/system-setup","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/spawn/v0.50/","label":"Spawn Documentation"}}}}],"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.4.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.4.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.4.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.4.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.4.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.4.0"},"docusaurus-feedback-plugin":{"type":"package","name":"docusaurus-pushfeedback","version":"1.0.0"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.4.0"},"@gracefullight/docusaurus-plugin-microsoft-clarity":{"type":"package","name":"@gracefullight/docusaurus-plugin-microsoft-clarity","version":"1.0.0"},"@easyops-cn/docusaurus-search-local":{"type":"package","name":"@easyops-cn/docusaurus-search-local","version":"0.40.1"},"docusaurus-tailwindcss":{"type":"local"},"docusaurus-theme-github-codeblock":{"type":"package"}}}');var u=n(5893);const c={siteConfig:a.default,siteMetadata:l,globalData:o,i18n:i,codeTranslations:s},d=r.createContext(c);function f(e){let{children:t}=e;return(0,u.jsx)(d.Provider,{value:c,children:t})}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var r=n(7294),a=n(412),o=n(5742),i=n(8780),s=n(8862),l=n(226),u=n(5893);function c(e){let{error:t,tryAgain:n}=e;return(0,u.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,u.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,u.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,u.jsx)(d,{error:t})]})}function d(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,u.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function f(e){let{children:t}=e;return(0,u.jsx)(l.z,{value:{plugin:{name:"docusaurus-core-error-boundary",id:"default"}},children:t})}function p(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)(f,{children:(0,u.jsxs)(g,{fallback:()=>(0,u.jsx)(c,{error:t,tryAgain:n}),children:[(0,u.jsx)(o.Z,{children:(0,u.jsx)("title",{children:"Page Error"})}),(0,u.jsx)(s.Z,{children:(0,u.jsx)(c,{error:t,tryAgain:n})})]})})}const h=e=>(0,u.jsx)(p,{...e});class g extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.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??h)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={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:()=>o});n(7294);var r=n(405),a=n(5893);function o(e){return(0,a.jsx)(r.ql,{...e})}},3692:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(3727),o=n(8780),i=n(2263),s=n(3919),l=n(412),u=n(8138),c=n(4996),d=n(5893);function f(e,t){let{isNavLink:n,to:f,href:p,activeClassName:h,isActive:g,"data-noBrokenLinkCheck":m,autoAddBaseUrl:y=!0,...v}=e;const{siteConfig:b}=(0,i.default)(),{trailingSlash:w,baseUrl:x}=b,k=b.future.experimental_router,{withBaseUrl:S}=(0,c.Cg)(),E=(0,u.Z)(),_=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>_.current));const C=f||p;const T=(0,s.Z)(C),N=C?.replace("pathname://","");let L=void 0!==N?(P=N,y&&(e=>e.startsWith("/"))(P)?S(P):P):void 0;var P;"hash"===k&&L?.startsWith("./")&&(L=L?.slice(1)),L&&T&&(L=(0,o.applyTrailingSlash)(L,{trailingSlash:w,baseUrl:x}));const O=(0,r.useRef)(!1),A=n?a.OL:a.rU,I=l.Z.canUseIntersectionObserver,R=(0,r.useRef)(),j=()=>{O.current||null==L||(window.docusaurus.preload(L),O.current=!0)};(0,r.useEffect)((()=>(!I&&T&&null!=L&&window.docusaurus.prefetch(L),()=>{I&&R.current&&R.current.disconnect()})),[R,L,I,T]);const F=L?.startsWith("#")??!1,D=!v.target||"_self"===v.target,M=!L||!T||!D;return m||!F&&M||E.collectLink(L),v.id&&E.collectAnchor(v.id),M?(0,d.jsx)("a",{ref:_,href:L,...C&&!T&&{target:"_blank",rel:"noopener noreferrer"},...v}):(0,d.jsx)(A,{...v,onMouseEnter:j,onTouchStart:j,innerRef:e=>{_.current=e,I&&e&&T&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=L&&window.docusaurus.prefetch(L))}))})),R.current.observe(e))},to:L,...n&&{isActive:g,activeClassName:h}})}const p=r.forwardRef(f)},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u,I:()=>l});var r=n(7294),a=n(5893);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 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 o(s({message:n,id:r}),t)}function u(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,a.jsx)(a.Fragment,{children:o(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 a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{Cg:()=>i,ZP:()=>s});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:e}=(0,a.default)(),{baseUrl:t,url:n}=e,i=e.future.experimental_router,s=(0,r.useCallback)(((e,r)=>function(e){let{siteUrl:t,baseUrl:n,url:r,options:{forcePrependBaseUrl:a=!1,absolute:i=!1}={},router:s}=e;if(!r||r.startsWith("#")||(0,o.b)(r))return r;if("hash"===s)return r.startsWith("/")?`.${r}`:`./${r}`;if(a)return n+r.replace(/^\//,"");if(r===n.replace(/\/$/,""))return n;const l=r.startsWith(n)?r:n+r.replace(/^\//,"");return i?t+l:l}({siteUrl:n,baseUrl:t,url:e,options:r,router:i})),[n,t,i]);return{withBaseUrl:s}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},8138:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(7294);n(5893);const a=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),o=()=>(0,r.useContext)(a);function i(){return o()}},2263:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},469:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const s=a?`${a}.${o}`:o;r(i)?e(i,s):t[s]=i}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>i});var r=n(7294),a=n(5893);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),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,a.jsx)(o.Provider,{value:s,children:t})}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>f,_r:()=>c,Jo:()=>m,zh:()=>d,yW:()=>h,gB:()=>p});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.default)();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),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},c=()=>i("docusaurus-plugin-content-docs")??u,d=e=>{try{return function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0})}catch(t){throw new Error("You are using a feature of the Docusaurus docs plugin, but this plugin does not seem to be enabled"+("Default"===e?"":` (pluginId=${e}`),{cause:t})}};function f(e){void 0===e&&(e={});const t=c(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=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})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&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 o}(t,n,e)}function p(e){return d(e).versions}function h(e){const t=d(e);return s(t)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return l(t,n)}function m(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:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(2573),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(6854),n(421)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},2503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var r=n(512),a=n(5999),o=n(6668),i=n(3692),s=n(8138);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var u=n(5893);function c(e){let{as:t,id:n,...c}=e;const d=(0,s.Z)(),{navbar:{hideOnScroll:f}}=(0,o.L)();if("h1"===t||!n)return(0,u.jsx)(t,{...c,id:void 0});d.collectAnchor(n);const p=(0,a.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,u.jsxs)(t,{...c,className:(0,r.Z)("anchor",f?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,u.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":p,title:p,children:"\u200b"})]})}},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(5893);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.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"})})}},8862:(e,t,n)=>{"use strict";n.d(t,{Z:()=>jt});var r=n(7294),a=n(512),o=n(4763),i=n(1944),s=n(6550),l=n(5999),u=n(5936),c=n(5893);const d="__docusaurus_skipToContent_fallback";function f(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function p(){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&&f(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&f(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 g(e){const t=e.children??h,{containerRef:n,onClick:r}=p();return(0,c.jsx)("div",{ref:n,role:"region","aria-label":h,children:(0,c.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var m=n(5281),y=n(9727);const v={skipToContent:"skipToContent_fXgn"};function b(){return(0,c.jsx)(g,{className:v.skipToContent})}var w=n(6668),x=n(9689);function k(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,c.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,c.jsx)("g",{stroke:r,strokeWidth:a,children:(0,c.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function E(e){return(0,c.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,a.Z)("clean-btn close",S.closeButton,e.className),children:(0,c.jsx)(k,{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,c.jsx)("div",{...e,className:(0,a.Z)(_.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function N(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,x.n)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,c.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,c.jsx)("div",{className:T.announcementBarPlaceholder}),(0,c.jsx)(C,{className:T.announcementBarContent}),o&&(0,c.jsx)(E,{onClick:n,className:T.announcementBarClose})]})}var L=n(2961),P=n(2466);var O=n(902),A=n(3102);const I=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,L.e)(),t=(0,A.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,O.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,c.jsx)(I.Provider,{value:n,children:t})}function j(e){if(e.component){const t=e.component;return(0,c.jsx)(t,{...e.props})}}function F(){const e=(0,r.useContext)(I);if(!e)throw new O.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,A.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:j(o)})),[a,o,t])}function D(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=F();return(0,c.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,c.jsxs)("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,c.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var M=n(2949),z=n(2389);function B(e){return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.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,c.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,c.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 H(e){let{className:t,buttonClassName:n,value:r,onChange:o}=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,c.jsx)("div",{className:(0,a.Z)(U.toggle,t),children:(0,c.jsxs)("button",{className:(0,a.Z)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,c.jsx)(B,{className:(0,a.Z)(U.toggleIcon,U.lightToggleIcon)}),(0,c.jsx)($,{className:(0,a.Z)(U.toggleIcon,U.darkToggleIcon)})]})})}const Q=r.memo(H),Z={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,M.I)();return r?null:(0,c.jsx)(Q,{className:t,buttonClassName:"dark"===n?Z.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var W=n(1327);function q(){return(0,c.jsx)(W.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function G(){const e=(0,L.e)();return(0,c.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,c.jsx)(k,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,c.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,c.jsx)(q,{}),(0,c.jsx)(V,{className:"margin-right--md"}),(0,c.jsx)(G,{})]})}var K=n(3692),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:a,label:o,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...u}=e;const d=(0,X.ZP)(r),f=(0,X.ZP)(t),p=(0,X.ZP)(a,{forcePrependBaseUrl:!0}),h=o&&a&&!(0,J.Z)(a),g=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,c.jsxs)(c.Fragment,{children:[o,h&&(0,c.jsx)(te.Z,{...s&&{width:12,height:12}})]})};return a?(0,c.jsx)(K.Z,{href:l?p:a,...u,...g}):(0,c.jsx)(K.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},...u,...g})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,c.jsx)(ne,{className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,c.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,c.jsx)("li",{className:"menu__list-item",children:(0,c.jsx)(ne,{className:(0,a.Z)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,c.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(6043),se=n(8596),le=n(2263);const ue={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};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 de(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const l=(0,r.useRef)(null),[u,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,c.jsxs)("div",{ref:l,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u}),children:[(0,c.jsx)(ne,{"aria-haspopup":"true","aria-expanded":u,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))},children:s.children??s.label}),(0,c.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(We,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function fe(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,le.default)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ce(t,u),{collapsed:f,toggleCollapsed:p,setCollapsed:h}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&h(!d)}),[u,d,h]),(0,c.jsxs)("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f}),children:[(0,c.jsx)(ne,{role:"button",className:(0,a.Z)(ue.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),p()},children:l.children??l.label}),(0,c.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f,children:t.map(((e,t)=>(0,r.createElement)(We,{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?fe:de;return(0,c.jsx)(r,{...n})}var he=n(4711);function ge(e){let{width:t=20,height:n=20,...r}=e;return(0,c.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,c.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 ye=n(1029),ve=n(1728),be=n(373),we=n(143),xe=n(22),ke=n(8202),Se=n(3926),Ee=n(1073),_e=n(2539),Ce=n(726);const Te='<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>',Ne='<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>',Pe='<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>',Oe='<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>',Ae='<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>',Ie='<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>',Re={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 je(e){let{document:t,type:n,page:r,metadata:a,tokens:o,isInterOfTree:i,isLastOfTree:s}=e;const l=0===n,u=1===n,c=[];i?c.push(Ae):s&&c.push(Ie);const d=c.map((e=>`<span class="${Re.hitTree}">${e}</span>`)),f=`<span class="${Re.hitIcon}">${l?Te:u?Ne:Le}</span>`,p=[`<span class="${Re.hitTitle}">${(0,Ce.o)(t.t,(0,Ee.m)(a,"t"),o)}</span>`];if(!i&&!s&&ye.H6){const e=r?(r.b??[]).concat(r.t).concat(t.s&&t.s!==r.t?t.s:[]):t.b;p.push(`<span class="${Re.hitPath}">${(0,Se.e)(e??[])}</span>`)}else l||p.push(`<span class="${Re.hitPath}">${(0,_e.C)(r.t||(t.u.startsWith("/docs/api-reference/")?"API Reference":""),o)}</span>`);const h=`<span class="${Re.hitAction}">${Pe}</span>`;return[...d,f,`<span class="${Re.hitWrapper}">`,...p,"</span>",h].join("")}function Fe(){return`<span class="${Re.noResults}"><span class="${Re.noResultsIcon}">${Oe}</span><span>${(0,l.I)({id:"theme.SearchBar.noResultsText",message:"No results"})}</span></span>`}var De=n(311),Me=n(51);async function ze(){const e=await Promise.all([n.e(443),n.e(525)]).then(n.t.bind(n,8443,23)),t=e.default;return t.noConflict?t.noConflict():e.noConflict&&e.noConflict(),t}const Be="_highlight";const $e=function(e){let{handleSearchBarToggle:t}=e;const n=(0,z.Z)(),{siteConfig:{baseUrl:a},i18n:{currentLocale:o}}=(0,le.default)(),i=(0,we.gA)();let u=a;try{const{preferredVersion:e}=(0,be.J)(i?.pluginId??ye.gQ);e&&!e.isLast&&(u=e.path+"/")}catch(D){if(ye.l9&&!(D instanceof O.i6))throw D}const d=(0,s.k6)(),f=(0,s.TH)(),p=(0,r.useRef)(null),h=(0,r.useRef)(new Map),g=(0,r.useRef)(!1),[m,y]=(0,r.useState)(!1),[v,b]=(0,r.useState)(!1),[w,x]=(0,r.useState)(""),k=(0,r.useRef)(null),S=(0,r.useRef)(""),[E,_]=(0,r.useState)("");(0,r.useEffect)((()=>{if(!Array.isArray(ye.Kc))return;let e="";if(f.pathname.startsWith(u)){const t=f.pathname.substring(u.length);let n;for(const e of ye.Kc){const r="string"==typeof e?e:e.path;if(t===r||t.startsWith(`${r}/`)){n=r;break}}n&&(e=n)}S.current!==e&&(h.current.delete(e),S.current=e),_(e)}),[f.pathname,u]);const C=!!ye.hG&&Array.isArray(ye.Kc)&&""===E,T=(0,r.useCallback)((async()=>{if(C||h.current.get(E))return;h.current.set(E,"loading"),k.current?.autocomplete.destroy(),y(!0);const[{wrappedIndexes:e,zhDictionary:t},n]=await Promise.all([(0,xe.w)(u,E),ze()]);if(k.current=n(p.current,{hint:!1,autoselect:!0,openOnFocus:!0,cssClasses:{root:(0,ve.Z)(Re.searchBar,{[Re.searchBarLeft]:"left"===ye.pu}),noPrefix:!0,dropdownMenu:Re.dropdownMenu,input:Re.input,hint:Re.hint,suggestions:Re.suggestions,suggestion:Re.suggestion,cursor:Re.cursor,dataset:Re.dataset,empty:Re.empty}},[{source:(0,ke.v)(e,t,ye.qo),templates:{suggestion:je,empty:Fe,footer:e=>{let{query:t,isEmpty:n}=e;if(n&&(!E||!ye.pQ))return;const r=(e=>{let{query:t,isEmpty:n}=e;const r=document.createElement("a"),i=new URLSearchParams;let s;if(i.set("q",t),E){const e=E&&Array.isArray(ye.Kc)?ye.Kc.find((e=>"string"==typeof e?e===E:e.path===E)):E,t=e?(0,Me._)(e,o).label:E;s=ye.pQ&&n?(0,l.I)({id:"theme.SearchBar.seeAllOutsideContext",message:"See results outside {context}"},{context:t}):(0,l.I)({id:"theme.SearchBar.searchInContext",message:"See all results in {context}"},{context:t})}else s=(0,l.I)({id:"theme.SearchBar.seeAll",message:"See all results"});if(!E||!Array.isArray(ye.Kc)||ye.pQ&&n||i.set("ctx",E),u!==a){if(!u.startsWith(a))throw new Error(`Version url '${u}' does not start with base url '${a}', this is a bug of \`@easyops-cn/docusaurus-search-local\`, please report it.`);i.set("version",u.substring(a.length))}const c=`${a}search?${i.toString()}`;return r.href=c,r.textContent=s,r.addEventListener("click",(e=>{e.ctrlKey||e.metaKey||(e.preventDefault(),k.current?.autocomplete.close(),d.push(c))})),r})({query:t,isEmpty:n}),i=document.createElement("div");return i.className=Re.hitFooter,i.appendChild(r),i}}}]).on("autocomplete:selected",(function(e,t){let{document:{u:n,h:r},tokens:a}=t;p.current?.blur();let o=n;if(ye.vc&&a.length>0){const e=new URLSearchParams;for(const t of a)e.append(Be,t);o+=`?${e.toString()}`}r&&(o+=r),d.push(o)})).on("autocomplete:closed",(()=>{p.current?.blur()})),h.current.set(E,"done"),y(!1),g.current){const e=p.current;e.value&&k.current?.autocomplete.open(),e.focus()}}),[C,E,u,a,d]);(0,r.useEffect)((()=>{if(!ye.vc)return;const e=n?new URLSearchParams(f.search).getAll(Be):[];setTimeout((()=>{const t=document.querySelector("article");if(!t)return;const n=new ye.vc(t);n.unmark(),0!==e.length&&n.mark(e),x(e.join(" ")),k.current?.autocomplete.setVal(e.join(" "))}))}),[n,f.search,f.pathname]);const[N,L]=(0,r.useState)(!1),P=(0,r.useCallback)((()=>{g.current=!0,T(),L(!0),t?.(!0)}),[t,T]),A=(0,r.useCallback)((()=>{L(!1),t?.(!1)}),[t]),I=(0,r.useCallback)((()=>{T()}),[T]),R=(0,r.useCallback)((e=>{x(e.target.value),e.target.value&&b(!0)}),[]),j=!!n&&/mac/i.test(navigator.userAgentData?.platform??navigator.platform);(0,r.useEffect)((()=>{if(!ye.AY)return;const e=e=>{!(j?e.metaKey:e.ctrlKey)||"k"!==e.key&&"K"!==e.key||(e.preventDefault(),p.current?.focus(),P())};return document.addEventListener("keydown",e),()=>{document.removeEventListener("keydown",e)}}),[j,P]);const F=(0,r.useCallback)((()=>{const e=new URLSearchParams(f.search);e.delete(Be);const t=e.toString(),n=f.pathname+(""!=t?`?${t}`:"")+f.hash;n!=f.pathname+f.search+f.hash&&d.push(n),x(""),k.current?.autocomplete.setVal("")}),[f.pathname,f.search,f.hash,d]);return(0,c.jsxs)("div",{className:(0,ve.Z)("navbar__search",Re.searchBarContainer,{[Re.searchIndexLoading]:m&&v,[Re.focused]:N}),hidden:C,children:[(0,c.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:I,onFocus:P,onBlur:A,onChange:R,ref:p,value:w}),(0,c.jsx)(De.Z,{className:Re.searchBarLoadingRing}),ye.AY&&ye.t_&&(""!==w?(0,c.jsx)("button",{className:Re.searchClearButton,onClick:F,children:"\u2715"}):n&&(0,c.jsxs)("div",{className:Re.searchHintContainer,children:[(0,c.jsx)("kbd",{className:Re.searchHint,children:j?"\u2318":"ctrl"}),(0,c.jsx)("kbd",{className:Re.searchHint,children:"K"})]}))]})},Ue={navbarSearchContainer:"navbarSearchContainer_Bca1"};function He(e){let{children:t,className:n}=e;return(0,c.jsx)("div",{className:(0,a.Z)(n,Ue.navbarSearchContainer),children:t})}var Qe=n(2802);const Ze=e=>e.docs.find((t=>t.id===e.mainDocId));const Ve={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,le.default)(),f=(0,he.l)(),{search:p,hash:h}=(0,s.TH)(),g=[...n,...u.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${h}${a}`;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],m=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,c.jsx)(pe,{...o,mobile:t,label:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(ge,{className:me}),m]}),items:g})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,c.jsx)(He,{className:n,children:(0,c.jsx)($e,{})})},dropdown:pe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,c.jsx)(i,{className:(0,a.Z)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.Iw)(r),i=(0,Qe.vY)(t,r),s=o?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,c.jsx)(oe,{exact:!0,...a,isActive:()=>s||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,we.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,c.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,Qe.lO)(r)[0],i=t??o.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,c.jsx)(oe,{...a,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:u,hash:d}=(0,s.TH)(),f=(0,we.Iw)(n),p=(0,we.gB)(n),{savePreferredVersionName:h}=(0,be.J)(n),g=[...a,...p.map((e=>{const t=f.alternateDocVersions[e.name]??Ze(e);return{label:e.label,to:`${t.path}${u}${d}`,isActive:()=>e===f.activeVersion,onClick:()=>h(e.name)}})),...o],m=(0,Qe.lO)(n)[0],y=t&&g.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):m.label,v=t&&g.length>1?void 0:Ze(m).path;return g.length<=1?(0,c.jsx)(oe,{...i,mobile:t,label:y,to:v,isActive:r?()=>!1:void 0}):(0,c.jsx)(pe,{...i,mobile:t,label:y,to:v,items:g,isActive:r?()=>!1:void 0})}};function We(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Ve[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,c.jsx)(a,{...n})}function qe(){const e=(0,L.e)(),t=(0,w.L)().navbar.items;return(0,c.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(We,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function Ge(e){return(0,c.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,c.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 Ye(){const e=0===(0,w.L)().navbar.items.length,t=F();return(0,c.jsxs)(c.Fragment,{children:[!e&&(0,c.jsx)(Ge,{onClick:()=>t.hide()}),t.content]})}function Ke(){const e=(0,L.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,c.jsx)(D,{header:(0,c.jsx)(Y,{}),primaryMenu:(0,c.jsx)(qe,{}),secondaryMenu:(0,c.jsx)(Ye,{})}):null}const Xe={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Je(e){return(0,c.jsx)("div",{role:"presentation",...e,className:(0,a.Z)("navbar-sidebar__backdrop",e.className)})}function et(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,L.e)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,P.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<o.current)return void n(!0);if(a.current)return void(a.current=!1);const s=r?.scrollY,l=document.documentElement.scrollHeight-o.current,u=window.innerHeight;s&&i>=s?n(!1):i+u<l&&n(!0)})),(0,u.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,c.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,a.Z)("navbar","navbar--fixed-top",n&&[Xe.navbarHideable,!d&&Xe.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,c.jsx)(Je,{onClick:i.toggle}),(0,c.jsx)(Ke,{})]})}var tt=n(8780);const nt={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};function rt(e){return(0,c.jsx)("button",{type:"button",...e,children:(0,c.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 at(e){let{error:t}=e;const n=(0,tt.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,c.jsx)("p",{className:nt.errorBoundaryError,children:n})}class ot extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const it="right";function st(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,c.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,c.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function lt(){const{toggle:e,shown:t}=(0,L.e)();return(0,c.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,c.jsx)(st,{})})}const ut={colorModeToggle:"colorModeToggle_DEke"};function ct(e){let{items:t}=e;return(0,c.jsx)(c.Fragment,{children:t.map(((e,t)=>(0,c.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,c.jsx)(We,{...e})},t)))})}function dt(e){let{left:t,right:n}=e;return(0,c.jsxs)("div",{className:"navbar__inner",children:[(0,c.jsx)("div",{className:"navbar__items",children:t}),(0,c.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function ft(){const e=(0,L.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??it)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,c.jsx)(dt,{left:(0,c.jsxs)(c.Fragment,{children:[!e.disabled&&(0,c.jsx)(lt,{}),(0,c.jsx)(q,{}),(0,c.jsx)(ct,{items:n})]}),right:(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(ct,{items:r}),(0,c.jsx)(V,{className:ut.colorModeToggle}),!a&&(0,c.jsx)(He,{children:(0,c.jsx)($e,{})})]})})}function pt(){return(0,c.jsx)(et,{children:(0,c.jsx)(ft,{})})}function ht(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,s=(0,X.ZP)(n),l=(0,X.ZP)(r,{forcePrependBaseUrl:!0});return(0,c.jsxs)(K.Z,{className:"footer__link-item",...r?{href:o?l:r}:{to:s},...i,children:[a,r&&!(0,J.Z)(r)&&(0,c.jsx)(te.Z,{})]})}function gt(e){let{item:t}=e;return t.html?(0,c.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)("li",{className:"footer__item",children:(0,c.jsx)(ht,{item:t})},t.href??t.to)}function mt(e){let{column:t}=e;return(0,c.jsxs)("div",{className:"col footer__col",children:[(0,c.jsx)("div",{className:"footer__title",children:t.title}),(0,c.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,c.jsx)(gt,{item:e},t)))})]})}function yt(e){let{columns:t}=e;return(0,c.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,c.jsx)(mt,{column:e},t)))})}function vt(){return(0,c.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function bt(e){let{item:t}=e;return t.html?(0,c.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,c.jsx)(ht,{item:t})}function wt(e){let{links:t}=e;return(0,c.jsx)("div",{className:"footer__links text--center",children:(0,c.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,c.jsxs)(r.Fragment,{children:[(0,c.jsx)(bt,{item:e}),t.length!==n+1&&(0,c.jsx)(vt,{})]},n)))})})}function xt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,c.jsx)(yt,{columns:t}):(0,c.jsx)(wt,{links:t})}var kt=n(9965);const St={footerLogoLink:"footerLogoLink_BH7S"};function Et(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.Cg)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,c.jsx)(kt.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function _t(e){let{logo:t}=e;return t.href?(0,c.jsx)(K.Z,{href:t.href,className:St.footerLogoLink,target:t.target,children:(0,c.jsx)(Et,{logo:t})}):(0,c.jsx)(Et,{logo:t})}function Ct(e){let{copyright:t}=e;return(0,c.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Tt(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,c.jsx)("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t}),children:(0,c.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,c.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,c.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function Nt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,c.jsx)(Tt,{style:a,links:n&&n.length>0&&(0,c.jsx)(xt,{links:n}),logo:r&&(0,c.jsx)(_t,{logo:r}),copyright:t&&(0,c.jsx)(Ct,{copyright:t})})}const Lt=r.memo(Nt),Pt=(0,O.Qc)([M.S,x.p,P.OC,be.L5,i.VC,function(e){let{children:t}=e;return(0,c.jsx)(A.n2,{children:(0,c.jsx)(L.M,{children:(0,c.jsx)(R,{children:t})})})}]);function Ot(e){let{children:t}=e;return(0,c.jsx)(Pt,{children:t})}var At=n(2503);function It(e){let{error:t,tryAgain:n}=e;return(0,c.jsx)("main",{className:"container margin-vert--xl",children:(0,c.jsx)("div",{className:"row",children:(0,c.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,c.jsx)(At.Z,{as:"h1",className:"hero__title",children:(0,c.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,c.jsx)("div",{className:"margin-vert--lg",children:(0,c.jsx)(rt,{onClick:n,className:"button button--primary shadow--lw"})}),(0,c.jsx)("hr",{}),(0,c.jsx)("div",{className:"margin-vert--md",children:(0,c.jsx)(at,{error:t})})]})})})}const Rt={mainWrapper:"mainWrapper_z2l0"};function jt(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,y.t)(),(0,c.jsxs)(Ot,{children:[(0,c.jsx)(i.d,{title:s,description:l}),(0,c.jsx)(b,{}),(0,c.jsx)(N,{}),(0,c.jsx)(pt,{}),(0,c.jsx)("div",{id:d,className:(0,a.Z)(m.k.wrapper.main,Rt.mainWrapper,r),children:(0,c.jsx)(o.Z,{fallback:e=>(0,c.jsx)(It,{...e}),children:t})}),!n&&(0,c.jsx)(Lt,{})]})}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(7294);var r=n(3692),a=n(4996),o=n(2263),i=n(6668),s=n(9965),l=n(5893);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.ZP)(t.src),dark:(0,a.ZP)(t.srcDark||t.src)},i=(0,l.jsx)(s.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function c(e){const{siteConfig:{title:t}}=(0,o.default)(),{navbar:{title:n,logo:s}}=(0,i.L)(),{imageClassName:c,titleClassName:d,...f}=e,p=(0,a.ZP)(s?.href||"/"),h=n?"":t,g=s?.alt??h;return(0,l.jsxs)(r.Z,{to:p,...f,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(u,{logo:s,alt:g,imageClassName:c}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(7294);var r=n(5742),a=n(5893);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.Z,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},9965:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7294),a=n(512),o=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 u(e){let{className:t,children:n}=e;const u=(0,o.Z)(),{colorMode:c}=(0,i.I)();return(0,l.jsx)(l.Fragment,{children:(u?"dark"===c?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.Z)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:o},e)}))})}function c(e){const{sources:t,className:n,alt:r,...a}=e;return(0,l.jsx)(u,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>u,z:()=>y});var r=n(7294),a=n(412),o=n(469),i=n(1442),s=n(5893);const l="ease-in-out";function u(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const c={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function f(e,t){const n=t?c:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.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 ${a?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return f(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=c.height,e.style.overflow=c.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function h(e){if(!a.Z.canUseDOM)return e?c:d}function g(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:u}=e;const c=(0,r.useRef)(null);return p({collapsibleRef:c,collapsed:n,animation:o}),(0,s.jsx)(t,{ref:c,style:u?void 0:h(n),onTransitionEnd:e=>{"height"===e.propertyName&&(f(c.current,n),i?.(n))},className:l,children:a})}function m(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[l,u]=(0,r.useState)(t);return(0,o.Z)((()=>{t||i(!0)}),[t]),(0,o.Z)((()=>{a&&u(t)}),[a,t]),a?(0,s.jsx)(g,{...n,collapsed:l}):null}function y(e){let{lazy:t,...n}=e;const r=t?m:g;return(0,s.jsx)(r,{...n})}},9689:(e,t,n)=>{"use strict";n.d(t,{n:()=>g,p:()=>h});var r=n(7294),a=n(2389),o=n(812),i=n(902),s=n(6668),l=n(5893);const u=(0,o.WA)("docusaurus.announcement.dismiss"),c=(0,o.WA)("docusaurus.announcement.id"),d=()=>"true"===u.get(),f=e=>u.set(String(e)),p=r.createContext(null);function h(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{f(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&f(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(p.Provider,{value:n,children:t})}function g(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>y,S:()=>m});var r=n(7294),a=n(412),o=n(902),i=n(812),s=n(6668),l=n(5893);const u=r.createContext(void 0),c="theme",d=(0,i.WA)(c),f={light:"light",dark:"dark"},p=e=>e===f.dark?f.dark:f.light,h=e=>a.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),g=e=>{d.set(p(e))};function m(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[a,o]=(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:a=!0}=r;t?(o(t),a&&g(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f.dark:f.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=d.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:a,setColorMode:i,get isDarkTheme(){return a===f.dark},setLightTheme(){i(f.light)},setDarkTheme(){i(f.dark)}})),[a,i])}();return(0,l.jsx)(u.Provider,{value:n,children:t})}function y(){const e=(0,r.useContext)(u);if(null==e)throw new o.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:()=>b,L5:()=>y});var r=n(7294),a=n(143),o=n(9935),i=n(6668),s=n(2802),l=n(902),u=n(812),c=n(5893);const d=e=>`docs-preferred-version-${e}`,f={save:(e,t,n)=>{(0,u.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(d(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const h=r.createContext(null);function g(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=f.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){f.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=g();return(0,c.jsx)(h.Provider,{value:n,children:t})}function y(e){let{children:t}=e;return s.cE?(0,c.jsx)(m,{children:t}):(0,c.jsx)(c.Fragment,{children:t})}function v(){const e=(0,r.useContext)(h);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function b(e){void 0===e&&(e=o.m);const t=(0,a.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])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>u,b:()=>l});var r=n(7294),a=n(902),o=n(5893);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(s.Provider,{value:i,children:t})}function u(){const e=(0,r.useContext)(s);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>s});var r=n(7294),a=n(902),o=n(5893);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new a.i6("DocsVersionProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>h});var r=n(7294),a=n(3102),o=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 u=n(6668),c=n(5893);const d=r.createContext(void 0);function f(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.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=f();return(0,c.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:()=>u,n2:()=>s});var r=n(7294),a=n(902),o=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,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function u(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,s]=o,l=(0,a.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:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>s});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!a.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?o.desktop:o.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},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:{blogFooterTagsRow:"theme-blog-footer-tags-row",blogFooterEditMetaRow:"theme-blog-footer-edit-meta-row"},pages:{pageFooterEditMetaRow:"theme-pages-footer-edit-meta-row"}}},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:()=>p,_F:()=>m,cE:()=>f,SN:()=>E,lO:()=>x,vY:()=>S,oz:()=>k,s1:()=>w,f:()=>v});var r=n(7294),a=n(6550),o=n(8790),i=n(143),s=n(373),l=n(4477),u=n(1116);function c(e){return Array.from(new Set(e))}var d=n(8596);const f=!!i._r;function p(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=p(t);if(e)return e}}(e):void 0:e.href}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),g=(e,t)=>e.some((e=>m(e,t)));function m(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||g(e.items,t))}function y(e,t){switch(e.type){case"category":return m(e,t)||e.items.some((e=>y(e,t)));case"link":return!e.unlisted||m(e,t);default:return!0}}function v(e,t){return(0,r.useMemo)((()=>e.filter((e=>y(e,t)))),[e,t])}function b(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function w(){const e=(0,u.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?b({sidebarItems:e.items,pathname:t}):null}function x(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>c([t,n,a].filter(Boolean))),[t,n,a])}function k(e,t){const n=x(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=x(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- ${c(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t}=e;const n=(0,a.TH)(),r=(0,l.E)(),i=t.routes,s=i.find((e=>(0,a.LX)(n.pathname,e)));if(!s)return null;const u=s.sidebar,c=u?r.docsSidebars[u]:void 0;return{docElement:(0,o.H)(i),sidebarName:u,sidebarItems:c}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>d,VC:()=>h});var r=n(7294),a=n(512),o=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),u=n(2263);var c=n(5893);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const s=function(e){const{siteConfig:t}=(0,u.default)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.Cg)(),f=a?d(a,{absolute:!0}):void 0;return(0,c.jsxs)(o.Z,{children:[t&&(0,c.jsx)("title",{children:s}),t&&(0,c.jsx)("meta",{property:"og:title",content:s}),n&&(0,c.jsx)("meta",{name:"description",content:n}),n&&(0,c.jsx)("meta",{property:"og:description",content:n}),r&&(0,c.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),f&&(0,c.jsx)("meta",{property:"og:image",content:f}),f&&(0,c.jsx)("meta",{name:"twitter:image",content:f}),i]})}const f=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(f),s=(0,a.Z)(i,t);return(0,c.jsxs)(f.Provider,{value:s,children:[(0,c.jsx)(o.Z,{children:(0,c.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 o=`plugin-id-${n.plugin.id}`;return(0,c.jsx)(p,{className:(0,a.Z)(r,o),children:t})}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>s,Qc:()=>c,Ql:()=>u,i6:()=>l,zX:()=>i});var r=n(7294),a=n(469),o=n(5893);function i(e){const t=(0,r.useRef)(e);return(0,a.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,a.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 u(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(7294),a=n(723),o=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,o.default)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>u,RF:()=>f});var r=n(7294),a=n(412),o=n(2389),i=(n(469),n(902)),s=n(5893);const l=r.createContext(void 0);function u(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 c(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const d=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(d()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=d();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,o.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 a=document.documentElement.scrollTop;(n&&a>e||!n&&a<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(a-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},812:(e,t,n)=>{"use strict";n.d(t,{WA:()=>u});n(7294);const r=JSON.parse('{"d":"localStorage","u":""}'),a=r.d;function o(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function i(e){if(void 0===e&&(e=a),"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,s||(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),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function u(e,t){const n=`${e}${r.u}`;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}}(n);const a=i(t?.persistence);return null===a?l:{get:()=>{try{return a.getItem(n)}catch(e){return console.error(`Docusaurus storage error, can't get key=${n}`,e),null}},set:e=>{try{const t=a.getItem(n);a.setItem(n,e),o({key:n,oldValue:t,newValue:e,storage:a})}catch(t){console.error(`Docusaurus storage error, can't set ${n}=${e}`,t)}},del:()=>{try{const e=a.getItem(n);a.removeItem(n),o({key:n,oldValue:e,newValue:null,storage:a})}catch(e){console.error(`Docusaurus storage error, can't delete key=${n}`,e)}},listen:e=>{try{const t=t=>{t.storageArea===a&&t.key===n&&e(t)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)}catch(t){return console.error(`Docusaurus storage error, can't listen for changes of key=${n}`,t),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(2263),a=n(6550),o=n(8780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.default)(),{pathname:l}=(0,a.TH)(),u=(0,o.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),c=s===i?e:e.replace(`/${s}/`,"/"),d=u.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${c}`:`${c}${e}/`}(n)}${d}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.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:()=>a});var r=n(2263);function a(){return(0,r.default)().siteConfig.themeConfig}},8802:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=void 0;const r=n(5913);function a(e){return e.endsWith("/")?e:`${e}/`}function o(e){return(0,r.removeSuffix)(e,"/")}t.addTrailingSlash=a,t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[i]=e.split(/[#?]/),s="/"===i||i===r?i:(l=i,n?a(l):o(l));var l;return e.replace(i,s)},t.addLeadingSlash=function(e){return(0,r.addPrefix)(e,"/")},t.removeTrailingSlash=o},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.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=t.removeTrailingSlash=t.addLeadingSlash=t.addTrailingSlash=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}}),Object.defineProperty(t,"addTrailingSlash",{enumerable:!0,get:function(){return a.addTrailingSlash}}),Object.defineProperty(t,"addLeadingSlash",{enumerable:!0,get:function(){return a.addLeadingSlash}}),Object.defineProperty(t,"removeTrailingSlash",{enumerable:!0,get:function(){return a.removeTrailingSlash}});var o=n(5913);Object.defineProperty(t,"addPrefix",{enumerable:!0,get:function(){return o.addPrefix}}),Object.defineProperty(t,"removeSuffix",{enumerable:!0,get:function(){return o.removeSuffix}}),Object.defineProperty(t,"addSuffix",{enumerable:!0,get:function(){return o.addSuffix}}),Object.defineProperty(t,"removePrefix",{enumerable:!0,get:function(){return o.removePrefix}});var i=n(4143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return i.getErrorCausalChain}})},5913:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.removePrefix=t.addSuffix=t.removeSuffix=t.addPrefix=void 0,t.addPrefix=function(e,t){return e.startsWith(t)?e:`${t}${e}`},t.removeSuffix=function(e,t){return""===t?e:e.endsWith(t)?e.slice(0,-t.length):e},t.addSuffix=function(e,t){return e.endsWith(t)?e:`${e}${t}`},t.removePrefix=function(e,t){return e.startsWith(t)?e.slice(t.length):e}},311:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});n(7294);var r=n(1728);const a={loadingRing:"loadingRing_RJI3","loading-ring":"loading-ring_FB5o"};var o=n(5893);function i(e){let{className:t}=e;return(0,o.jsxs)("div",{className:(0,r.Z)(a.loadingRing,t),children:[(0,o.jsx)("div",{}),(0,o.jsx)("div",{}),(0,o.jsx)("div",{}),(0,o.jsx)("div",{})]})}},22:(e,t,n)=>{"use strict";n.d(t,{w:()=>s});var r=n(1336),a=n.n(r),o=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}${o.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:a().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:()=>l});var r=n(1336),a=n.n(r);var o=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:a().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?a().Query.wildcard.TRAILING:a().Query.wildcard.NONE})))})))}function l(e,t,n){return function(r,s){const l=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return a()[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,o.dK);if(0===l.length)return void s([]);const u=function(e,t){const n=function(e,t){const n=[];return function e(r,a){if(0===r.length)return void n.push(a);const o=r[0];if(/\p{Unified_Ideograph}/u.test(o)){const n=function(e,t){const n=[];return function e(r,a){let o=0,i=!1;for(const s of t)if(r.substr(0,s.length)===s){const t={missed:a.missed,term:a.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>o;t-=1){const l=s.substr(0,t);if(r.substr(0,t)===l){o=t;const s={missed:a.missed,term:a.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:a.missed+1,term:a.term}):a.term.length>0&&n.push(a))}(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))}(o,t);for(const t of n){const n=a.concat(...t);e(r.slice(1),n)}}else{const t=a.concat({value:o});e(r.slice(1),t)}}(e,[]),n}(e,t);if(0===n.length)return[{tokens:e,term:e.map((e=>({value:e,presence:a().Query.presence.REQUIRED,wildcard:a().Query.wildcard.LEADING|a().Query.wildcard.TRAILING})))}];for(const a of n)a[a.length-1].maybeTyping=!0;const r=[];for(const i of o.dK)if("en"===i)o._k||r.unshift(a().stopWordFilter);else{const e=a()[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 a of s)if(a.length>2)for(let e=a.length-1;e>=0;e-=1)l.push(a.slice(0,e).concat(a.slice(e+1)));return i(n).concat(i(l))}(l,t),c=[];e:for(const{term:t,tokens:a}of u)for(const{documents:r,index:o,type:i}of e)if(c.push(...o.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!c.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-c.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:i,page:0!==i&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:a,score:t.score}}))),c.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type>0&&t.page?e.findIndex((e=>e.document===t.page)):t.index,a=n.type>0&&n.page?e.findIndex((e=>e.document===n.page)):n.index;return-1===r&&(r=t.index),-1===a&&(a=n.index),r===a?0===t.type?-1:0===n.type?1:t.index-n.index:r-a}))}(c),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.some((e=>e.document===t.page))&&(n<e.length-1&&e[n+1].page===t.page?t.isInterOfTree=!0:t.isLastOfTree=!0)}))}(c),s(c)}}},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:()=>a});var r=n(1690);function a(e,t,n){const o=[];for(const i of t){const n=e.toLowerCase().indexOf(i);if(n>=0){n>0&&o.push(a(e.substr(0,n),t)),o.push(`<mark>${(0,r.X)(e.substr(n,i.length))}</mark>`);const s=n+i.length;s<e.length&&o.push(a(e.substr(s),t));break}}return 0===o.length?n?`<mark>${(0,r.X)(e)}</mark>`:(0,r.X)(e):o.join("")}},726:(e,t,n)=>{"use strict";n.d(t,{o:()=>l});var r=n(1690),a=n(2539);const o=/\w+|\p{Unified_Ideograph}/u;function i(e){const t=[];let n=0,r=e;for(;r.length>0;){const a=r.match(o);if(!a){t.push(r);break}a.index>0&&t.push(r.substring(0,a.index)),t.push(a[0]),n+=a.index+a[0].length,r=e.substring(n)}return t}var s=n(1029);function l(e,t,n,o){void 0===o&&(o=s.Hk);const{chunkIndex:l,chunks:u}=function(e,t,n){const o=[];let s=0,l=0,u=-1;for(;s<t.length;){const[c,d]=t[s];if(s+=1,!(c<l)){if(c>l){const t=i(e.substring(l,c)).map((e=>({html:(0,r.X)(e),textLength:e.length})));for(const e of t)o.push(e)}-1===u&&(u=o.length),l=c+d,o.push({html:(0,a.C)(e.substring(c,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)o.push(e)}return{chunkIndex:u,chunks:o}}(e,t,n),c=u.slice(0,l),d=u[l],f=[d.html],p=u.slice(l+1);let h=d.textLength,g=0,m=0,y=!1,v=!1;for(;h<o;)if((g<=m||0===p.length)&&c.length>0){const e=c.pop();h+e.textLength<=o?(f.unshift(e.html),g+=e.textLength,h+=e.textLength):(y=!0,c.length=0)}else{if(!(p.length>0))break;{const e=p.shift();h+e.textLength<=o?(f.push(e.html),m+=e.textLength,h+=e.textLength):(v=!0,p.length=0)}}return(y||c.length>0)&&f.unshift("\u2026"),(v||p.length>0)&&f.push("\u2026"),f.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:()=>h,H6:()=>c,hG:()=>y,l9:()=>g,dK:()=>o,_k:()=>i,pu:()=>p,AY:()=>d,t_:()=>f,Kc:()=>m,J:()=>s,Hk:()=>u,qo:()=>l,pQ:()=>v});n(1336);var r=n(813),a=n.n(r);const o=["en"],i=!1,s="search-index{dir}.json",l=8,u=50,c=!1,d=!0,f=!0,p="right",h=void 0,g=!0,m=null,y=!1,v=!1},9318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>p,PP:()=>N,Ep:()=>f});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r<a;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&&a(e),l=t&&a(t),u=s||l;if(e&&a(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,f=i.length;f>=0;f--){var p=i[f];"."===p?o(i,f):".."===p?(o(i,f),d++):d&&(o(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&a(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 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 f(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function p(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function h(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!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 g=!("undefined"==typeof window||!window.document||!window.document.createElement);function m(e,t){t(window.confirm(e))}var y="popstate",v="hashchange";function b(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),g||(0,s.Z)(!1);var t,n=window.history,a=(-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,o=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,u=i.forceRefresh,w=void 0!==u&&u,x=i.getUserConfirmation,k=void 0===x?m:x,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,a=window.location,o=a.pathname+a.search+a.hash;return _&&(o=c(o,_)),p(o,r,n)}function T(){return Math.random().toString(36).substr(2,E)}var N=h();function L(e){(0,r.Z)($,e),$.length=n.length,N.notifyListeners($.location,$.action)}function P(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||I(C(e.state))}function O(){I(C(b()))}var A=!1;function I(e){if(A)A=!1,L();else{N.confirmTransitionTo(e,"POP",k,(function(t){t?L({action:"POP",location:e}):function(e){var t=$.location,n=j.indexOf(t.key);-1===n&&(n=0);var r=j.indexOf(e.key);-1===r&&(r=0);var a=n-r;a&&(A=!0,D(a))}(e)}))}}var R=C(b()),j=[R.key];function F(e){return _+f(e)}function D(e){n.go(e)}var M=0;function z(e){1===(M+=e)&&1===e?(window.addEventListener(y,P),o&&window.addEventListener(v,O)):0===M&&(window.removeEventListener(y,P),o&&window.removeEventListener(v,O))}var B=!1;var $={length:n.length,action:"POP",location:R,createHref:F,push:function(e,t){var r="PUSH",o=p(e,t,T(),$.location);N.confirmTransitionTo(o,r,k,(function(e){if(e){var t=F(o),i=o.key,s=o.state;if(a)if(n.pushState({key:i,state:s},null,t),w)window.location.href=t;else{var l=j.indexOf($.location.key),u=j.slice(0,l+1);u.push(o.key),j=u,L({action:r,location:o})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",o=p(e,t,T(),$.location);N.confirmTransitionTo(o,r,k,(function(e){if(e){var t=F(o),i=o.key,s=o.state;if(a)if(n.replaceState({key:i,state:s},null,t),w)window.location.replace(t);else{var l=j.indexOf($.location.key);-1!==l&&(j[l]=o.key),L({action:r,location:o})}else window.location.replace(t)}}))},go:D,goBack:function(){D(-1)},goForward:function(){D(1)},block:function(e){void 0===e&&(e=!1);var t=N.setPrompt(e);return B||(z(1),B=!0),function(){return B&&(B=!1,z(-1)),t()}},listen:function(e){var t=N.appendListener(e);return z(1),function(){z(-1),t()}}};return $}var x="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 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={}),g||(0,s.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),a=n.getUserConfirmation,o=void 0===a?m:a,i=n.hashType,u=void 0===i?"slash":i,y=e.basename?d(l(e.basename)):"",v=k[u],b=v.encodePath,w=v.decodePath;function C(){var e=w(E());return y&&(e=c(e,y)),p(e)}var T=h();function N(e){(0,r.Z)(B,e),B.length=t.length,T.notifyListeners(B.location,B.action)}var L=!1,P=null;function O(){var e,t,n=E(),r=b(n);if(n!==r)_(r);else{var a=C(),i=B.location;if(!L&&(t=a,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(P===f(a))return;P=null,function(e){if(L)L=!1,N();else{var t="POP";T.confirmTransitionTo(e,t,o,(function(n){n?N({action:t,location:e}):function(e){var t=B.location,n=j.lastIndexOf(f(t));-1===n&&(n=0);var r=j.lastIndexOf(f(e));-1===r&&(r=0);var a=n-r;a&&(L=!0,F(a))}(e)}))}}(a)}}var A=E(),I=b(A);A!==I&&_(I);var R=C(),j=[f(R)];function F(e){t.go(e)}var D=0;function M(e){1===(D+=e)&&1===e?window.addEventListener(x,O):0===D&&window.removeEventListener(x,O)}var z=!1;var B={length:t.length,action:"POP",location:R,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+b(y+f(e))},push:function(e,t){var n="PUSH",r=p(e,void 0,void 0,B.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=f(r),a=b(y+t);if(E()!==a){P=t,function(e){window.location.hash=e}(a);var o=j.lastIndexOf(f(B.location)),i=j.slice(0,o+1);i.push(t),j=i,N({action:n,location:r})}else N()}}))},replace:function(e,t){var n="REPLACE",r=p(e,void 0,void 0,B.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=f(r),a=b(y+t);E()!==a&&(P=t,_(a));var o=j.indexOf(f(B.location));-1!==o&&(j[o]=t),N({action:n,location:r})}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(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 N(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,a=t.initialEntries,o=void 0===a?["/"]:a,i=t.initialIndex,s=void 0===i?0:i,l=t.keyLength,u=void 0===l?6:l,c=h();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function g(){return Math.random().toString(36).substr(2,u)}var m=T(s,0,o.length-1),y=o.map((function(e){return p(e,void 0,"string"==typeof e?g():e.key||g())})),v=f;function b(e){var t=T(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:y.length,action:"POP",location:y[m],index:m,entries:y,createHref:v,push:function(e,t){var r="PUSH",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,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,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=p(e,t,g(),w.location);c.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:b,goBack:function(){b(-1)},goForward:function(){b(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),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={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]||a}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,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var a=p(n);a&&a!==h&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var s=l(t),g=l(n),m=0;m<i.length;++m){var y=i[m];if(!(o[y]||r&&r[y]||g&&g[y]||s&&s[y])){var v=f(n,y);try{u(t,y,v)}catch(b){}}}}return t}},1143:e=>{"use strict";e.exports=function(e,t,n,r,a,o,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,a,o,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)}},1336:(e,t,n)=>{var r,a;!function(){var o,i,s,l,u,c,d,f,p,h,g,m,y,v,b,w,x,k,S,E,_,C,T,N,L,P,O,A,I,R,j=function(e){var t=new j.Builder;return t.pipeline.add(j.trimmer,j.stopWordFilter,j.stemmer),t.searchPipeline.add(j.stemmer),e.call(t,t),t.build()};j.version="2.3.9",j.utils={},j.utils.warn=(o=this,function(e){o.console&&console.warn&&console.warn(e)}),j.utils.asString=function(e){return null==e?"":e.toString()},j.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 a=n[r],o=e[a];if(Array.isArray(o))t[a]=o.slice();else{if("string"!=typeof o&&"number"!=typeof o&&"boolean"!=typeof o)throw new TypeError("clone is not deep and does not support nested objects");t[a]=o}}return t},j.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},j.FieldRef.joiner="/",j.FieldRef.fromString=function(e){var t=e.indexOf(j.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new j.FieldRef(r,n,e)},j.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+j.FieldRef.joiner+this.docRef),this._stringValue},j.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},j.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},j.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},j.Set.prototype.contains=function(e){return!!this.elements[e]},j.Set.prototype.intersect=function(e){var t,n,r,a=[];if(e===j.Set.complete)return this;if(e===j.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var o=0;o<r.length;o++){var i=r[o];i in n.elements&&a.push(i)}return new j.Set(a)},j.Set.prototype.union=function(e){return e===j.Set.complete?j.Set.complete:e===j.Set.empty?this:new j.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},j.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var a=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(a))},j.Token=function(e,t){this.str=e||"",this.metadata=t||{}},j.Token.prototype.toString=function(){return this.str},j.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},j.Token.prototype.clone=function(e){return e=e||function(e){return e},new j.Token(e(this.str,this.metadata),this.metadata)},j.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new j.Token(j.utils.asString(e).toLowerCase(),j.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,a=[],o=0,i=0;o<=r;o++){var s=o-i;if(n.charAt(o).match(j.tokenizer.separator)||o==r){if(s>0){var l=j.utils.clone(t)||{};l.position=[i,s],l.index=a.length,a.push(new j.Token(n.slice(i,o),l))}i=o+1}}return a},j.tokenizer.separator=/[\s\-]+/,j.Pipeline=function(){this._stack=[]},j.Pipeline.registeredFunctions=Object.create(null),j.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&j.utils.warn("Overwriting existing registered function: "+t),e.label=t,j.Pipeline.registeredFunctions[e.label]=e},j.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||j.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},j.Pipeline.load=function(e){var t=new j.Pipeline;return e.forEach((function(e){var n=j.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},j.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){j.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},j.Pipeline.prototype.after=function(e,t){j.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)},j.Pipeline.prototype.before=function(e,t){j.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},j.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},j.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],a=[],o=0;o<e.length;o++){var i=r(e[o],o,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var s=0;s<i.length;s++)a.push(i[s]);else a.push(i)}e=a}return e},j.Pipeline.prototype.runString=function(e,t){var n=new j.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},j.Pipeline.prototype.reset=function(){this._stack=[]},j.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return j.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},j.Vector=function(e){this._magnitude=0,this.elements=e||[]},j.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,a=Math.floor(r/2),o=this.elements[2*a];r>1&&(o<e&&(t=a),o>e&&(n=a),o!=e);)r=n-t,a=t+Math.floor(r/2),o=this.elements[2*a];return o==e||o>e?2*a:o<e?2*(a+1):void 0},j.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},j.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)},j.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)},j.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,a=n.length,o=r.length,i=0,s=0,l=0,u=0;l<a&&u<o;)(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},j.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},j.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},j.Vector.prototype.toJSON=function(){return this.elements},j.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+")?$",f="^("+u+")?"+c+u+c+u,p="^("+u+")?"+l,h=new RegExp("^("+u+")?"+c+u),g=new RegExp(f),m=new RegExp(d),y=new RegExp(p),v=/^(.+?)(ss|i)es$/,b=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,x=/^(.+?)(ed|ing)$/,k=/.$/,S=/(at|bl|iz)$/,E=new RegExp("([^aeiouylsz])\\1$"),_=new RegExp("^"+u+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)$/,N=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,L=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,P=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,A=/ll$/,I=new RegExp("^"+u+l+"[^aeiouwxy]$"),R=function(e){var t,n,r,a,o,l,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),o=b,(a=v).test(e)?e=e.replace(a,"$1$2"):o.test(e)&&(e=e.replace(o,"$1$2")),o=x,(a=w).test(e)){var c=a.exec(e);(a=h).test(c[1])&&(a=k,e=e.replace(a,""))}else o.test(e)&&(t=(c=o.exec(e))[1],(o=y).test(t)&&(l=E,u=_,(o=S).test(e=t)?e+="e":l.test(e)?(a=k,e=e.replace(a,"")):u.test(e)&&(e+="e")));return(a=C).test(e)&&(e=(t=(c=a.exec(e))[1])+"i"),(a=T).test(e)&&(t=(c=a.exec(e))[1],n=c[2],(a=h).test(t)&&(e=t+i[n])),(a=N).test(e)&&(t=(c=a.exec(e))[1],n=c[2],(a=h).test(t)&&(e=t+s[n])),o=P,(a=L).test(e)?(t=(c=a.exec(e))[1],(a=g).test(t)&&(e=t)):o.test(e)&&(t=(c=o.exec(e))[1]+c[2],(o=g).test(t)&&(e=t)),(a=O).test(e)&&(t=(c=a.exec(e))[1],o=m,l=I,((a=g).test(t)||o.test(t)&&!l.test(t))&&(e=t)),o=g,(a=A).test(e)&&o.test(e)&&(a=k,e=e.replace(a,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(R)}),j.Pipeline.registerFunction(j.stemmer,"stemmer"),j.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}},j.stopWordFilter=j.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"]),j.Pipeline.registerFunction(j.stopWordFilter,"stopWordFilter"),j.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},j.Pipeline.registerFunction(j.trimmer,"trimmer"),j.TokenSet=function(){this.final=!1,this.edges={},this.id=j.TokenSet._nextId,j.TokenSet._nextId+=1},j.TokenSet._nextId=1,j.TokenSet.fromArray=function(e){for(var t=new j.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},j.TokenSet.fromClause=function(e){return"editDistance"in e?j.TokenSet.fromFuzzyString(e.term,e.editDistance):j.TokenSet.fromString(e.term)},j.TokenSet.fromFuzzyString=function(e,t){for(var n=new j.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var a=r.pop();if(a.str.length>0){var o,i=a.str.charAt(0);i in a.node.edges?o=a.node.edges[i]:(o=new j.TokenSet,a.node.edges[i]=o),1==a.str.length&&(o.final=!0),r.push({node:o,editsRemaining:a.editsRemaining,str:a.str.slice(1)})}if(0!=a.editsRemaining){if("*"in a.node.edges)var s=a.node.edges["*"];else{s=new j.TokenSet;a.node.edges["*"]=s}if(0==a.str.length&&(s.final=!0),r.push({node:s,editsRemaining:a.editsRemaining-1,str:a.str}),a.str.length>1&&r.push({node:a.node,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)}),1==a.str.length&&(a.node.final=!0),a.str.length>=1){if("*"in a.node.edges)var l=a.node.edges["*"];else{l=new j.TokenSet;a.node.edges["*"]=l}1==a.str.length&&(l.final=!0),r.push({node:l,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)})}if(a.str.length>1){var u,c=a.str.charAt(0),d=a.str.charAt(1);d in a.node.edges?u=a.node.edges[d]:(u=new j.TokenSet,a.node.edges[d]=u),1==a.str.length&&(u.final=!0),r.push({node:u,editsRemaining:a.editsRemaining-1,str:c+a.str.slice(2)})}}}return n},j.TokenSet.fromString=function(e){for(var t=new j.TokenSet,n=t,r=0,a=e.length;r<a;r++){var o=e[r],i=r==a-1;if("*"==o)t.edges[o]=t,t.final=i;else{var s=new j.TokenSet;s.final=i,t.edges[o]=s,t=s}}return n},j.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),a=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var o=0;o<a;o++){var i=r[o];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},j.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 a=t[r];e=e+a+this.edges[a].id}return e},j.TokenSet.prototype.intersect=function(e){for(var t=new j.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var a=Object.keys(n.qNode.edges),o=a.length,i=Object.keys(n.node.edges),s=i.length,l=0;l<o;l++)for(var u=a[l],c=0;c<s;c++){var d=i[c];if(d==u||"*"==u){var f=n.node.edges[d],p=n.qNode.edges[u],h=f.final&&p.final,g=void 0;d in n.output.edges?(g=n.output.edges[d]).final=g.final||h:((g=new j.TokenSet).final=h,n.output.edges[d]=g),r.push({qNode:p,output:g,node:f})}}}return t},j.TokenSet.Builder=function(){this.previousWord="",this.root=new j.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},j.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 a=new j.TokenSet,o=e[r];t.edges[o]=a,this.uncheckedNodes.push({parent:t,char:o,child:a}),t=a}t.final=!0,this.previousWord=e},j.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},j.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()}},j.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},j.Index.prototype.search=function(e){return this.query((function(t){new j.QueryParser(e,t).parse()}))},j.Index.prototype.query=function(e){for(var t=new j.Query(this.fields),n=Object.create(null),r=Object.create(null),a=Object.create(null),o=Object.create(null),i=Object.create(null),s=0;s<this.fields.length;s++)r[this.fields[s]]=new j.Vector;e.call(t,t);for(s=0;s<t.clauses.length;s++){var l=t.clauses[s],u=null,c=j.Set.empty;u=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var d=0;d<u.length;d++){var f=u[d];l.term=f;var p=j.TokenSet.fromClause(l),h=this.tokenSet.intersect(p).toArray();if(0===h.length&&l.presence===j.Query.presence.REQUIRED){for(var g=0;g<l.fields.length;g++){o[O=l.fields[g]]=j.Set.empty}break}for(var m=0;m<h.length;m++){var y=h[m],v=this.invertedIndex[y],b=v._index;for(g=0;g<l.fields.length;g++){var w=v[O=l.fields[g]],x=Object.keys(w),k=y+"/"+O,S=new j.Set(x);if(l.presence==j.Query.presence.REQUIRED&&(c=c.union(S),void 0===o[O]&&(o[O]=j.Set.complete)),l.presence!=j.Query.presence.PROHIBITED){if(r[O].upsert(b,l.boost,(function(e,t){return e+t})),!a[k]){for(var E=0;E<x.length;E++){var _,C=x[E],T=new j.FieldRef(C,O),N=w[C];void 0===(_=n[T])?n[T]=new j.MatchData(y,O,N):_.add(y,O,N)}a[k]=!0}}else void 0===i[O]&&(i[O]=j.Set.empty),i[O]=i[O].union(S)}}}if(l.presence===j.Query.presence.REQUIRED)for(g=0;g<l.fields.length;g++){o[O=l.fields[g]]=o[O].intersect(c)}}var L=j.Set.complete,P=j.Set.empty;for(s=0;s<this.fields.length;s++){var O;o[O=this.fields[s]]&&(L=L.intersect(o[O])),i[O]&&(P=P.union(i[O]))}var A=Object.keys(n),I=[],R=Object.create(null);if(t.isNegated()){A=Object.keys(this.fieldVectors);for(s=0;s<A.length;s++){T=A[s];var F=j.FieldRef.fromString(T);n[T]=new j.MatchData}}for(s=0;s<A.length;s++){var D=(F=j.FieldRef.fromString(A[s])).docRef;if(L.contains(D)&&!P.contains(D)){var M,z=this.fieldVectors[F],B=r[F.fieldName].similarity(z);if(void 0!==(M=R[D]))M.score+=B,M.matchData.combine(n[F]);else{var $={ref:D,score:B,matchData:n[F]};R[D]=$,I.push($)}}}return I.sort((function(e,t){return t.score-e.score}))},j.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:j.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},j.Index.load=function(e){var t={},n={},r=e.fieldVectors,a=Object.create(null),o=e.invertedIndex,i=new j.TokenSet.Builder,s=j.Pipeline.load(e.pipeline);e.version!=j.version&&j.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+j.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 j.Vector(c)}for(l=0;l<o.length;l++){var d,f=(d=o[l])[0],p=d[1];i.insert(f),a[f]=p}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=a,t.tokenSet=i.root,t.pipeline=s,new j.Index(t)},j.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=j.tokenizer,this.pipeline=new j.Pipeline,this.searchPipeline=new j.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},j.Builder.prototype.ref=function(e){this._ref=e},j.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},j.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},j.Builder.prototype.k1=function(e){this._k1=e},j.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 a=0;a<r.length;a++){var o=r[a],i=this._fields[o].extractor,s=i?i(e):e[o],l=this.tokenizer(s,{fields:[o]}),u=this.pipeline.run(l),c=new j.FieldRef(n,o),d=Object.create(null);this.fieldTermFrequencies[c]=d,this.fieldLengths[c]=0,this.fieldLengths[c]+=u.length;for(var f=0;f<u.length;f++){var p=u[f];if(null==d[p]&&(d[p]=0),d[p]+=1,null==this.invertedIndex[p]){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[p]=h}null==this.invertedIndex[p][o][n]&&(this.invertedIndex[p][o][n]=Object.create(null));for(var m=0;m<this.metadataWhitelist.length;m++){var y=this.metadataWhitelist[m],v=p.metadata[y];null==this.invertedIndex[p][o][n][y]&&(this.invertedIndex[p][o][n][y]=[]),this.invertedIndex[p][o][n][y].push(v)}}}},j.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},a=0;a<t;a++){var o=j.FieldRef.fromString(e[a]),i=o.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[o]}var s=Object.keys(this._fields);for(a=0;a<s.length;a++){var l=s[a];n[l]=n[l]/r[l]}this.averageFieldLength=n},j.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),a=0;a<n;a++){for(var o=j.FieldRef.fromString(t[a]),i=o.fieldName,s=this.fieldLengths[o],l=new j.Vector,u=this.fieldTermFrequencies[o],c=Object.keys(u),d=c.length,f=this._fields[i].boost||1,p=this._documents[o.docRef].boost||1,h=0;h<d;h++){var g,m,y,v=c[h],b=u[v],w=this.invertedIndex[v]._index;void 0===r[v]?(g=j.idf(this.invertedIndex[v],this.documentCount),r[v]=g):g=r[v],m=g*((this._k1+1)*b)/(this._k1*(1-this._b+this._b*(s/this.averageFieldLength[i]))+b),m*=f,m*=p,y=Math.round(1e3*m)/1e3,l.insert(w,y)}e[o]=l}this.fieldVectors=e},j.Builder.prototype.createTokenSet=function(){this.tokenSet=j.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},j.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new j.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},j.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},j.MatchData=function(e,t,n){for(var r=Object.create(null),a=Object.keys(n||{}),o=0;o<a.length;o++){var i=a[o];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},j.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],a=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var o=0;o<a.length;o++){var i=a[o],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])}}}},j.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),a=0;a<r.length;a++){var o=r[a];o in this.metadata[e][t]?this.metadata[e][t][o]=this.metadata[e][t][o].concat(n[o]):this.metadata[e][t][o]=n[o]}else this.metadata[e][t]=n},j.Query=function(e){this.clauses=[],this.allFields=e},j.Query.wildcard=new String("*"),j.Query.wildcard.NONE=0,j.Query.wildcard.LEADING=1,j.Query.wildcard.TRAILING=2,j.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},j.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=j.Query.wildcard.NONE),e.wildcard&j.Query.wildcard.LEADING&&e.term.charAt(0)!=j.Query.wildcard&&(e.term="*"+e.term),e.wildcard&j.Query.wildcard.TRAILING&&e.term.slice(-1)!=j.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=j.Query.presence.OPTIONAL),this.clauses.push(e),this},j.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=j.Query.presence.PROHIBITED)return!1;return!0},j.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,j.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},j.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},j.QueryParseError.prototype=new Error,j.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},j.QueryLexer.prototype.run=function(){for(var e=j.QueryLexer.lexText;e;)e=e(this)},j.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("")},j.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},j.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},j.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return j.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},j.QueryLexer.prototype.width=function(){return this.pos-this.start},j.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},j.QueryLexer.prototype.backup=function(){this.pos-=1},j.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=j.QueryLexer.EOS&&this.backup()},j.QueryLexer.prototype.more=function(){return this.pos<this.length},j.QueryLexer.EOS="EOS",j.QueryLexer.FIELD="FIELD",j.QueryLexer.TERM="TERM",j.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",j.QueryLexer.BOOST="BOOST",j.QueryLexer.PRESENCE="PRESENCE",j.QueryLexer.lexField=function(e){return e.backup(),e.emit(j.QueryLexer.FIELD),e.ignore(),j.QueryLexer.lexText},j.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(j.QueryLexer.TERM)),e.ignore(),e.more())return j.QueryLexer.lexText},j.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(j.QueryLexer.EDIT_DISTANCE),j.QueryLexer.lexText},j.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(j.QueryLexer.BOOST),j.QueryLexer.lexText},j.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(j.QueryLexer.TERM)},j.QueryLexer.termSeparator=j.tokenizer.separator,j.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==j.QueryLexer.EOS)return j.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return j.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(j.QueryLexer.TERM),j.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(j.QueryLexer.TERM),j.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(j.QueryLexer.PRESENCE),j.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(j.QueryLexer.PRESENCE),j.QueryLexer.lexText;if(t.match(j.QueryLexer.termSeparator))return j.QueryLexer.lexTerm}else e.escapeCharacter()}},j.QueryParser=function(e,t){this.lexer=new j.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},j.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=j.QueryParser.parseClause;e;)e=e(this);return this.query},j.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},j.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},j.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},j.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case j.QueryLexer.PRESENCE:return j.QueryParser.parsePresence;case j.QueryLexer.FIELD:return j.QueryParser.parseField;case j.QueryLexer.TERM:return j.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 j.QueryParseError(n,t.start,t.end)}},j.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=j.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=j.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new j.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new j.QueryParseError(n,t.start,t.end)}switch(r.type){case j.QueryLexer.FIELD:return j.QueryParser.parseField;case j.QueryLexer.TERM:return j.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new j.QueryParseError(n,r.start,r.end)}}},j.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 j.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var a=e.peekLexeme();if(null==a){r="expecting term, found nothing";throw new j.QueryParseError(r,t.start,t.end)}if(a.type===j.QueryLexer.TERM)return j.QueryParser.parseTerm;r="expecting term, found '"+a.type+"'";throw new j.QueryParseError(r,a.start,a.end)}},j.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 j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new j.QueryParseError(r,n.start,n.end)}else e.nextClause()}},j.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 j.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var a=e.peekLexeme();if(null!=a)switch(a.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+a.type+"'";throw new j.QueryParseError(r,a.start,a.end)}else e.nextClause()}},j.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 j.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var a=e.peekLexeme();if(null!=a)switch(a.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+a.type+"'";throw new j.QueryParseError(r,a.start,a.end)}else e.nextClause()}},void 0===(a="function"==typeof(r=function(){return j})?r.call(t,n,t,e):r)||(e.exports=a)}()},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},a=function(){function e(n){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=a,this.iframesTimeout=o}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 a=e.contentWindow;if(r=a.document,!a||!r)throw new Error("iframe inaccessible")}catch(o){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,a=!1,o=null,i=function i(){if(!a){a=!0,clearTimeout(o);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(s){n()}}};e.addEventListener("load",i),o=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 a=this,o=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&&o(l)};s||u(),i.forEach((function(t){e.matches(t,a.exclude)?u():a.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 a=!1,o=!1;return r.forEach((function(e,t){e.val===n&&(a=t,o=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==a||o?!1===a||o||(r[a].handled=!0):r.push({val:n,handled:!0}),!0):(!1===a&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var a=this;e.forEach((function(e){e.handled||a.getIframeContents(e.val,(function(e){a.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,a){for(var o=this,i=this.createIterator(t,e,r),s=[],l=[],u=void 0,c=void 0,d=function(){var e=o.getIteratorNode(i);return c=e.prevNode,u=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return o.checkIframeFilter(u,c,e,s)}),(function(t){o.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),a()}},{key:"forEachNode",value:function(e,t,n){var r=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},o=this.getContexts(),i=o.length;i||a(),o.forEach((function(o){var s=function(){r.iterateThroughNodes(e,o,t,n,(function(){--i<=0&&a()}))};r.iframes?r.waitForIframes(o,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 a=!1;return n.every((function(t){return!r.call(e,t)||(a=!0,!1)})),a}return!1}}]),e}(),o=function(){function o(e){t(this,o),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(o,[{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 a in t)if(t.hasOwnProperty(a)){var o=t[a],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o);""!==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(a){n.every((function(n){if(-1!==n.indexOf(a)){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,a="string"==typeof r?r:r.value,o="string"==typeof r?[]:r.limiters,i="";switch(o.forEach((function(e){i+="|"+t.escapeStr(e)})),a){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 a=t.callNoMatchOnInvalidRanges(e,r),o=a.start,i=a.end;a.valid&&(e.start=o,e.length=i-o,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,a=!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?a=!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:a}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,a=!0,o=n.length,i=t-o,s=parseInt(e.start,10)-i;return(r=(s=s>o?o:s)+parseInt(e.length,10))>o&&(r=o,this.log("End range automatically set to the max value of "+o)),s<0||r-s<0||s>o||r>o?(a=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(a=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:a}}},{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 a.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",a=e.splitText(t),o=a.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=a.textContent,a.parentNode.replaceChild(i,a),o}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,a){var o=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),f=e.value.substr(c+i.start);if(i.node=o.wrapRangeInTextNode(i.node,u,c),e.value=d+f,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,a(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,a){var o=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var a=void 0;null!==(a=e.exec(t.textContent))&&""!==a[i];)if(n(a[i],t)){var s=a.index;if(0!==i)for(var l=1;l<i;l++)s+=a[l].length;t=o.wrapRangeInTextNode(t,s,s+a[i].length),r(t.previousSibling),e.lastIndex=0}})),a()}))}},{key:"wrapMatchesAcrossElements",value:function(e,t,n,r,a){var o=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;o.wrapRangeInMappedTextNode(t,l,c,(function(e){return n(s[i],e)}),(function(t,n){e.lastIndex=n,r(t)}))}a()}))}},{key:"wrapRangeFromIndex",value:function(e,t,n,r){var a=this;this.getTextNodes((function(o){var i=o.value.length;e.forEach((function(e,r){var s=a.checkWhitespaceRanges(e,i,o.value),l=s.start,u=s.end;s.valid&&a.wrapRangeInMappedTextNode(o,l,u,(function(n){return t(n,e,o.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,a="wrapMatches",o=function(e){r++,n.opt.each(e)};this.opt.acrossElements&&(a="wrapMatchesAcrossElements"),this[a](e,this.opt.ignoreGroups,(function(e,t){return n.opt.filter(t,e,r)}),o,(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,a="wrapMatches",o=this.getSeparatedKeywords("string"==typeof e?[e]:e),i=o.keywords,s=o.length,l=this.opt.caseSensitive?"":"i",u=function e(t){var o=new RegExp(n.createRegExp(t),"gm"+l),u=0;n.log('Searching with expression "'+o+'"'),n[a](o,1,(function(e,a){return n.opt.filter(a,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&&(a="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,a=this.checkRanges(e);a&&a.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(a)),this.wrapRangeFromIndex(a,(function(e,t,r,a){return n.opt.filter(e,t,r,a)}),(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=a.matches(e,n),o=t.matchesExclude(e);return!r||o?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 a(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}}]),o}();function i(e){var t=this,n=new o(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}()},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,a;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 a(e,t,n){return e<t?t:e>n?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}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=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),u=o.querySelector(r.barSelector),c=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(u,i(e,c,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{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)*a(Math.random()*t,.1,.95)),t=a(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 a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&p(a),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&&p(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,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},4779:(e,t,n)=>{var r=n(5826);e.exports=p,e.exports.parse=o,e.exports.compile=function(e,t){return s(o(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=f;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,s="",c=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],f=n[1],p=n.index;if(s+=e.slice(i,p),i=p+d.length,f)s+=f[1];else{var h=e[i],g=n[2],m=n[3],y=n[4],v=n[5],b=n[6],w=n[7];s&&(r.push(s),s="");var x=null!=g&&null!=h&&h!==g,k="+"===b||"*"===b,S="?"===b||"*"===b,E=n[2]||c,_=y||v;r.push({name:m||o++,prefix:g||"",delimiter:E,optional:S,repeat:k,partial:x,asterisk:!!w,pattern:_?u(_):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),a=0;a<e.length;a++)"object"==typeof e[a]&&(n[a]=new RegExp("^(?:"+e[a].pattern+")$",d(t)));return function(t,a){for(var o="",s=t||{},l=(a||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=s[c.name];if(null==f){if(c.optional){c.partial&&(o+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=l(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");o+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');o+=c.prefix+d}}else o+=c}return o}}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 f(e,t,n){r(t)||(n=t||n,t=[]);for(var a=(n=n||{}).strict,o=!1!==n.end,i="",s=0;s<e.length;s++){var u=e[s];if("string"==typeof u)i+=l(u);else{var f=l(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var h=l(n.delimiter||"/"),g=i.slice(-h.length)===h;return a||(i=(g?i.slice(0,-h.length):i)+"(?:"+h+"(?=$))?"),i+=o?"$":a&&g?"":"(?="+h+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(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=[],a=0;a<e.length;a++)r.push(p(e[a],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(o(e,n),t,n)}(e,t,n)}},7874:()=>{!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+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,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|cargo|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|java|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|sysctl|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 a=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i<a.length;i++)o[a[i]]=e.languages.bash[a[i]];e.languages.sh=e.languages.bash,e.languages.shell=e.languages.bash}(Prism)},728:()=>{!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],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,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})}(Prism)},7346:()=>{Prism.languages["go-mod"]=Prism.languages["go-module"]={comment:{pattern:/\/\/.*/,greedy:!0},version:{pattern:/(^|[\s()[\],])v\d+\.\d+\.\d+(?:[+-][-+.\w]*)?(?![^\s()[\],])/,lookbehind:!0,alias:"number"},"go-version":{pattern:/((?:^|\s)go\s+)\d+(?:\.\d+){1,2}/,lookbehind:!0,alias:"number"},keyword:{pattern:/^([ \t]*)(?:exclude|go|module|replace|require|retract)\b/m,lookbehind:!0},operator:/=>/,punctuation:/[()[\],]/}},7046:()=>{Prism.languages.go=Prism.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/}),Prism.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete Prism.languages.go["class-name"]},6854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(s){for(var l=0;l<s.length&&!(a>=o.length);l++){var u=s[l];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=o[a],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),h=f.indexOf(p);if(h>-1){++a;var g=f.substring(0,h),m=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),y=f.substring(h+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(m),y&&v.push.apply(v,i([y])),"string"==typeof u?s.splice.apply(s,[l,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return s}(n.tokens)}}}})}(Prism)},7345:()=>{!function(e){var t=/\b(?:bool|bytes|double|s?fixed(?:32|64)|float|[su]?int(?:32|64)|string)\b/;e.languages.protobuf=e.languages.extend("clike",{"class-name":[{pattern:/(\b(?:enum|extend|message|service)\s+)[A-Za-z_]\w*(?=\s*\{)/,lookbehind:!0},{pattern:/(\b(?:rpc\s+\w+|returns)\s*\(\s*(?:stream\s+)?)\.?[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*(?=\s*\))/,lookbehind:!0}],keyword:/\b(?:enum|extend|extensions|import|message|oneof|option|optional|package|public|repeated|required|reserved|returns|rpc(?=\s+\w)|service|stream|syntax|to)\b(?!\s*=\s*\d)/,function:/\b[a-z_]\w*(?=\s*\()/i}),e.languages.insertBefore("protobuf","operator",{map:{pattern:/\bmap<\s*[\w.]+\s*,\s*[\w.]+\s*>(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/[<>.,]/,builtin:t}},builtin:t,"positional-class-name":{pattern:/(?:\b|\B\.)[a-z_]\w*(?:\.[a-z_]\w*)*(?=\s+[a-z_]\w*\s*[=;])/i,alias:"class-name",inside:{punctuation:/\./}},annotation:{pattern:/(\[\s*)[a-z_]\w*(?=\s*=)/i,lookbehind:!0}})}(Prism)},9930:()=>{!function(e){var t=/(?:[\w-]+|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*")/.source;function n(e){return e.replace(/__/g,(function(){return t}))}e.languages.toml={comment:{pattern:/#.*/,greedy:!0},table:{pattern:RegExp(n(/(^[\t ]*\[\s*(?:\[\s*)?)__(?:\s*\.\s*__)*(?=\s*\])/.source),"m"),lookbehind:!0,greedy:!0,alias:"class-name"},key:{pattern:RegExp(n(/(^[\t ]*|[{,]\s*)__(?:\s*\.\s*__)*(?=\s*=)/.source),"m"),lookbehind:!0,greedy:!0,alias:"property"},string:{pattern:/"""(?:\\[\s\S]|[^\\])*?"""|'''[\s\S]*?'''|'[^'\n\r]*'|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},date:[{pattern:/\b\d{4}-\d{2}-\d{2}(?:[T\s]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?)?\b/i,alias:"number"},{pattern:/\b\d{2}:\d{2}:\d{2}(?:\.\d+)?\b/,alias:"number"}],number:/(?:\b0(?:x[\da-zA-Z]+(?:_[\da-zA-Z]+)*|o[0-7]+(?:_[0-7]+)*|b[10]+(?:_[10]+)*))\b|[-+]?\b\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?\b|[-+]?\b(?:inf|nan)\b/,boolean:/\b(?:false|true)\b/,punctuation:/[.,=[\]{}]/}}(Prism)},3358:()=>{!function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\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})),o=/"(?:[^"\\\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"(?:"+a+"|"+o+")"}))),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(o),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}(Prism)},421:(e,t,n)=>{var r={"./prism-bash":7874,"./prism-diff":728,"./prism-go":7046,"./prism-go-module":7346,"./prism-protobuf":7345,"./prism-toml":9930,"./prism-yaml":3358};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=421},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,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:o,resetWarningCache:a};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),a=n(3840);function o(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){u(e,t),u(e+"Capture",t)}function u(e,t){for(s[e]=t,e=0;e<t.length;e++)i.add(t[e])}var c=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,f=/^[: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]*$/,p={},h={};function g(e,t,n,r,a,o,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var m={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){m[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];m[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){m[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){m[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){m[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){m[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){m[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){m[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){m[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var y=/[\-:]([a-z])/g;function v(e){return e[1].toUpperCase()}function b(e,t,n,r){var a=m.hasOwnProperty(t)?m[t]:null;(null!==a?0!==a.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,a,r)&&(n=null),r||null===a?function(e){return!!d.call(h,e)||!d.call(p,e)&&(f.test(e)?h[e]=!0:(p[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=null===n?3!==a.type&&"":n:(t=a.attributeName,r=a.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(a=a.type)||4===a&&!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(y,v);m[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(y,v);m[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(y,v);m[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){m[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),m.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){m[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,x=Symbol.for("react.element"),k=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"),N=Symbol.for("react.forward_ref"),L=Symbol.for("react.suspense"),P=Symbol.for("react.suspense_list"),O=Symbol.for("react.memo"),A=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var I=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var R=Symbol.iterator;function j(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=R&&e[R]||e["@@iterator"])?e:null}var F,D=Object.assign;function M(e){if(void 0===F)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);F=t&&t[1]||""}return"\n"+F+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(u){var r=u}Reflect.construct(e,[],t)}else{try{t.call()}catch(u){r=u}e.call(t.prototype)}else{try{throw Error()}catch(u){r=u}e()}}catch(u){if(u&&r&&"string"==typeof u.stack){for(var a=u.stack.split("\n"),o=r.stack.split("\n"),i=a.length-1,s=o.length-1;1<=i&&0<=s&&a[i]!==o[s];)s--;for(;1<=i&&0<=s;i--,s--)if(a[i]!==o[s]){if(1!==i||1!==s)do{if(i--,0>--s||a[i]!==o[s]){var l="\n"+a[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 k:return"Portal";case _:return"Profiler";case E:return"StrictMode";case L: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 N:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case O: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 H(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 Q(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function Z(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function V(e){e._valueTracker||(e._valueTracker=function(e){var t=Z(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 a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(e){r=""+e,o.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 W(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Z(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function q(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 D({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Y(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=Q(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 K(e,t){null!=(t=t.checked)&&b(e,"checked",t,!1)}function X(e,t){K(e,t);var n=Q(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,Q(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&&q(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 a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+Q(n),t=null,a=0;a<e.length;a++){if(e[a].value===n)return e[a].selected=!0,void(r&&(e[a].defaultSelected=!0));null!==t||e[a].disabled||(t=e[a])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(o(91));return D({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function ae(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(o(92));if(te(n)){if(1<n.length)throw Error(o(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:Q(n)}}function oe(e,t){var n=Q(t.value),r=Q(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 ue,ce,de=(ce=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ue=ue||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ue.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 ce(e,t)}))}:ce);function fe(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 pe={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 ge(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||pe.hasOwnProperty(e)&&pe[e]?(""+t).trim():t+"px"}function me(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),a=ge(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}Object.keys(pe).forEach((function(e){he.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),pe[t]=pe[e]}))}));var ye=D({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 ve(e,t){if(t){if(ye[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(o(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(o(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(o(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(o(62))}}function be(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 xe(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var ke=null,Se=null,Ee=null;function _e(e){if(e=ba(e)){if("function"!=typeof ke)throw Error(o(280));var t=e.stateNode;t&&(t=xa(t),ke(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 Ne(e,t){return e(t)}function Le(){}var Pe=!1;function Oe(e,t,n){if(Pe)return e(t,n);Pe=!0;try{return Ne(e,t,n)}finally{Pe=!1,(null!==Se||null!==Ee)&&(Le(),Te())}}function Ae(e,t){var n=e.stateNode;if(null===n)return null;var r=xa(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(o(231,t,typeof n));return n}var Ie=!1;if(c)try{var Re={};Object.defineProperty(Re,"passive",{get:function(){Ie=!0}}),window.addEventListener("test",Re,Re),window.removeEventListener("test",Re,Re)}catch(ce){Ie=!1}function je(e,t,n,r,a,o,i,s,l){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var Fe=!1,De=null,Me=!1,ze=null,Be={onError:function(e){Fe=!0,De=e}};function $e(e,t,n,r,a,o,i,s,l){Fe=!1,De=null,je.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 He(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 Qe(e){if(Ue(e)!==e)throw Error(o(188))}function Ze(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ue(e)))throw Error(o(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(null===a)break;var i=a.alternate;if(null===i){if(null!==(r=a.return)){n=r;continue}break}if(a.child===i.child){for(i=a.child;i;){if(i===n)return Qe(a),e;if(i===r)return Qe(a),t;i=i.sibling}throw Error(o(188))}if(n.return!==r.return)n=a,r=i;else{for(var s=!1,l=a.child;l;){if(l===n){s=!0,n=a,r=i;break}if(l===r){s=!0,r=a,n=i;break}l=l.sibling}if(!s){for(l=i.child;l;){if(l===n){s=!0,n=i,r=a;break}if(l===r){s=!0,r=i,n=a;break}l=l.sibling}if(!s)throw Error(o(189))}}if(n.alternate!==r)throw Error(o(190))}if(3!==n.tag)throw Error(o(188));return n.stateNode.current===n?e:t}(e))?Ve(e):null}function Ve(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=Ve(e);if(null!==t)return t;e=e.sibling}return null}var We=a.unstable_scheduleCallback,qe=a.unstable_cancelCallback,Ge=a.unstable_shouldYield,Ye=a.unstable_requestPaint,Ke=a.unstable_now,Xe=a.unstable_getCurrentPriorityLevel,Je=a.unstable_ImmediatePriority,et=a.unstable_UserBlockingPriority,tt=a.unstable_NormalPriority,nt=a.unstable_LowPriority,rt=a.unstable_IdlePriority,at=null,ot=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 ut=64,ct=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 ft(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,a=e.suspendedLanes,o=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~a;0!==s?r=dt(s):0!==(o&=i)&&(r=dt(o))}else 0!==(i=n&~a)?r=dt(i):0!==o&&(r=dt(o));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&a)&&((a=r&-r)>=(o=t&-t)||16===a&&0!=(4194240&o)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)a=1<<(n=31-it(t)),r|=e[n],t&=~a;return r}function pt(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 gt(){var e=ut;return 0==(4194240&(ut<<=1))&&(ut=64),e}function mt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function yt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function vt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),a=1<<r;a&t|e[r]&t&&(e[r]|=t),n&=~a}}var bt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var xt,kt,St,Et,_t,Ct=!1,Tt=[],Nt=null,Lt=null,Pt=null,Ot=new Map,At=new Map,It=[],Rt="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 jt(e,t){switch(e){case"focusin":case"focusout":Nt=null;break;case"dragenter":case"dragleave":Lt=null;break;case"mouseover":case"mouseout":Pt=null;break;case"pointerover":case"pointerout":Ot.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":At.delete(t.pointerId)}}function Ft(e,t,n,r,a,o){return null===e||e.nativeEvent!==o?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:o,targetContainers:[a]},null!==t&&(null!==(t=ba(t))&&kt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==a&&-1===t.indexOf(a)&&t.push(a),e)}function Dt(e){var t=va(e.target);if(null!==t){var n=Ue(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=He(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=ba(n))&&kt(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!==Nt&&Mt(Nt)&&(Nt=null),null!==Lt&&Mt(Lt)&&(Lt=null),null!==Pt&&Mt(Pt)&&(Pt=null),Ot.forEach(zt),At.forEach(zt)}function $t(e,t){e.blockedOn===t&&(e.blockedOn=null,Ct||(Ct=!0,a.unstable_scheduleCallback(a.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!==Nt&&$t(Nt,e),null!==Lt&&$t(Lt,e),null!==Pt&&$t(Pt,e),Ot.forEach(t),At.forEach(t),n=0;n<It.length;n++)(r=It[n]).blockedOn===e&&(r.blockedOn=null);for(;0<It.length&&null===(n=It[0]).blockedOn;)Dt(n),null===n.blockedOn&&It.shift()}var Ht=w.ReactCurrentBatchConfig,Qt=!0;function Zt(e,t,n,r){var a=bt,o=Ht.transition;Ht.transition=null;try{bt=1,Wt(e,t,n,r)}finally{bt=a,Ht.transition=o}}function Vt(e,t,n,r){var a=bt,o=Ht.transition;Ht.transition=null;try{bt=4,Wt(e,t,n,r)}finally{bt=a,Ht.transition=o}}function Wt(e,t,n,r){if(Qt){var a=Gt(e,t,n,r);if(null===a)Qr(e,t,r,qt,n),jt(e,r);else if(function(e,t,n,r,a){switch(t){case"focusin":return Nt=Ft(Nt,e,t,n,r,a),!0;case"dragenter":return Lt=Ft(Lt,e,t,n,r,a),!0;case"mouseover":return Pt=Ft(Pt,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return Ot.set(o,Ft(Ot.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,At.set(o,Ft(At.get(o)||null,e,t,n,r,a)),!0}return!1}(a,e,t,n,r))r.stopPropagation();else if(jt(e,r),4&t&&-1<Rt.indexOf(e)){for(;null!==a;){var o=ba(a);if(null!==o&&xt(o),null===(o=Gt(e,t,n,r))&&Qr(e,t,r,qt,n),o===a)break;a=o}null!==a&&r.stopPropagation()}else Qr(e,t,r,null,n)}}var qt=null;function Gt(e,t,n,r){if(qt=null,null!==(e=va(e=xe(r))))if(null===(t=Ue(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=He(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 qt=e,null}function Yt(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 Kt=null,Xt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Xt,r=n.length,a="value"in Kt?Kt.value:Kt.textContent,o=a.length;for(e=0;e<r&&n[e]===a[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===a[o-t];t++);return Jt=a.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 an(e){function t(t,n,r,a,o){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=a,this.target=o,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(a):a[i]);return this.isDefaultPrevented=(null!=a.defaultPrevented?a.defaultPrevented:!1===a.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return D(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 on,sn,ln,un={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},cn=an(un),dn=D({},un,{view:0,detail:0}),fn=an(dn),pn=D({},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?(on=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=on=0,ln=e),on)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),hn=an(pn),gn=an(D({},pn,{dataTransfer:0})),mn=an(D({},dn,{relatedTarget:0})),yn=an(D({},un,{animationName:0,elapsedTime:0,pseudoElement:0})),vn=D({},un,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),bn=an(vn),wn=an(D({},un,{data:0})),xn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},kn={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=D({},dn,{key:function(e){if(e.key){var t=xn[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?kn[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=an(Cn),Nn=an(D({},pn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),Ln=an(D({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:_n})),Pn=an(D({},un,{propertyName:0,elapsedTime:0,pseudoElement:0})),On=D({},pn,{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=an(On),In=[9,13,27,32],Rn=c&&"CompositionEvent"in window,jn=null;c&&"documentMode"in document&&(jn=document.documentMode);var Fn=c&&"TextEvent"in window&&!jn,Dn=c&&(!Rn||jn&&8<jn&&11>=jn),Mn=String.fromCharCode(32),zn=!1;function Bn(e,t){switch(e){case"keyup":return-1!==In.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 Hn={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?!!Hn[e.type]:"textarea"===t}function Zn(e,t,n,r){Ce(r),0<(t=Vr(t,"onChange")).length&&(n=new cn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Vn=null,Wn=null;function qn(e){Mr(e,0)}function Gn(e){if(W(wa(e)))return e}function Yn(e,t){if("change"===e)return t}var Kn=!1;if(c){var Xn;if(c){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;Kn=Xn&&(!document.documentMode||9<document.documentMode)}function tr(){Vn&&(Vn.detachEvent("onpropertychange",nr),Wn=Vn=null)}function nr(e){if("value"===e.propertyName&&Gn(Wn)){var t=[];Zn(t,Wn,e,xe(e)),Oe(qn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Wn=n,(Vn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function ar(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Gn(Wn)}function or(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 a=n[r];if(!d.call(t,a)||!sr(e[a],t[a]))return!1}return!0}function ur(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function cr(e,t){var n,r=ur(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=ur(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 fr(){for(var e=window,t=q();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=q((e=t.contentWindow).document)}return t}function pr(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=fr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&pr(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 a=n.textContent.length,o=Math.min(r.start,a);r=void 0===r.end?o:Math.min(r.end,a),!e.extend&&o>r&&(a=r,r=o,o=a),a=cr(n,o);var i=cr(n,r);a&&i&&(1!==e.rangeCount||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(a.node,a.offset),e.removeAllRanges(),o>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 gr=c&&"documentMode"in document&&11>=document.documentMode,mr=null,yr=null,vr=null,br=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;br||null==mr||mr!==q(r)||("selectionStart"in(r=mr)&&pr(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},vr&&lr(vr,r)||(vr=r,0<(r=Vr(yr,"onSelect")).length&&(t=new cn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=mr)))}function xr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var kr={animationend:xr("Animation","AnimationEnd"),animationiteration:xr("Animation","AnimationIteration"),animationstart:xr("Animation","AnimationStart"),transitionend:xr("Transition","TransitionEnd")},Sr={},Er={};function _r(e){if(Sr[e])return Sr[e];if(!kr[e])return e;var t,n=kr[e];for(t in n)if(n.hasOwnProperty(t)&&t in Er)return Sr[e]=n[t];return e}c&&(Er=document.createElement("div").style,"AnimationEvent"in window||(delete kr.animationend.animation,delete kr.animationiteration.animation,delete kr.animationstart.animation),"TransitionEvent"in window||delete kr.transitionend.transition);var Cr=_r("animationend"),Tr=_r("animationiteration"),Nr=_r("animationstart"),Lr=_r("transitionend"),Pr=new Map,Or="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 Ir=0;Ir<Or.length;Ir++){var Rr=Or[Ir];Ar(Rr.toLowerCase(),"on"+(Rr[0].toUpperCase()+Rr.slice(1)))}Ar(Cr,"onAnimationEnd"),Ar(Tr,"onAnimationIteration"),Ar(Nr,"onAnimationStart"),Ar("dblclick","onDoubleClick"),Ar("focusin","onFocus"),Ar("focusout","onBlur"),Ar(Lr,"onTransitionEnd"),u("onMouseEnter",["mouseout","mouseover"]),u("onMouseLeave",["mouseout","mouseover"]),u("onPointerEnter",["pointerout","pointerover"]),u("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 jr="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(" "),Fr=new Set("cancel close invalid load scroll toggle".split(" ").concat(jr));function Dr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,a,i,s,l,u){if($e.apply(this,arguments),Fe){if(!Fe)throw Error(o(198));var c=De;Fe=!1,De=null,Me||(Me=!0,ze=c)}}(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],a=r.event;r=r.listeners;e:{var o=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!==o&&a.isPropagationStopped())break e;Dr(a,s,u),o=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,u=s.currentTarget,s=s.listener,l!==o&&a.isPropagationStopped())break e;Dr(a,s,u),o=l}}}if(Me)throw e=ze,Me=!1,ze=null,e}function zr(e,t){var n=t[ga];void 0===n&&(n=t[ga]=new Set);var r=e+"__bubble";n.has(r)||(Hr(t,e,2,!1),n.add(r))}function Br(e,t,n){var r=0;t&&(r|=4),Hr(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&&(Fr.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 Hr(e,t,n,r){switch(Yt(t)){case 1:var a=Zt;break;case 4:a=Vt;break;default:a=Wt}n=a.bind(null,t,n,e),a=void 0,!Ie||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(a=!0),r?void 0!==a?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):void 0!==a?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function Qr(e,t,n,r,a){var o=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===a||8===s.nodeType&&s.parentNode===a)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===a||8===l.nodeType&&l.parentNode===a))return;i=i.return}for(;null!==s;){if(null===(i=va(s)))return;if(5===(l=i.tag)||6===l){r=o=i;continue e}s=s.parentNode}}r=r.return}Oe((function(){var r=o,a=xe(n),i=[];e:{var s=Pr.get(e);if(void 0!==s){var l=cn,u=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=Tn;break;case"focusin":u="focus",l=mn;break;case"focusout":u="blur",l=mn;break;case"beforeblur":case"afterblur":l=mn;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=gn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=Ln;break;case Cr:case Tr:case Nr:l=yn;break;case Lr:l=Pn;break;case"scroll":l=fn;break;case"wheel":l=An;break;case"copy":case"cut":case"paste":l=bn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=Nn}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==s?s+"Capture":null:s;c=[];for(var p,h=r;null!==h;){var g=(p=h).stateNode;if(5===p.tag&&null!==g&&(p=g,null!==f&&(null!=(g=Ae(h,f))&&c.push(Zr(h,g,p)))),d)break;h=h.return}0<c.length&&(s=new l(s,u,null,n,a),i.push({event:s,listeners:c}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===we||!(u=n.relatedTarget||n.fromElement)||!va(u)&&!u[ha])&&(l||s)&&(s=a.window===a?a:(s=a.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=r,null!==(u=(u=n.relatedTarget||n.toElement)?va(u):null)&&(u!==(d=Ue(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(l=null,u=r),l!==u)){if(c=hn,g="onMouseLeave",f="onMouseEnter",h="mouse","pointerout"!==e&&"pointerover"!==e||(c=Nn,g="onPointerLeave",f="onPointerEnter",h="pointer"),d=null==l?s:wa(l),p=null==u?s:wa(u),(s=new c(g,h+"leave",l,n,a)).target=d,s.relatedTarget=p,g=null,va(a)===r&&((c=new c(f,h+"enter",u,n,a)).target=p,c.relatedTarget=d,g=c),d=g,l&&u)e:{for(f=u,h=0,p=c=l;p;p=Wr(p))h++;for(p=0,g=f;g;g=Wr(g))p++;for(;0<h-p;)c=Wr(c),h--;for(;0<p-h;)f=Wr(f),p--;for(;h--;){if(c===f||null!==f&&c===f.alternate)break e;c=Wr(c),f=Wr(f)}c=null}else c=null;null!==l&&qr(i,s,l,c,!1),null!==u&&null!==d&&qr(i,d,u,c,!0)}if("select"===(l=(s=r?wa(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var m=Yn;else if(Qn(s))if(Kn)m=ir;else{m=ar;var y=rr}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(m=or);switch(m&&(m=m(e,r))?Zn(i,m,n,a):(y&&y(e,s,r),"focusout"===e&&(y=s._wrapperState)&&y.controlled&&"number"===s.type&&ee(s,"number",s.value)),y=r?wa(r):window,e){case"focusin":(Qn(y)||"true"===y.contentEditable)&&(mr=y,yr=r,vr=null);break;case"focusout":vr=yr=mr=null;break;case"mousedown":br=!0;break;case"contextmenu":case"mouseup":case"dragend":br=!1,wr(i,n,a);break;case"selectionchange":if(gr)break;case"keydown":case"keyup":wr(i,n,a)}var v;if(Rn)e:{switch(e){case"compositionstart":var b="onCompositionStart";break e;case"compositionend":b="onCompositionEnd";break e;case"compositionupdate":b="onCompositionUpdate";break e}b=void 0}else Un?Bn(e,n)&&(b="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(b="onCompositionStart");b&&(Dn&&"ko"!==n.locale&&(Un||"onCompositionStart"!==b?"onCompositionEnd"===b&&Un&&(v=en()):(Xt="value"in(Kt=a)?Kt.value:Kt.textContent,Un=!0)),0<(y=Vr(r,b)).length&&(b=new wn(b,e,null,n,a),i.push({event:b,listeners:y}),v?b.data=v:null!==(v=$n(n))&&(b.data=v))),(v=Fn?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||!Rn&&Bn(e,t)?(e=en(),Jt=Xt=Kt=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 Dn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Vr(r,"onBeforeInput")).length&&(a=new wn("onBeforeInput","beforeinput",null,n,a),i.push({event:a,listeners:r}),a.data=v))}Mr(i,t)}))}function Zr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Vr(e,t){for(var n=t+"Capture",r=[];null!==e;){var a=e,o=a.stateNode;5===a.tag&&null!==o&&(a=o,null!=(o=Ae(e,n))&&r.unshift(Zr(e,o,a)),null!=(o=Ae(e,t))&&r.push(Zr(e,o,a))),e=e.return}return r}function Wr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function qr(e,t,n,r,a){for(var o=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,a?null!=(l=Ae(n,o))&&i.unshift(Zr(n,l,s)):a||null!=(l=Ae(n,o))&&i.push(Zr(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Gr=/\r\n?/g,Yr=/\u0000|\uFFFD/g;function Kr(e){return("string"==typeof e?e:""+e).replace(Gr,"\n").replace(Yr,"")}function Xr(e,t,n){if(t=Kr(t),Kr(e)!==t&&n)throw Error(o(425))}function Jr(){}var ea=null,ta=null;function na(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 ra="function"==typeof setTimeout?setTimeout:void 0,aa="function"==typeof clearTimeout?clearTimeout:void 0,oa="function"==typeof Promise?Promise:void 0,ia="function"==typeof queueMicrotask?queueMicrotask:void 0!==oa?function(e){return oa.resolve(null).then(e).catch(sa)}:ra;function sa(e){setTimeout((function(){throw e}))}function la(e,t){var n=t,r=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&8===a.nodeType)if("/$"===(n=a.data)){if(0===r)return e.removeChild(a),void Ut(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=a}while(n);Ut(t)}function ua(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 ca(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 da=Math.random().toString(36).slice(2),fa="__reactFiber$"+da,pa="__reactProps$"+da,ha="__reactContainer$"+da,ga="__reactEvents$"+da,ma="__reactListeners$"+da,ya="__reactHandles$"+da;function va(e){var t=e[fa];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ha]||n[fa]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=ca(e);null!==e;){if(n=e[fa])return n;e=ca(e)}return t}n=(e=n).parentNode}return null}function ba(e){return!(e=e[fa]||e[ha])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function wa(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(o(33))}function xa(e){return e[pa]||null}var ka=[],Sa=-1;function Ea(e){return{current:e}}function _a(e){0>Sa||(e.current=ka[Sa],ka[Sa]=null,Sa--)}function Ca(e,t){Sa++,ka[Sa]=e.current,e.current=t}var Ta={},Na=Ea(Ta),La=Ea(!1),Pa=Ta;function Oa(e,t){var n=e.type.contextTypes;if(!n)return Ta;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a,o={};for(a in n)o[a]=t[a];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function Aa(e){return null!=(e=e.childContextTypes)}function Ia(){_a(La),_a(Na)}function Ra(e,t,n){if(Na.current!==Ta)throw Error(o(168));Ca(Na,t),Ca(La,n)}function ja(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in t))throw Error(o(108,H(e)||"Unknown",a));return D({},n,r)}function Fa(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ta,Pa=Na.current,Ca(Na,e),Ca(La,La.current),!0}function Da(e,t,n){var r=e.stateNode;if(!r)throw Error(o(169));n?(e=ja(e,t,Pa),r.__reactInternalMemoizedMergedChildContext=e,_a(La),_a(Na),Ca(Na,e)):_a(La),Ca(La,n)}var Ma=null,za=!1,Ba=!1;function $a(e){null===Ma?Ma=[e]:Ma.push(e)}function Ua(){if(!Ba&&null!==Ma){Ba=!0;var e=0,t=bt;try{var n=Ma;for(bt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}Ma=null,za=!1}catch(a){throw null!==Ma&&(Ma=Ma.slice(e+1)),We(Je,Ua),a}finally{bt=t,Ba=!1}}return null}var Ha=[],Qa=0,Za=null,Va=0,Wa=[],qa=0,Ga=null,Ya=1,Ka="";function Xa(e,t){Ha[Qa++]=Va,Ha[Qa++]=Za,Za=e,Va=t}function Ja(e,t,n){Wa[qa++]=Ya,Wa[qa++]=Ka,Wa[qa++]=Ga,Ga=e;var r=Ya;e=Ka;var a=32-it(r)-1;r&=~(1<<a),n+=1;var o=32-it(t)+a;if(30<o){var i=a-a%5;o=(r&(1<<i)-1).toString(32),r>>=i,a-=i,Ya=1<<32-it(t)+a|n<<a|r,Ka=o+e}else Ya=1<<o|n<<a|r,Ka=e}function eo(e){null!==e.return&&(Xa(e,1),Ja(e,1,0))}function to(e){for(;e===Za;)Za=Ha[--Qa],Ha[Qa]=null,Va=Ha[--Qa],Ha[Qa]=null;for(;e===Ga;)Ga=Wa[--qa],Wa[qa]=null,Ka=Wa[--qa],Wa[qa]=null,Ya=Wa[--qa],Wa[qa]=null}var no=null,ro=null,ao=!1,oo=null;function io(e,t){var n=Au(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 so(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,no=e,ro=ua(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,no=e,ro=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Ga?{id:Ya,overflow:Ka}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Au(18,null,null,0)).stateNode=t,n.return=e,e.child=n,no=e,ro=null,!0);default:return!1}}function lo(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function uo(e){if(ao){var t=ro;if(t){var n=t;if(!so(e,t)){if(lo(e))throw Error(o(418));t=ua(n.nextSibling);var r=no;t&&so(e,t)?io(r,n):(e.flags=-4097&e.flags|2,ao=!1,no=e)}}else{if(lo(e))throw Error(o(418));e.flags=-4097&e.flags|2,ao=!1,no=e}}}function co(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;no=e}function fo(e){if(e!==no)return!1;if(!ao)return co(e),ao=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!na(e.type,e.memoizedProps)),t&&(t=ro)){if(lo(e))throw po(),Error(o(418));for(;t;)io(e,t),t=ua(t.nextSibling)}if(co(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(o(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){ro=ua(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}ro=null}}else ro=no?ua(e.stateNode.nextSibling):null;return!0}function po(){for(var e=ro;e;)e=ua(e.nextSibling)}function ho(){ro=no=null,ao=!1}function go(e){null===oo?oo=[e]:oo.push(e)}var mo=w.ReactCurrentBatchConfig;function yo(e,t){if(e&&e.defaultProps){for(var n in t=D({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var vo=Ea(null),bo=null,wo=null,xo=null;function ko(){xo=wo=bo=null}function So(e){var t=vo.current;_a(vo),e._currentValue=t}function Eo(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 _o(e,t){bo=e,xo=wo=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(ws=!0),e.firstContext=null)}function Co(e){var t=e._currentValue;if(xo!==e)if(e={context:e,memoizedValue:t,next:null},null===wo){if(null===bo)throw Error(o(308));wo=e,bo.dependencies={lanes:0,firstContext:e}}else wo=wo.next=e;return t}var To=null;function No(e){null===To?To=[e]:To.push(e)}function Lo(e,t,n,r){var a=t.interleaved;return null===a?(n.next=n,No(t)):(n.next=a.next,a.next=n),t.interleaved=n,Po(e,r)}function Po(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 Oo=!1;function Ao(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Io(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 Ro(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function jo(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&Ll)){var a=r.pending;return null===a?t.next=t:(t.next=a.next,a.next=t),r.pending=t,Po(e,n)}return null===(a=r.interleaved)?(t.next=t,No(r)):(t.next=a.next,a.next=t),r.interleaved=t,Po(e,n)}function Fo(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,vt(e,n)}}function Do(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var a=null,o=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===o?a=o=i:o=o.next=i,n=n.next}while(null!==n);null===o?a=o=t:o=o.next=t}else a=o=t;return n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Mo(e,t,n,r){var a=e.updateQueue;Oo=!1;var o=a.firstBaseUpdate,i=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var l=s,u=l.next;l.next=null,null===i?o=u:i.next=u,i=l;var c=e.alternate;null!==c&&((s=(c=c.updateQueue).lastBaseUpdate)!==i&&(null===s?c.firstBaseUpdate=u:s.next=u,c.lastBaseUpdate=l))}if(null!==o){var d=a.baseState;for(i=0,c=u=l=null,s=o;;){var f=s.lane,p=s.eventTime;if((r&f)===f){null!==c&&(c=c.next={eventTime:p,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var h=e,g=s;switch(f=t,p=n,g.tag){case 1:if("function"==typeof(h=g.payload)){d=h.call(p,d,f);break e}d=h;break e;case 3:h.flags=-65537&h.flags|128;case 0:if(null==(f="function"==typeof(h=g.payload)?h.call(p,d,f):h))break e;d=D({},d,f);break e;case 2:Oo=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(f=a.effects)?a.effects=[s]:f.push(s))}else p={eventTime:p,lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===c?(u=c=p,l=d):c=c.next=p,i|=f;if(null===(s=s.next)){if(null===(s=a.shared.pending))break;s=(f=s).next,f.next=null,a.lastBaseUpdate=f,a.shared.pending=null}}if(null===c&&(l=d),a.baseState=l,a.firstBaseUpdate=u,a.lastBaseUpdate=c,null!==(t=a.shared.interleaved)){a=t;do{i|=a.lane,a=a.next}while(a!==t)}else null===o&&(a.shared.lanes=0);Dl|=i,e.lanes=i,e.memoizedState=d}}function zo(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(null!==a){if(r.callback=null,r=n,"function"!=typeof a)throw Error(o(191,a));a.call(r)}}}var Bo=(new r.Component).refs;function $o(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:D({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var Uo={isMounted:function(e){return!!(e=e._reactInternals)&&Ue(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=tu(),a=nu(e),o=Ro(r,a);o.payload=t,null!=n&&(o.callback=n),null!==(t=jo(e,o,a))&&(ru(t,e,a,r),Fo(t,e,a))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=tu(),a=nu(e),o=Ro(r,a);o.tag=1,o.payload=t,null!=n&&(o.callback=n),null!==(t=jo(e,o,a))&&(ru(t,e,a,r),Fo(t,e,a))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=tu(),r=nu(e),a=Ro(n,r);a.tag=2,null!=t&&(a.callback=t),null!==(t=jo(e,a,r))&&(ru(t,e,r,n),Fo(t,e,r))}};function Ho(e,t,n,r,a,o,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,i):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(a,o))}function Qo(e,t,n){var r=!1,a=Ta,o=t.contextType;return"object"==typeof o&&null!==o?o=Co(o):(a=Aa(t)?Pa:Na.current,o=(r=null!=(r=t.contextTypes))?Oa(e,a):Ta),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=Uo,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function Zo(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&&Uo.enqueueReplaceState(t,t.state,null)}function Vo(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs=Bo,Ao(e);var o=t.contextType;"object"==typeof o&&null!==o?a.context=Co(o):(o=Aa(t)?Pa:Na.current,a.context=Oa(e,o)),a.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&($o(e,t,o,n),a.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof a.getSnapshotBeforeUpdate||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||(t=a.state,"function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),t!==a.state&&Uo.enqueueReplaceState(a,a.state,null),Mo(e,n,a,r),a.state=e.memoizedState),"function"==typeof a.componentDidMount&&(e.flags|=4194308)}function Wo(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(o(309));var r=n.stateNode}if(!r)throw Error(o(147,e));var a=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=a.refs;t===Bo&&(t=a.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(o(284));if(!n._owner)throw Error(o(290,e))}return e}function qo(e,t){throw e=Object.prototype.toString.call(t),Error(o(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Go(e){return(0,e._init)(e._payload)}function Yo(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 a(e,t){return(e=Ru(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=Mu(n,e.mode,r)).return=e,t):((t=a(t,n)).return=e,t)}function u(e,t,n,r){var o=n.type;return o===S?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===o||"object"==typeof o&&null!==o&&o.$$typeof===A&&Go(o)===t.type)?((r=a(t,n.props)).ref=Wo(e,t,n),r.return=e,r):((r=ju(n.type,n.key,n.props,null,e.mode,r)).ref=Wo(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=zu(n,e.mode,r)).return=e,t):((t=a(t,n.children||[])).return=e,t)}function d(e,t,n,r,o){return null===t||7!==t.tag?((t=Fu(n,e.mode,r,o)).return=e,t):((t=a(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Mu(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case x:return(n=ju(t.type,t.key,t.props,null,e.mode,n)).ref=Wo(e,null,t),n.return=e,n;case k:return(t=zu(t,e.mode,n)).return=e,t;case A:return f(e,(0,t._init)(t._payload),n)}if(te(t)||j(t))return(t=Fu(t,e.mode,n,null)).return=e,t;qo(e,t)}return null}function p(e,t,n,r){var a=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==a?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case x:return n.key===a?u(e,t,n,r):null;case k:return n.key===a?c(e,t,n,r):null;case A:return p(e,t,(a=n._init)(n._payload),r)}if(te(n)||j(n))return null!==a?null:d(e,t,n,r,null);qo(e,n)}return null}function h(e,t,n,r,a){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,a);if("object"==typeof r&&null!==r){switch(r.$$typeof){case x:return u(t,e=e.get(null===r.key?n:r.key)||null,r,a);case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,a);case A:return h(e,t,n,(0,r._init)(r._payload),a)}if(te(r)||j(r))return d(t,e=e.get(n)||null,r,a,null);qo(t,r)}return null}function g(a,o,s,l){for(var u=null,c=null,d=o,g=o=0,m=null;null!==d&&g<s.length;g++){d.index>g?(m=d,d=null):m=d.sibling;var y=p(a,d,s[g],l);if(null===y){null===d&&(d=m);break}e&&d&&null===y.alternate&&t(a,d),o=i(y,o,g),null===c?u=y:c.sibling=y,c=y,d=m}if(g===s.length)return n(a,d),ao&&Xa(a,g),u;if(null===d){for(;g<s.length;g++)null!==(d=f(a,s[g],l))&&(o=i(d,o,g),null===c?u=d:c.sibling=d,c=d);return ao&&Xa(a,g),u}for(d=r(a,d);g<s.length;g++)null!==(m=h(d,a,g,s[g],l))&&(e&&null!==m.alternate&&d.delete(null===m.key?g:m.key),o=i(m,o,g),null===c?u=m:c.sibling=m,c=m);return e&&d.forEach((function(e){return t(a,e)})),ao&&Xa(a,g),u}function m(a,s,l,u){var c=j(l);if("function"!=typeof c)throw Error(o(150));if(null==(l=c.call(l)))throw Error(o(151));for(var d=c=null,g=s,m=s=0,y=null,v=l.next();null!==g&&!v.done;m++,v=l.next()){g.index>m?(y=g,g=null):y=g.sibling;var b=p(a,g,v.value,u);if(null===b){null===g&&(g=y);break}e&&g&&null===b.alternate&&t(a,g),s=i(b,s,m),null===d?c=b:d.sibling=b,d=b,g=y}if(v.done)return n(a,g),ao&&Xa(a,m),c;if(null===g){for(;!v.done;m++,v=l.next())null!==(v=f(a,v.value,u))&&(s=i(v,s,m),null===d?c=v:d.sibling=v,d=v);return ao&&Xa(a,m),c}for(g=r(a,g);!v.done;m++,v=l.next())null!==(v=h(g,a,m,v.value,u))&&(e&&null!==v.alternate&&g.delete(null===v.key?m:v.key),s=i(v,s,m),null===d?c=v:d.sibling=v,d=v);return e&&g.forEach((function(e){return t(a,e)})),ao&&Xa(a,m),c}return function e(r,o,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 x:e:{for(var u=i.key,c=o;null!==c;){if(c.key===u){if((u=i.type)===S){if(7===c.tag){n(r,c.sibling),(o=a(c,i.props.children)).return=r,r=o;break e}}else if(c.elementType===u||"object"==typeof u&&null!==u&&u.$$typeof===A&&Go(u)===c.type){n(r,c.sibling),(o=a(c,i.props)).ref=Wo(r,c,i),o.return=r,r=o;break e}n(r,c);break}t(r,c),c=c.sibling}i.type===S?((o=Fu(i.props.children,r.mode,l,i.key)).return=r,r=o):((l=ju(i.type,i.key,i.props,null,r.mode,l)).ref=Wo(r,o,i),l.return=r,r=l)}return s(r);case k:e:{for(c=i.key;null!==o;){if(o.key===c){if(4===o.tag&&o.stateNode.containerInfo===i.containerInfo&&o.stateNode.implementation===i.implementation){n(r,o.sibling),(o=a(o,i.children||[])).return=r,r=o;break e}n(r,o);break}t(r,o),o=o.sibling}(o=zu(i,r.mode,l)).return=r,r=o}return s(r);case A:return e(r,o,(c=i._init)(i._payload),l)}if(te(i))return g(r,o,i,l);if(j(i))return m(r,o,i,l);qo(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==o&&6===o.tag?(n(r,o.sibling),(o=a(o,i)).return=r,r=o):(n(r,o),(o=Mu(i,r.mode,l)).return=r,r=o),s(r)):n(r,o)}}var Ko=Yo(!0),Xo=Yo(!1),Jo={},ei=Ea(Jo),ti=Ea(Jo),ni=Ea(Jo);function ri(e){if(e===Jo)throw Error(o(174));return e}function ai(e,t){switch(Ca(ni,t),Ca(ti,e),Ca(ei,Jo),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)}_a(ei),Ca(ei,t)}function oi(){_a(ei),_a(ti),_a(ni)}function ii(e){ri(ni.current);var t=ri(ei.current),n=le(t,e.type);t!==n&&(Ca(ti,e),Ca(ei,n))}function si(e){ti.current===e&&(_a(ei),_a(ti))}var li=Ea(0);function ui(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 ci=[];function di(){for(var e=0;e<ci.length;e++)ci[e]._workInProgressVersionPrimary=null;ci.length=0}var fi=w.ReactCurrentDispatcher,pi=w.ReactCurrentBatchConfig,hi=0,gi=null,mi=null,yi=null,vi=!1,bi=!1,wi=0,xi=0;function ki(){throw Error(o(321))}function Si(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 Ei(e,t,n,r,a,i){if(hi=i,gi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,fi.current=null===e||null===e.memoizedState?ss:ls,e=n(r,a),bi){i=0;do{if(bi=!1,wi=0,25<=i)throw Error(o(301));i+=1,yi=mi=null,t.updateQueue=null,fi.current=us,e=n(r,a)}while(bi)}if(fi.current=is,t=null!==mi&&null!==mi.next,hi=0,yi=mi=gi=null,vi=!1,t)throw Error(o(300));return e}function _i(){var e=0!==wi;return wi=0,e}function Ci(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===yi?gi.memoizedState=yi=e:yi=yi.next=e,yi}function Ti(){if(null===mi){var e=gi.alternate;e=null!==e?e.memoizedState:null}else e=mi.next;var t=null===yi?gi.memoizedState:yi.next;if(null!==t)yi=t,mi=e;else{if(null===e)throw Error(o(310));e={memoizedState:(mi=e).memoizedState,baseState:mi.baseState,baseQueue:mi.baseQueue,queue:mi.queue,next:null},null===yi?gi.memoizedState=yi=e:yi=yi.next=e}return yi}function Ni(e,t){return"function"==typeof t?t(e):t}function Li(e){var t=Ti(),n=t.queue;if(null===n)throw Error(o(311));n.lastRenderedReducer=e;var r=mi,a=r.baseQueue,i=n.pending;if(null!==i){if(null!==a){var s=a.next;a.next=i.next,i.next=s}r.baseQueue=a=i,n.pending=null}if(null!==a){i=a.next,r=r.baseState;var l=s=null,u=null,c=i;do{var d=c.lane;if((hi&d)===d)null!==u&&(u=u.next={lane:0,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null}),r=c.hasEagerState?c.eagerState:e(r,c.action);else{var f={lane:d,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null};null===u?(l=u=f,s=r):u=u.next=f,gi.lanes|=d,Dl|=d}c=c.next}while(null!==c&&c!==i);null===u?s=r:u.next=l,sr(r,t.memoizedState)||(ws=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=u,n.lastRenderedState=r}if(null!==(e=n.interleaved)){a=e;do{i=a.lane,gi.lanes|=i,Dl|=i,a=a.next}while(a!==e)}else null===a&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Pi(e){var t=Ti(),n=t.queue;if(null===n)throw Error(o(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,i=t.memoizedState;if(null!==a){n.pending=null;var s=a=a.next;do{i=e(i,s.action),s=s.next}while(s!==a);sr(i,t.memoizedState)||(ws=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Oi(){}function Ai(e,t){var n=gi,r=Ti(),a=t(),i=!sr(r.memoizedState,a);if(i&&(r.memoizedState=a,ws=!0),r=r.queue,Qi(ji.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==yi&&1&yi.memoizedState.tag){if(n.flags|=2048,zi(9,Ri.bind(null,n,r,a,t),void 0,null),null===Pl)throw Error(o(349));0!=(30&hi)||Ii(n,t,a)}return a}function Ii(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=gi.updateQueue)?(t={lastEffect:null,stores:null},gi.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ri(e,t,n,r){t.value=n,t.getSnapshot=r,Fi(t)&&Di(e)}function ji(e,t,n){return n((function(){Fi(t)&&Di(e)}))}function Fi(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sr(e,n)}catch(r){return!0}}function Di(e){var t=Po(e,1);null!==t&&ru(t,e,1,-1)}function Mi(e){var t=Ci();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ni,lastRenderedState:e},t.queue=e,e=e.dispatch=ns.bind(null,gi,e),[t.memoizedState,e]}function zi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=gi.updateQueue)?(t={lastEffect:null,stores:null},gi.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 Bi(){return Ti().memoizedState}function $i(e,t,n,r){var a=Ci();gi.flags|=e,a.memoizedState=zi(1|t,n,void 0,void 0===r?null:r)}function Ui(e,t,n,r){var a=Ti();r=void 0===r?null:r;var o=void 0;if(null!==mi){var i=mi.memoizedState;if(o=i.destroy,null!==r&&Si(r,i.deps))return void(a.memoizedState=zi(t,n,o,r))}gi.flags|=e,a.memoizedState=zi(1|t,n,o,r)}function Hi(e,t){return $i(8390656,8,e,t)}function Qi(e,t){return Ui(2048,8,e,t)}function Zi(e,t){return Ui(4,2,e,t)}function Vi(e,t){return Ui(4,4,e,t)}function Wi(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 qi(e,t,n){return n=null!=n?n.concat([e]):null,Ui(4,4,Wi.bind(null,t,e),n)}function Gi(){}function Yi(e,t){var n=Ti();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Si(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Ki(e,t){var n=Ti();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Si(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Xi(e,t,n){return 0==(21&hi)?(e.baseState&&(e.baseState=!1,ws=!0),e.memoizedState=n):(sr(n,t)||(n=gt(),gi.lanes|=n,Dl|=n,e.baseState=!0),t)}function Ji(e,t){var n=bt;bt=0!==n&&4>n?n:4,e(!0);var r=pi.transition;pi.transition={};try{e(!1),t()}finally{bt=n,pi.transition=r}}function es(){return Ti().memoizedState}function ts(e,t,n){var r=nu(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},rs(e))as(t,n);else if(null!==(n=Lo(e,t,n,r))){ru(n,e,r,tu()),os(n,t,r)}}function ns(e,t,n){var r=nu(e),a={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(rs(e))as(t,a);else{var o=e.alternate;if(0===e.lanes&&(null===o||0===o.lanes)&&null!==(o=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=o(i,n);if(a.hasEagerState=!0,a.eagerState=s,sr(s,i)){var l=t.interleaved;return null===l?(a.next=a,No(t)):(a.next=l.next,l.next=a),void(t.interleaved=a)}}catch(u){}null!==(n=Lo(e,t,a,r))&&(ru(n,e,r,a=tu()),os(n,t,r))}}function rs(e){var t=e.alternate;return e===gi||null!==t&&t===gi}function as(e,t){bi=vi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function os(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,vt(e,n)}}var is={readContext:Co,useCallback:ki,useContext:ki,useEffect:ki,useImperativeHandle:ki,useInsertionEffect:ki,useLayoutEffect:ki,useMemo:ki,useReducer:ki,useRef:ki,useState:ki,useDebugValue:ki,useDeferredValue:ki,useTransition:ki,useMutableSource:ki,useSyncExternalStore:ki,useId:ki,unstable_isNewReconciler:!1},ss={readContext:Co,useCallback:function(e,t){return Ci().memoizedState=[e,void 0===t?null:t],e},useContext:Co,useEffect:Hi,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,$i(4194308,4,Wi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return $i(4194308,4,e,t)},useInsertionEffect:function(e,t){return $i(4,2,e,t)},useMemo:function(e,t){var n=Ci();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ci();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=ts.bind(null,gi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Ci().memoizedState=e},useState:Mi,useDebugValue:Gi,useDeferredValue:function(e){return Ci().memoizedState=e},useTransition:function(){var e=Mi(!1),t=e[0];return e=Ji.bind(null,e[1]),Ci().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=gi,a=Ci();if(ao){if(void 0===n)throw Error(o(407));n=n()}else{if(n=t(),null===Pl)throw Error(o(349));0!=(30&hi)||Ii(r,t,n)}a.memoizedState=n;var i={value:n,getSnapshot:t};return a.queue=i,Hi(ji.bind(null,r,i,e),[e]),r.flags|=2048,zi(9,Ri.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Ci(),t=Pl.identifierPrefix;if(ao){var n=Ka;t=":"+t+"R"+(n=(Ya&~(1<<32-it(Ya)-1)).toString(32)+n),0<(n=wi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=xi++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},ls={readContext:Co,useCallback:Yi,useContext:Co,useEffect:Qi,useImperativeHandle:qi,useInsertionEffect:Zi,useLayoutEffect:Vi,useMemo:Ki,useReducer:Li,useRef:Bi,useState:function(){return Li(Ni)},useDebugValue:Gi,useDeferredValue:function(e){return Xi(Ti(),mi.memoizedState,e)},useTransition:function(){return[Li(Ni)[0],Ti().memoizedState]},useMutableSource:Oi,useSyncExternalStore:Ai,useId:es,unstable_isNewReconciler:!1},us={readContext:Co,useCallback:Yi,useContext:Co,useEffect:Qi,useImperativeHandle:qi,useInsertionEffect:Zi,useLayoutEffect:Vi,useMemo:Ki,useReducer:Pi,useRef:Bi,useState:function(){return Pi(Ni)},useDebugValue:Gi,useDeferredValue:function(e){var t=Ti();return null===mi?t.memoizedState=e:Xi(t,mi.memoizedState,e)},useTransition:function(){return[Pi(Ni)[0],Ti().memoizedState]},useMutableSource:Oi,useSyncExternalStore:Ai,useId:es,unstable_isNewReconciler:!1};function cs(e,t){try{var n="",r=t;do{n+=$(r),r=r.return}while(r);var a=n}catch(o){a="\nError generating stack: "+o.message+"\n"+o.stack}return{value:e,source:t,stack:a,digest:null}}function ds(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function fs(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var ps="function"==typeof WeakMap?WeakMap:Map;function hs(e,t,n){(n=Ro(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Zl||(Zl=!0,Vl=r),fs(0,t)},n}function gs(e,t,n){(n=Ro(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var a=t.value;n.payload=function(){return r(a)},n.callback=function(){fs(0,t)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){fs(0,t),"function"!=typeof r&&(null===Wl?Wl=new Set([this]):Wl.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 a=new Set;r.set(t,a)}else void 0===(a=r.get(t))&&(a=new Set,r.set(t,a));a.has(n)||(a.add(n),e=Cu.bind(null,e,t,n),t.then(e,e))}function ys(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 vs(e,t,n,r,a){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=Ro(-1,1)).tag=2,jo(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=a,e)}var bs=w.ReactCurrentOwner,ws=!1;function xs(e,t,n,r){t.child=null===e?Xo(t,null,n,r):Ko(t,e.child,n,r)}function ks(e,t,n,r,a){n=n.render;var o=t.ref;return _o(t,a),r=Ei(e,t,n,r,o,a),n=_i(),null===e||ws?(ao&&n&&eo(t),t.flags|=1,xs(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Zs(e,t,a))}function Ss(e,t,n,r,a){if(null===e){var o=n.type;return"function"!=typeof o||Iu(o)||void 0!==o.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=ju(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=o,Es(e,t,o,r,a))}if(o=e.child,0==(e.lanes&a)){var i=o.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(i,r)&&e.ref===t.ref)return Zs(e,t,a)}return t.flags|=1,(e=Ru(o,r)).ref=t.ref,e.return=t,t.child=e}function Es(e,t,n,r,a){if(null!==e){var o=e.memoizedProps;if(lr(o,r)&&e.ref===t.ref){if(ws=!1,t.pendingProps=r=o,0==(e.lanes&a))return t.lanes=e.lanes,Zs(e,t,a);0!=(131072&e.flags)&&(ws=!0)}}return Ts(e,t,n,r,a)}function _s(e,t,n){var r=t.pendingProps,a=r.children,o=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ca(Rl,Il),Il|=n;else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ca(Rl,Il),Il|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==o?o.baseLanes:n,Ca(Rl,Il),Il|=r}else null!==o?(r=o.baseLanes|n,t.memoizedState=null):r=n,Ca(Rl,Il),Il|=r;return xs(e,t,a,n),t.child}function Cs(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ts(e,t,n,r,a){var o=Aa(n)?Pa:Na.current;return o=Oa(t,o),_o(t,a),n=Ei(e,t,n,r,o,a),r=_i(),null===e||ws?(ao&&r&&eo(t),t.flags|=1,xs(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Zs(e,t,a))}function Ns(e,t,n,r,a){if(Aa(n)){var o=!0;Fa(t)}else o=!1;if(_o(t,a),null===t.stateNode)Qs(e,t),Qo(t,n,r),Vo(t,n,r,a),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=Co(u):u=Oa(t,u=Aa(n)?Pa:Na.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)&&Zo(t,i,r,u),Oo=!1;var f=t.memoizedState;i.state=f,Mo(t,r,i,a),l=t.memoizedState,s!==r||f!==l||La.current||Oo?("function"==typeof c&&($o(t,n,c,r),l=t.memoizedState),(s=Oo||Ho(t,n,s,r,f,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|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=u,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Io(e,t),s=t.memoizedProps,u=t.type===t.elementType?s:yo(t.type,s),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=Co(l):l=Oa(t,l=Aa(n)?Pa:Na.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||f!==l)&&Zo(t,i,r,l),Oo=!1,f=t.memoizedState,i.state=f,Mo(t,r,i,a);var h=t.memoizedState;s!==d||f!==h||La.current||Oo?("function"==typeof p&&($o(t,n,p,r),h=t.memoizedState),(u=Oo||Ho(t,n,u,r,f,h,l)||!1)?(c||"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&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=h),i.props=r,i.state=h,i.context=l,r=u):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return Ls(e,t,n,r,o,a)}function Ls(e,t,n,r,a,o){Cs(e,t);var i=0!=(128&t.flags);if(!r&&!i)return a&&Da(t,n,!1),Zs(e,t,o);r=t.stateNode,bs.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Ko(t,e.child,null,o),t.child=Ko(t,null,s,o)):xs(e,t,s,o),t.memoizedState=r.state,a&&Da(t,n,!0),t.child}function Ps(e){var t=e.stateNode;t.pendingContext?Ra(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Ra(0,t.context,!1),ai(e,t.containerInfo)}function Os(e,t,n,r,a){return ho(),go(a),t.flags|=256,xs(e,t,n,r),t.child}var As,Is,Rs,js,Fs={dehydrated:null,treeContext:null,retryLane:0};function Ds(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ms(e,t,n){var r,a=t.pendingProps,i=li.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),Ca(li,1&i),null===e)return uo(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=a.children,e=a.fallback,s?(a=t.mode,s=t.child,l={mode:"hidden",children:l},0==(1&a)&&null!==s?(s.childLanes=0,s.pendingProps=l):s=Du(l,a,0,null),e=Fu(e,a,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Ds(n),t.memoizedState=Fs,e):zs(t,l));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,a,i,s){if(n)return 256&t.flags?(t.flags&=-257,Bs(e,t,s,r=ds(Error(o(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,a=t.mode,r=Du({mode:"visible",children:r.children},a,0,null),(i=Fu(i,a,s,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&Ko(t,e.child,null,s),t.child.memoizedState=Ds(s),t.memoizedState=Fs,i);if(0==(1&t.mode))return Bs(e,t,s,null);if("$!"===a.data){if(r=a.nextSibling&&a.nextSibling.dataset)var l=r.dgst;return r=l,Bs(e,t,s,r=ds(i=Error(o(419)),r,void 0))}if(l=0!=(s&e.childLanes),ws||l){if(null!==(r=Pl)){switch(s&-s){case 4:a=2;break;case 16:a=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:a=32;break;case 536870912:a=268435456;break;default:a=0}0!==(a=0!=(a&(r.suspendedLanes|s))?0:a)&&a!==i.retryLane&&(i.retryLane=a,Po(e,a),ru(r,e,a,-1))}return mu(),Bs(e,t,s,r=ds(Error(o(421))))}return"$?"===a.data?(t.flags|=128,t.child=e.child,t=Nu.bind(null,e),a._reactRetry=t,null):(e=i.treeContext,ro=ua(a.nextSibling),no=t,ao=!0,oo=null,null!==e&&(Wa[qa++]=Ya,Wa[qa++]=Ka,Wa[qa++]=Ga,Ya=e.id,Ka=e.overflow,Ga=t),t=zs(t,r.children),t.flags|=4096,t)}(e,t,l,a,r,i,n);if(s){s=a.fallback,l=t.mode,r=(i=e.child).sibling;var u={mode:"hidden",children:a.children};return 0==(1&l)&&t.child!==i?((a=t.child).childLanes=0,a.pendingProps=u,t.deletions=null):(a=Ru(i,u)).subtreeFlags=14680064&i.subtreeFlags,null!==r?s=Ru(r,s):(s=Fu(s,l,n,null)).flags|=2,s.return=t,a.return=t,a.sibling=s,t.child=a,a=s,s=t.child,l=null===(l=e.child.memoizedState)?Ds(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~n,t.memoizedState=Fs,a}return e=(s=e.child).sibling,a=Ru(s,{mode:"visible",children:a.children}),0==(1&t.mode)&&(a.lanes=n),a.return=t,a.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=a,t.memoizedState=null,a}function zs(e,t){return(t=Du({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function Bs(e,t,n,r){return null!==r&&go(r),Ko(t,e.child,null,n),(e=zs(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function $s(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),Eo(e.return,t,n)}function Us(e,t,n,r,a){var o=e.memoizedState;null===o?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=a)}function Hs(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(xs(e,t,r.children,n),0!=(2&(r=li.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&&$s(e,n,t);else if(19===e.tag)$s(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(Ca(li,r),0==(1&t.mode))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;null!==n;)null!==(e=n.alternate)&&null===ui(e)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),Us(t,!1,a,n,o);break;case"backwards":for(n=null,a=t.child,t.child=null;null!==a;){if(null!==(e=a.alternate)&&null===ui(e)){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}Us(t,!0,n,null,o);break;case"together":Us(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 Zs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Dl|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(o(153));if(null!==t.child){for(n=Ru(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Ru(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Vs(e,t){if(!ao)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 Ws(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var a=e.child;null!==a;)n|=a.lanes|a.childLanes,r|=14680064&a.subtreeFlags,r|=14680064&a.flags,a.return=e,a=a.sibling;else for(a=e.child;null!==a;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags,r|=a.flags,a.return=e,a=a.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function qs(e,t,n){var r=t.pendingProps;switch(to(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Ws(t),null;case 1:case 17:return Aa(t.type)&&Ia(),Ws(t),null;case 3:return r=t.stateNode,oi(),_a(La),_a(Na),di(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(fo(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==oo&&(su(oo),oo=null))),Is(e,t),Ws(t),null;case 5:si(t);var a=ri(ni.current);if(n=t.type,null!==e&&null!=t.stateNode)Rs(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(o(166));return Ws(t),null}if(e=ri(ei.current),fo(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[fa]=t,r[pa]=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(a=0;a<jr.length;a++)zr(jr[a],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":Y(r,i),zr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},zr("invalid",r);break;case"textarea":ae(r,i),zr("invalid",r)}for(var l in ve(n,i),a=null,i)if(i.hasOwnProperty(l)){var u=i[l];"children"===l?"string"==typeof u?r.textContent!==u&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,u,e),a=["children",u]):"number"==typeof u&&r.textContent!==""+u&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,u,e),a=["children",""+u]):s.hasOwnProperty(l)&&null!=u&&"onScroll"===l&&zr("scroll",r)}switch(n){case"input":V(r),J(r,i,!0);break;case"textarea":V(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=Jr)}r=a,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===a.nodeType?a:a.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[fa]=t,e[pa]=r,As(e,t,!1,!1),t.stateNode=e;e:{switch(l=be(n,r),n){case"dialog":zr("cancel",e),zr("close",e),a=r;break;case"iframe":case"object":case"embed":zr("load",e),a=r;break;case"video":case"audio":for(a=0;a<jr.length;a++)zr(jr[a],e);a=r;break;case"source":zr("error",e),a=r;break;case"img":case"image":case"link":zr("error",e),zr("load",e),a=r;break;case"details":zr("toggle",e),a=r;break;case"input":Y(e,r),a=G(e,r),zr("invalid",e);break;case"option":default:a=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=D({},r,{value:void 0}),zr("invalid",e);break;case"textarea":ae(e,r),a=re(e,r),zr("invalid",e)}for(i in ve(n,a),u=a)if(u.hasOwnProperty(i)){var c=u[i];"style"===i?me(e,c):"dangerouslySetInnerHTML"===i?null!=(c=c?c.__html:void 0)&&de(e,c):"children"===i?"string"==typeof c?("textarea"!==n||""!==c)&&fe(e,c):"number"==typeof c&&fe(e,""+c):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(s.hasOwnProperty(i)?null!=c&&"onScroll"===i&&zr("scroll",e):null!=c&&b(e,i,c,l))}switch(n){case"input":V(e),J(e,r,!1);break;case"textarea":V(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+Q(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 a.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 Ws(t),null;case 6:if(e&&null!=t.stateNode)js(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(o(166));if(n=ri(ni.current),ri(ei.current),fo(t)){if(r=t.stateNode,n=t.memoizedProps,r[fa]=t,(i=r.nodeValue!==n)&&null!==(e=no))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))[fa]=t,t.stateNode=r}return Ws(t),null;case 13:if(_a(li),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(ao&&null!==ro&&0!=(1&t.mode)&&0==(128&t.flags))po(),ho(),t.flags|=98560,i=!1;else if(i=fo(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(o(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(o(317));i[fa]=t}else ho(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Ws(t),i=!1}else null!==oo&&(su(oo),oo=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&li.current)?0===jl&&(jl=3):mu())),null!==t.updateQueue&&(t.flags|=4),Ws(t),null);case 4:return oi(),Is(e,t),null===e&&Ur(t.stateNode.containerInfo),Ws(t),null;case 10:return So(t.type._context),Ws(t),null;case 19:if(_a(li),null===(i=t.memoizedState))return Ws(t),null;if(r=0!=(128&t.flags),null===(l=i.rendering))if(r)Vs(i,!1);else{if(0!==jl||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(l=ui(e))){for(t.flags|=128,Vs(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 Ca(li,1&li.current|2),t.child}e=e.sibling}null!==i.tail&&Ke()>Hl&&(t.flags|=128,r=!0,Vs(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ui(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Vs(i,!0),null===i.tail&&"hidden"===i.tailMode&&!l.alternate&&!ao)return Ws(t),null}else 2*Ke()-i.renderingStartTime>Hl&&1073741824!==n&&(t.flags|=128,r=!0,Vs(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=Ke(),t.sibling=null,n=li.current,Ca(li,r?1&n|2:1&n),t):(Ws(t),null);case 22:case 23:return fu(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Il)&&(Ws(t),6&t.subtreeFlags&&(t.flags|=8192)):Ws(t),null;case 24:case 25:return null}throw Error(o(156,t.tag))}function Gs(e,t){switch(to(t),t.tag){case 1:return Aa(t.type)&&Ia(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return oi(),_a(La),_a(Na),di(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return si(t),null;case 13:if(_a(li),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(o(340));ho()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return _a(li),null;case 4:return oi(),null;case 10:return So(t.type._context),null;case 22:case 23:return fu(),null;default:return null}}As=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}},Is=function(){},Rs=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,ri(ei.current);var o,i=null;switch(n){case"input":a=G(e,a),r=G(e,r),i=[];break;case"select":a=D({},a,{value:void 0}),r=D({},r,{value:void 0}),i=[];break;case"textarea":a=re(e,a),r=re(e,r),i=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(c in ve(n,r),n=null,a)if(!r.hasOwnProperty(c)&&a.hasOwnProperty(c)&&null!=a[c])if("style"===c){var l=a[c];for(o in l)l.hasOwnProperty(o)&&(n||(n={}),n[o]="")}else"dangerouslySetInnerHTML"!==c&&"children"!==c&&"suppressContentEditableWarning"!==c&&"suppressHydrationWarning"!==c&&"autoFocus"!==c&&(s.hasOwnProperty(c)?i||(i=[]):(i=i||[]).push(c,null));for(c in r){var u=r[c];if(l=null!=a?a[c]:void 0,r.hasOwnProperty(c)&&u!==l&&(null!=u||null!=l))if("style"===c)if(l){for(o in l)!l.hasOwnProperty(o)||u&&u.hasOwnProperty(o)||(n||(n={}),n[o]="");for(o in u)u.hasOwnProperty(o)&&l[o]!==u[o]&&(n||(n={}),n[o]=u[o])}else n||(i||(i=[]),i.push(c,n)),n=u;else"dangerouslySetInnerHTML"===c?(u=u?u.__html:void 0,l=l?l.__html:void 0,null!=u&&l!==u&&(i=i||[]).push(c,u)):"children"===c?"string"!=typeof u&&"number"!=typeof u||(i=i||[]).push(c,""+u):"suppressContentEditableWarning"!==c&&"suppressHydrationWarning"!==c&&(s.hasOwnProperty(c)?(null!=u&&"onScroll"===c&&zr("scroll",e),i||l===u||(i=[])):(i=i||[]).push(c,u))}n&&(i=i||[]).push("style",n);var c=i;(t.updateQueue=c)&&(t.flags|=4)}},js=function(e,t,n,r){n!==r&&(t.flags|=4)};var Ys=!1,Ks=!1,Xs="function"==typeof WeakSet?WeakSet:Set,Js=null;function el(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){_u(e,t,r)}else n.current=null}function tl(e,t,n){try{n()}catch(r){_u(e,t,r)}}var nl=!1;function rl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var a=r=r.next;do{if((a.tag&e)===e){var o=a.destroy;a.destroy=void 0,void 0!==o&&tl(t,n,o)}a=a.next}while(a!==r)}}function al(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 il(e){var t=e.alternate;null!==t&&(e.alternate=null,il(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[fa],delete t[pa],delete t[ga],delete t[ma],delete t[ya])),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 sl(e){return 5===e.tag||3===e.tag||4===e.tag}function ll(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||sl(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 ul(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(ul(e,t,n),e=e.sibling;null!==e;)ul(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 dl=null,fl=!1;function pl(e,t,n){for(n=n.child;null!==n;)hl(e,t,n),n=n.sibling}function hl(e,t,n){if(ot&&"function"==typeof ot.onCommitFiberUnmount)try{ot.onCommitFiberUnmount(at,n)}catch(s){}switch(n.tag){case 5:Ks||el(n,t);case 6:var r=dl,a=fl;dl=null,pl(e,t,n),fl=a,null!==(dl=r)&&(fl?(e=dl,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):dl.removeChild(n.stateNode));break;case 18:null!==dl&&(fl?(e=dl,n=n.stateNode,8===e.nodeType?la(e.parentNode,n):1===e.nodeType&&la(e,n),Ut(e)):la(dl,n.stateNode));break;case 4:r=dl,a=fl,dl=n.stateNode.containerInfo,fl=!0,pl(e,t,n),dl=r,fl=a;break;case 0:case 11:case 14:case 15:if(!Ks&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){a=r=r.next;do{var o=a,i=o.destroy;o=o.tag,void 0!==i&&(0!=(2&o)||0!=(4&o))&&tl(n,t,i),a=a.next}while(a!==r)}pl(e,t,n);break;case 1:if(!Ks&&(el(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){_u(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 gl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Xs),t.forEach((function(t){var r=Lu.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 a=n[r];try{var i=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 5:dl=l.stateNode,fl=!1;break e;case 3:case 4:dl=l.stateNode.containerInfo,fl=!0;break e}l=l.return}if(null===dl)throw Error(o(160));hl(i,s,a),dl=null,fl=!1;var u=a.alternate;null!==u&&(u.return=null),a.return=null}catch(c){_u(a,t,c)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)yl(t,e),t=t.sibling}function yl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(ml(t,e),vl(e),4&r){try{rl(3,e,e.return),al(3,e)}catch(m){_u(e,e.return,m)}try{rl(5,e,e.return)}catch(m){_u(e,e.return,m)}}break;case 1:ml(t,e),vl(e),512&r&&null!==n&&el(n,n.return);break;case 5:if(ml(t,e),vl(e),512&r&&null!==n&&el(n,n.return),32&e.flags){var a=e.stateNode;try{fe(a,"")}catch(m){_u(e,e.return,m)}}if(4&r&&null!=(a=e.stateNode)){var i=e.memoizedProps,s=null!==n?n.memoizedProps:i,l=e.type,u=e.updateQueue;if(e.updateQueue=null,null!==u)try{"input"===l&&"radio"===i.type&&null!=i.name&&K(a,i),be(l,s);var c=be(l,i);for(s=0;s<u.length;s+=2){var d=u[s],f=u[s+1];"style"===d?me(a,f):"dangerouslySetInnerHTML"===d?de(a,f):"children"===d?fe(a,f):b(a,d,f,c)}switch(l){case"input":X(a,i);break;case"textarea":oe(a,i);break;case"select":var p=a._wrapperState.wasMultiple;a._wrapperState.wasMultiple=!!i.multiple;var h=i.value;null!=h?ne(a,!!i.multiple,h,!1):p!==!!i.multiple&&(null!=i.defaultValue?ne(a,!!i.multiple,i.defaultValue,!0):ne(a,!!i.multiple,i.multiple?[]:"",!1))}a[pa]=i}catch(m){_u(e,e.return,m)}}break;case 6:if(ml(t,e),vl(e),4&r){if(null===e.stateNode)throw Error(o(162));a=e.stateNode,i=e.memoizedProps;try{a.nodeValue=i}catch(m){_u(e,e.return,m)}}break;case 3:if(ml(t,e),vl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Ut(t.containerInfo)}catch(m){_u(e,e.return,m)}break;case 4:default:ml(t,e),vl(e);break;case 13:ml(t,e),vl(e),8192&(a=e.child).flags&&(i=null!==a.memoizedState,a.stateNode.isHidden=i,!i||null!==a.alternate&&null!==a.alternate.memoizedState||(Ul=Ke())),4&r&&gl(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Ks=(c=Ks)||d,ml(t,e),Ks=c):ml(t,e),vl(e),8192&r){if(c=null!==e.memoizedState,(e.stateNode.isHidden=c)&&!d&&0!=(1&e.mode))for(Js=e,d=e.child;null!==d;){for(f=Js=d;null!==Js;){switch(h=(p=Js).child,p.tag){case 0:case 11:case 14:case 15:rl(4,p,p.return);break;case 1:el(p,p.return);var g=p.stateNode;if("function"==typeof g.componentWillUnmount){r=p,n=p.return;try{t=r,g.props=t.memoizedProps,g.state=t.memoizedState,g.componentWillUnmount()}catch(m){_u(r,n,m)}}break;case 5:el(p,p.return);break;case 22:if(null!==p.memoizedState){kl(f);continue}}null!==h?(h.return=p,Js=h):kl(f)}d=d.sibling}e:for(d=null,f=e;;){if(5===f.tag){if(null===d){d=f;try{a=f.stateNode,c?"function"==typeof(i=a.style).setProperty?i.setProperty("display","none","important"):i.display="none":(l=f.stateNode,s=null!=(u=f.memoizedProps.style)&&u.hasOwnProperty("display")?u.display:null,l.style.display=ge("display",s))}catch(m){_u(e,e.return,m)}}}else if(6===f.tag){if(null===d)try{f.stateNode.nodeValue=c?"":f.memoizedProps}catch(m){_u(e,e.return,m)}}else if((22!==f.tag&&23!==f.tag||null===f.memoizedState||f===e)&&null!==f.child){f.child.return=f,f=f.child;continue}if(f===e)break e;for(;null===f.sibling;){if(null===f.return||f.return===e)break e;d===f&&(d=null),f=f.return}d===f&&(d=null),f.sibling.return=f.return,f=f.sibling}}break;case 19:ml(t,e),vl(e),4&r&&gl(e);case 21:}}function vl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(sl(n)){var r=n;break e}n=n.return}throw Error(o(160))}switch(r.tag){case 5:var a=r.stateNode;32&r.flags&&(fe(a,""),r.flags&=-33),cl(e,ll(e),a);break;case 3:case 4:var i=r.stateNode.containerInfo;ul(e,ll(e),i);break;default:throw Error(o(161))}}catch(s){_u(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function bl(e,t,n){Js=e,wl(e,t,n)}function wl(e,t,n){for(var r=0!=(1&e.mode);null!==Js;){var a=Js,o=a.child;if(22===a.tag&&r){var i=null!==a.memoizedState||Ys;if(!i){var s=a.alternate,l=null!==s&&null!==s.memoizedState||Ks;s=Ys;var u=Ks;if(Ys=i,(Ks=l)&&!u)for(Js=a;null!==Js;)l=(i=Js).child,22===i.tag&&null!==i.memoizedState?Sl(a):null!==l?(l.return=i,Js=l):Sl(a);for(;null!==o;)Js=o,wl(o,t,n),o=o.sibling;Js=a,Ys=s,Ks=u}xl(e)}else 0!=(8772&a.subtreeFlags)&&null!==o?(o.return=a,Js=o):xl(e)}}function xl(e){for(;null!==Js;){var t=Js;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||al(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Ks)if(null===n)r.componentDidMount();else{var a=t.elementType===t.type?n.memoizedProps:yo(t.type,n.memoizedProps);r.componentDidUpdate(a,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&zo(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}zo(t,s,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var u=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":u.autoFocus&&n.focus();break;case"img":u.src&&(n.src=u.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 c=t.alternate;if(null!==c){var d=c.memoizedState;if(null!==d){var f=d.dehydrated;null!==f&&Ut(f)}}}break;default:throw Error(o(163))}Ks||512&t.flags&&ol(t)}catch(p){_u(t,t.return,p)}}if(t===e){Js=null;break}if(null!==(n=t.sibling)){n.return=t.return,Js=n;break}Js=t.return}}function kl(e){for(;null!==Js;){var t=Js;if(t===e){Js=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Js=n;break}Js=t.return}}function Sl(e){for(;null!==Js;){var t=Js;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{al(4,t)}catch(l){_u(t,n,l)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var a=t.return;try{r.componentDidMount()}catch(l){_u(t,a,l)}}var o=t.return;try{ol(t)}catch(l){_u(t,o,l)}break;case 5:var i=t.return;try{ol(t)}catch(l){_u(t,i,l)}}}catch(l){_u(t,t.return,l)}if(t===e){Js=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Js=s;break}Js=t.return}}var El,_l=Math.ceil,Cl=w.ReactCurrentDispatcher,Tl=w.ReactCurrentOwner,Nl=w.ReactCurrentBatchConfig,Ll=0,Pl=null,Ol=null,Al=0,Il=0,Rl=Ea(0),jl=0,Fl=null,Dl=0,Ml=0,zl=0,Bl=null,$l=null,Ul=0,Hl=1/0,Ql=null,Zl=!1,Vl=null,Wl=null,ql=!1,Gl=null,Yl=0,Kl=0,Xl=null,Jl=-1,eu=0;function tu(){return 0!=(6&Ll)?Ke():-1!==Jl?Jl:Jl=Ke()}function nu(e){return 0==(1&e.mode)?1:0!=(2&Ll)&&0!==Al?Al&-Al:null!==mo.transition?(0===eu&&(eu=gt()),eu):0!==(e=bt)?e:e=void 0===(e=window.event)?16:Yt(e.type)}function ru(e,t,n,r){if(50<Kl)throw Kl=0,Xl=null,Error(o(185));yt(e,n,r),0!=(2&Ll)&&e===Pl||(e===Pl&&(0==(2&Ll)&&(Ml|=n),4===jl&&lu(e,Al)),au(e,r),1===n&&0===Ll&&0==(1&t.mode)&&(Hl=Ke()+500,za&&Ua()))}function au(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,a=e.expirationTimes,o=e.pendingLanes;0<o;){var i=31-it(o),s=1<<i,l=a[i];-1===l?0!=(s&n)&&0==(s&r)||(a[i]=pt(s,t)):l<=t&&(e.expiredLanes|=s),o&=~s}}(e,t);var r=ft(e,e===Pl?Al:0);if(0===r)null!==n&&qe(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&qe(n),1===t)0===e.tag?function(e){za=!0,$a(e)}(uu.bind(null,e)):$a(uu.bind(null,e)),ia((function(){0==(6&Ll)&&Ua()})),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=Pu(n,ou.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function ou(e,t){if(Jl=-1,eu=0,0!=(6&Ll))throw Error(o(327));var n=e.callbackNode;if(Su()&&e.callbackNode!==n)return null;var r=ft(e,e===Pl?Al:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=yu(e,r);else{t=r;var a=Ll;Ll|=2;var i=gu();for(Pl===e&&Al===t||(Ql=null,Hl=Ke()+500,pu(e,t));;)try{bu();break}catch(l){hu(e,l)}ko(),Cl.current=i,Ll=a,null!==Ol?t=0:(Pl=null,Al=0,t=jl)}if(0!==t){if(2===t&&(0!==(a=ht(e))&&(r=a,t=iu(e,a))),1===t)throw n=Fl,pu(e,0),lu(e,r),au(e,Ke()),n;if(6===t)lu(e,r);else{if(a=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 a=n[r],o=a.getSnapshot;a=a.value;try{if(!sr(o(),a))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}(a)&&(2===(t=yu(e,r))&&(0!==(i=ht(e))&&(r=i,t=iu(e,i))),1===t))throw n=Fl,pu(e,0),lu(e,r),au(e,Ke()),n;switch(e.finishedWork=a,e.finishedLanes=r,t){case 0:case 1:throw Error(o(345));case 2:case 5:ku(e,$l,Ql);break;case 3:if(lu(e,r),(130023424&r)===r&&10<(t=Ul+500-Ke())){if(0!==ft(e,0))break;if(((a=e.suspendedLanes)&r)!==r){tu(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=ra(ku.bind(null,e,$l,Ql),t);break}ku(e,$l,Ql);break;case 4:if(lu(e,r),(4194240&r)===r)break;for(t=e.eventTimes,a=-1;0<r;){var s=31-it(r);i=1<<s,(s=t[s])>a&&(a=s),r&=~i}if(r=a,10<(r=(120>(r=Ke()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*_l(r/1960))-r)){e.timeoutHandle=ra(ku.bind(null,e,$l,Ql),r);break}ku(e,$l,Ql);break;default:throw Error(o(329))}}}return au(e,Ke()),e.callbackNode===n?ou.bind(null,e):null}function iu(e,t){var n=Bl;return e.current.memoizedState.isDehydrated&&(pu(e,t).flags|=256),2!==(e=yu(e,t))&&(t=$l,$l=n,null!==t&&su(t)),e}function su(e){null===$l?$l=e:$l.push.apply($l,e)}function lu(e,t){for(t&=~zl,t&=~Ml,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 uu(e){if(0!=(6&Ll))throw Error(o(327));Su();var t=ft(e,0);if(0==(1&t))return au(e,Ke()),null;var n=yu(e,t);if(0!==e.tag&&2===n){var r=ht(e);0!==r&&(t=r,n=iu(e,r))}if(1===n)throw n=Fl,pu(e,0),lu(e,t),au(e,Ke()),n;if(6===n)throw Error(o(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,ku(e,$l,Ql),au(e,Ke()),null}function cu(e,t){var n=Ll;Ll|=1;try{return e(t)}finally{0===(Ll=n)&&(Hl=Ke()+500,za&&Ua())}}function du(e){null!==Gl&&0===Gl.tag&&0==(6&Ll)&&Su();var t=Ll;Ll|=1;var n=Nl.transition,r=bt;try{if(Nl.transition=null,bt=1,e)return e()}finally{bt=r,Nl.transition=n,0==(6&(Ll=t))&&Ua()}}function fu(){Il=Rl.current,_a(Rl)}function pu(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,aa(n)),null!==Ol)for(n=Ol.return;null!==n;){var r=n;switch(to(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Ia();break;case 3:oi(),_a(La),_a(Na),di();break;case 5:si(r);break;case 4:oi();break;case 13:case 19:_a(li);break;case 10:So(r.type._context);break;case 22:case 23:fu()}n=n.return}if(Pl=e,Ol=e=Ru(e.current,null),Al=Il=t,jl=0,Fl=null,zl=Ml=Dl=0,$l=Bl=null,null!==To){for(t=0;t<To.length;t++)if(null!==(r=(n=To[t]).interleaved)){n.interleaved=null;var a=r.next,o=n.pending;if(null!==o){var i=o.next;o.next=a,r.next=i}n.pending=r}To=null}return e}function hu(e,t){for(;;){var n=Ol;try{if(ko(),fi.current=is,vi){for(var r=gi.memoizedState;null!==r;){var a=r.queue;null!==a&&(a.pending=null),r=r.next}vi=!1}if(hi=0,yi=mi=gi=null,bi=!1,wi=0,Tl.current=null,null===n||null===n.return){jl=1,Fl=t,Ol=null;break}e:{var i=e,s=n.return,l=n,u=t;if(t=Al,l.flags|=32768,null!==u&&"object"==typeof u&&"function"==typeof u.then){var c=u,d=l,f=d.tag;if(0==(1&d.mode)&&(0===f||11===f||15===f)){var p=d.alternate;p?(d.updateQueue=p.updateQueue,d.memoizedState=p.memoizedState,d.lanes=p.lanes):(d.updateQueue=null,d.memoizedState=null)}var h=ys(s);if(null!==h){h.flags&=-257,vs(h,s,l,0,t),1&h.mode&&ms(i,c,t),u=c;var g=(t=h).updateQueue;if(null===g){var m=new Set;m.add(u),t.updateQueue=m}else g.add(u);break e}if(0==(1&t)){ms(i,c,t),mu();break e}u=Error(o(426))}else if(ao&&1&l.mode){var y=ys(s);if(null!==y){0==(65536&y.flags)&&(y.flags|=256),vs(y,s,l,0,t),go(cs(u,l));break e}}i=u=cs(u,l),4!==jl&&(jl=2),null===Bl?Bl=[i]:Bl.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Do(i,hs(0,u,t));break e;case 1:l=u;var v=i.type,b=i.stateNode;if(0==(128&i.flags)&&("function"==typeof v.getDerivedStateFromError||null!==b&&"function"==typeof b.componentDidCatch&&(null===Wl||!Wl.has(b)))){i.flags|=65536,t&=-t,i.lanes|=t,Do(i,gs(i,l,t));break e}}i=i.return}while(null!==i)}xu(n)}catch(w){t=w,Ol===n&&null!==n&&(Ol=n=n.return);continue}break}}function gu(){var e=Cl.current;return Cl.current=is,null===e?is:e}function mu(){0!==jl&&3!==jl&&2!==jl||(jl=4),null===Pl||0==(268435455&Dl)&&0==(268435455&Ml)||lu(Pl,Al)}function yu(e,t){var n=Ll;Ll|=2;var r=gu();for(Pl===e&&Al===t||(Ql=null,pu(e,t));;)try{vu();break}catch(a){hu(e,a)}if(ko(),Ll=n,Cl.current=r,null!==Ol)throw Error(o(261));return Pl=null,Al=0,jl}function vu(){for(;null!==Ol;)wu(Ol)}function bu(){for(;null!==Ol&&!Ge();)wu(Ol)}function wu(e){var t=El(e.alternate,e,Il);e.memoizedProps=e.pendingProps,null===t?xu(e):Ol=t,Tl.current=null}function xu(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=qs(n,t,Il)))return void(Ol=n)}else{if(null!==(n=Gs(n,t)))return n.flags&=32767,void(Ol=n);if(null===e)return jl=6,void(Ol=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Ol=t);Ol=t=e}while(null!==t);0===jl&&(jl=5)}function ku(e,t,n){var r=bt,a=Nl.transition;try{Nl.transition=null,bt=1,function(e,t,n,r){do{Su()}while(null!==Gl);if(0!=(6&Ll))throw Error(o(327));n=e.finishedWork;var a=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(o(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 a=31-it(n),o=1<<a;t[a]=0,r[a]=-1,e[a]=-1,n&=~o}}(e,i),e===Pl&&(Ol=Pl=null,Al=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||ql||(ql=!0,Pu(tt,(function(){return Su(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=Nl.transition,Nl.transition=null;var s=bt;bt=1;var l=Ll;Ll|=4,Tl.current=null,function(e,t){if(ea=Qt,pr(e=fr())){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 a=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(x){n=null;break e}var s=0,l=-1,u=-1,c=0,d=0,f=e,p=null;t:for(;;){for(var h;f!==n||0!==a&&3!==f.nodeType||(l=s+a),f!==i||0!==r&&3!==f.nodeType||(u=s+r),3===f.nodeType&&(s+=f.nodeValue.length),null!==(h=f.firstChild);)p=f,f=h;for(;;){if(f===e)break t;if(p===n&&++c===a&&(l=s),p===i&&++d===r&&(u=s),null!==(h=f.nextSibling))break;p=(f=p).parentNode}f=h}n=-1===l||-1===u?null:{start:l,end:u}}else n=null}n=n||{start:0,end:0}}else n=null;for(ta={focusedElem:e,selectionRange:n},Qt=!1,Js=t;null!==Js;)if(e=(t=Js).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Js=e;else for(;null!==Js;){t=Js;try{var g=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!==g){var m=g.memoizedProps,y=g.memoizedState,v=t.stateNode,b=v.getSnapshotBeforeUpdate(t.elementType===t.type?m:yo(t.type,m),y);v.__reactInternalSnapshotBeforeUpdate=b}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(o(163))}}catch(x){_u(t,t.return,x)}if(null!==(e=t.sibling)){e.return=t.return,Js=e;break}Js=t.return}g=nl,nl=!1}(e,n),yl(n,e),hr(ta),Qt=!!ea,ta=ea=null,e.current=n,bl(n,e,a),Ye(),Ll=l,bt=s,Nl.transition=i}else e.current=n;if(ql&&(ql=!1,Gl=e,Yl=a),i=e.pendingLanes,0===i&&(Wl=null),function(e){if(ot&&"function"==typeof ot.onCommitFiberRoot)try{ot.onCommitFiberRoot(at,e,void 0,128==(128&e.current.flags))}catch(t){}}(n.stateNode),au(e,Ke()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)a=t[n],r(a.value,{componentStack:a.stack,digest:a.digest});if(Zl)throw Zl=!1,e=Vl,Vl=null,e;0!=(1&Yl)&&0!==e.tag&&Su(),i=e.pendingLanes,0!=(1&i)?e===Xl?Kl++:(Kl=0,Xl=e):Kl=0,Ua()}(e,t,n,r)}finally{Nl.transition=a,bt=r}return null}function Su(){if(null!==Gl){var e=wt(Yl),t=Nl.transition,n=bt;try{if(Nl.transition=null,bt=16>e?16:e,null===Gl)var r=!1;else{if(e=Gl,Gl=null,Yl=0,0!=(6&Ll))throw Error(o(331));var a=Ll;for(Ll|=4,Js=e.current;null!==Js;){var i=Js,s=i.child;if(0!=(16&Js.flags)){var l=i.deletions;if(null!==l){for(var u=0;u<l.length;u++){var c=l[u];for(Js=c;null!==Js;){var d=Js;switch(d.tag){case 0:case 11:case 15:rl(8,d,i)}var f=d.child;if(null!==f)f.return=d,Js=f;else for(;null!==Js;){var p=(d=Js).sibling,h=d.return;if(il(d),d===c){Js=null;break}if(null!==p){p.return=h,Js=p;break}Js=h}}}var g=i.alternate;if(null!==g){var m=g.child;if(null!==m){g.child=null;do{var y=m.sibling;m.sibling=null,m=y}while(null!==m)}}Js=i}}if(0!=(2064&i.subtreeFlags)&&null!==s)s.return=i,Js=s;else e:for(;null!==Js;){if(0!=(2048&(i=Js).flags))switch(i.tag){case 0:case 11:case 15:rl(9,i,i.return)}var v=i.sibling;if(null!==v){v.return=i.return,Js=v;break e}Js=i.return}}var b=e.current;for(Js=b;null!==Js;){var w=(s=Js).child;if(0!=(2064&s.subtreeFlags)&&null!==w)w.return=s,Js=w;else e:for(s=b;null!==Js;){if(0!=(2048&(l=Js).flags))try{switch(l.tag){case 0:case 11:case 15:al(9,l)}}catch(k){_u(l,l.return,k)}if(l===s){Js=null;break e}var x=l.sibling;if(null!==x){x.return=l.return,Js=x;break e}Js=l.return}}if(Ll=a,Ua(),ot&&"function"==typeof ot.onPostCommitFiberRoot)try{ot.onPostCommitFiberRoot(at,e)}catch(k){}r=!0}return r}finally{bt=n,Nl.transition=t}}return!1}function Eu(e,t,n){e=jo(e,t=hs(0,t=cs(n,t),1),1),t=tu(),null!==e&&(yt(e,1,t),au(e,t))}function _u(e,t,n){if(3===e.tag)Eu(e,e,n);else for(;null!==t;){if(3===t.tag){Eu(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Wl||!Wl.has(r))){t=jo(t,e=gs(t,e=cs(n,e),1),1),e=tu(),null!==t&&(yt(t,1,e),au(t,e));break}}t=t.return}}function Cu(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=tu(),e.pingedLanes|=e.suspendedLanes&n,Pl===e&&(Al&n)===n&&(4===jl||3===jl&&(130023424&Al)===Al&&500>Ke()-Ul?pu(e,0):zl|=n),au(e,t)}function Tu(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ct,0==(130023424&(ct<<=1))&&(ct=4194304)));var n=tu();null!==(e=Po(e,t))&&(yt(e,t,n),au(e,n))}function Nu(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Tu(e,n)}function Lu(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;null!==a&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(o(314))}null!==r&&r.delete(t),Tu(e,n)}function Pu(e,t){return We(e,t)}function Ou(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 Au(e,t,n,r){return new Ou(e,t,n,r)}function Iu(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Ru(e,t){var n=e.alternate;return null===n?((n=Au(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 ju(e,t,n,r,a,i){var s=2;if(r=e,"function"==typeof e)Iu(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case S:return Fu(n.children,a,i,t);case E:s=8,a|=8;break;case _:return(e=Au(12,n,t,2|a)).elementType=_,e.lanes=i,e;case L:return(e=Au(13,n,t,a)).elementType=L,e.lanes=i,e;case P:return(e=Au(19,n,t,a)).elementType=P,e.lanes=i,e;case I:return Du(n,a,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 N:s=11;break e;case O:s=14;break e;case A:s=16,r=null;break e}throw Error(o(130,null==e?e:typeof e,""))}return(t=Au(s,n,t,a)).elementType=e,t.type=r,t.lanes=i,t}function Fu(e,t,n,r){return(e=Au(7,e,r,t)).lanes=n,e}function Du(e,t,n,r){return(e=Au(22,e,r,t)).elementType=I,e.lanes=n,e.stateNode={isHidden:!1},e}function Mu(e,t,n){return(e=Au(6,e,null,t)).lanes=n,e}function zu(e,t,n){return(t=Au(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Bu(e,t,n,r,a){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=mt(0),this.expirationTimes=mt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=mt(0),this.identifierPrefix=r,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function $u(e,t,n,r,a,o,i,s,l){return e=new Bu(e,t,n,s,l),1===t?(t=1,!0===o&&(t|=8)):t=0,o=Au(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ao(o),e}function Uu(e){if(!e)return Ta;e:{if(Ue(e=e._reactInternals)!==e||1!==e.tag)throw Error(o(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Aa(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(o(171))}if(1===e.tag){var n=e.type;if(Aa(n))return ja(e,n,t)}return t}function Hu(e,t,n,r,a,o,i,s,l){return(e=$u(n,r,!0,e,0,o,0,s,l)).context=Uu(null),n=e.current,(o=Ro(r=tu(),a=nu(n))).callback=null!=t?t:null,jo(n,o,a),e.current.lanes=a,yt(e,a,r),au(e,r),e}function Qu(e,t,n,r){var a=t.current,o=tu(),i=nu(a);return n=Uu(n),null===t.context?t.context=n:t.pendingContext=n,(t=Ro(o,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=jo(a,t,i))&&(ru(e,a,i,o),Fo(e,a,i)),i}function Zu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Vu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Wu(e,t){Vu(e,t),(e=e.alternate)&&Vu(e,t)}El=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||La.current)ws=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return ws=!1,function(e,t,n){switch(t.tag){case 3:Ps(t),ho();break;case 5:ii(t);break;case 1:Aa(t.type)&&Fa(t);break;case 4:ai(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,a=t.memoizedProps.value;Ca(vo,r._currentValue),r._currentValue=a;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(Ca(li,1&li.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Ms(e,t,n):(Ca(li,1&li.current),null!==(e=Zs(e,t,n))?e.sibling:null);Ca(li,1&li.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return Hs(e,t,n);t.flags|=128}if(null!==(a=t.memoizedState)&&(a.rendering=null,a.tail=null,a.lastEffect=null),Ca(li,li.current),r)break;return null;case 22:case 23:return t.lanes=0,_s(e,t,n)}return Zs(e,t,n)}(e,t,n);ws=0!=(131072&e.flags)}else ws=!1,ao&&0!=(1048576&t.flags)&&Ja(t,Va,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Qs(e,t),e=t.pendingProps;var a=Oa(t,Na.current);_o(t,n),a=Ei(null,t,r,e,a,n);var i=_i();return t.flags|=1,"object"==typeof a&&null!==a&&"function"==typeof a.render&&void 0===a.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Aa(r)?(i=!0,Fa(t)):i=!1,t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,Ao(t),a.updater=Uo,t.stateNode=a,a._reactInternals=t,Vo(t,r,e,n),t=Ls(null,t,r,!0,i,n)):(t.tag=0,ao&&i&&eo(t),xs(null,t,a,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Qs(e,t),e=t.pendingProps,r=(a=r._init)(r._payload),t.type=r,a=t.tag=function(e){if("function"==typeof e)return Iu(e)?1:0;if(null!=e){if((e=e.$$typeof)===N)return 11;if(e===O)return 14}return 2}(r),e=yo(r,e),a){case 0:t=Ts(null,t,r,e,n);break e;case 1:t=Ns(null,t,r,e,n);break e;case 11:t=ks(null,t,r,e,n);break e;case 14:t=Ss(null,t,r,yo(r.type,e),n);break e}throw Error(o(306,r,""))}return t;case 0:return r=t.type,a=t.pendingProps,Ts(e,t,r,a=t.elementType===r?a:yo(r,a),n);case 1:return r=t.type,a=t.pendingProps,Ns(e,t,r,a=t.elementType===r?a:yo(r,a),n);case 3:e:{if(Ps(t),null===e)throw Error(o(387));r=t.pendingProps,a=(i=t.memoizedState).element,Io(e,t),Mo(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=Os(e,t,r,n,a=cs(Error(o(423)),t));break e}if(r!==a){t=Os(e,t,r,n,a=cs(Error(o(424)),t));break e}for(ro=ua(t.stateNode.containerInfo.firstChild),no=t,ao=!0,oo=null,n=Xo(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(ho(),r===a){t=Zs(e,t,n);break e}xs(e,t,r,n)}t=t.child}return t;case 5:return ii(t),null===e&&uo(t),r=t.type,a=t.pendingProps,i=null!==e?e.memoizedProps:null,s=a.children,na(r,a)?s=null:null!==i&&na(r,i)&&(t.flags|=32),Cs(e,t),xs(e,t,s,n),t.child;case 6:return null===e&&uo(t),null;case 13:return Ms(e,t,n);case 4:return ai(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Ko(t,null,r,n):xs(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,ks(e,t,r,a=t.elementType===r?a:yo(r,a),n);case 7:return xs(e,t,t.pendingProps,n),t.child;case 8:case 12:return xs(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,a=t.pendingProps,i=t.memoizedProps,s=a.value,Ca(vo,r._currentValue),r._currentValue=s,null!==i)if(sr(i.value,s)){if(i.children===a.children&&!La.current){t=Zs(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 u=l.firstContext;null!==u;){if(u.context===r){if(1===i.tag){(u=Ro(-1,n&-n)).tag=2;var c=i.updateQueue;if(null!==c){var d=(c=c.shared).pending;null===d?u.next=u:(u.next=d.next,d.next=u),c.pending=u}}i.lanes|=n,null!==(u=i.alternate)&&(u.lanes|=n),Eo(i.return,n,t),l.lanes|=n;break}u=u.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(o(341));s.lanes|=n,null!==(l=s.alternate)&&(l.lanes|=n),Eo(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}xs(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=t.pendingProps.children,_o(t,n),r=r(a=Co(a)),t.flags|=1,xs(e,t,r,n),t.child;case 14:return a=yo(r=t.type,t.pendingProps),Ss(e,t,r,a=yo(r.type,a),n);case 15:return Es(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:yo(r,a),Qs(e,t),t.tag=1,Aa(r)?(e=!0,Fa(t)):e=!1,_o(t,n),Qo(t,r,a),Vo(t,r,a,n),Ls(null,t,r,!0,e,n);case 19:return Hs(e,t,n);case 22:return _s(e,t,n)}throw Error(o(156,t.tag))};var qu="function"==typeof reportError?reportError:function(e){console.error(e)};function Gu(e){this._internalRoot=e}function Yu(e){this._internalRoot=e}function Ku(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Xu(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Ju(){}function ec(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o;if("function"==typeof a){var s=a;a=function(){var e=Zu(i);s.call(e)}}Qu(t,i,e,a)}else i=function(e,t,n,r,a){if(a){if("function"==typeof r){var o=r;r=function(){var e=Zu(i);o.call(e)}}var i=Hu(t,r,e,0,null,!1,0,"",Ju);return e._reactRootContainer=i,e[ha]=i.current,Ur(8===e.nodeType?e.parentNode:e),du(),i}for(;a=e.lastChild;)e.removeChild(a);if("function"==typeof r){var s=r;r=function(){var e=Zu(l);s.call(e)}}var l=$u(e,0,!1,null,0,!1,0,"",Ju);return e._reactRootContainer=l,e[ha]=l.current,Ur(8===e.nodeType?e.parentNode:e),du((function(){Qu(t,l,n,r)})),l}(n,t,e,a,r);return Zu(i)}Yu.prototype.render=Gu.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(o(409));Qu(e,t,null,null)},Yu.prototype.unmount=Gu.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;du((function(){Qu(null,e,null,null)})),t[ha]=null}},Yu.prototype.unstable_scheduleHydration=function(e){if(e){var t=Et();e={blockedOn:null,target:e,priority:t};for(var n=0;n<It.length&&0!==t&&t<It[n].priority;n++);It.splice(n,0,e),0===n&&Dt(e)}},xt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(vt(t,1|n),au(t,Ke()),0==(6&Ll)&&(Hl=Ke()+500,Ua()))}break;case 13:du((function(){var t=Po(e,1);if(null!==t){var n=tu();ru(t,e,1,n)}})),Wu(e,1)}},kt=function(e){if(13===e.tag){var t=Po(e,134217728);if(null!==t)ru(t,e,134217728,tu());Wu(e,134217728)}},St=function(e){if(13===e.tag){var t=nu(e),n=Po(e,t);if(null!==n)ru(n,e,t,tu());Wu(e,t)}},Et=function(){return bt},_t=function(e,t){var n=bt;try{return bt=e,t()}finally{bt=n}},ke=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 a=xa(r);if(!a)throw Error(o(90));W(r),X(r,a)}}}break;case"textarea":oe(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Ne=cu,Le=du;var tc={usingClientEntryPoint:!1,Events:[ba,wa,xa,Ce,Te,cu]},nc={findFiberByHostInstance:va,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},rc={bundleType:nc.bundleType,version:nc.version,rendererPackageName:nc.rendererPackageName,rendererConfig:nc.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=Ze(e))?null:e.stateNode},findFiberByHostInstance:nc.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var ac=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!ac.isDisabled&&ac.supportsFiber)try{at=ac.inject(rc),ot=ac}catch(ce){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tc,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Ku(t))throw Error(o(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Ku(e))throw Error(o(299));var n=!1,r="",a=qu;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(a=t.onRecoverableError)),t=$u(e,1,!1,null,0,n,0,r,a),e[ha]=t.current,Ur(8===e.nodeType?e.parentNode:e),new Gu(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(o(188));throw e=Object.keys(e).join(","),Error(o(268,e))}return e=null===(e=Ze(t))?null:e.stateNode},t.flushSync=function(e){return du(e)},t.hydrate=function(e,t,n){if(!Xu(t))throw Error(o(200));return ec(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Ku(e))throw Error(o(405));var r=null!=n&&n.hydratedSources||null,a=!1,i="",s=qu;if(null!=n&&(!0===n.unstable_strictMode&&(a=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(s=n.onRecoverableError)),t=Hu(t,null,e,1,null!=n?n:null,a,0,i,s),e[ha]=t.current,Ur(e),r)for(e=0;e<r.length;e++)a=(a=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,a]:t.mutableSourceEagerHydrationData.push(n,a);return new Yu(t)},t.render=function(e,t,n){if(!Xu(t))throw Error(o(200));return ec(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Xu(e))throw Error(o(40));return!!e._reactRootContainer&&(du((function(){ec(null,null,e,!1,(function(){e._reactRootContainer=null,e[ha]=null}))})),!0)},t.unstable_batchedUpdates=cu,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Xu(n))throw Error(o(200));if(null==e||void 0===e._reactInternals)throw Error(o(38));return ec(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},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,a="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(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(!o(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(!o(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(a&&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)&&!o(e[u[l]],i[u[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return o(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:()=>Z,ql:()=>J});var r=n(7294),a=n(5697),o=n.n(a),i=n(9590),s=n.n(i),l=n(1143),u=n.n(l),c=n(6774),d=n.n(c);function f(){return f=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},f.apply(this,arguments)}function p(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 g(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t.indexOf(n=o[r])>=0||(a[n]=e[n]);return a}var m={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},y={rel:["amphtml","canonical","alternate"]},v={type:["application/ld+json"]},b={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(m).map((function(e){return m[e]})),x={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},k=Object.keys(x).reduce((function(e,t){return e[x[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,m.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 f({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[m.BASE]})).map((function(e){return e[m.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a<r.length;a+=1){var o=r[a].toLowerCase();if(-1!==e.indexOf(o)&&n[o])return t.concat(n)}return t}),[])},N=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 a={};n.filter((function(e){for(var n,o=Object.keys(e),i=0;i<o.length;i+=1){var s=o[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]={}),a[n]||(a[n]={}),!r[n][u]&&(a[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var o=Object.keys(a),i=0;i<o.length;i+=1){var s=o[i],l=f({},r[s],a[s]);r[s]=l}return e}),[]).reverse()},L=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},O=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 f({},e,((n={})[t]=void 0,n))},I=[m.NOSCRIPT,m.SCRIPT,m.STYLE],R=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,"'")},j=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}),"")},F=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[x[n]||n]=e[n],t}),t)},D=function(e,t){return t.map((function(t,n){var a,o=((a={key:n})["data-rh"]=!0,a);return Object.keys(t).forEach((function(e){var n=x[e]||e;"innerHTML"===n||"cssText"===n?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[n]=t[e]})),r.createElement(e,o)}))},M=function(e,t,n){switch(e){case m.TITLE:return{toComponent:function(){return n=t.titleAttributes,(a={key:e=t.title})["data-rh"]=!0,o=F(n,a),[r.createElement(m.TITLE,o,e)];var e,n,a,o},toString:function(){return function(e,t,n,r){var a=j(n),o=P(t);return a?"<"+e+' data-rh="true" '+a+">"+R(o,r)+"</"+e+">":"<"+e+' data-rh="true">'+R(o,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return F(t)},toString:function(){return j(t)}};default:return{toComponent:function(){return D(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+R(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===I.indexOf(e);return t+"<"+e+' data-rh="true" '+a+(i?"/>":">"+o+"</"+e+">")}),"")}(e,t,n)}}}},z=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var h=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,a=O(e.metaTags,b),o=O(t,y),i=O(n,v);return{priorityMethods:{toComponent:function(){return[].concat(D(m.META,a.priority),D(m.LINK,o.priority),D(m.SCRIPT,i.priority))},toString:function(){return M(m.META,a.priority,r)+" "+M(m.LINK,o.priority,r)+" "+M(m.SCRIPT,i.priority,r)}},metaTags:a.default,linkTags:o.default,scriptTags:i.default}}(e);p=h.priorityMethods,c=h.linkTags,d=h.metaTags,f=h.scriptTags}return{priority:p,base:M(m.BASE,t,r),bodyAttributes:M("bodyAttributes",n,r),htmlAttributes:M("htmlAttributes",a,r),link:M(m.LINK,c,r),meta:M(m.META,d,r),noscript:M(m.NOSCRIPT,o,r),script:M(m.SCRIPT,f,r),style:M(m.STYLE,i,r),title:M(m.TITLE,{title:l,titleAttributes:u},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({}),H=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),Q="undefined"!=typeof document,Z=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);Z.canUseDOM=Q,Z.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},Z.defaultProps={context:{}},Z.displayName="HelmetProvider";var V=function(e,t){var n,r=document.head||document.querySelector(m.HEAD),a=r.querySelectorAll(e+"[data-rh]"),o=[].slice.call(a),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&("innerHTML"===a?r.innerHTML=t.innerHTML:"cssText"===a?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(a,void 0===t[a]?"":t[a]));r.setAttribute("data-rh","true"),o.some((function(e,t){return n=t,r.isEqualNode(e)}))?o.splice(n,1):i.push(r)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:o,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),a=r?r.split(","):[],o=[].concat(a),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===a.indexOf(l)&&a.push(l);var c=o.indexOf(l);-1!==c&&o.splice(c,1)}for(var d=o.length-1;d>=0;d-=1)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,a=e.linkTags,o=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;W(m.BODY,e.bodyAttributes),W(m.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=P(e)),W(m.TITLE,t)}(c,d);var f={baseTag:V(m.BASE,n),linkTags:V(m.LINK,a),metaTags:V(m.META,o),noscriptTags:V(m.NOSCRIPT,i),scriptTags:V(m.SCRIPT,l),styleTags:V(m.STYLE,u)},p={},h={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(h[e]=f[e].oldTags)})),t&&t(),s(e,p,h)},G=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(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,a=null,o=(e=n.helmetInstances.get().map((function(e){var t=f({},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:N(m.LINK,["rel","href"],e),metaTags:N(m.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:N(m.NOSCRIPT,["innerHTML"],e),onChangeClientState:_(e),scriptTags:N(m.SCRIPT,["src","innerHTML"],e),styleTags:N(m.STYLE,["cssText"],e),title:E(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:L(e,"prioritizeSeoTags")});Z.canUseDOM?(t=o,G&&cancelAnimationFrame(G),t.defer?G=requestAnimationFrame((function(){q(t,(function(){G=null}))})):(q(t),G=null)):z&&(a=z(o)),r(a)},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);Y.propTypes={context:H.isRequired},Y.displayName="HelmetDispatcher";var K=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(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 m.SCRIPT:case m.NOSCRIPT:return{innerHTML:t};case m.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 f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case m.TITLE:return f({},a,((t={})[r.type]=i,t.titleAttributes=f({},o),t));case m.BODY:return f({},a,{bodyAttributes:f({},o)});case m.HTML:return f({},a,{htmlAttributes:f({},o)});default:return f({},a,((n={})[r.type]=f({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},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,a={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,o=r.children,i=g(r,K),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,o),l){case m.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case m.LINK:case m.META:case m.NOSCRIPT:case m.SCRIPT:case m.STYLE:a=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:a,newChildProps:s,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(a,t)},n.render=function(){var e=this.props,t=e.children,n=g(e,X),a=f({},n),o=n.helmetData;return t&&(a=this.mapChildrenToProps(t,a)),!o||o instanceof $||(o=new $(o.context,o.instances)),o?r.createElement(Y,f({},a,{context:o.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,f({},a,{context:e}))}))},t}(r.Component);J.propTypes={base:o().object,bodyAttributes:o().object,children:o().oneOfType([o().arrayOf(o().node),o().node]),defaultTitle:o().string,defer:o().bool,encodeSpecialCharacters:o().bool,htmlAttributes:o().object,link:o().arrayOf(o().object),meta:o().arrayOf(o().object),noscript:o().arrayOf(o().object),onChangeClientState:o().func,script:o().arrayOf(o().object),style:o().arrayOf(o().object),title:o().string,titleAttributes:o().object,titleTemplate:o().string,prioritizeSeoTags:o().bool,helmetData:o().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,a=n?Symbol.for("react.portal"):60106,o=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,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,h=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,m=n?Symbol.for("react.lazy"):60116,y=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,b=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function x(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case o:case s:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case m:case g:case l:return e;default:return t}}case a:return t}}}function k(e){return x(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=l,t.Element=r,t.ForwardRef=f,t.Fragment=o,t.Lazy=m,t.Memo=g,t.Portal=a,t.Profiler=s,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return k(e)||x(e)===c},t.isConcurrentMode=k,t.isContextConsumer=function(e){return x(e)===u},t.isContextProvider=function(e){return x(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return x(e)===f},t.isFragment=function(e){return x(e)===o},t.isLazy=function(e){return x(e)===m},t.isMemo=function(e){return x(e)===g},t.isPortal=function(e){return x(e)===a},t.isProfiler=function(e){return x(e)===s},t.isStrictMode=function(e){return x(e)===i},t.isSuspense=function(e){return x(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===s||e===i||e===p||e===h||"object"==typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===g||e.$$typeof===l||e.$$typeof===u||e.$$typeof===f||e.$$typeof===v||e.$$typeof===b||e.$$typeof===w||e.$$typeof===y)},t.typeOf=x},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 a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}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(){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=[],u=[];var c=s.createContext(null);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 f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var a=d(e[r]);a.loading?t.loading=!0:(t.loaded[r]=a.loaded,t.error=a.error),n.push(a.promise),a.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 p(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function h(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var h=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),g=null;function m(){return g||(g=e(h.loader)),g.promise}return l.push(m),"function"==typeof h.webpack&&u.push((function(){if((0,h.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return m()})),f=d=function(t){function n(n){var r;return o(a(a(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),g=e(h.loader),r._loadModule()})),m(),r.state={error:g.error,pastDelay:!1,timedOut:!1,loading:g.loading,loaded:g.loaded},r}r(n,t),n.preload=function(){return m()};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&&Array.isArray(h.modules)&&h.modules.forEach((function(t){e.context.report(t)})),g.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:g.error,loaded:g.loaded,loading:g.loading}),e._clearTimeouts()};g.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),o(d,"contextType",c),f}function g(e){return h(d,e)}g.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return h(f,e)};var m=function(e){function t(){return e.apply(this,arguments)||this}return r(t,e),t.prototype.render=function(){return s.createElement(c.Provider,{value:{report:this.props.report}},s.Children.only(this.props.children))},t}(s.Component);function y(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return y(e)}))}g.Capture=m,g.preloadAll=function(){return new Promise((function(e,t){y(l).then(e,t)}))},g.preloadReady=function(){return new Promise((function(e,t){y(u).then(e,e)}))},e.exports=g},8790:(e,t,n)=>{"use strict";n.d(t,{H:()=>s,f:()=>i});var r=n(6550),a=n(7462),o=n(7294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var a=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return a&&(n.push({route:e,match:a}),e.routes&&i(e.routes,t,n)),a})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?o.createElement(r.rs,n,e.map((function(e,n){return o.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,a.Z)({},n,{},t,{route:e})):o.createElement(e.component,(0,a.Z)({},n,t,{route:e}))}})}))):null}},3727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>w,UT:()=>d,VK:()=>c,rU:()=>y});var r=n(6550),a=n(5068),o=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),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,a.Z)(t,e),t.prototype.render=function(){return o.createElement(r.F0,{history:this.history,children:this.props.children})},t}(o.Component);var d=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.q_)(t.props),t}return(0,a.Z)(t,e),t.prototype.render=function(){return o.createElement(r.F0,{history:this.history,children:this.props.children})},t}(o.Component);var f=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},h=function(e){return e},g=o.forwardRef;void 0===g&&(g=h);var m=g((function(e,t){var n=e.innerRef,r=e.navigate,a=e.onClick,i=(0,l.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,s.Z)({},i,{onClick:function(e){try{a&&a(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=h!==g&&t||n,o.createElement("a",c)}));var y=g((function(e,t){var n=e.component,a=void 0===n?m:n,c=e.replace,d=e.to,y=e.innerRef,v=(0,l.Z)(e,["component","replace","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=p(f(d,e.location),e.location),l=r?n.createHref(r):"",m=(0,s.Z)({},v,{href:l,navigate:function(){var t=f(d,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(c||r?n.replace:n.push)(t)}});return h!==g?m.ref=t||y:m.innerRef=y,o.createElement(a,m)}))})),v=function(e){return e},b=o.forwardRef;void 0===b&&(b=v);var w=b((function(e,t){var n=e["aria-current"],a=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,d=e.activeStyle,h=e.className,g=e.exact,m=e.isActive,w=e.location,x=e.sensitive,k=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 o.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=p(f(E,n),n),l=i.pathname,T=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),N=T?(0,r.LX)(n.pathname,{path:T,exact:g,sensitive:x,strict:k}):null,L=!!(m?m(N,n):N),P="function"==typeof h?h(L):h,O="function"==typeof S?S(L):S;L&&(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,c),O=(0,s.Z)({},O,d));var A=(0,s.Z)({"aria-current":L&&a||null,className:P,style:O,to:i},C);return v!==b?A.ref=t||_:A.innerRef=_,o.createElement(y,A)}))}))},6550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>E,F0:()=>b,LX:()=>S,TH:()=>I,k6:()=>A,rs:()=>P,s6:()=>v});var r=n(5068),a=n(7294),o=n(5697),i=n.n(o),s=n(9318),l=n(8776),u=n(7462),c=n(4779),d=n.n(c),f=(n(9864),n(3366)),p=(n(8679),1073741823),h="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var g=a.createContext||function(e,t){var n,o,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,a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return(t=e.call.apply(e,[this].concat(o))||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 a=n.prototype;return a.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},a.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,a=e.value;((o=r)===(i=a)?0!==o||1/o==1/i:o!=o&&i!=i)?n=0:(n="function"==typeof t?t(r,a):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var o,i},a.render=function(){return this.props.children},n}(a.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),a=0;a<n;a++)r[a]=arguments[a];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 a=n.prototype;return a.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},a.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},a.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},a.getValue=function(){return this.context[s]?this.context[s].get():e},a.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(a.Component);return u.contextTypes=((o={})[s]=i().object,o),{Provider:l,Consumer:u}},m=function(e){var t=g();return t.displayName=e,t},y=m("Router-History"),v=m("Router"),b=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 a.createElement(v.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},a.createElement(y.Provider,{children:this.props.children||null,value:this.props.history}))},t}(a.Component);a.Component;a.Component;var w={},x=1e4,k=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,a=n.exact,o=void 0!==a&&a,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 a=[],o={regexp:d()(e,a,t),keys:a};return k<x&&(r[e]=o,k++),o}(n,{end:o,strict:s,sensitive:u}),a=r.regexp,i=r.keys,l=a.exec(e);if(!l)return null;var c=l[0],f=l.slice(1),p=e===c;return o&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[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 a.createElement(v.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,o=(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===a.Children.count(e)}(s)&&(s=null),a.createElement(v.Provider,{value:o},o.match?s?"function"==typeof s?s(o):s:c?a.createElement(c,o):d?d(o):null:"function"==typeof s?s(o):null)}))},t}(a.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,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,s.Ep)(e)}function N(e){return function(){(0,l.Z)(!1)}}function L(){}a.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 a.createElement(v.Consumer,null,(function(t){t||(0,l.Z)(!1);var n,r,o=e.props.location||t.location;return a.Children.forEach(e.props.children,(function(e){if(null==r&&a.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(o.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?a.cloneElement(n,{location:o,computedMatch:r}):null}))},t}(a.Component);var O=a.useContext;function A(){return O(y)}function I(){return O(v).location}},5251:(e,t,n)=>{"use strict";var r=n(7294),a=Symbol.for("react.element"),o=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 u(e,t,n){var r,o={},u=null,c=null;for(r in void 0!==n&&(u=""+n),void 0!==t.key&&(u=""+t.key),void 0!==t.ref&&(c=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:a,type:e,key:u,ref:c,props:o,_owner:s.current}}t.Fragment=o,t.jsx=u,t.jsxs=u},2408:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),u=Symbol.for("react.forward_ref"),c=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),f=Symbol.for("react.lazy"),p=Symbol.iterator;var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,m={};function y(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||h}function v(){}function b(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||h}y.prototype.isReactComponent={},y.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")},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=y.prototype;var w=b.prototype=new v;w.constructor=b,g(w,y.prototype),w.isPureReactComponent=!0;var x=Array.isArray,k=Object.prototype.hasOwnProperty,S={current:null},E={key:!0,ref:!0,__self:!0,__source:!0};function _(e,t,r){var a,o={},i=null,s=null;if(null!=t)for(a in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)k.call(t,a)&&!E.hasOwnProperty(a)&&(o[a]=t[a]);var l=arguments.length-2;if(1===l)o.children=r;else if(1<l){for(var u=Array(l),c=0;c<l;c++)u[c]=arguments[c+2];o.children=u}if(e&&e.defaultProps)for(a in l=e.defaultProps)void 0===o[a]&&(o[a]=l[a]);return{$$typeof:n,type:e,key:i,ref:s,props:o,_owner:S.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var T=/\/+/g;function N(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 L(e,t,a,o,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=""===o?"."+N(l,0):o,x(i)?(a="",null!=e&&(a=e.replace(T,"$&/")+"/"),L(i,t,a,"",(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,a+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(T,"$&/")+"/")+e)),t.push(i)),1;if(l=0,o=""===o?".":o+":",x(e))for(var u=0;u<e.length;u++){var c=o+N(s=e[u],u);l+=L(s,t,a,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+=L(s=s.value,t,a,c=o+N(s,u++),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=[],a=0;return L(e,r,"","",(function(e){return t.call(n,e,a++)})),r}function O(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},I={transition:null},R={ReactCurrentDispatcher:A,ReactCurrentBatchConfig:I,ReactCurrentOwner:S};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=y,t.Fragment=a,t.Profiler=i,t.PureComponent=b,t.StrictMode=o,t.Suspense=c,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=R,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 a=g({},e.props),o=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&&(o=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(u in t)k.call(t,u)&&!E.hasOwnProperty(u)&&(a[u]=void 0===t[u]&&void 0!==l?l[u]:t[u])}var u=arguments.length-2;if(1===u)a.children=r;else if(1<u){l=Array(u);for(var c=0;c<u;c++)l[c]=arguments[c+2];a.children=l}return{$$typeof:n,type:e.type,key:o,ref:i,props:a,_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:u,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:f,_payload:{_status:-1,_result:e},_init:O}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=I.transition;I.transition={};try{e()}finally{I.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},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.2.0"},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,a=e[r];if(!(0<o(a,t)))break e;e[r]=t,e[n]=a,n=r}}function r(e){return 0===e.length?null:e[0]}function a(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,a=e.length,i=a>>>1;r<i;){var s=2*(r+1)-1,l=e[s],u=s+1,c=e[u];if(0>o(l,n))u<a&&0>o(c,l)?(e[r]=c,e[u]=n,r=u):(e[r]=l,e[s]=n,r=s);else{if(!(u<a&&0>o(c,n)))break e;e[r]=c,e[u]=n,r=u}}}return t}function o(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 u=[],c=[],d=1,f=null,p=3,h=!1,g=!1,m=!1,y="function"==typeof setTimeout?setTimeout:null,v="function"==typeof clearTimeout?clearTimeout:null,b="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(c);null!==t;){if(null===t.callback)a(c);else{if(!(t.startTime<=e))break;a(c),t.sortIndex=t.expirationTime,n(u,t)}t=r(c)}}function x(e){if(m=!1,w(e),!g)if(null!==r(u))g=!0,I(k);else{var t=r(c);null!==t&&R(x,t.startTime-e)}}function k(e,n){g=!1,m&&(m=!1,v(C),C=-1),h=!0;var o=p;try{for(w(n),f=r(u);null!==f&&(!(f.expirationTime>n)||e&&!L());){var i=f.callback;if("function"==typeof i){f.callback=null,p=f.priorityLevel;var s=i(f.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?f.callback=s:f===r(u)&&a(u),w(n)}else a(u);f=r(u)}if(null!==f)var l=!0;else{var d=r(c);null!==d&&R(x,d.startTime-n),l=!1}return l}finally{f=null,p=o,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,N=-1;function L(){return!(t.unstable_now()-N<T)}function P(){if(null!==_){var e=t.unstable_now();N=e;var n=!0;try{n=_(!0,e)}finally{n?S():(E=!1,_=null)}}else E=!1}if("function"==typeof b)S=function(){b(P)};else if("undefined"!=typeof MessageChannel){var O=new MessageChannel,A=O.port2;O.port1.onmessage=P,S=function(){A.postMessage(null)}}else S=function(){y(P,0)};function I(e){_=e,E||(E=!0,S())}function R(e,n){C=y((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(){g||h||(g=!0,I(k))},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 p},t.unstable_getFirstCallbackNode=function(){return r(u)},t.unstable_next=function(e){switch(p){case 1:case 2:case 3:var t=3;break;default:t=p}var n=p;p=t;try{return e()}finally{p=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=p;p=e;try{return t()}finally{p=n}},t.unstable_scheduleCallback=function(e,a,o){var i=t.unstable_now();switch("object"==typeof o&&null!==o?o="number"==typeof(o=o.delay)&&0<o?i+o:i:o=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:a,priorityLevel:e,startTime:o,expirationTime:s=o+s,sortIndex:-1},o>i?(e.sortIndex=o,n(c,e),null===r(u)&&e===r(c)&&(m?(v(C),C=-1):m=!0,R(x,o-i))):(e.sortIndex=s,n(u,e),g||h||(g=!0,I(k))),e},t.unstable_shouldYield=L,t.unstable_wrapCallback=function(e){var t=p;return function(){var n=p;p=t;try{return e.apply(this,arguments)}finally{p=n}}}},3840:(e,t,n)=>{"use strict";e.exports=n(53)},6774:e=>{e.exports=function(e,t,n,r){var a=n?n.call(r,e,t):void 0;if(void 0!==a)return!!a;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l<o.length;l++){var u=o[l];if(!s(u))return!1;var c=e[u],d=t[u];if(!1===(a=n?n.call(r,c,d,u):void 0)||void 0===a&&c!==d)return!1}return!0}},6809:(e,t,n)=>{"use strict";n.d(t,{default:()=>r});const r={title:"Spawn",tagline:"Documentation for Spawn",favicon:"img/white-cosmos-icon.svg",url:"https://rollchains.github.io",baseUrl:"/spawn/",organizationName:"rollchains",projectName:"spawn",deploymentBranch:"gh-pages",trailingSlash:!0,onBrokenLinks:"log",onBrokenMarkdownLinks:"log",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{docs:{sidebarPath:"/home/runner/work/spawn/spawn/docs/sidebars.js",routeBasePath:"/",exclude:["**/*.template.md"],lastVersion:"v0.50.x",versions:{current:{path:"main",banner:"unreleased"},"v0.50.x":{path:"v0.50",banner:"none"}}},theme:{customCss:"/home/runner/work/spawn/spawn/docs/src/css/custom.css"},sitemap:{changefreq:"weekly",priority:.5,filename:"sitemap.xml"}}]],themeConfig:{navbar:{logo:{alt:"Rollchains Logo",src:"img/Rollchains-Logo-RC-Black.svg",srcDark:"img/Rollchains-Logo-RC-White.svg",href:"/"},items:[{type:"docsVersionDropdown",position:"right",dropdownActiveClassDisabled:!0,dropdownItemsBefore:[],dropdownItemsAfter:[]},{href:"https://github.com/rollchains/spawn",html:'<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="github-icon">\n <path fill-rule="evenodd" clip-rule="evenodd" d="M12 0.300049C5.4 0.300049 0 5.70005 0 12.3001C0 17.6001 3.4 22.1001 8.2 23.7001C8.8 23.8001 9 23.4001 9 23.1001C9 22.8001 9 22.1001 9 21.1001C5.7 21.8001 5 19.5001 5 19.5001C4.5 18.1001 3.7 17.7001 3.7 17.7001C2.5 17.0001 3.7 17.0001 3.7 17.0001C4.9 17.1001 5.5 18.2001 5.5 18.2001C6.6 20.0001 8.3 19.5001 9 19.2001C9.1 18.4001 9.4 17.9001 9.8 17.6001C7.1 17.3001 4.3 16.3001 4.3 11.7001C4.3 10.4001 4.8 9.30005 5.5 8.50005C5.5 8.10005 5 6.90005 5.7 5.30005C5.7 5.30005 6.7 5.00005 9 6.50005C10 6.20005 11 6.10005 12 6.10005C13 6.10005 14 6.20005 15 6.50005C17.3 4.90005 18.3 5.30005 18.3 5.30005C19 7.00005 18.5 8.20005 18.4 8.50005C19.2 9.30005 19.6 10.4001 19.6 11.7001C19.6 16.3001 16.8 17.3001 14.1 17.6001C14.5 18.0001 14.9 18.7001 14.9 19.8001C14.9 21.4001 14.9 22.7001 14.9 23.1001C14.9 23.4001 15.1 23.8001 15.7 23.7001C20.5 22.1001 23.9 17.6001 23.9 12.3001C24 5.70005 18.6 0.300049 12 0.300049Z" fill="currentColor"/>\n </svg>\n ',position:"right"}],hideOnScroll:!1},footer:{links:[{title:null,items:[]},{title:"Community",items:[{label:"Discord",href:"https://discord.com/invite/interchain"},{label:"Twitter",href:"https://x.com/rollchains"}]},{title:"Other Tools",items:[{label:"interchaintest",href:"https://github.com/strangelove-ventures/interchaintest"},{label:"Go Relayer",href:"https://github.com/cosmos/relayer"},{label:"CosmWasm",href:"https://docs.cosmwasm.com/"}]},{title:"More",items:[{label:"GitHub",href:"https://github.com/rollchains/spawn"},{label:"Rollchains Website",href:"https://www.rollchains.com"}]}],style:"light"},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:["protobuf","go","go-module","yaml","toml","diff","bash"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}},{className:"code-block-minus-diff-line",line:"minus-diff-line",block:{start:"minus-diff-start",end:"minus-diff-end"}},{className:"code-block-plus-diff-line",line:"plus-diff-line",block:{start:"plus-diff-start",end:"plus-diff-end"}}]},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},docs:{versionPersistence:"localStorage",sidebar:{hideable:!1,autoCollapseCategories:!1}},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},themes:["docusaurus-theme-github-codeblock"],plugins:[["docusaurus-pushfeedback",{project:"paq392agxs",buttonPosition:"center-right",modalPosition:"sidebar-right",buttonStyle:"dark"}],["@docusaurus/plugin-client-redirects",{redirects:[{from:["/","/docs","/spawn"],to:"/v0.50/"}]}],["@gracefullight/docusaurus-plugin-microsoft-clarity",{projectId:"idk9udvhuu"}],["/home/runner/work/spawn/spawn/docs/node_modules/@easyops-cn/docusaurus-search-local/dist/server/server/index.js",{indexBlog:!1,docsRouteBasePath:["/"],highlightSearchTermsOnTargetPage:!0}],null],baseUrlIssueBanner:!0,future:{experimental_storage:{type:"localStorage",namespace:!1},experimental_router:"browser"},onBrokenAnchors:"warn",onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},scripts:[],headTags:[],stylesheets:[],clientModules:[],titleDelimiter:"|",noIndex:!1,markdown:{format:"mdx",mermaid:!1,mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0},anchors:{maintainCase:!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 a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>a})},3366:(e,t,n)=>{"use strict";function r(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}n.d(t,{Z:()=>r})},512:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n)}else for(n in e)e[n]&&(a&&(a+=" "),a+=n);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="",o=arguments.length;n<o;n++)(e=arguments[n])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},2573:(e,t,n)=>{"use strict";n.d(t,{p1:()=>T,y$:()=>ee});var r,a,o,i,s,l,u,c=n(7294),d=n(512),f=Object.create,p=Object.defineProperty,h=Object.defineProperties,g=Object.getOwnPropertyDescriptor,m=Object.getOwnPropertyDescriptors,y=Object.getOwnPropertyNames,v=Object.getOwnPropertySymbols,b=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty,x=Object.prototype.propertyIsEnumerable,k=(e,t,n)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,S=(e,t)=>{for(var n in t||(t={}))w.call(t,n)&&k(e,n,t[n]);if(v)for(var n of v(t))x.call(t,n)&&k(e,n,t[n]);return e},E=(e,t)=>h(e,m(t)),_=(e,t)=>{var n={};for(var r in e)w.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&v)for(var r of v(e))t.indexOf(r)<0&&x.call(e,r)&&(n[r]=e[r]);return n},C=(r={"../../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 a?new a(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 a,o;switch(n=n||{},r.util.type(t)){case"Object":if(o=r.util.objId(t),n[o])return n[o];for(var i in a={},n[o]=a,t)t.hasOwnProperty(i)&&(a[i]=e(t[i],n));return a;case"Array":return o=r.util.objId(t),n[o]?n[o]:(a=[],n[o]=a,t.forEach((function(t,r){a[r]=e(t,n)})),a);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 a=e.classList;if(a.contains(t))return!0;if(a.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 a in t)n[a]=t[a];return n},insertBefore:function(e,t,n,a){var o=(a=a||r.languages)[e],i={};for(var s in o)if(o.hasOwnProperty(s)){if(s==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(s)||(i[s]=o[s])}var u=a[e];return a[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,a,o){o=o||{};var i=r.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],a||s);var l=t[s],u=r.util.type(l);"Object"!==u||o[i(l)]?"Array"!==u||o[i(l)]||(o[i(l)]=!0,e(l,n,s,o)):(o[i(l)]=!0,e(l,n,null,o))}}},plugins:{},highlight:function(e,t,n){var o={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",o),!o.grammar)throw new Error('The language "'+o.language+'" has no grammar.');return o.tokens=r.tokenize(o.code,o.grammar),r.hooks.run("after-tokenize",o),a.stringify(r.util.encode(o.tokens),o.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var a=new s;return l(a,a.head,e),i(e,a,t,a.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(a)},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 a,o=0;a=n[o++];)a(t)}},Token:a};function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function o(e,t,n,r){e.lastIndex=t;var a=e.exec(n);if(a&&r&&a[1]){var o=a[1].length;a.index+=o,a[0]=a[0].slice(o)}return a}function i(e,t,n,s,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var h=0;h<p.length;++h){if(d&&d.cause==f+","+h)return;var g=p[h],m=g.inside,y=!!g.lookbehind,v=!!g.greedy,b=g.alias;if(v&&!g.pattern.global){var w=g.pattern.toString().match(/[imsuy]*$/)[0];g.pattern=RegExp(g.pattern.source,w+"g")}for(var x=g.pattern||g,k=s.next,S=c;k!==t.tail&&!(d&&S>=d.reach);S+=k.value.length,k=k.next){var E=k.value;if(t.length>e.length)return;if(!(E instanceof a)){var _,C=1;if(v){if(!(_=o(x,S,e,y))||_.index>=e.length)break;var T=_.index,N=_.index+_[0].length,L=S;for(L+=k.value.length;T>=L;)L+=(k=k.next).value.length;if(S=L-=k.value.length,k.value instanceof a)continue;for(var P=k;P!==t.tail&&(L<N||"string"==typeof P.value);P=P.next)C++,L+=P.value.length;C--,E=e.slice(S,L),_.index-=S}else if(!(_=o(x,0,E,y)))continue;T=_.index;var O=_[0],A=E.slice(0,T),I=E.slice(T+O.length),R=S+E.length;d&&R>d.reach&&(d.reach=R);var j=k.prev;if(A&&(j=l(t,j,A),S+=A.length),u(t,j,C),k=l(t,j,new a(f,m?r.tokenize(O,m):O,b,O)),I&&l(t,k,I),C>1){var F={cause:f+","+h,reach:R};i(e,t,n,k.prev,S,F),d&&F.reach>d.reach&&(d.reach=F.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,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function u(e,t,n){for(var r=t.next,a=0;a<n&&r!==e.tail;a++)r=r.next;t.next=r,r.prev=t,e.length-=a}return a.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var a="";return t.forEach((function(t){a+=e(t,n)})),a}var o={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(o.classes,i):o.classes.push(i)),r.hooks.run("wrap",o);var s="";for(var l in o.attributes)s+=" "+l+'="'+(o.attributes[l]||"").replace(/"/g,""")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+s+">"+o.content+"</"+o.tag+">"},r}();t.exports=n,n.default=n}},function(){return a||(0,r[y(r)[0]])((a={exports:{}}).exports,a),a.exports}),T=((e,t,n)=>(n=null!=e?f(b(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of y(t))w.call(e,a)||a===n||p(e,a,{get:()=>t[a],enumerable:!(r=g(t,a))||r.enumerable});return e})(!t&&e&&e.__esModule?n:p(n,"default",{value:e,enumerable:!0}),e)))(C());T.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]},T.languages.markup.tag.inside["attr-value"].inside.entity=T.languages.markup.entity,T.languages.markup.doctype.inside["internal-subset"].inside=T.languages.markup,T.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(T.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:T.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:T.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},T.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(T.languages.markup.tag,"addAttribute",{value:function(e,t){T.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:T.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),T.languages.html=T.languages.markup,T.languages.mathml=T.languages.markup,T.languages.svg=T.languages.markup,T.languages.xml=T.languages.extend("markup",{}),T.languages.ssml=T.languages.xml,T.languages.atom=T.languages.xml,T.languages.rss=T.languages.xml,o=T,i={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},l="(?:[^\\\\-]|"+(s=/\\(?: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]|.)/).source+")",l=RegExp(l+"-"+l),u={pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"},o.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:l,inside:{escape:s,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":i,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:s}},"special-escape":i,"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":u}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:s,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":u}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}},T.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:/[{}[\];(),.:]/},T.languages.javascript=T.languages.extend("clike",{"class-name":[T.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}|\?\?=?|\?\.?|[~:]/}),T.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,T.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:T.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:T.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:T.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:T.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:T.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),T.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:T.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"}}),T.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),T.languages.markup&&(T.languages.markup.tag.addInlined("script","javascript"),T.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")),T.languages.js=T.languages.javascript,T.languages.actionscript=T.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:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),T.languages.actionscript["class-name"].alias="function",delete T.languages.actionscript.parameter,delete T.languages.actionscript["literal-property"],T.languages.markup&&T.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:T.languages.markup}}),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}(T),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},a="doc-comment";if(o=e.languages[t]){var o,i=o[a];if((i=i||(o=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[a])instanceof RegExp&&(i=o[a]={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)}(T),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"))}(T),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})}(T),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\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})),o=/"(?:[^"\\\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"(?:"+a+"|"+o+")"}))),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(o),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}(T),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,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \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("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),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 a,o=t[n];"code"!==o.type?e(o.content):(a=o.content[1],o=o.content[3],a&&o&&"code-language"===a.type&&"code-block"===o.type&&"string"==typeof a.content&&(a=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),a="language-"+(a=(/[a-z][\w-]*/i.exec(a)||[""])[0].toLowerCase()),o.alias?"string"==typeof o.alias?o.alias=[o.alias,a]:o.alias.push(a):o.alias=[a]))}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,a=t.classes.length;r<a;r++){var o=t.classes[r];if(o=/language-(.+)/.exec(o)){n=o[1];break}}var u,c=e.languages[n];c?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})),c,n):n&&"none"!==n&&e.plugins.autoloader&&(u="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=u,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(u);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}(T),T.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:T.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+/},T.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 a=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var o=f(/^\($/,/^\)$/);if(-1===o)continue;for(;n<o;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),a.push(i.content))}n=o+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),0<a.length)){var s=f(/^\{$/,/^\}$/);if(-1!==s)for(var l=n;l<s;l++){var u=t[l];"variable"===u.type&&0<=a.indexOf(u.content)&&p(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}return 1}function f(e,r){for(var a=1,o=n;o<t.length;o++){var i=t[o],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))a++;else if(r.test(s)&&0==--a)return o}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),T.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,a=r.inside["interpolation-punctuation"],o=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(o),lookbehind:!0}}),u=0,c={},d=(l=s(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=u++,n="___"+i.toUpperCase()+"_"+r+"___")););return c[n]=e,n})).join(""),n,i),Object.keys(c));return u=0,function t(n){for(var o=0;o<n.length;o++){if(u>=d.length)return;var i,l,f,p,h,g,m,y=n[o];"string"==typeof y||"string"==typeof y.content?(i=d[u],-1!==(m=(g="string"==typeof y?y:y.content).indexOf(i))&&(++u,l=g.substring(0,m),h=c[i],f=void 0,(p={})["interpolation-punctuation"]=a,3===(p=e.tokenize(h,p)).length&&((f=[1,1]).push.apply(f,s(p[1],e.languages.javascript,"javascript")),p.splice.apply(p,f)),f=new e.Token("interpolation",p,r.alias,h),p=g.substring(m+i.length),h=[],l&&h.push(l),h.push(f),p&&(t(g=[p]),h.push.apply(h,g)),"string"==typeof y?(n.splice.apply(n,[o,1].concat(h)),o+=h.length-1):y.content=h)):(m=y.content,Array.isArray(m)?t(m):t([m]))}}(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 u={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function c(e){return"string"==typeof e?e:Array.isArray(e)?e.map(c).join(""):c(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in u&&function t(n){for(var r=0,a=n.length;r<a;r++){var o,i,s,u=n[r];"string"!=typeof u&&(o=u.content,Array.isArray(o)?"template-string"===u.type?(u=o[1],3===o.length&&"string"!=typeof u&&"embedded-code"===u.type&&(i=c(u),u=u.alias,u=Array.isArray(u)?u[0]:u,s=e.languages[u])&&(o[1]=l(i,s,u))):t(o):"string"!=typeof o&&t([o]))}}(t.tokens)}))}(T),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}(T),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)}(T),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})}(T),T.languages.n4js=T.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/}),T.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),T.languages.n4jsd=T.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 a=n[r],o=e.languages.javascript[a];a=(o="RegExp"===e.util.type(o)?e.languages.javascript[a]={pattern:o}:o).inside||{};(o.inside=a)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(T),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,a=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function o(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return a})),RegExp(e,t)}function i(t){for(var n=[],r=0;r<t.length;r++){var a=t[r],o=!1;"string"!=typeof a&&("tag"===a.type&&a.content[0]&&"tag"===a.content[0].type?"</"===a.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===s(a.content[0].content[1])&&n.pop():"/>"!==a.content[a.content.length-1].content&&n.push({tagName:s(a.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&0<n.length&&0===n[n.length-1].openedBraces&&(o=s(a),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(o+=s(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(o=s(t[r-1])+o,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",o,null,o)),a.content&&"string"!=typeof a.content&&i(a.content)}}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\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:o(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=<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)}))}(T),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}(T),T.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:/[{}[\]();,.:\\]/},T.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=T.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}(T),T.languages.c=T.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|[?:~]|[-+*/%&|^!=<>]=?/}),T.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),T.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},T.languages.c.string],char:T.languages.c.char,comment:T.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:T.languages.c}}}}),T.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 T.languages.c.boolean,T.languages.objectivec=T.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 T.languages.objectivec["class-name"],T.languages.objc=T.languages.objectivec,T.languages.reason=T.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/}),T.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 T.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}(T),T.languages.go=T.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/}),T.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete T.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"])}(T),T.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:/[{}[\];(),.:]/},T.languages.python["string-interpolation"].inside.interpolation.inside.rest=T.languages.python,T.languages.py=T.languages.python;((e,t)=>{for(var n in t)p(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>N,duotoneDark:()=>L,duotoneLight:()=>P,github:()=>O,jettwaveDark:()=>Q,jettwaveLight:()=>Z,nightOwl:()=>A,nightOwlLight:()=>I,oceanicNext:()=>F,okaidia:()=>D,oneDark:()=>V,oneLight:()=>W,palenight:()=>M,shadesOfPurple:()=>z,synthwave84:()=>B,ultramin:()=>$,vsDark:()=>U,vsLight:()=>H});var N={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"}}]},P={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"}}]},O={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"}}]},A={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)"}}]},I={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)"}}]},R="#c5a5c5",j="#8dc891",F={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:R}},{types:["attr-value"],style:{color:j}},{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:j}},{types:["punctuation"],style:{color:j}},{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:R}},{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}}]},D={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"}}]},M={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)"}}]},z={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)"}}]},B={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"}}]},$={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)"}}]},U={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)"}}]},H={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"}}]},Z={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"}}]},V={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%)"}}]},W={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%)"}}]},q=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:a}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=S(S({},e[t]),a);e[t]=n})),e}),{});return r.root=n,r.plain=E(S({},n),{backgroundColor:void 0}),r},G=/\r\n|\r|\n/,Y=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)},X=e=>{const t=[[]],n=[e],r=[0],a=[e.length];let o=0,i=0,s=[];const l=[s];for(;i>-1;){for(;(o=r[i]++)<a[i];){let e,u=t[i];const c=n[i][o];if("string"==typeof c?(u=i>0?u:["plain"],e=c):(u=K(u,c.type),c.alias&&(u=K(u,c.alias)),e=c.content),"string"!=typeof e){i++,t.push(u),n.push(e),r.push(0),a.push(e.length);continue}const d=e.split(G),f=d.length;s.push({types:u,content:d[0]});for(let t=1;t<f;t++)Y(s),l.push(s=[]),s.push({types:u,content:d[t]})}i--,t.pop(),n.pop(),r.pop(),a.pop()}return Y(s),l},J=({children:e,language:t,code:n,theme:r,prism:a})=>{const o=t.toLowerCase(),i=((e,t)=>{const[n,r]=(0,c.useState)(q(t,e)),a=(0,c.useRef)(),o=(0,c.useRef)();return(0,c.useEffect)((()=>{t===a.current&&e===o.current||(a.current=t,o.current=e,r(q(t,e)))}),[e,t]),n})(o,r),s=(e=>(0,c.useCallback)((t=>{var n=t,{className:r,style:a,line:o}=n,i=_(n,["className","style","line"]);const s=E(S({},i),{className:(0,d.Z)("token-line",r)});return"object"==typeof e&&"plain"in e&&(s.style=e.plain),"object"==typeof a&&(s.style=S(S({},s.style||{}),a)),s}),[e]))(i),l=(e=>{const t=(0,c.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,c.useCallback)((e=>{var n=e,{token:r,className:a,style:o}=n,i=_(n,["token","className","style"]);const s=E(S({},i),{className:(0,d.Z)("token",...r.types,a),children:r.content,style:t(r)});return null!=o&&(s.style=S(S({},s.style||{}),o)),s}),[t])})(i),u=(({prism:e,code:t,grammar:n,language:r})=>{const a=(0,c.useRef)(e);return(0,c.useMemo)((()=>{if(null==n)return X([t]);const e={code:t,grammar:n,language:r,tokens:[]};return a.current.hooks.run("before-tokenize",e),e.tokens=a.current.tokenize(t,n),a.current.hooks.run("after-tokenize",e),X(e.tokens)}),[t,n,r])})({prism:a,language:o,code:n,grammar:a.languages[o]});return e({tokens:u,className:`prism-code language-${o}`,style:null!=i?i.root:{},getLineProps:s,getTokenProps:l})},ee=e=>(0,c.createElement)(J,E(S({},e),{prism:e.prism||T,theme:e.theme||U,code:e.code,language:e.language}))},8776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=!0,a="Invariant failed";function o(e,t){if(!e){if(r)throw new Error(a);var n="function"==typeof t?t():t,o=n?"".concat(a,": ").concat(n):a;throw new Error(o)}}},7529:e=>{"use strict";e.exports={}},6887:e=>{"use strict";e.exports=JSON.parse('{"/spawn/search/-d33":{"__comp":"1a4e3797","__context":{"plugin":"138e0e15"}},"/spawn/-d29":{"__comp":"5e95c892","__context":{"plugin":"aba21aa0"}},"/spawn/main/-1ae":{"__comp":"a7bd4aaa","__props":"6eb1ecaa"},"/spawn/main/-ec1":{"__comp":"a94703ab"},"/spawn/main/-e69":{"__comp":"17896441","content":"36759dfc"},"/spawn/v0.50/-b5b":{"__comp":"a7bd4aaa","__props":"0cd0e263"},"/spawn/v0.50/-2a3":{"__comp":"a94703ab"},"/spawn/v0.50/-a41":{"__comp":"17896441","content":"6c1d4545"},"/spawn/v0.50/build/name-service-application/-423":{"__comp":"17896441","content":"16c976c4"},"/spawn/v0.50/build/name-service-bonus/-d9b":{"__comp":"17896441","content":"b9ff4302"},"/spawn/v0.50/build/name-service-client/-faf":{"__comp":"17896441","content":"590f8f60"},"/spawn/v0.50/build/name-service-ibc-contract/-9f4":{"__comp":"17896441","content":"200b60cb"},"/spawn/v0.50/build/name-service-ibc-module/-749":{"__comp":"17896441","content":"b13fbd5d"},"/spawn/v0.50/build/name-service-structure/-493":{"__comp":"17896441","content":"ecd46386"},"/spawn/v0.50/build/name-service-summary/-1fd":{"__comp":"17896441","content":"f873aaa2"},"/spawn/v0.50/build/name-service-testnet/-a4a":{"__comp":"17896441","content":"def0e9a3"},"/spawn/v0.50/build/name-service/-4b5":{"__comp":"17896441","content":"f8891bd3"},"/spawn/v0.50/demo/cw-nft/-837":{"__comp":"17896441","content":"cf8bc188"},"/spawn/v0.50/demo/cw-validator-reviews/-f60":{"__comp":"17896441","content":"a0b73a2e"},"/spawn/v0.50/demo/ibc/-23c":{"__comp":"17896441","content":"ac49df54"},"/spawn/v0.50/demo/tokenfactory/-984":{"__comp":"17896441","content":"f5a87c92"},"/spawn/v0.50/install/debugging/-f32":{"__comp":"17896441","content":"c401c2e6"},"/spawn/v0.50/install/install-spawn/-716":{"__comp":"17896441","content":"58117f0d"},"/spawn/v0.50/install/system-setup/-c5f":{"__comp":"17896441","content":"e3e7a55f"},"/spawn/v0.50/learn/consensus-security/-51f":{"__comp":"17896441","content":"675ad4a5"}}')}},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.698d1b94.js.LICENSE.txt b/assets/js/main.698d1b94.js.LICENSE.txt new file mode 100644 index 00000000..3a6ccc50 --- /dev/null +++ b/assets/js/main.698d1b94.js.LICENSE.txt @@ -0,0 +1,133 @@ +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ + +/*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ + +/*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + */ + +/*! 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 + *) +*/ + +/*!*************************************************** +* mark.js v8.11.1 +* https://markjs.io/ +* Copyright (c) 2014–2018, Julian Kühnel +* Released under the MIT license https://git.io/vwTVl +*****************************************************/ + +/** + * @license React + * react-dom.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * react-jsx-runtime.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * react.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * @license React + * scheduler.production.min.js + * + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * 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. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ diff --git a/assets/js/runtime~main.b8c00c01.js b/assets/js/runtime~main.b8c00c01.js new file mode 100644 index 00000000..41552a78 --- /dev/null +++ b/assets/js/runtime~main.b8c00c01.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,a,t,r,f,o={},c={};function n(e){var a=c[e];if(void 0!==a)return a.exports;var t=c[e]={exports:{}};return o[e].call(t.exports,t,t.exports,n),t.exports}n.m=o,e=[],n.O=(a,t,r,f)=>{if(!t){var o=1/0;for(b=0;b<e.length;b++){t=e[b][0],r=e[b][1],f=e[b][2];for(var c=!0,d=0;d<t.length;d++)(!1&f||o>=f)&&Object.keys(n.O).every((e=>n.O[e](t[d])))?t.splice(d--,1):(c=!1,f<o&&(o=f));if(c){e.splice(b--,1);var i=r();void 0!==i&&(a=i)}}return a}f=f||0;for(var b=e.length;b>0&&e[b-1][2]>f;b--)e[b]=e[b-1];e[b]=[t,r,f]},n.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return n.d(a,{a:a}),a},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,n.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var f=Object.create(null);n.r(f);var o={};a=a||[null,t({}),t([]),t(t)];for(var c=2&r&&e;"object"==typeof c&&!~a.indexOf(c);c=t(c))Object.getOwnPropertyNames(c).forEach((a=>o[a]=()=>e[a]));return o.default=()=>e,n.d(f,o),f},n.d=(e,a)=>{for(var t in a)n.o(a,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:a[t]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((a,t)=>(n.f[t](e,a),a)),[])),n.u=e=>"assets/js/"+({99:"b13fbd5d",104:"def0e9a3",150:"0cd0e263",167:"c401c2e6",221:"ac49df54",273:"f5a87c92",294:"f8891bd3",308:"cf8bc188",316:"6c1d4545",368:"a94703ab",375:"a0b73a2e",429:"b9ff4302",447:"f873aaa2",451:"58117f0d",490:"590f8f60",518:"a7bd4aaa",524:"138e0e15",599:"36759dfc",602:"ecd46386",613:"200b60cb",629:"aba21aa0",661:"5e95c892",670:"6eb1ecaa",719:"675ad4a5",816:"16c976c4",838:"e3e7a55f",918:"17896441",920:"1a4e3797"}[e]||e)+"."+{99:"9136380e",104:"c113600b",150:"f71026b4",167:"da808446",221:"4e753bbe",273:"e92da417",294:"ae69a959",308:"f2af40ce",316:"9e6f7dc7",368:"12653146",375:"73b73e1d",429:"c2988704",443:"6f81f902",447:"e3b9fb4d",451:"4e6d62b2",490:"193427ae",518:"ced71ed2",524:"205f518f",525:"35e30ac6",599:"8a0d5220",602:"28d9a771",613:"d5728b75",629:"07cbdb4f",661:"44330d62",670:"6bb4907a",719:"48014bca",772:"585e834a",816:"b2206a4a",838:"f0fb7f96",901:"ff04e7f4",918:"5683270e",920:"328bf227"}[e]+".js",n.miniCssF=e=>{},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r={},f="docs:",n.l=(e,a,t,o)=>{if(r[e])r[e].push(a);else{var c,d;if(void 0!==t)for(var i=document.getElementsByTagName("script"),b=0;b<i.length;b++){var u=i[b];if(u.getAttribute("src")==e||u.getAttribute("data-webpack")==f+t){c=u;break}}c||(d=!0,(c=document.createElement("script")).charset="utf-8",c.timeout=120,n.nc&&c.setAttribute("nonce",n.nc),c.setAttribute("data-webpack",f+t),c.src=e),r[e]=[a];var l=(a,t)=>{c.onerror=c.onload=null,clearTimeout(s);var f=r[e];if(delete r[e],c.parentNode&&c.parentNode.removeChild(c),f&&f.forEach((e=>e(t))),a)return a(t)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=l.bind(null,c.onerror),c.onload=l.bind(null,c.onload),d&&document.head.appendChild(c)}},n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.p="/spawn/",n.gca=function(e){return e={17896441:"918",b13fbd5d:"99",def0e9a3:"104","0cd0e263":"150",c401c2e6:"167",ac49df54:"221",f5a87c92:"273",f8891bd3:"294",cf8bc188:"308","6c1d4545":"316",a94703ab:"368",a0b73a2e:"375",b9ff4302:"429",f873aaa2:"447","58117f0d":"451","590f8f60":"490",a7bd4aaa:"518","138e0e15":"524","36759dfc":"599",ecd46386:"602","200b60cb":"613",aba21aa0:"629","5e95c892":"661","6eb1ecaa":"670","675ad4a5":"719","16c976c4":"816",e3e7a55f:"838","1a4e3797":"920"}[e]||e,n.p+n.u(e)},(()=>{var e={303:0,532:0};n.f.j=(a,t)=>{var r=n.o(e,a)?e[a]:void 0;if(0!==r)if(r)t.push(r[2]);else if(/^(303|532)$/.test(a))e[a]=0;else{var f=new Promise(((t,f)=>r=e[a]=[t,f]));t.push(r[2]=f);var o=n.p+n.u(a),c=new Error;n.l(o,(t=>{if(n.o(e,a)&&(0!==(r=e[a])&&(e[a]=void 0),r)){var f=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;c.message="Loading chunk "+a+" failed.\n("+f+": "+o+")",c.name="ChunkLoadError",c.type=f,c.request=o,r[1](c)}}),"chunk-"+a,a)}},n.O.j=a=>0===e[a];var a=(a,t)=>{var r,f,o=t[0],c=t[1],d=t[2],i=0;if(o.some((a=>0!==e[a]))){for(r in c)n.o(c,r)&&(n.m[r]=c[r]);if(d)var b=d(n)}for(a&&a(t);i<o.length;i++)f=o[i],n.o(e,f)&&e[f]&&e[f][0](),e[f]=0;return n.O(b)},t=self.webpackChunkdocs=self.webpackChunkdocs||[];t.forEach(a.bind(null,0)),t.push=a.bind(null,t.push.bind(t))})()})(); \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..06342a9a --- /dev/null +++ b/docs/index.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8"> + <meta http-equiv="refresh" content="0; url=/spawn/v0.50/"> + <link rel="canonical" href="/spawn/v0.50/" /> + </head> + <script> + window.location.href = '/spawn/v0.50/' + window.location.search + window.location.hash; + </script> +</html> \ No newline at end of file diff --git a/fonts/inter/Inter-Black.woff b/fonts/inter/Inter-Black.woff new file mode 100644 index 00000000..a18593a0 Binary files /dev/null and b/fonts/inter/Inter-Black.woff differ diff --git a/fonts/inter/Inter-Black.woff2 b/fonts/inter/Inter-Black.woff2 new file mode 100644 index 00000000..68f64c9e Binary files /dev/null and b/fonts/inter/Inter-Black.woff2 differ diff --git a/fonts/inter/Inter-BlackItalic.woff b/fonts/inter/Inter-BlackItalic.woff new file mode 100644 index 00000000..b6b01943 Binary files /dev/null and b/fonts/inter/Inter-BlackItalic.woff differ diff --git a/fonts/inter/Inter-BlackItalic.woff2 b/fonts/inter/Inter-BlackItalic.woff2 new file mode 100644 index 00000000..1c9c7ca8 Binary files /dev/null and b/fonts/inter/Inter-BlackItalic.woff2 differ diff --git a/fonts/inter/Inter-Bold.woff b/fonts/inter/Inter-Bold.woff new file mode 100644 index 00000000..eaf3d4bf Binary files /dev/null and b/fonts/inter/Inter-Bold.woff differ diff --git a/fonts/inter/Inter-Bold.woff2 b/fonts/inter/Inter-Bold.woff2 new file mode 100644 index 00000000..2846f29c Binary files /dev/null and b/fonts/inter/Inter-Bold.woff2 differ diff --git a/fonts/inter/Inter-BoldItalic.woff b/fonts/inter/Inter-BoldItalic.woff new file mode 100644 index 00000000..32750761 Binary files /dev/null and b/fonts/inter/Inter-BoldItalic.woff differ diff --git a/fonts/inter/Inter-BoldItalic.woff2 b/fonts/inter/Inter-BoldItalic.woff2 new file mode 100644 index 00000000..0b1fe8e1 Binary files /dev/null and b/fonts/inter/Inter-BoldItalic.woff2 differ diff --git a/fonts/inter/Inter-ExtraBold.woff b/fonts/inter/Inter-ExtraBold.woff new file mode 100644 index 00000000..c2c17ede Binary files /dev/null and b/fonts/inter/Inter-ExtraBold.woff differ diff --git a/fonts/inter/Inter-ExtraBold.woff2 b/fonts/inter/Inter-ExtraBold.woff2 new file mode 100644 index 00000000..c24c2bdc Binary files /dev/null and b/fonts/inter/Inter-ExtraBold.woff2 differ diff --git a/fonts/inter/Inter-ExtraBoldItalic.woff b/fonts/inter/Inter-ExtraBoldItalic.woff new file mode 100644 index 00000000..c42f7052 Binary files /dev/null and b/fonts/inter/Inter-ExtraBoldItalic.woff differ diff --git a/fonts/inter/Inter-ExtraBoldItalic.woff2 b/fonts/inter/Inter-ExtraBoldItalic.woff2 new file mode 100644 index 00000000..4a81dc79 Binary files /dev/null and b/fonts/inter/Inter-ExtraBoldItalic.woff2 differ diff --git a/fonts/inter/Inter-ExtraLight.woff b/fonts/inter/Inter-ExtraLight.woff new file mode 100644 index 00000000..d0de5f39 Binary files /dev/null and b/fonts/inter/Inter-ExtraLight.woff differ diff --git a/fonts/inter/Inter-ExtraLight.woff2 b/fonts/inter/Inter-ExtraLight.woff2 new file mode 100644 index 00000000..f2ea706f Binary files /dev/null and b/fonts/inter/Inter-ExtraLight.woff2 differ diff --git a/fonts/inter/Inter-ExtraLightItalic.woff b/fonts/inter/Inter-ExtraLightItalic.woff new file mode 100644 index 00000000..81f1a28e Binary files /dev/null and b/fonts/inter/Inter-ExtraLightItalic.woff differ diff --git a/fonts/inter/Inter-ExtraLightItalic.woff2 b/fonts/inter/Inter-ExtraLightItalic.woff2 new file mode 100644 index 00000000..9af717ba Binary files /dev/null and b/fonts/inter/Inter-ExtraLightItalic.woff2 differ diff --git a/fonts/inter/Inter-Italic.woff b/fonts/inter/Inter-Italic.woff new file mode 100644 index 00000000..a806b382 Binary files /dev/null and b/fonts/inter/Inter-Italic.woff differ diff --git a/fonts/inter/Inter-Italic.woff2 b/fonts/inter/Inter-Italic.woff2 new file mode 100644 index 00000000..a619fc54 Binary files /dev/null and b/fonts/inter/Inter-Italic.woff2 differ diff --git a/fonts/inter/Inter-Light.woff b/fonts/inter/Inter-Light.woff new file mode 100644 index 00000000..c496464d Binary files /dev/null and b/fonts/inter/Inter-Light.woff differ diff --git a/fonts/inter/Inter-Light.woff2 b/fonts/inter/Inter-Light.woff2 new file mode 100644 index 00000000..bc4be665 Binary files /dev/null and b/fonts/inter/Inter-Light.woff2 differ diff --git a/fonts/inter/Inter-LightItalic.woff b/fonts/inter/Inter-LightItalic.woff new file mode 100644 index 00000000..f84a9de3 Binary files /dev/null and b/fonts/inter/Inter-LightItalic.woff differ diff --git a/fonts/inter/Inter-LightItalic.woff2 b/fonts/inter/Inter-LightItalic.woff2 new file mode 100644 index 00000000..842b2dfc Binary files /dev/null and b/fonts/inter/Inter-LightItalic.woff2 differ diff --git a/fonts/inter/Inter-Medium.woff b/fonts/inter/Inter-Medium.woff new file mode 100644 index 00000000..d546843f Binary files /dev/null and b/fonts/inter/Inter-Medium.woff differ diff --git a/fonts/inter/Inter-Medium.woff2 b/fonts/inter/Inter-Medium.woff2 new file mode 100644 index 00000000..f92498a2 Binary files /dev/null and b/fonts/inter/Inter-Medium.woff2 differ diff --git a/fonts/inter/Inter-MediumItalic.woff b/fonts/inter/Inter-MediumItalic.woff new file mode 100644 index 00000000..459a6568 Binary files /dev/null and b/fonts/inter/Inter-MediumItalic.woff differ diff --git a/fonts/inter/Inter-MediumItalic.woff2 b/fonts/inter/Inter-MediumItalic.woff2 new file mode 100644 index 00000000..0e3019f4 Binary files /dev/null and b/fonts/inter/Inter-MediumItalic.woff2 differ diff --git a/fonts/inter/Inter-Regular.woff b/fonts/inter/Inter-Regular.woff new file mode 100644 index 00000000..62d3a618 Binary files /dev/null and b/fonts/inter/Inter-Regular.woff differ diff --git a/fonts/inter/Inter-Regular.woff2 b/fonts/inter/Inter-Regular.woff2 new file mode 100644 index 00000000..6c2b6893 Binary files /dev/null and b/fonts/inter/Inter-Regular.woff2 differ diff --git a/fonts/inter/Inter-SemiBold.woff b/fonts/inter/Inter-SemiBold.woff new file mode 100644 index 00000000..a815f43a Binary files /dev/null and b/fonts/inter/Inter-SemiBold.woff differ diff --git a/fonts/inter/Inter-SemiBold.woff2 b/fonts/inter/Inter-SemiBold.woff2 new file mode 100644 index 00000000..611e90c9 Binary files /dev/null and b/fonts/inter/Inter-SemiBold.woff2 differ diff --git a/fonts/inter/Inter-SemiBoldItalic.woff b/fonts/inter/Inter-SemiBoldItalic.woff new file mode 100644 index 00000000..909e43a9 Binary files /dev/null and b/fonts/inter/Inter-SemiBoldItalic.woff differ diff --git a/fonts/inter/Inter-SemiBoldItalic.woff2 b/fonts/inter/Inter-SemiBoldItalic.woff2 new file mode 100644 index 00000000..545685bd Binary files /dev/null and b/fonts/inter/Inter-SemiBoldItalic.woff2 differ diff --git a/fonts/inter/Inter-Thin.woff b/fonts/inter/Inter-Thin.woff new file mode 100644 index 00000000..62bc58cd Binary files /dev/null and b/fonts/inter/Inter-Thin.woff differ diff --git a/fonts/inter/Inter-Thin.woff2 b/fonts/inter/Inter-Thin.woff2 new file mode 100644 index 00000000..abbc3a5c Binary files /dev/null and b/fonts/inter/Inter-Thin.woff2 differ diff --git a/fonts/inter/Inter-ThinItalic.woff b/fonts/inter/Inter-ThinItalic.woff new file mode 100644 index 00000000..700a7f06 Binary files /dev/null and b/fonts/inter/Inter-ThinItalic.woff differ diff --git a/fonts/inter/Inter-ThinItalic.woff2 b/fonts/inter/Inter-ThinItalic.woff2 new file mode 100644 index 00000000..ab0b2002 Binary files /dev/null and b/fonts/inter/Inter-ThinItalic.woff2 differ diff --git a/fonts/inter/Inter-italic.var.woff2 b/fonts/inter/Inter-italic.var.woff2 new file mode 100644 index 00000000..b826d5af Binary files /dev/null and b/fonts/inter/Inter-italic.var.woff2 differ diff --git a/fonts/inter/Inter-roman.var.woff2 b/fonts/inter/Inter-roman.var.woff2 new file mode 100644 index 00000000..6a256a06 Binary files /dev/null and b/fonts/inter/Inter-roman.var.woff2 differ diff --git a/fonts/intervar/Inter.var.woff2 b/fonts/intervar/Inter.var.woff2 new file mode 100644 index 00000000..365eedc5 Binary files /dev/null and b/fonts/intervar/Inter.var.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-Bold.woff2 b/fonts/jetbrainsmono/JetBrainsMono-Bold.woff2 new file mode 100644 index 00000000..023512c0 Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-Bold.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-BoldItalic.woff2 b/fonts/jetbrainsmono/JetBrainsMono-BoldItalic.woff2 new file mode 100644 index 00000000..f3e87a35 Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-BoldItalic.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-ExtraBold.woff2 b/fonts/jetbrainsmono/JetBrainsMono-ExtraBold.woff2 new file mode 100644 index 00000000..a8b78a9c Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-ExtraBold.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-ExtraBoldItalic.woff2 b/fonts/jetbrainsmono/JetBrainsMono-ExtraBoldItalic.woff2 new file mode 100644 index 00000000..b54a2d5b Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-ExtraBoldItalic.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-ExtraLight.woff2 b/fonts/jetbrainsmono/JetBrainsMono-ExtraLight.woff2 new file mode 100644 index 00000000..edd6a68c Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-ExtraLight.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-ExtraLightItalic.woff2 b/fonts/jetbrainsmono/JetBrainsMono-ExtraLightItalic.woff2 new file mode 100644 index 00000000..2a02a18e Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-ExtraLightItalic.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-Italic.woff2 b/fonts/jetbrainsmono/JetBrainsMono-Italic.woff2 new file mode 100644 index 00000000..e8eeb4b8 Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-Italic.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-Light.woff2 b/fonts/jetbrainsmono/JetBrainsMono-Light.woff2 new file mode 100644 index 00000000..459bacf4 Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-Light.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-LightItalic.woff2 b/fonts/jetbrainsmono/JetBrainsMono-LightItalic.woff2 new file mode 100644 index 00000000..352f5d95 Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-LightItalic.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-Medium.woff2 b/fonts/jetbrainsmono/JetBrainsMono-Medium.woff2 new file mode 100644 index 00000000..484c9e64 Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-Medium.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-MediumItalic.woff2 b/fonts/jetbrainsmono/JetBrainsMono-MediumItalic.woff2 new file mode 100644 index 00000000..e1279949 Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-MediumItalic.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-Regular.woff2 b/fonts/jetbrainsmono/JetBrainsMono-Regular.woff2 new file mode 100644 index 00000000..8c862e33 Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-Regular.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-SemiBold.woff2 b/fonts/jetbrainsmono/JetBrainsMono-SemiBold.woff2 new file mode 100644 index 00000000..fce8cd80 Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-SemiBold.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-SemiBoldItalic.woff2 b/fonts/jetbrainsmono/JetBrainsMono-SemiBoldItalic.woff2 new file mode 100644 index 00000000..a14851f6 Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-SemiBoldItalic.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-Thin.woff2 b/fonts/jetbrainsmono/JetBrainsMono-Thin.woff2 new file mode 100644 index 00000000..7c612787 Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-Thin.woff2 differ diff --git a/fonts/jetbrainsmono/JetBrainsMono-ThinItalic.woff2 b/fonts/jetbrainsmono/JetBrainsMono-ThinItalic.woff2 new file mode 100644 index 00000000..0676ba8a Binary files /dev/null and b/fonts/jetbrainsmono/JetBrainsMono-ThinItalic.woff2 differ diff --git a/img/Rollchains-Logo-RC-Black.svg b/img/Rollchains-Logo-RC-Black.svg new file mode 100644 index 00000000..3a376c48 --- /dev/null +++ b/img/Rollchains-Logo-RC-Black.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 209.36 158.72"><defs><style>.cls-1{stroke-width:0px;}</style></defs><g id="Layer_1-2"><path class="cls-1" d="M187.77,150.84c-1.92-.07-3.83-.38-5.74-.7-.88-.14-1.76-.29-2.52-.39-10.81-2.03-21.35-6.79-30.5-13.78-17.87-13.36-28.85-35.73-28.63-58.4.07-22.67,11.31-44.91,29.36-58.06,9.19-6.89,19.78-11.51,30.58-13.37l1.66-.26c2.31-.36,4.49-.71,6.74-.75l20.59-.22V0h-13l-7.76.22c-2.51.05-4.97.44-7.34.82l-1.67.26c-11.61,1.99-22.94,6.93-32.72,14.26-14.59,10.63-25.02,26.83-29.25,44.57-6.24-22.37-22.63-41.91-44.18-50.98-7.48-3.13-14.81-5.1-21.76-5.88-3.91-.48-8.79-.58-10.73-.59H.08v4.91h40.8c1.83.02,6.49.12,10.18.56,6.51.73,13.38,2.6,20.43,5.54,26.18,11.02,44.25,38.57,43.92,66.98h.09c.39,12.11,3.74,24.04,9.47,34.62-8.71-.29-17.16-3.93-23.32-10.1-6.45-6.43-10.14-15.34-10.13-24.46.22-19.13-11.96-37.71-29.66-45.18-4.98-2.01-9.46-3.22-13.69-3.68-2.42-.25-4.41-.34-7.28-.38H.08v4.91h40.78c2.65.05,4.52.12,6.8.36,3.77.4,7.82,1.5,12.34,3.33,15.84,6.69,26.77,23.33,26.62,40.48h-.02c0,10.4,4.23,20.76,11.59,28.1,7.34,7.35,17.52,11.57,27.92,11.57v-2.92c5.09,8.79,11.85,16.56,19.93,22.6,9.74,7.43,20.99,12.5,32.66,14.71l2.52.39c2.06.34,4.19.68,6.32.76,2.49.13,5.36.28,7.26.28.3,0,.58,0,.82,0h12.99v-4.91h-13.07c-1.82.07-5.01-.12-7.79-.27Z"/><path class="cls-1" d="M181.28,140.58c-9.39-1.77-18.58-5.92-26.59-12.02-15.58-11.65-25.15-31.16-24.97-50.94.08-19.78,9.89-39.17,25.62-50.64,8.04-6.03,17.27-10.06,26.75-11.68,5.34-1.02,11.71-1.06,14.23-1.06h12.99v-4.91h-12.96c-2.66-.02-9.41.04-15.14,1.14-10.19,1.74-20.15,6.08-28.79,12.55-16.94,12.35-27.52,33.26-27.61,54.56-.19,21.3,10.13,42.33,26.93,54.89,8.59,6.54,18.49,11.01,28.63,12.92,5.86,1.13,11.98,1.28,14.77,1.28h13.49v-4.91h-13.01c-2.4.05-8.52-.07-14.34-1.19Z"/><path class="cls-1" d="M201.36,132.04c-6.02.05-12.27.12-18.23-1.02-7.91-1.47-15.69-4.99-22.52-10.19-13.19-9.84-21.3-26.38-21.16-43.16.08-16.77,8.4-33.21,21.72-42.91,6.84-5.12,14.65-8.54,22.61-9.88,5.91-1.02,12.07-.96,18.06-.91,2.5.03,5.01.05,7.52,0l-.1-4.91c-2.47.04-4.92.04-7.38,0-6.2-.04-12.59-.12-18.93.99-8.71,1.47-17.26,5.2-24.7,10.77-14.54,10.58-23.62,28.52-23.71,46.83-.15,18.3,8.72,36.35,23.12,47.11,7.42,5.65,15.91,9.49,24.56,11.09,5.02.96,10.07,1.13,15.03,1.13,1.4,0,2.78-.02,4.16-.03,2.4-.03,4.78-.05,7.17,0l.1-4.91c-2.45-.05-4.89-.04-7.32,0Z"/><path class="cls-1" d="M184.68,29.62c-7.23,1.21-14.37,4.32-20.6,8.98-12.12,8.83-19.71,23.81-19.82,39.11-.09,15.3,7.32,30.39,19.32,39.34,6.22,4.72,13.31,7.93,20.53,9.27,3.8.65,6.98.91,11.28.91h13.23v-4.91h-13c-4.28,0-7.07-.21-10.65-.83-6.44-1.19-12.81-4.08-18.44-8.36-10.79-8.05-17.44-21.61-17.36-35.38.1-13.77,6.91-27.25,17.82-35.19,5.64-4.21,12.04-7,18.51-8.09,3.43-.58,6.24-.76,10.82-.76h12.99v-4.91h-12.98c-4.85-.03-7.96.19-11.65.83Z"/><path class="cls-1" d="M191.11,38.66c-1.09.04-2.18.14-3.26.32-.44.08-.87.14-1.43.21-5.76.95-11.48,3.44-16.52,7.21-9.84,7.16-15.79,18.88-15.91,31.38-.04,12.49,5.76,24.29,15.51,31.56,5.04,3.81,10.72,6.38,16.65,7.45.51.05,1.01.13,1.52.23.97.17,1.85.17,2.89.33l1.46.07c.8.05,1.66.11,2.89.11.23,0,.47,0,.72,0h12.99v-4.91h-13.03c-1.47,0-2.42-.03-3.28-.09-.55-.04-1.07-.07-1.72-.08-.72,0-1.38-.12-2.06-.25-.65-.12-1.3-.23-1.72-.26-4.96-.91-9.92-3.16-14.36-6.51-8.4-6.26-13.59-16.84-13.55-27.6.11-10.77,5.43-21.29,13.91-27.46,4.44-3.31,9.42-5.49,14.29-6.29.52-.06,1.03-.14,1.55-.23.78-.12,1.46-.32,2.55-.25l18.1-.14v-4.91h-13l-5.2.14Z"/><path class="cls-1" d="M49.96,17.41c5.66.62,11.49,2.21,17.8,4.82,22.84,9.63,38.59,33.66,38.31,58.42l4.91.06c.3-26.71-16.68-52.62-41.33-63.02-6.76-2.79-13.03-4.48-19.14-5.15-2.59-.31-5.82-.49-9.61-.53H.08v4.91h40.8c3.54.04,6.67.21,9.08.49Z"/><path class="cls-1" d="M48.81,27.07c4.74.52,9.68,1.86,15.08,4.08,19.35,8.16,32.7,28.51,32.47,49.5l4.91.06c.25-22.92-14.33-45.16-35.49-54.09-5.85-2.4-11.23-3.85-16.44-4.42-4.55-.49-9.12-.47-13.51-.46H.08v4.91h35.76c4.3.03,8.7-.02,12.97.43Z"/><path class="cls-1" d="M76.9,80.65c-.03,12.89,5.57,25.52,14.69,34.59,9.05,9.1,21.59,14.31,34.43,14.31h.11v-4.91h-.11c-11.53,0-22.81-4.68-30.95-12.88-8.2-8.15-13.28-19.52-13.25-31.09h0c.16-15.33-9.61-30.22-23.83-36.23-4.17-1.65-7.65-2.59-10.98-2.94-2.05-.19-3.21-.27-6.1-.32H.08l-.08,77.75h.17c1.92,0,3.72-1.25,4.19-2.63.44-.64.5-1.27.52-1.54l.08-68.68h4.82v67.81s-.04.83-.04.83c-.1.94-.23,1.93-.65,2.89-1.35,3.57-5.03,6.12-8.8,6.12h-.15l-.09,4.91h.24c5.83,0,11.31-3.79,13.34-9.17.65-1.46.87-2.97,1-4.36l.06-69.04h4.82v64.26c.03,3.68.06,7.48-1.37,10.82-2.71,7.17-10.14,12.3-17.75,12.3H.13l-.08,4.91h.35c9.73,0,18.88-6.32,22.29-15.38,1.79-4.18,1.77-8.7,1.73-12.68V46.1s4.81,0,4.81,0v67.86s-.1,2.25-.1,2.25c-.27,3.19-.91,6.03-1.94,8.54-4.05,10.75-15.25,18.47-26.72,18.47H.13l-.07,4.91h.43c13.65,0,26.48-8.85,31.27-21.59,1.19-2.9,1.96-6.24,2.27-10.02l.1-70.42h4.43v63.1l-.12,7.7c-.34,4.12-1.18,7.88-2.56,11.25-5.35,14.2-20.15,24.39-35.31,24.39H.13l-.07,4.91h.54c17.39,0,33.74-11.27,39.86-27.51,1.54-3.78,2.51-8.04,2.89-12.74l.13-71.04c1.04.05,1.91.11,3.03.22,2.84.3,5.92,1.12,9.6,2.59,12.39,5.24,20.94,18.26,20.78,31.66Z"/><path class="cls-1" d="M125.94,134.36c-14.08,0-27.83-5.72-37.76-15.73-10.03-9.95-15.76-23.78-15.71-37.92l-4.91-.02c-.06,15.46,6.2,30.55,17.15,41.41,10.83,10.92,25.85,17.16,41.23,17.16h.19l-.02-4.91h-.17Z"/><path class="cls-1" d="M125.88,144.09c-16.4,0-33.05-6.93-44.59-18.58-11.69-11.58-18.62-28.32-18.55-44.8l-4.91-.02c-.08,18.03,7.22,35.63,19.99,48.29,12.61,12.73,30.11,20.01,48.04,20.01h.26l-.02-4.91h-.23Z"/><path class="cls-1" d="M125.78,153.81c-18.9,0-38.07-7.98-51.36-21.42-13.49-13.36-21.49-32.67-21.4-51.68l-4.91-.02c-.1,20.29,8.45,40.92,22.84,55.17,14.18,14.32,34.66,22.85,54.84,22.85h.35l-.02-4.91h-.33Z"/></g></svg> \ No newline at end of file diff --git a/img/Rollchains-Logo-RC-White.svg b/img/Rollchains-Logo-RC-White.svg new file mode 100644 index 00000000..d8c3dbcd --- /dev/null +++ b/img/Rollchains-Logo-RC-White.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><svg id="Layer_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 209.36 158.72"><defs><style>.cls-1{fill:#fff;stroke-width:0px;}</style></defs><g id="Layer_1-2"><path class="cls-1" d="M187.77,150.84c-1.92-.07-3.83-.38-5.74-.7-.88-.14-1.76-.29-2.52-.39-10.81-2.03-21.35-6.79-30.5-13.78-17.87-13.36-28.85-35.73-28.63-58.4.07-22.67,11.31-44.91,29.36-58.06,9.19-6.89,19.78-11.51,30.58-13.37l1.66-.26c2.31-.36,4.49-.71,6.74-.75l20.59-.22V0h-13l-7.76.22c-2.51.05-4.97.44-7.34.82l-1.67.26c-11.61,1.99-22.94,6.93-32.72,14.26-14.59,10.63-25.02,26.83-29.25,44.57-6.24-22.37-22.63-41.91-44.18-50.98-7.48-3.13-14.81-5.1-21.76-5.88-3.91-.48-8.79-.58-10.73-.59H.08v4.91h40.8c1.83.02,6.49.12,10.18.56,6.51.73,13.38,2.6,20.43,5.54,26.18,11.02,44.25,38.57,43.92,66.98h.09c.39,12.11,3.74,24.04,9.47,34.62-8.71-.29-17.16-3.93-23.32-10.1-6.45-6.43-10.14-15.34-10.13-24.46.22-19.13-11.96-37.71-29.66-45.18-4.98-2.01-9.46-3.22-13.69-3.68-2.42-.25-4.41-.34-7.28-.38H.08v4.91h40.78c2.65.05,4.52.12,6.8.36,3.77.4,7.82,1.5,12.34,3.33,15.84,6.69,26.77,23.33,26.62,40.48h-.02c0,10.4,4.23,20.76,11.59,28.1,7.34,7.35,17.52,11.57,27.92,11.57v-2.92c5.09,8.79,11.85,16.56,19.93,22.6,9.74,7.43,20.99,12.5,32.66,14.71l2.52.39c2.06.34,4.19.68,6.32.76,2.49.13,5.36.28,7.26.28.3,0,.58,0,.82,0h12.99v-4.91h-13.07c-1.82.07-5.01-.12-7.79-.27Z"/><path class="cls-1" d="M181.28,140.58c-9.39-1.77-18.58-5.92-26.59-12.02-15.58-11.65-25.15-31.16-24.97-50.94.08-19.78,9.89-39.17,25.62-50.64,8.04-6.03,17.27-10.06,26.75-11.68,5.34-1.02,11.71-1.06,14.23-1.06h12.99v-4.91h-12.96c-2.66-.02-9.41.04-15.14,1.14-10.19,1.74-20.15,6.08-28.79,12.55-16.94,12.35-27.52,33.26-27.61,54.56-.19,21.3,10.13,42.33,26.93,54.89,8.59,6.54,18.49,11.01,28.63,12.92,5.86,1.13,11.98,1.28,14.77,1.28h13.49v-4.91h-13.01c-2.4.05-8.52-.07-14.34-1.19Z"/><path class="cls-1" d="M201.36,132.04c-6.02.05-12.27.12-18.23-1.02-7.91-1.47-15.69-4.99-22.52-10.19-13.19-9.84-21.3-26.38-21.16-43.16.08-16.77,8.4-33.21,21.72-42.91,6.84-5.12,14.65-8.54,22.61-9.88,5.91-1.02,12.07-.96,18.06-.91,2.5.03,5.01.05,7.52,0l-.1-4.91c-2.47.04-4.92.04-7.38,0-6.2-.04-12.59-.12-18.93.99-8.71,1.47-17.26,5.2-24.7,10.77-14.54,10.58-23.62,28.52-23.71,46.83-.15,18.3,8.72,36.35,23.12,47.11,7.42,5.65,15.91,9.49,24.56,11.09,5.02.96,10.07,1.13,15.03,1.13,1.4,0,2.78-.02,4.16-.03,2.4-.03,4.78-.05,7.17,0l.1-4.91c-2.45-.05-4.89-.04-7.32,0Z"/><path class="cls-1" d="M184.68,29.62c-7.23,1.21-14.37,4.32-20.6,8.98-12.12,8.83-19.71,23.81-19.82,39.11-.09,15.3,7.32,30.39,19.32,39.34,6.22,4.72,13.31,7.93,20.53,9.27,3.8.65,6.98.91,11.28.91h13.23v-4.91h-13c-4.28,0-7.07-.21-10.65-.83-6.44-1.19-12.81-4.08-18.44-8.36-10.79-8.05-17.44-21.61-17.36-35.38.1-13.77,6.91-27.25,17.82-35.19,5.64-4.21,12.04-7,18.51-8.09,3.43-.58,6.24-.76,10.82-.76h12.99v-4.91h-12.98c-4.85-.03-7.96.19-11.65.83Z"/><path class="cls-1" d="M191.11,38.66c-1.09.04-2.18.14-3.26.32-.44.08-.87.14-1.43.21-5.76.95-11.48,3.44-16.52,7.21-9.84,7.16-15.79,18.88-15.91,31.38-.04,12.49,5.76,24.29,15.51,31.56,5.04,3.81,10.72,6.38,16.65,7.45.51.05,1.01.13,1.52.23.97.17,1.85.17,2.89.33l1.46.07c.8.05,1.66.11,2.89.11.23,0,.47,0,.72,0h12.99v-4.91h-13.03c-1.47,0-2.42-.03-3.28-.09-.55-.04-1.07-.07-1.72-.08-.72,0-1.38-.12-2.06-.25-.65-.12-1.3-.23-1.72-.26-4.96-.91-9.92-3.16-14.36-6.51-8.4-6.26-13.59-16.84-13.55-27.6.11-10.77,5.43-21.29,13.91-27.46,4.44-3.31,9.42-5.49,14.29-6.29.52-.06,1.03-.14,1.55-.23.78-.12,1.46-.32,2.55-.25l18.1-.14v-4.91h-13l-5.2.14Z"/><path class="cls-1" d="M49.96,17.41c5.66.62,11.49,2.21,17.8,4.82,22.84,9.63,38.59,33.66,38.31,58.42l4.91.06c.3-26.71-16.68-52.62-41.33-63.02-6.76-2.79-13.03-4.48-19.14-5.15-2.59-.31-5.82-.49-9.61-.53H.08v4.91h40.8c3.54.04,6.67.21,9.08.49Z"/><path class="cls-1" d="M48.81,27.07c4.74.52,9.68,1.86,15.08,4.08,19.35,8.16,32.7,28.51,32.47,49.5l4.91.06c.25-22.92-14.33-45.16-35.49-54.09-5.85-2.4-11.23-3.85-16.44-4.42-4.55-.49-9.12-.47-13.51-.46H.08v4.91h35.76c4.3.03,8.7-.02,12.97.43Z"/><path class="cls-1" d="M76.9,80.65c-.03,12.89,5.57,25.52,14.69,34.59,9.05,9.1,21.59,14.31,34.43,14.31h.11v-4.91h-.11c-11.53,0-22.81-4.68-30.95-12.88-8.2-8.15-13.28-19.52-13.25-31.09h0c.16-15.33-9.61-30.22-23.83-36.23-4.17-1.65-7.65-2.59-10.98-2.94-2.05-.19-3.21-.27-6.1-.32H.08l-.08,77.75h.17c1.92,0,3.72-1.25,4.19-2.63.44-.64.5-1.27.52-1.54l.08-68.68h4.82v67.81s-.04.83-.04.83c-.1.94-.23,1.93-.65,2.89-1.35,3.57-5.03,6.12-8.8,6.12h-.15l-.09,4.91h.24c5.83,0,11.31-3.79,13.34-9.17.65-1.46.87-2.97,1-4.36l.06-69.04h4.82v64.26c.03,3.68.06,7.48-1.37,10.82-2.71,7.17-10.14,12.3-17.75,12.3H.13l-.08,4.91h.35c9.73,0,18.88-6.32,22.29-15.38,1.79-4.18,1.77-8.7,1.73-12.68V46.1s4.81,0,4.81,0v67.86s-.1,2.25-.1,2.25c-.27,3.19-.91,6.03-1.94,8.54-4.05,10.75-15.25,18.47-26.72,18.47H.13l-.07,4.91h.43c13.65,0,26.48-8.85,31.27-21.59,1.19-2.9,1.96-6.24,2.27-10.02l.1-70.42h4.43v63.1l-.12,7.7c-.34,4.12-1.18,7.88-2.56,11.25-5.35,14.2-20.15,24.39-35.31,24.39H.13l-.07,4.91h.54c17.39,0,33.74-11.27,39.86-27.51,1.54-3.78,2.51-8.04,2.89-12.74l.13-71.04c1.04.05,1.91.11,3.03.22,2.84.3,5.92,1.12,9.6,2.59,12.39,5.24,20.94,18.26,20.78,31.66Z"/><path class="cls-1" d="M125.94,134.36c-14.08,0-27.83-5.72-37.76-15.73-10.03-9.95-15.76-23.78-15.71-37.92l-4.91-.02c-.06,15.46,6.2,30.55,17.15,41.41,10.83,10.92,25.85,17.16,41.23,17.16h.19l-.02-4.91h-.17Z"/><path class="cls-1" d="M125.88,144.09c-16.4,0-33.05-6.93-44.59-18.58-11.69-11.58-18.62-28.32-18.55-44.8l-4.91-.02c-.08,18.03,7.22,35.63,19.99,48.29,12.61,12.73,30.11,20.01,48.04,20.01h.26l-.02-4.91h-.23Z"/><path class="cls-1" d="M125.78,153.81c-18.9,0-38.07-7.98-51.36-21.42-13.49-13.36-21.49-32.67-21.4-51.68l-4.91-.02c-.1,20.29,8.45,40.92,22.84,55.17,14.18,14.32,34.66,22.85,54.84,22.85h.35l-.02-4.91h-.33Z"/></g></svg> \ No newline at end of file diff --git a/img/ico-chevron.svg b/img/ico-chevron.svg new file mode 100644 index 00000000..3f8e8fac --- /dev/null +++ b/img/ico-chevron.svg @@ -0,0 +1,3 @@ +<svg width="10" height="6" viewBox="0 0 10 6" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M1 1L5 5L9 1" stroke="black" stroke-opacity="0.667" stroke-linecap="square"/> +</svg> diff --git a/img/icons/hi-coffee-icon.svg b/img/icons/hi-coffee-icon.svg new file mode 100644 index 00000000..eef25bd1 --- /dev/null +++ b/img/icons/hi-coffee-icon.svg @@ -0,0 +1,6 @@ +<svg width="24" height="23" viewBox="0 0 24 23" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M18.2031 7.2002H17.2031H1.20314C0.60314 7.2002 0.203125 7.6002 0.203125 8.2002V17.2002C0.203125 20.0002 2.40314 22.2002 5.20314 22.2002H13.2031C16.0031 22.2002 18.2031 20.0002 18.2031 17.2002C21.0031 17.2002 23.2031 15.0002 23.2031 12.2002C23.2031 9.4002 20.9031 7.2002 18.2031 7.2002ZM16.2031 17.2002C16.2031 18.9002 14.9031 20.2002 13.2031 20.2002H5.20314C3.50314 20.2002 2.20314 18.9002 2.20314 17.2002V9.2002H16.2031V17.2002ZM18.2031 15.2002V9.2002C19.9031 9.2002 21.2031 10.5002 21.2031 12.2002C21.2031 13.8002 19.8031 15.2002 18.2031 15.2002Z" fill="white"/> +<path d="M5.20312 5.2002C5.80313 5.2002 6.20312 4.8002 6.20312 4.2002V1.2002C6.20312 0.600195 5.80313 0.200195 5.20312 0.200195C4.60312 0.200195 4.20312 0.600195 4.20312 1.2002V4.2002C4.20312 4.7002 4.60312 5.2002 5.20312 5.2002Z" fill="white"/> +<path d="M9.20312 5.2002C9.80313 5.2002 10.2031 4.8002 10.2031 4.2002V1.2002C10.2031 0.600195 9.80313 0.200195 9.20312 0.200195C8.60312 0.200195 8.20312 0.600195 8.20312 1.2002V4.2002C8.20312 4.7002 8.60312 5.2002 9.20312 5.2002Z" fill="white"/> +<path d="M13.2031 5.2002C13.8031 5.2002 14.2031 4.8002 14.2031 4.2002V1.2002C14.2031 0.600195 13.8031 0.200195 13.2031 0.200195C12.6031 0.200195 12.2031 0.600195 12.2031 1.2002V4.2002C12.2031 4.7002 12.6031 5.2002 13.2031 5.2002Z" fill="white"/> +</svg> diff --git a/img/icons/hi-info-icon.svg b/img/icons/hi-info-icon.svg new file mode 100644 index 00000000..ca3ca627 --- /dev/null +++ b/img/icons/hi-info-icon.svg @@ -0,0 +1,5 @@ +<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +<path d="M12 16V12" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +<path d="M12 8H12.01" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +</svg> \ No newline at end of file diff --git a/img/icons/hi-note-icon.svg b/img/icons/hi-note-icon.svg new file mode 100644 index 00000000..0c193026 --- /dev/null +++ b/img/icons/hi-note-icon.svg @@ -0,0 +1,3 @@ +<svg width="17" height="21" viewBox="0 0 17 21" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M5.30078 14.5H11.3008C11.9008 14.5 12.3008 14.9 12.3008 15.5C12.3008 16.1 11.9008 16.5 11.3008 16.5H5.30078C4.70078 16.5 4.30078 16.1 4.30078 15.5C4.30078 15 4.70078 14.5 5.30078 14.5ZM5.30078 10.5H11.3008C11.9008 10.5 12.3008 10.9 12.3008 11.5C12.3008 12.1 11.9008 12.5 11.3008 12.5H5.30078C4.70078 12.5 4.30078 12.1 4.30078 11.5C4.30078 11 4.70078 10.5 5.30078 10.5ZM10.3008 0.5H2.30078C1.20078 0.5 0.300781 1.4 0.300781 2.5V18.5C0.300781 19.6 1.20078 20.5 2.30078 20.5H14.3008C15.4008 20.5 16.3008 19.6 16.3008 18.5V6.5L10.3008 0.5ZM14.3008 18.5H2.30078V2.5H9.30078V5.5C9.30078 6.6 10.2008 7.5 11.3008 7.5H14.3008V18.5Z" fill="#1A1A1A"/> +</svg> diff --git a/img/icons/hi-prerequisite-icon.svg b/img/icons/hi-prerequisite-icon.svg new file mode 100644 index 00000000..fb4c4d69 --- /dev/null +++ b/img/icons/hi-prerequisite-icon.svg @@ -0,0 +1,6 @@ +<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M8.30077 9.2002H1.30078C0.700781 9.2002 0.300781 8.8002 0.300781 8.2002V1.2002C0.300781 0.600195 0.700781 0.200195 1.30078 0.200195H8.30077C8.90077 0.200195 9.30077 0.600195 9.30077 1.2002V8.2002C9.30077 8.7002 8.80077 9.2002 8.30077 9.2002ZM2.30077 7.2002H7.30077V2.2002H2.30077V7.2002Z" fill="#200F31"/> +<path d="M19.3008 9.2002H12.3008C11.7008 9.2002 11.3008 8.8002 11.3008 8.2002V1.2002C11.3008 0.600195 11.7008 0.200195 12.3008 0.200195H19.3008C19.9008 0.200195 20.3008 0.600195 20.3008 1.2002V8.2002C20.3008 8.7002 19.8008 9.2002 19.3008 9.2002ZM13.3008 7.2002H18.3008V2.2002H13.3008V7.2002Z" fill="#200F31"/> +<path d="M19.3008 20.2002H12.3008C11.7008 20.2002 11.3008 19.8002 11.3008 19.2002V12.2002C11.3008 11.6002 11.7008 11.2002 12.3008 11.2002H19.3008C19.9008 11.2002 20.3008 11.6002 20.3008 12.2002V19.2002C20.3008 19.7002 19.8008 20.2002 19.3008 20.2002ZM13.3008 18.2002H18.3008V13.2002H13.3008V18.2002Z" fill="#200F31"/> +<path d="M8.30077 20.2002H1.30078C0.700781 20.2002 0.300781 19.8002 0.300781 19.2002V12.2002C0.300781 11.6002 0.700781 11.2002 1.30078 11.2002H8.30077C8.90077 11.2002 9.30077 11.6002 9.30077 12.2002V19.2002C9.30077 19.7002 8.80077 20.2002 8.30077 20.2002ZM2.30077 18.2002H7.30077V13.2002H2.30077V18.2002Z" fill="#200F31"/> +</svg> diff --git a/img/icons/hi-reading-icon.svg b/img/icons/hi-reading-icon.svg new file mode 100644 index 00000000..3662b303 --- /dev/null +++ b/img/icons/hi-reading-icon.svg @@ -0,0 +1,3 @@ +<svg width="21" height="23" viewBox="0 0 21 23" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M9.30198 22.2001C9.20198 22.2001 9.00198 22.2001 8.90198 22.1001C8.50198 21.9001 8.30198 21.5001 8.30198 21.1001L9.202 14.2001H1.30199C0.901993 14.2001 0.601984 14.0001 0.401984 13.6001C0.201984 13.2001 0.30199 12.8001 0.50199 12.5001L10.502 0.500138C10.802 0.200138 11.302 0.000134476 11.702 0.200134C12.102 0.400134 12.302 0.800135 12.302 1.20013L11.402 8.10014H19.302C19.702 8.10014 20.002 8.30013 20.202 8.70013C20.402 9.10013 20.302 9.50014 20.102 9.80014L10.102 21.8001C9.902 22.1001 9.60198 22.2001 9.30198 22.2001ZM3.40198 12.2001H10.302C10.602 12.2001 10.902 12.3001 11.002 12.5001C11.202 12.7001 11.302 13.0001 11.202 13.3001L10.602 17.9001L17.002 10.2001H10.102C9.802 10.2001 9.50198 10.1001 9.40198 9.90014C9.20198 9.70014 9.102 9.40014 9.202 9.10014L9.80198 4.50014L3.40198 12.2001Z" fill="white"/> +</svg> diff --git a/img/icons/hi-star-icon.svg b/img/icons/hi-star-icon.svg new file mode 100644 index 00000000..0811b964 --- /dev/null +++ b/img/icons/hi-star-icon.svg @@ -0,0 +1,3 @@ +<svg width="23" height="22" viewBox="0 0 23 22" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M17.5031 21.2003C17.3031 21.2003 17.2031 21.2003 17.0031 21.1003L11.3031 18.1003L5.60313 21.1003C5.30313 21.3003 4.90312 21.2003 4.50312 21.0003C4.20312 20.8003 4.00313 20.4003 4.10313 20.0003L5.20313 13.6003L0.603128 9.10029C0.303128 8.80029 0.203125 8.40029 0.303125 8.10029C0.403125 7.70029 0.703128 7.5003 1.10313 7.4003L7.50312 6.5003L10.4031 0.700293C10.7031 0.000292957 11.9031 0.000292957 12.2031 0.700293L15.1031 6.5003L21.5031 7.4003C21.9031 7.5003 22.2031 7.70029 22.3031 8.10029C22.4031 8.50029 22.3031 8.90029 22.0031 9.10029L17.4031 13.6003L18.5031 20.0003C18.6031 20.4003 18.4031 20.8003 18.1031 21.0003C17.9031 21.1003 17.7031 21.2003 17.5031 21.2003ZM3.40312 9.10029L6.90312 12.6003C7.10312 12.8003 7.20313 13.2003 7.20313 13.5003L6.40312 18.4003L10.8031 16.1003C11.1031 15.9003 11.4031 15.9003 11.7031 16.1003L16.1031 18.4003L15.3031 13.5003C15.2031 13.2003 15.4031 12.8003 15.6031 12.6003L19.1031 9.10029L14.2031 8.4003C13.9031 8.4003 13.6031 8.1003 13.4031 7.9003L11.2031 3.5003L9.00312 7.9003C8.90312 8.2003 8.60313 8.4003 8.20313 8.4003L3.40312 9.10029Z" fill="white"/> +</svg> diff --git a/img/icons/hi-target-icon.svg b/img/icons/hi-target-icon.svg new file mode 100644 index 00000000..98d94e8b --- /dev/null +++ b/img/icons/hi-target-icon.svg @@ -0,0 +1,3 @@ +<svg width="23" height="23" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M11.3008 0.200195C5.20077 0.200195 0.300781 5.1002 0.300781 11.2002C0.300781 17.3002 5.20077 22.2002 11.3008 22.2002C17.4008 22.2002 22.3008 17.3002 22.3008 11.2002C22.3008 5.1002 17.4008 0.200195 11.3008 0.200195ZM12.3008 20.1002V17.2002C12.3008 16.6002 11.9008 16.2002 11.3008 16.2002C10.7008 16.2002 10.3008 16.6002 10.3008 17.2002V20.1002C6.10077 19.6002 2.80077 16.3002 2.40077 12.2002H5.30077C5.90077 12.2002 6.30077 11.8002 6.30077 11.2002C6.30077 10.6002 5.90077 10.2002 5.30077 10.2002H2.40077C2.90077 6.0002 6.20077 2.7002 10.3008 2.3002V5.2002C10.3008 5.8002 10.7008 6.2002 11.3008 6.2002C11.9008 6.2002 12.3008 5.8002 12.3008 5.2002V2.3002C16.5008 2.8002 19.8008 6.1002 20.2008 10.2002H17.3008C16.7008 10.2002 16.3008 10.6002 16.3008 11.2002C16.3008 11.8002 16.7008 12.2002 17.3008 12.2002H20.2008C19.8008 16.4002 16.5008 19.7002 12.3008 20.1002Z" fill="white"/> +</svg> diff --git a/img/icons/hi-tip-icon.svg b/img/icons/hi-tip-icon.svg new file mode 100644 index 00000000..96fbbb37 --- /dev/null +++ b/img/icons/hi-tip-icon.svg @@ -0,0 +1,3 @@ +<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M14.5002 21.2H11.0002M18.7002 8.70001C18.7002 7.91208 18.545 7.13187 18.2435 6.40391C17.9419 5.67596 17.5 5.01452 16.9428 4.45737C16.3857 3.90022 15.7242 3.45826 14.9963 3.15674C14.2683 2.85521 13.4881 2.70001 12.7002 2.70001C11.9123 2.70001 11.132 2.85521 10.4041 3.15674C9.67614 3.45826 9.01471 3.90022 8.45755 4.45737C7.9004 5.01452 7.45845 5.67596 7.15692 6.40391C6.85539 7.13187 6.7002 7.91208 6.7002 8.70001C6.7002 11 9.1002 13.1 9.7002 14.5C10.7002 16.3 10.7002 17.7 10.7002 17.7H14.7002C14.7002 17.7 14.7002 16.3 15.7002 14.5C16.4002 13.1 18.7002 11.3 18.7002 8.70001Z" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +</svg> \ No newline at end of file diff --git a/img/icons/hi-warn-icon.svg b/img/icons/hi-warn-icon.svg new file mode 100644 index 00000000..9baeb30e --- /dev/null +++ b/img/icons/hi-warn-icon.svg @@ -0,0 +1,5 @@ +<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M10.2898 3.85999L1.81978 18C1.64514 18.3024 1.55274 18.6453 1.55177 18.9945C1.55079 19.3437 1.64127 19.6871 1.8142 19.9905C1.98714 20.2939 2.2365 20.5467 2.53748 20.7238C2.83847 20.9009 3.18058 20.9962 3.52978 21H20.4698C20.819 20.9962 21.1611 20.9009 21.4621 20.7238C21.7631 20.5467 22.0124 20.2939 22.1854 19.9905C22.3583 19.6871 22.4488 19.3437 22.4478 18.9945C22.4468 18.6453 22.3544 18.3024 22.1798 18L13.7098 3.85999C13.5315 3.5661 13.2805 3.32311 12.981 3.15447C12.6814 2.98584 12.3435 2.89725 11.9998 2.89725C11.656 2.89725 11.3181 2.98584 11.0186 3.15447C10.7191 3.32311 10.468 3.5661 10.2898 3.85999V3.85999Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +<path d="M12 9V13" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +<path d="M12 17H12.01" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> +</svg> \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..06342a9a --- /dev/null +++ b/index.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8"> + <meta http-equiv="refresh" content="0; url=/spawn/v0.50/"> + <link rel="canonical" href="/spawn/v0.50/" /> + </head> + <script> + window.location.href = '/spawn/v0.50/' + window.location.search + window.location.hash; + </script> +</html> \ No newline at end of file diff --git a/main/index.html b/main/index.html new file mode 100644 index 00000000..b1fadcac --- /dev/null +++ b/main/index.html @@ -0,0 +1,20 @@ +<!doctype html> +<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-intro" data-has-hydrated="false"> +<head> +<meta charset="UTF-8"> +<meta name="generator" content="Docusaurus v3.4.0"> +<title data-rh="true">Unreleased Docs Here | Spawn + + + + + + + +
Version: Next

Unreleased Docs Here

+ + + \ No newline at end of file diff --git a/main/search-index.json b/main/search-index.json new file mode 100644 index 00000000..419c0a6a --- /dev/null +++ b/main/search-index.json @@ -0,0 +1 @@ +[{"documents":[{"i":1,"t":"Unreleased Docs Here","u":"/spawn/main/","b":[]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[0,0.288,1,0.288,2,0.288]]],"invertedIndex":[["doc",{"_index":1,"t":{"1":{"position":[[11,4]]}}}],["here",{"_index":2,"t":{"1":{"position":[[16,4]]}}}],["unreleas",{"_index":0,"t":{"1":{"position":[[0,10]]}}}]],"pipeline":["stemmer"]}},{"documents":[],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[],"invertedIndex":[],"pipeline":["stemmer"]}},{"documents":[],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[],"invertedIndex":[],"pipeline":["stemmer"]}}] \ No newline at end of file diff --git a/search-index.json b/search-index.json new file mode 100644 index 00000000..2fc0bf7f --- /dev/null +++ b/search-index.json @@ -0,0 +1 @@ +[{"documents":[{"i":2,"t":"Command Line Client","u":"/spawn/v0.50/build/name-service-client/","b":["Build Your Application"]},{"i":8,"t":"Meet Spawn","u":"/spawn/v0.50/","b":[]},{"i":48,"t":"Save Storage Structure","u":"/spawn/v0.50/build/name-service-application/","b":["Build Your Application"]},{"i":52,"t":"Extra Challenges","u":"/spawn/v0.50/build/name-service-bonus/","b":["Build Your Application"]},{"i":57,"t":"Running your Application","u":"/spawn/v0.50/build/name-service-testnet/","b":["Build Your Application"]},{"i":65,"t":"IBC Name Service Module","u":"/spawn/v0.50/build/name-service-ibc-module/","b":["Build Your Application"]},{"i":91,"t":"Conclusion","u":"/spawn/v0.50/build/name-service-summary/","b":["Build Your Application"]},{"i":97,"t":"Overview","u":"/spawn/v0.50/build/name-service/","b":["Build Your Application"]},{"i":106,"t":"Set Data Structure","u":"/spawn/v0.50/build/name-service-structure/","b":["Build Your Application"]},{"i":114,"t":"IBC Demo","u":"/spawn/v0.50/demo/ibc/","b":["Application Demos"]},{"i":130,"t":"Tokenfactory","u":"/spawn/v0.50/demo/tokenfactory/","b":["Application Demos"]},{"i":158,"t":"Non-fungible Token Demo","u":"/spawn/v0.50/demo/cw-nft/","b":["Application Demos"]},{"i":184,"t":"Debugging","u":"/spawn/v0.50/install/debugging/","b":["Installation"]},{"i":207,"t":"Overview","u":"/spawn/v0.50/install/install-spawn/","b":["Installation"]},{"i":211,"t":"Network Security Types","u":"/spawn/v0.50/learn/consensus-security/","b":["Learn"]},{"i":241,"t":"Overview","u":"/spawn/v0.50/install/system-setup/","b":["Installation"]},{"i":253,"t":"IBC Name Service Contract","u":"/spawn/v0.50/build/name-service-ibc-contract/","b":["Build Your Application"]},{"i":295,"t":"CosmWasm Validator Reviews","u":"/spawn/v0.50/demo/cw-validator-reviews/","b":["Application Demos"]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2",[0,2.247,1,2.247,2,2.247]],["t/8",[3,2.672,4,2.672]],["t/48",[5,2.247,6,2.247,7,1.795]],["t/52",[8,2.672,9,2.672]],["t/57",[10,2.672,11,2.672]],["t/65",[12,1.292,13,1.549,14,1.549,15,1.939]],["t/91",[16,3.295]],["t/97",[17,2.196]],["t/106",[7,1.795,18,2.247,19,2.247]],["t/114",[12,1.781,20,2.135]],["t/130",[21,3.295]],["t/158",[20,1.549,22,1.939,23,1.939,24,1.939]],["t/184",[25,3.295]],["t/207",[17,2.196]],["t/211",[26,2.247,27,2.247,28,2.247]],["t/241",[17,2.196]],["t/253",[12,1.292,13,1.549,14,1.549,29,1.939]],["t/295",[30,2.247,31,2.247,32,2.247]]],"invertedIndex":[["applic",{"_index":11,"t":{"57":{"position":[[13,11]]}}}],["challeng",{"_index":9,"t":{"52":{"position":[[6,10]]}}}],["client",{"_index":2,"t":{"2":{"position":[[13,6]]}}}],["command",{"_index":0,"t":{"2":{"position":[[0,7]]}}}],["conclus",{"_index":16,"t":{"91":{"position":[[0,10]]}}}],["contract",{"_index":29,"t":{"253":{"position":[[17,8]]}}}],["cosmwasm",{"_index":30,"t":{"295":{"position":[[0,8]]}}}],["data",{"_index":19,"t":{"106":{"position":[[4,4]]}}}],["debug",{"_index":25,"t":{"184":{"position":[[0,9]]}}}],["demo",{"_index":20,"t":{"114":{"position":[[4,4]]},"158":{"position":[[19,4]]}}}],["extra",{"_index":8,"t":{"52":{"position":[[0,5]]}}}],["fungibl",{"_index":23,"t":{"158":{"position":[[4,8]]}}}],["ibc",{"_index":12,"t":{"65":{"position":[[0,3]]},"114":{"position":[[0,3]]},"253":{"position":[[0,3]]}}}],["line",{"_index":1,"t":{"2":{"position":[[8,4]]}}}],["meet",{"_index":3,"t":{"8":{"position":[[0,4]]}}}],["modul",{"_index":15,"t":{"65":{"position":[[17,6]]}}}],["name",{"_index":13,"t":{"65":{"position":[[4,4]]},"253":{"position":[[4,4]]}}}],["network",{"_index":26,"t":{"211":{"position":[[0,7]]}}}],["non",{"_index":22,"t":{"158":{"position":[[0,3]]}}}],["overview",{"_index":17,"t":{"97":{"position":[[0,8]]},"207":{"position":[[0,8]]},"241":{"position":[[0,8]]}}}],["review",{"_index":32,"t":{"295":{"position":[[19,7]]}}}],["run",{"_index":10,"t":{"57":{"position":[[0,7]]}}}],["save",{"_index":5,"t":{"48":{"position":[[0,4]]}}}],["secur",{"_index":27,"t":{"211":{"position":[[8,8]]}}}],["servic",{"_index":14,"t":{"65":{"position":[[9,7]]},"253":{"position":[[9,7]]}}}],["set",{"_index":18,"t":{"106":{"position":[[0,3]]}}}],["spawn",{"_index":4,"t":{"8":{"position":[[5,5]]}}}],["storag",{"_index":6,"t":{"48":{"position":[[5,7]]}}}],["structur",{"_index":7,"t":{"48":{"position":[[13,9]]},"106":{"position":[[9,9]]}}}],["token",{"_index":24,"t":{"158":{"position":[[13,5]]}}}],["tokenfactori",{"_index":21,"t":{"130":{"position":[[0,12]]}}}],["type",{"_index":28,"t":{"211":{"position":[[17,5]]}}}],["valid",{"_index":31,"t":{"295":{"position":[[9,9]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":4,"t":"Query","u":"/spawn/v0.50/build/name-service-client/","h":"/spawn/v0.50/build/name-service-client/#query","p":2},{"i":6,"t":"Transaction","u":"/spawn/v0.50/build/name-service-client/","h":"/spawn/v0.50/build/name-service-client/#transaction","p":2},{"i":10,"t":"NameService Demo","u":"/spawn/v0.50/","h":"/spawn/v0.50/#nameservice-demo","p":8},{"i":12,"t":"Testimonials","u":"/spawn/v0.50/","h":"/spawn/v0.50/#testimonials","p":8},{"i":14,"t":"Spawn Overview","u":"/spawn/v0.50/","h":"/spawn/v0.50/#spawn-overview","p":8},{"i":16,"t":"New Development","u":"/spawn/v0.50/","h":"/spawn/v0.50/#new-development","p":8},{"i":18,"t":"Security Selection","u":"/spawn/v0.50/","h":"/spawn/v0.50/#security-selection","p":8},{"i":20,"t":"Feature Selection","u":"/spawn/v0.50/","h":"/spawn/v0.50/#feature-selection","p":8},{"i":22,"t":"Structure","u":"/spawn/v0.50/","h":"/spawn/v0.50/#structure","p":8},{"i":24,"t":".github/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#github","p":8},{"i":26,"t":"app/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#app","p":8},{"i":28,"t":"chains/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#chains","p":8},{"i":30,"t":"cmd/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#cmd","p":8},{"i":32,"t":"explorer/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#explorer","p":8},{"i":34,"t":"interchaintest/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#interchaintest","p":8},{"i":36,"t":"proto/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#proto","p":8},{"i":38,"t":"scripts/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#scripts","p":8},{"i":40,"t":"chain_metadata.json","u":"/spawn/v0.50/","h":"/spawn/v0.50/#chain_metadatajson","p":8},{"i":42,"t":"chain_registry.json & assets","u":"/spawn/v0.50/","h":"/spawn/v0.50/#chain_registryjson--assets","p":8},{"i":44,"t":"Modules","u":"/spawn/v0.50/","h":"/spawn/v0.50/#modules","p":8},{"i":46,"t":"Testnets","u":"/spawn/v0.50/","h":"/spawn/v0.50/#testnets","p":8},{"i":50,"t":"Application Logic","u":"/spawn/v0.50/build/name-service-application/","h":"/spawn/v0.50/build/name-service-application/#application-logic","p":48},{"i":53,"t":"Challenge 1: Limit Input","u":"/spawn/v0.50/build/name-service-bonus/","h":"/spawn/v0.50/build/name-service-bonus/#challenge-1-limit-input","p":52},{"i":55,"t":"Challenge 2: Resolve Wallet From Name","u":"/spawn/v0.50/build/name-service-bonus/","h":"/spawn/v0.50/build/name-service-bonus/#challenge-2-resolve-wallet-from-name","p":52},{"i":59,"t":"Launch The Network","u":"/spawn/v0.50/build/name-service-testnet/","h":"/spawn/v0.50/build/name-service-testnet/#launch-the-network","p":57},{"i":61,"t":"Interact Set Name","u":"/spawn/v0.50/build/name-service-testnet/","h":"/spawn/v0.50/build/name-service-testnet/#interact-set-name","p":57},{"i":63,"t":"Interaction Get Name","u":"/spawn/v0.50/build/name-service-testnet/","h":"/spawn/v0.50/build/name-service-testnet/#interaction-get-name","p":57},{"i":67,"t":"Prerequisites","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#prerequisites","p":65},{"i":69,"t":"Create your chain","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#create-your-chain","p":65},{"i":71,"t":"Scaffold the IBC Module","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#scaffold-the-ibc-module","p":65},{"i":73,"t":"Use the NameService Module","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#use-the-nameservice-module","p":65},{"i":75,"t":"Provide NameService to the IBC Module","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#provide-nameservice-to-the-ibc-module","p":65},{"i":77,"t":"Set Name on IBC Packet","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#set-name-on-ibc-packet","p":65},{"i":79,"t":"Start Testnet","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#start-testnet","p":65},{"i":81,"t":"Import Testnet Helpers","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#import-testnet-helpers","p":65},{"i":83,"t":"Connect Your IBC Modules","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#connect-your-ibc-modules","p":65},{"i":85,"t":"Submit Name Service Name Over IBC","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#submit-name-service-name-over-ibc","p":65},{"i":87,"t":"Summary","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#summary","p":65},{"i":89,"t":"What you Learned","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#what-you-learned","p":65},{"i":93,"t":"What you Learned","u":"/spawn/v0.50/build/name-service-summary/","h":"/spawn/v0.50/build/name-service-summary/#what-you-learned","p":91},{"i":95,"t":"What's Next?","u":"/spawn/v0.50/build/name-service-summary/","h":"/spawn/v0.50/build/name-service-summary/#whats-next","p":91},{"i":99,"t":"Prerequisites","u":"/spawn/v0.50/build/name-service/","h":"/spawn/v0.50/build/name-service/#prerequisites","p":97},{"i":101,"t":"Video Walkthrough","u":"/spawn/v0.50/build/name-service/","h":"/spawn/v0.50/build/name-service/#video-walkthrough","p":97},{"i":102,"t":"Generate a New Chain","u":"/spawn/v0.50/build/name-service/","h":"/spawn/v0.50/build/name-service/#generate-a-new-chain","p":97},{"i":104,"t":"Scaffold the Module","u":"/spawn/v0.50/build/name-service/","h":"/spawn/v0.50/build/name-service/#scaffold-the-module","p":97},{"i":108,"t":"Set Name","u":"/spawn/v0.50/build/name-service-structure/","h":"/spawn/v0.50/build/name-service-structure/#set-name","p":106},{"i":110,"t":"Get Name","u":"/spawn/v0.50/build/name-service-structure/","h":"/spawn/v0.50/build/name-service-structure/#get-name","p":106},{"i":112,"t":"Generate Code","u":"/spawn/v0.50/build/name-service-structure/","h":"/spawn/v0.50/build/name-service-structure/#generate-code","p":106},{"i":116,"t":"Prerequisites","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#prerequisites","p":114},{"i":118,"t":"Create your chain","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#create-your-chain","p":114},{"i":120,"t":"Spin up an IBC testnet","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#spin-up-an-ibc-testnet","p":114},{"i":122,"t":"Send a Transaction","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#send-a-transaction","p":114},{"i":124,"t":"Send an IBC transaction","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#send-an-ibc-transaction","p":114},{"i":126,"t":"(optional) Push to GitHub","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#optional-push-to-github","p":114},{"i":128,"t":"Conclusion","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#conclusion","p":114},{"i":132,"t":"Prerequisites","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#prerequisites","p":130},{"i":134,"t":"Create your chain","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#create-your-chain","p":130},{"i":136,"t":"Start the testnet","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#start-the-testnet","p":130},{"i":138,"t":"Confirm tokenfactory is enabled","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#confirm-tokenfactory-is-enabled","p":130},{"i":140,"t":"Create a token","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#create-a-token","p":130},{"i":142,"t":"Verify the token was created","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#verify-the-token-was-created","p":130},{"i":144,"t":"Modify token metadata","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#modify-token-metadata","p":130},{"i":146,"t":"Verify the token metadata","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#verify-the-token-metadata","p":130},{"i":148,"t":"Create new tokens to transfer","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#create-new-tokens-to-transfer","p":130},{"i":150,"t":"Create new tokens for another account","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#create-new-tokens-for-another-account","p":130},{"i":152,"t":"Transfer tokens","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#transfer-tokens","p":130},{"i":154,"t":"Burn tokens","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#burn-tokens","p":130},{"i":156,"t":"Conclusion","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#conclusion","p":130},{"i":160,"t":"Prerequisites","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#prerequisites","p":158},{"i":162,"t":"Create your chain","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#create-your-chain","p":158},{"i":164,"t":"Start the testnet","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#start-the-testnet","p":158},{"i":166,"t":"Verify CosmWasm is enabled","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#verify-cosmwasm-is-enabled","p":158},{"i":168,"t":"Upload the contract to the network","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#upload-the-contract-to-the-network","p":158},{"i":170,"t":"Verify the code was uploaded","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#verify-the-code-was-uploaded","p":158},{"i":172,"t":"Create a new NFT collection","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#create-a-new-nft-collection","p":158},{"i":174,"t":"Contract address","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#contract-address","p":158},{"i":176,"t":"Create an NFT in the collection","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#create-an-nft-in-the-collection","p":158},{"i":178,"t":"Grab this NFT data","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#grab-this-nft-data","p":158},{"i":180,"t":"Transfer the NFT to another account","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#transfer-the-nft-to-another-account","p":158},{"i":182,"t":"Conclusion","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#conclusion","p":158},{"i":186,"t":"Golang","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#golang","p":184},{"i":187,"t":"/bin/sh: 1: go: not found","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#binsh-1-go-not-found","p":184},{"i":189,"t":"build constraints excluded all Go files in /usr/local/go/ ...","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#build-constraints-excluded-all-go-files-in-usrlocalgo-","p":184},{"i":191,"t":"make: heighliner: Permission denied","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#make-heighliner-permission-denied","p":184},{"i":193,"t":"Windows / WSL","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#windows--wsl","p":184},{"i":194,"t":"make: /mnt/c/Program: No such file or directory","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#make-mntcprogram-no-such-file-or-directory","p":184},{"i":196,"t":"Docker","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#docker","p":184},{"i":197,"t":"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#cannot-connect-to-the-docker-daemon-at-unixvarrundockersock-is-the-docker-daemon-running","p":184},{"i":199,"t":"docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#docker-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket-at-unixvarrundockersock","p":184},{"i":201,"t":"Generation","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#generation","p":184},{"i":202,"t":"remote: Repository not found. fatal: reposity not found","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#remote-repository-not-found-fatal-reposity-not-found","p":184},{"i":204,"t":"Application","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#application","p":184},{"i":205,"t":"Running the binary gives me panic: reflect: New(nil)","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#running-the-binary-gives-me-panic-reflect-newnil","p":184},{"i":209,"t":"Install Spawn","u":"/spawn/v0.50/install/install-spawn/","h":"/spawn/v0.50/install/install-spawn/#install-spawn","p":207},{"i":212,"t":"Prerequisites","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#prerequisites","p":211},{"i":214,"t":"Choose for me (TLDR)","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#choose-for-me-tldr","p":211},{"i":216,"t":"Proof of Authority (PoA)","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#proof-of-authority-poa","p":211},{"i":217,"t":"Default","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#default","p":211},{"i":219,"t":"What it does","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#what-it-does","p":211},{"i":221,"t":"Create a PoA network","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#create-a-poa-network","p":211},{"i":223,"t":"Considerations","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#considerations","p":211},{"i":225,"t":"Proof of Stake (PoS)","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#proof-of-stake-pos","p":211},{"i":226,"t":"What it does","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#what-it-does-1","p":211},{"i":228,"t":"Create a PoS network","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#create-a-pos-network","p":211},{"i":230,"t":"Considerations","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#considerations-1","p":211},{"i":232,"t":"Interchain Security (ICS)","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#interchain-security-ics","p":211},{"i":233,"t":"What it does","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#what-it-does-2","p":211},{"i":235,"t":"Create an ICS Consumer network","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#create-an-ics-consumer-network","p":211},{"i":237,"t":"Considerations","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#considerations-2","p":211},{"i":239,"t":"Conclusion","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#conclusion","p":211},{"i":243,"t":"System Requirements","u":"/spawn/v0.50/install/system-setup/","h":"/spawn/v0.50/install/system-setup/#system-requirements","p":241},{"i":245,"t":"Windows","u":"/spawn/v0.50/install/system-setup/","h":"/spawn/v0.50/install/system-setup/#windows","p":241},{"i":247,"t":"MacOS","u":"/spawn/v0.50/install/system-setup/","h":"/spawn/v0.50/install/system-setup/#macos","p":241},{"i":249,"t":"Linux (Ubuntu)","u":"/spawn/v0.50/install/system-setup/","h":"/spawn/v0.50/install/system-setup/#linux-ubuntu","p":241},{"i":251,"t":"CosmWasm","u":"/spawn/v0.50/install/system-setup/","h":"/spawn/v0.50/install/system-setup/#cosmwasm","p":241},{"i":255,"t":"Prerequisites","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#prerequisites","p":253},{"i":257,"t":"Setup the Chain","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#setup-the-chain","p":253},{"i":259,"t":"Build CosmWasm Contract","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#build-cosmwasm-contract","p":253},{"i":261,"t":"Update Contract Dependencies","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#update-contract-dependencies","p":253},{"i":263,"t":"Setup State","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#setup-state","p":253},{"i":265,"t":"Setup Interactions","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#setup-interactions","p":253},{"i":267,"t":"Contract Logic","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#contract-logic","p":253},{"i":269,"t":"Create Transaction acknowledgement","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#create-transaction-acknowledgement","p":253},{"i":271,"t":"Setup Errors","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#setup-errors","p":253},{"i":273,"t":"IBC Specific Logic","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#ibc-specific-logic","p":253},{"i":275,"t":"Build Contract From Source","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#build-contract-from-source","p":253},{"i":277,"t":"Start the chains and connect","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#start-the-chains-and-connect","p":253},{"i":279,"t":"Store the Contract on both chains","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#store-the-contract-on-both-chains","p":253},{"i":281,"t":"Instantiate our Contract on both chains","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#instantiate-our-contract-on-both-chains","p":253},{"i":283,"t":"Relayer connect","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#relayer-connect","p":253},{"i":285,"t":"Verify channels","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#verify-channels","p":253},{"i":287,"t":"Transaction interaction","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#transaction-interaction","p":253},{"i":289,"t":"Verify data","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#verify-data","p":253},{"i":291,"t":"Summary","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#summary","p":253},{"i":293,"t":"What you Learned","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#what-you-learned","p":253},{"i":297,"t":"Prerequisites","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#prerequisites","p":295},{"i":299,"t":"Setup the Chain","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#setup-the-chain","p":295},{"i":301,"t":"CosmWasm Build Contract","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#cosmwasm-build-contract","p":295},{"i":303,"t":"Set State","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#set-state","p":295},{"i":305,"t":"Set Inputs","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#set-inputs","p":295},{"i":307,"t":"Set new error","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#set-new-error","p":295},{"i":309,"t":"Imports","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#imports","p":295},{"i":311,"t":"Modify Instantiate Message","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#modify-instantiate-message","p":295},{"i":313,"t":"Add Execute Logic","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#add-execute-logic","p":295},{"i":315,"t":"Add Queries","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#add-queries","p":295},{"i":317,"t":"Add New Sudo Message Type","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#add-new-sudo-message-type","p":295},{"i":319,"t":"Build the Contract","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#build-the-contract","p":295},{"i":321,"t":"Modify the Module","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#modify-the-module","p":295},{"i":323,"t":"Setup the Keeper","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#setup-the-keeper","p":295},{"i":325,"t":"'Fix' keeper_test","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#fix-keeper_test","p":295},{"i":327,"t":"Dependency Inject (v2)","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#dependency-inject-v2","p":295},{"i":329,"t":"Fix app.go references","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#fix-appgo-references","p":295},{"i":331,"t":"Module Core Logic","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#module-core-logic","p":295},{"i":333,"t":"Implement the EndBlocker","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#implement-the-endblocker","p":295},{"i":335,"t":"Test Deployment","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#test-deployment","p":295},{"i":336,"t":"Start Testnet","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#start-testnet","p":295},{"i":338,"t":"Upload Contract","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#upload-contract","p":295},{"i":340,"t":"Instantiate our Contract","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#instantiate-our-contract","p":295},{"i":342,"t":"Verify data","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#verify-data","p":295},{"i":344,"t":"Write a review","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#write-a-review","p":295},{"i":346,"t":"Verify the review","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#verify-the-review","p":295},{"i":348,"t":"Write a review for a non-validator","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#write-a-review-for-a-non-validator","p":295}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/4",[0,5.449]],["t/6",[1,4.42]],["t/10",[2,4.075,3,4.974]],["t/12",[4,6.115]],["t/14",[5,4.432,6,4.974]],["t/16",[7,3.267,8,4.974]],["t/18",[9,4.432,10,4.432]],["t/20",[10,4.432,11,4.974]],["t/22",[12,6.115]],["t/24",[13,5.449]],["t/26",[14,6.115]],["t/28",[15,3.458]],["t/30",[16,6.115]],["t/32",[17,6.115]],["t/34",[18,6.115]],["t/36",[19,6.115]],["t/38",[20,6.115]],["t/40",[21,6.115]],["t/42",[22,4.192,23,3.435,24,4.192]],["t/44",[25,3.852]],["t/46",[26,4.016]],["t/50",[27,4.432,28,3.596]],["t/53",[29,3.228,30,3.228,31,3.623,32,3.228]],["t/55",[29,2.842,33,3.19,34,3.19,35,3.19,36,2.095]],["t/59",[37,4.974,38,3.596]],["t/61",[36,2.753,39,3.21,40,2.881]],["t/63",[36,3.267,39,3.809]],["t/67",[41,3.852]],["t/69",[15,2.813,42,2.567]],["t/71",[25,2.641,43,3.736,44,2.641]],["t/73",[2,3.435,25,2.641,45,4.192]],["t/75",[2,2.968,25,2.282,44,2.282,46,3.623]],["t/77",[36,2.379,40,2.49,44,2.282,47,3.623]],["t/79",[26,3.267,48,3.596]],["t/81",[26,2.753,49,3.736,50,4.192]],["t/83",[25,2.641,44,2.641,51,3.031]],["t/85",[36,2.932,44,1.795,52,2.849,53,2.849,54,2.849]],["t/87",[55,5.449]],["t/89",[56,5.01]],["t/93",[56,5.01]],["t/95",[57,4.974,58,4.974]],["t/99",[41,3.852]],["t/101",[59,4.974,60,4.974]],["t/102",[7,2.753,15,2.371,61,3.435]],["t/104",[25,3.134,43,4.432]],["t/108",[36,3.267,40,3.419]],["t/110",[36,4.016]],["t/112",[61,4.075,62,4.432]],["t/116",[41,3.852]],["t/118",[15,2.813,42,2.567]],["t/120",[26,2.379,44,2.282,63,3.623,64,3.623]],["t/122",[1,3.596,65,4.432]],["t/124",[1,3.031,44,2.641,65,3.736]],["t/126",[13,3.736,66,4.192,67,4.192]],["t/128",[68,4.682]],["t/132",[41,3.852]],["t/134",[15,2.813,42,2.567]],["t/136",[26,3.267,48,3.596]],["t/138",[69,4.192,70,4.192,71,3.736]],["t/140",[42,2.567,72,3.134]],["t/142",[42,2.164,72,2.641,73,2.641]],["t/144",[72,2.641,74,3.435,75,3.736]],["t/146",[72,2.641,73,2.641,75,3.736]],["t/148",[7,2.379,42,1.87,72,2.282,76,2.968]],["t/150",[7,2.095,42,1.646,72,2.01,77,2.842,78,2.842]],["t/152",[72,3.134,76,4.075]],["t/154",[72,3.134,79,4.974]],["t/156",[68,4.682]],["t/160",[41,3.852]],["t/162",[15,2.813,42,2.567]],["t/164",[26,3.267,48,3.596]],["t/166",[71,3.736,73,2.641,80,3.21]],["t/168",[38,3.031,81,3.435,82,2.296]],["t/170",[62,3.736,73,2.641,81,3.435]],["t/172",[7,2.379,42,1.87,83,2.774,84,3.228]],["t/174",[82,2.725,85,4.974]],["t/176",[42,2.164,83,3.21,84,3.736]],["t/178",[83,3.21,86,4.192,87,3.435]],["t/180",[76,2.968,77,3.228,78,3.228,83,2.774]],["t/182",[68,4.682]],["t/186",[88,6.115]],["t/187",[30,3.228,89,3.623,90,3.228,91,3.228]],["t/189",[23,2.109,90,2.293,92,1.861,93,2.574,94,2.574,95,2.293,96,2.574]],["t/191",[97,3.228,98,3.623,99,3.228,100,3.228]],["t/193",[23,3.435,101,3.736,102,4.192]],["t/194",[95,2.842,97,2.842,103,3.19,104,3.19,105,3.19]],["t/196",[106,5.01]],["t/197",[51,1.861,106,3.375,107,3.671,108,2.293,109,2.293]],["t/199",[51,1.56,99,1.922,100,1.922,106,2.924,107,1.922,108,1.922,110,2.158,111,2.158]],["t/201",[61,5.01]],["t/202",[91,3.978,112,2.849,113,2.849,114,2.849,115,2.849]],["t/204",[27,5.449]],["t/205",[109,2.538,116,2.849,117,2.849,118,2.849,119,2.849,120,2.849]],["t/209",[5,4.432,121,4.974]],["t/212",[41,3.852]],["t/214",[122,4.974,123,4.974]],["t/216",[124,3.736,125,4.192,126,3.736]],["t/217",[127,6.115]],["t/219",[]],["t/221",[38,3.031,42,2.164,126,3.736]],["t/223",[128,5.01]],["t/225",[124,3.736,129,4.192,130,3.736]],["t/226",[]],["t/228",[38,3.031,42,2.164,130,3.736]],["t/230",[128,5.01]],["t/232",[9,3.736,131,4.192,132,3.736]],["t/233",[]],["t/235",[38,2.619,42,1.87,132,3.228,133,3.623]],["t/237",[128,5.01]],["t/239",[68,4.682]],["t/243",[134,4.974,135,4.974]],["t/245",[101,5.449]],["t/247",[136,6.115]],["t/249",[137,4.974,138,4.974]],["t/251",[80,4.682]],["t/255",[41,3.852]],["t/257",[15,2.813,139,3.419]],["t/259",[80,3.21,82,2.296,92,3.031]],["t/261",[82,2.296,140,4.192,141,3.736]],["t/263",[139,3.419,142,4.432]],["t/265",[39,3.809,139,3.419]],["t/267",[28,3.596,82,2.725]],["t/269",[1,3.031,42,2.164,143,4.192]],["t/271",[139,3.419,144,4.432]],["t/273",[28,3.031,44,2.641,145,4.192]],["t/275",[82,2.296,92,3.031,146,4.192]],["t/277",[15,2.371,48,3.031,51,3.031]],["t/279",[15,2.049,82,1.984,147,3.623,148,3.228]],["t/281",[15,2.049,82,1.984,148,3.228,149,2.968]],["t/283",[51,3.596,150,4.974]],["t/285",[73,3.134,151,4.974]],["t/287",[1,3.596,39,3.809]],["t/289",[73,3.134,87,4.075]],["t/291",[55,5.449]],["t/293",[56,5.01]],["t/297",[41,3.852]],["t/299",[15,2.813,139,3.419]],["t/301",[80,3.21,82,2.296,92,3.031]],["t/303",[40,3.419,142,4.432]],["t/305",[32,4.432,40,3.419]],["t/307",[7,2.753,40,2.881,144,3.736]],["t/309",[49,5.449]],["t/311",[74,3.435,149,3.435,152,3.736]],["t/313",[28,3.031,153,3.435,154,4.192]],["t/315",[0,4.432,153,4.075]],["t/317",[7,2.095,152,2.842,153,2.613,155,3.19,156,3.19]],["t/319",[82,2.725,92,3.596]],["t/321",[25,3.134,74,4.075]],["t/323",[139,3.419,157,4.974]],["t/325",[158,4.432,159,4.974]],["t/327",[141,3.736,160,4.192,161,4.192]],["t/329",[158,3.736,162,4.192,163,4.192]],["t/331",[25,2.641,28,3.031,164,4.192]],["t/333",[165,4.974,166,4.974]],["t/335",[167,4.974,168,4.974]],["t/336",[26,3.267,48,3.596]],["t/338",[81,4.075,82,2.725]],["t/340",[82,2.725,149,4.075]],["t/342",[73,3.134,87,4.075]],["t/344",[169,4.432,170,4.075]],["t/346",[73,3.134,170,4.075]],["t/348",[169,3.228,170,2.968,171,3.623,172,3.623]]],"invertedIndex":[["",{"_index":23,"t":{"42":{"position":[[20,1]]},"189":{"position":[[58,3]]},"193":{"position":[[8,1]]}}}],["1",{"_index":30,"t":{"53":{"position":[[10,2]]},"187":{"position":[[9,2]]}}}],["2",{"_index":33,"t":{"55":{"position":[[10,2]]}}}],["account",{"_index":78,"t":{"150":{"position":[[30,7]]},"180":{"position":[[28,7]]}}}],["acknowledg",{"_index":143,"t":{"269":{"position":[[19,15]]}}}],["add",{"_index":153,"t":{"313":{"position":[[0,3]]},"315":{"position":[[0,3]]},"317":{"position":[[0,3]]}}}],["address",{"_index":85,"t":{"174":{"position":[[9,7]]}}}],["anoth",{"_index":77,"t":{"150":{"position":[[22,7]]},"180":{"position":[[20,7]]}}}],["app",{"_index":14,"t":{"26":{"position":[[0,4]]}}}],["app.go",{"_index":162,"t":{"329":{"position":[[4,6]]}}}],["applic",{"_index":27,"t":{"50":{"position":[[0,11]]},"204":{"position":[[0,11]]}}}],["asset",{"_index":24,"t":{"42":{"position":[[22,6]]}}}],["author",{"_index":125,"t":{"216":{"position":[[9,9]]}}}],["bin/sh",{"_index":89,"t":{"187":{"position":[[0,8]]}}}],["binari",{"_index":116,"t":{"205":{"position":[[12,6]]}}}],["both",{"_index":148,"t":{"279":{"position":[[22,4]]},"281":{"position":[[28,4]]}}}],["build",{"_index":92,"t":{"189":{"position":[[0,5]]},"259":{"position":[[0,5]]},"275":{"position":[[0,5]]},"301":{"position":[[9,5]]},"319":{"position":[[0,5]]}}}],["burn",{"_index":79,"t":{"154":{"position":[[0,4]]}}}],["chain",{"_index":15,"t":{"28":{"position":[[0,7]]},"69":{"position":[[12,5]]},"102":{"position":[[15,5]]},"118":{"position":[[12,5]]},"134":{"position":[[12,5]]},"162":{"position":[[12,5]]},"257":{"position":[[10,5]]},"277":{"position":[[10,6]]},"279":{"position":[[27,6]]},"281":{"position":[[33,6]]},"299":{"position":[[10,5]]}}}],["chain_metadata.json",{"_index":21,"t":{"40":{"position":[[0,19]]}}}],["chain_registry.json",{"_index":22,"t":{"42":{"position":[[0,19]]}}}],["challeng",{"_index":29,"t":{"53":{"position":[[0,9]]},"55":{"position":[[0,9]]}}}],["channel",{"_index":151,"t":{"285":{"position":[[7,8]]}}}],["choos",{"_index":122,"t":{"214":{"position":[[0,6]]}}}],["cmd",{"_index":16,"t":{"30":{"position":[[0,4]]}}}],["code",{"_index":62,"t":{"112":{"position":[[9,4]]},"170":{"position":[[11,4]]}}}],["collect",{"_index":84,"t":{"172":{"position":[[17,10]]},"176":{"position":[[21,10]]}}}],["conclus",{"_index":68,"t":{"128":{"position":[[0,10]]},"156":{"position":[[0,10]]},"182":{"position":[[0,10]]},"239":{"position":[[0,10]]}}}],["confirm",{"_index":69,"t":{"138":{"position":[[0,7]]}}}],["connect",{"_index":51,"t":{"83":{"position":[[0,7]]},"197":{"position":[[7,7]]},"199":{"position":[[46,7]]},"277":{"position":[[21,7]]},"283":{"position":[[8,7]]}}}],["consider",{"_index":128,"t":{"223":{"position":[[0,14]]},"230":{"position":[[0,14]]},"237":{"position":[[0,14]]}}}],["constraint",{"_index":93,"t":{"189":{"position":[[6,11]]}}}],["consum",{"_index":133,"t":{"235":{"position":[[14,8]]}}}],["contract",{"_index":82,"t":{"168":{"position":[[11,8]]},"174":{"position":[[0,8]]},"259":{"position":[[15,8]]},"261":{"position":[[7,8]]},"267":{"position":[[0,8]]},"275":{"position":[[6,8]]},"279":{"position":[[10,8]]},"281":{"position":[[16,8]]},"301":{"position":[[15,8]]},"319":{"position":[[10,8]]},"338":{"position":[[7,8]]},"340":{"position":[[16,8]]}}}],["core",{"_index":164,"t":{"331":{"position":[[7,4]]}}}],["cosmwasm",{"_index":80,"t":{"166":{"position":[[7,8]]},"251":{"position":[[0,8]]},"259":{"position":[[6,8]]},"301":{"position":[[0,8]]}}}],["creat",{"_index":42,"t":{"69":{"position":[[0,6]]},"118":{"position":[[0,6]]},"134":{"position":[[0,6]]},"140":{"position":[[0,6]]},"142":{"position":[[21,7]]},"148":{"position":[[0,6]]},"150":{"position":[[0,6]]},"162":{"position":[[0,6]]},"172":{"position":[[0,6]]},"176":{"position":[[0,6]]},"221":{"position":[[0,6]]},"228":{"position":[[0,6]]},"235":{"position":[[0,6]]},"269":{"position":[[0,6]]}}}],["daemon",{"_index":107,"t":{"197":{"position":[[29,6],[82,6]]},"199":{"position":[[68,6]]}}}],["data",{"_index":87,"t":{"178":{"position":[[14,4]]},"289":{"position":[[7,4]]},"342":{"position":[[7,4]]}}}],["default",{"_index":127,"t":{"217":{"position":[[0,7]]}}}],["demo",{"_index":3,"t":{"10":{"position":[[12,4]]}}}],["deni",{"_index":100,"t":{"191":{"position":[[29,6]]},"199":{"position":[[23,6]]}}}],["depend",{"_index":141,"t":{"261":{"position":[[16,12]]},"327":{"position":[[0,10]]}}}],["deploy",{"_index":168,"t":{"335":{"position":[[5,10]]}}}],["develop",{"_index":8,"t":{"16":{"position":[[4,11]]}}}],["directori",{"_index":105,"t":{"194":{"position":[[38,9]]}}}],["docker",{"_index":106,"t":{"196":{"position":[[0,6]]},"197":{"position":[[22,6],[75,6]]},"199":{"position":[[0,7],[61,6]]}}}],["enabl",{"_index":71,"t":{"138":{"position":[[24,7]]},"166":{"position":[[19,7]]}}}],["endblock",{"_index":166,"t":{"333":{"position":[[14,10]]}}}],["error",{"_index":144,"t":{"271":{"position":[[6,6]]},"307":{"position":[[8,5]]}}}],["exclud",{"_index":94,"t":{"189":{"position":[[18,8]]}}}],["execut",{"_index":154,"t":{"313":{"position":[[4,7]]}}}],["explor",{"_index":17,"t":{"32":{"position":[[0,9]]}}}],["fatal",{"_index":114,"t":{"202":{"position":[[30,6]]}}}],["featur",{"_index":11,"t":{"20":{"position":[[0,7]]}}}],["file",{"_index":95,"t":{"189":{"position":[[34,5]]},"194":{"position":[[30,4]]}}}],["fix",{"_index":158,"t":{"325":{"position":[[0,5]]},"329":{"position":[[0,3]]}}}],["found",{"_index":91,"t":{"187":{"position":[[20,5]]},"202":{"position":[[23,6],[50,5]]}}}],["gener",{"_index":61,"t":{"102":{"position":[[0,8]]},"112":{"position":[[0,8]]},"201":{"position":[[0,10]]}}}],["github",{"_index":13,"t":{"24":{"position":[[0,8]]},"126":{"position":[[19,6]]}}}],["give",{"_index":117,"t":{"205":{"position":[[19,5]]}}}],["go",{"_index":90,"t":{"187":{"position":[[12,3]]},"189":{"position":[[31,2]]}}}],["golang",{"_index":88,"t":{"186":{"position":[[0,6]]}}}],["grab",{"_index":86,"t":{"178":{"position":[[0,4]]}}}],["heighlin",{"_index":98,"t":{"191":{"position":[[6,11]]}}}],["helper",{"_index":50,"t":{"81":{"position":[[15,7]]}}}],["ibc",{"_index":44,"t":{"71":{"position":[[13,3]]},"75":{"position":[[27,3]]},"77":{"position":[[12,3]]},"83":{"position":[[13,3]]},"85":{"position":[[30,3]]},"120":{"position":[[11,3]]},"124":{"position":[[8,3]]},"273":{"position":[[0,3]]}}}],["ic",{"_index":132,"t":{"232":{"position":[[20,5]]},"235":{"position":[[10,3]]}}}],["implement",{"_index":165,"t":{"333":{"position":[[0,9]]}}}],["import",{"_index":49,"t":{"81":{"position":[[0,6]]},"309":{"position":[[0,7]]}}}],["inject",{"_index":160,"t":{"327":{"position":[[11,6]]}}}],["input",{"_index":32,"t":{"53":{"position":[[19,5]]},"305":{"position":[[4,6]]}}}],["instal",{"_index":121,"t":{"209":{"position":[[0,7]]}}}],["instanti",{"_index":149,"t":{"281":{"position":[[0,11]]},"311":{"position":[[7,11]]},"340":{"position":[[0,11]]}}}],["interact",{"_index":39,"t":{"61":{"position":[[0,8]]},"63":{"position":[[0,11]]},"265":{"position":[[6,12]]},"287":{"position":[[12,11]]}}}],["interchain",{"_index":131,"t":{"232":{"position":[[0,10]]}}}],["interchaintest",{"_index":18,"t":{"34":{"position":[[0,15]]}}}],["keeper",{"_index":157,"t":{"323":{"position":[[10,6]]}}}],["keeper_test",{"_index":159,"t":{"325":{"position":[[6,11]]}}}],["launch",{"_index":37,"t":{"59":{"position":[[0,6]]}}}],["learn",{"_index":56,"t":{"89":{"position":[[9,7]]},"93":{"position":[[9,7]]},"293":{"position":[[9,7]]}}}],["limit",{"_index":31,"t":{"53":{"position":[[13,5]]}}}],["linux",{"_index":137,"t":{"249":{"position":[[0,5]]}}}],["logic",{"_index":28,"t":{"50":{"position":[[12,5]]},"267":{"position":[[9,5]]},"273":{"position":[[13,5]]},"313":{"position":[[12,5]]},"331":{"position":[[12,5]]}}}],["maco",{"_index":136,"t":{"247":{"position":[[0,5]]}}}],["make",{"_index":97,"t":{"191":{"position":[[0,5]]},"194":{"position":[[0,5]]}}}],["messag",{"_index":152,"t":{"311":{"position":[[19,7]]},"317":{"position":[[13,7]]}}}],["metadata",{"_index":75,"t":{"144":{"position":[[13,8]]},"146":{"position":[[17,8]]}}}],["mnt/c/program",{"_index":103,"t":{"194":{"position":[[6,15]]}}}],["modifi",{"_index":74,"t":{"144":{"position":[[0,6]]},"311":{"position":[[0,6]]},"321":{"position":[[0,6]]}}}],["modul",{"_index":25,"t":{"44":{"position":[[0,7]]},"71":{"position":[[17,6]]},"73":{"position":[[20,6]]},"75":{"position":[[31,6]]},"83":{"position":[[17,7]]},"104":{"position":[[13,6]]},"321":{"position":[[11,6]]},"331":{"position":[[0,6]]}}}],["name",{"_index":36,"t":{"55":{"position":[[33,4]]},"61":{"position":[[13,4]]},"63":{"position":[[16,4]]},"77":{"position":[[4,4]]},"85":{"position":[[7,4],[20,4]]},"108":{"position":[[4,4]]},"110":{"position":[[4,4]]}}}],["nameservic",{"_index":2,"t":{"10":{"position":[[0,11]]},"73":{"position":[[8,11]]},"75":{"position":[[8,11]]}}}],["network",{"_index":38,"t":{"59":{"position":[[11,7]]},"168":{"position":[[27,7]]},"221":{"position":[[13,7]]},"228":{"position":[[13,7]]},"235":{"position":[[23,7]]}}}],["new",{"_index":7,"t":{"16":{"position":[[0,3]]},"102":{"position":[[11,3]]},"148":{"position":[[7,3]]},"150":{"position":[[7,3]]},"172":{"position":[[9,3]]},"307":{"position":[[4,3]]},"317":{"position":[[4,3]]}}}],["new(nil",{"_index":120,"t":{"205":{"position":[[44,8]]}}}],["next",{"_index":58,"t":{"95":{"position":[[7,5]]}}}],["nft",{"_index":83,"t":{"172":{"position":[[13,3]]},"176":{"position":[[10,3]]},"178":{"position":[[10,3]]},"180":{"position":[[13,3]]}}}],["non",{"_index":171,"t":{"348":{"position":[[21,3]]}}}],["option",{"_index":66,"t":{"126":{"position":[[0,10]]}}}],["over",{"_index":54,"t":{"85":{"position":[[25,4]]}}}],["overview",{"_index":6,"t":{"14":{"position":[[6,8]]}}}],["packet",{"_index":47,"t":{"77":{"position":[[16,6]]}}}],["panic",{"_index":118,"t":{"205":{"position":[[28,6]]}}}],["permiss",{"_index":99,"t":{"191":{"position":[[18,10]]},"199":{"position":[[12,10]]}}}],["po",{"_index":130,"t":{"225":{"position":[[15,5]]},"228":{"position":[[9,3]]}}}],["poa",{"_index":126,"t":{"216":{"position":[[19,5]]},"221":{"position":[[9,3]]}}}],["prerequisit",{"_index":41,"t":{"67":{"position":[[0,13]]},"99":{"position":[[0,13]]},"116":{"position":[[0,13]]},"132":{"position":[[0,13]]},"160":{"position":[[0,13]]},"212":{"position":[[0,13]]},"255":{"position":[[0,13]]},"297":{"position":[[0,13]]}}}],["proof",{"_index":124,"t":{"216":{"position":[[0,5]]},"225":{"position":[[0,5]]}}}],["proto",{"_index":19,"t":{"36":{"position":[[0,6]]}}}],["provid",{"_index":46,"t":{"75":{"position":[[0,7]]}}}],["push",{"_index":67,"t":{"126":{"position":[[11,4]]}}}],["queri",{"_index":0,"t":{"4":{"position":[[0,5]]},"315":{"position":[[4,7]]}}}],["refer",{"_index":163,"t":{"329":{"position":[[11,10]]}}}],["reflect",{"_index":119,"t":{"205":{"position":[[35,8]]}}}],["relay",{"_index":150,"t":{"283":{"position":[[0,7]]}}}],["remot",{"_index":112,"t":{"202":{"position":[[0,7]]}}}],["repos",{"_index":115,"t":{"202":{"position":[[37,8]]}}}],["repositori",{"_index":113,"t":{"202":{"position":[[8,10]]}}}],["requir",{"_index":135,"t":{"243":{"position":[[7,12]]}}}],["resolv",{"_index":34,"t":{"55":{"position":[[13,7]]}}}],["review",{"_index":170,"t":{"344":{"position":[[8,6]]},"346":{"position":[[11,6]]},"348":{"position":[[8,6]]}}}],["run",{"_index":109,"t":{"197":{"position":[[89,9]]},"205":{"position":[[0,7]]}}}],["scaffold",{"_index":43,"t":{"71":{"position":[[0,8]]},"104":{"position":[[0,8]]}}}],["script",{"_index":20,"t":{"38":{"position":[[0,8]]}}}],["secur",{"_index":9,"t":{"18":{"position":[[0,8]]},"232":{"position":[[11,8]]}}}],["select",{"_index":10,"t":{"18":{"position":[[9,9]]},"20":{"position":[[8,9]]}}}],["send",{"_index":65,"t":{"122":{"position":[[0,4]]},"124":{"position":[[0,4]]}}}],["servic",{"_index":53,"t":{"85":{"position":[[12,7]]}}}],["set",{"_index":40,"t":{"61":{"position":[[9,3]]},"77":{"position":[[0,3]]},"108":{"position":[[0,3]]},"303":{"position":[[0,3]]},"305":{"position":[[0,3]]},"307":{"position":[[0,3]]}}}],["setup",{"_index":139,"t":{"257":{"position":[[0,5]]},"263":{"position":[[0,5]]},"265":{"position":[[0,5]]},"271":{"position":[[0,5]]},"299":{"position":[[0,5]]},"323":{"position":[[0,5]]}}}],["socket",{"_index":111,"t":{"199":{"position":[[75,6]]}}}],["sourc",{"_index":146,"t":{"275":{"position":[[20,6]]}}}],["spawn",{"_index":5,"t":{"14":{"position":[[0,5]]},"209":{"position":[[8,5]]}}}],["specif",{"_index":145,"t":{"273":{"position":[[4,8]]}}}],["spin",{"_index":63,"t":{"120":{"position":[[0,4]]}}}],["stake",{"_index":129,"t":{"225":{"position":[[9,5]]}}}],["start",{"_index":48,"t":{"79":{"position":[[0,5]]},"136":{"position":[[0,5]]},"164":{"position":[[0,5]]},"277":{"position":[[0,5]]},"336":{"position":[[0,5]]}}}],["state",{"_index":142,"t":{"263":{"position":[[6,5]]},"303":{"position":[[4,5]]}}}],["store",{"_index":147,"t":{"279":{"position":[[0,5]]}}}],["structur",{"_index":12,"t":{"22":{"position":[[0,9]]}}}],["submit",{"_index":52,"t":{"85":{"position":[[0,6]]}}}],["such",{"_index":104,"t":{"194":{"position":[[25,4]]}}}],["sudo",{"_index":155,"t":{"317":{"position":[[8,4]]}}}],["summari",{"_index":55,"t":{"87":{"position":[[0,7]]},"291":{"position":[[0,7]]}}}],["system",{"_index":134,"t":{"243":{"position":[[0,6]]}}}],["test",{"_index":167,"t":{"335":{"position":[[0,4]]}}}],["testimoni",{"_index":4,"t":{"12":{"position":[[0,12]]}}}],["testnet",{"_index":26,"t":{"46":{"position":[[0,8]]},"79":{"position":[[6,7]]},"81":{"position":[[7,7]]},"120":{"position":[[15,7]]},"136":{"position":[[10,7]]},"164":{"position":[[10,7]]},"336":{"position":[[6,7]]}}}],["tldr",{"_index":123,"t":{"214":{"position":[[14,6]]}}}],["token",{"_index":72,"t":{"140":{"position":[[9,5]]},"142":{"position":[[11,5]]},"144":{"position":[[7,5]]},"146":{"position":[[11,5]]},"148":{"position":[[11,6]]},"150":{"position":[[11,6]]},"152":{"position":[[9,6]]},"154":{"position":[[5,6]]}}}],["tokenfactori",{"_index":70,"t":{"138":{"position":[[8,12]]}}}],["transact",{"_index":1,"t":{"6":{"position":[[0,11]]},"122":{"position":[[7,11]]},"124":{"position":[[12,11]]},"269":{"position":[[7,11]]},"287":{"position":[[0,11]]}}}],["transfer",{"_index":76,"t":{"148":{"position":[[21,8]]},"152":{"position":[[0,8]]},"180":{"position":[[0,8]]}}}],["tri",{"_index":110,"t":{"199":{"position":[[36,6]]}}}],["type",{"_index":156,"t":{"317":{"position":[[21,4]]}}}],["ubuntu",{"_index":138,"t":{"249":{"position":[[6,8]]}}}],["unix:///var/run/docker.sock",{"_index":108,"t":{"197":{"position":[[39,28]]},"199":{"position":[[85,27]]}}}],["up",{"_index":64,"t":{"120":{"position":[[5,2]]}}}],["updat",{"_index":140,"t":{"261":{"position":[[0,6]]}}}],["upload",{"_index":81,"t":{"168":{"position":[[0,6]]},"170":{"position":[[20,8]]},"338":{"position":[[0,6]]}}}],["us",{"_index":45,"t":{"73":{"position":[[0,3]]}}}],["usr/local/go",{"_index":96,"t":{"189":{"position":[[43,14]]}}}],["v2",{"_index":161,"t":{"327":{"position":[[18,4]]}}}],["valid",{"_index":172,"t":{"348":{"position":[[25,9]]}}}],["verifi",{"_index":73,"t":{"142":{"position":[[0,6]]},"146":{"position":[[0,6]]},"166":{"position":[[0,6]]},"170":{"position":[[0,6]]},"285":{"position":[[0,6]]},"289":{"position":[[0,6]]},"342":{"position":[[0,6]]},"346":{"position":[[0,6]]}}}],["video",{"_index":59,"t":{"101":{"position":[[0,5]]}}}],["walkthrough",{"_index":60,"t":{"101":{"position":[[6,11]]}}}],["wallet",{"_index":35,"t":{"55":{"position":[[21,6]]}}}],["what'",{"_index":57,"t":{"95":{"position":[[0,6]]}}}],["window",{"_index":101,"t":{"193":{"position":[[0,7]]},"245":{"position":[[0,7]]}}}],["write",{"_index":169,"t":{"344":{"position":[[0,5]]},"348":{"position":[[0,5]]}}}],["wsl",{"_index":102,"t":{"193":{"position":[[10,3]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":3,"t":"Using the Cosmos-SDKs AutoCLI, you will easily set up the CLI client for transactions and queries.","s":"Command Line Client","u":"/spawn/v0.50/build/name-service-client/","h":"","p":2},{"i":5,"t":"Update the autocli to allow someone to get the name of a wallet account. x/nameservice/autocli.go Query: &autocliv1.ServiceCommandDescriptor{ Service: modulev1.Query_ServiceDesc.ServiceName, RpcCommandOptions: []*autocliv1.RpcCommandOptions{ { RpcMethod: \"ResolveName\", Use: \"resolve [wallet]\", Short: \"Resolve the name of a wallet address\", PositionalArgs: []*autocliv1.PositionalArgDescriptor{ {ProtoField: \"wallet\"}, }, }, { RpcMethod: \"Params\", Use: \"params\", Short: \"Query the current module parameters\", }, }, }, AutoCLI Query","s":"Query","u":"/spawn/v0.50/build/name-service-client/","h":"/spawn/v0.50/build/name-service-client/#query","p":2},{"i":7,"t":"Also add interaction in x/nameservice/autocli.go to set the name of a wallet account. x/nameservice/autocli.go Tx: &autocliv1.ServiceCommandDescriptor{ Service: modulev1.Msg_ServiceDesc.ServiceName, RpcCommandOptions: []*autocliv1.RpcCommandOptions{ { RpcMethod: \"SetServiceName\", Use: \"set [name]\", Short: \"Set the mapping to your wallet address\", PositionalArgs: []*autocliv1.PositionalArgDescriptor{ {ProtoField: \"name\"}, }, }, { // NOTE: this is already included in the current source RpcMethod: \"UpdateParams\", Skip: false, }, }, }, AutoCLI Tx","s":"Transaction","u":"/spawn/v0.50/build/name-service-client/","h":"/spawn/v0.50/build/name-service-client/#transaction","p":2},{"i":9,"t":"Spawn is the easiest way to build, maintain and scale a Cosmos SDK blockchain. Spawn solves all the key pain points engineers face when building new Cosmos-SDK networks. Tailor-fit: Pick and choose modules to create a network for your needs. Commonality: Use native Cosmos tools and standards you're already familiar with. Integrations: Github actions and end-to-end testing are configured right from the start. Iteration: Quickly test between your new chain and established networks like the local Cosmos-Hub devnet.","s":"Meet Spawn","u":"/spawn/v0.50/","h":"","p":8},{"i":11,"t":"Follow Along with the NameService demo","s":"NameService Demo","u":"/spawn/v0.50/","h":"/spawn/v0.50/#nameservice-demo","p":8},{"i":13,"t":"\"Spawn is a marked transformation in CosmosSDK protocol development, allowing scaffolding and upgrading from 0.47 to 0.50 to be achievable and understandable. Without the tool, this would have been a dedicated multi-month effort\" - Ash, Burnt.com \"Spawn has truly streamlined the developer onboarding process into the Cosmos ecosystem, seamless and efficient.\" - Anil VitWit","s":"Testimonials","u":"/spawn/v0.50/","h":"/spawn/v0.50/#testimonials","p":8},{"i":15,"t":"Setting up a new blockchain used to take at least a week, requiring manual edits, debugging, and configuring tests. Now, with Spawn, you can create a custom network in just a few clicks. It generates a personalized network tailored to your project, letting you focus on writing product logic. The modular approach allows you to include or remove features, so you can start building quickly without the hassle of setting up everything from scratch. Spawn simplifies the process, especially for new developers, by removing guesswork and speeding up the setup.","s":"Spawn Overview","u":"/spawn/v0.50/","h":"/spawn/v0.50/#spawn-overview","p":8},{"i":17,"t":"Get started building using the new-chain command. Spawn will guide you through the process of selecting the modules you need and configuring your new chain. Using --help will showcase examples and other options you may want to consider for your new network. spawn new mychain --help Create a new project Usage: spawn new-chain [project-name] [flags] Aliases: new-chain, new, init, create Flags: -b, --binary string Application binary name (default \"simd\") --bypass-prompt Bypass UI prompter --denom string Bank token denomination (default \"token\") --org string Github organization name (default \"rollchains\") --skip-git No git repository created --wallet-prefix string Users wallet namespace (default \"cosmos\")","s":"New Development","u":"/spawn/v0.50/","h":"/spawn/v0.50/#new-development","p":8},{"i":19,"t":"You can read about different security models in the Consensus Security section. If you don't know which to select, use proof of authority. spawn new mychain After running the new command, navigate with your arrow keys and press 'enter' to select the module you want to use. You can only use 1 from this consensus list. Then select done. Consensus Selector (( enter to toggle )) Done ✔ proof-of-authority proof-of-stake interchain-security","s":"Security Selection","u":"/spawn/v0.50/","h":"/spawn/v0.50/#security-selection","p":8},{"i":21,"t":"You now select which features you want to include in your base application. Usually you would have to do these manually, each taking about 15 minutes to integrate. With spawn, you select them right away. It automatically configures them and give you testing for the assurance it works. An information guide will be displayed for each feature at the bottom of the UI, sharing information about what the feature does. Select the following then press 'enter' on done to continue. Feature Selector (( enter to toggle )) Done ✔ tokenfactory ✔ ibc-packetforward ✔ ibc-ratelimit cosmwasm wasm-light-client ✔ optimistic-execution ✔ block-explorer tokenfactory: Native token minting, sending, and burning on the chain Just like that, an entire network is generated. Everything you need to get started and more! Let's dive in.","s":"Feature Selection","u":"/spawn/v0.50/","h":"/spawn/v0.50/#feature-selection","p":8},{"i":23,"t":"Opening up this newly generated mychain/ gives you a general view into the entire layout. ls -laG .github/ app/ chains/ cmd/ contrib/ explorer/ interchaintest/ proto/ scripts/ .gitignore .goreleaser.yaml chain_metadata.json chain_registry_assets.json chain_registry.json chains.yaml docker-compose.yml Dockerfile go.mod go.sum Makefile README.md","s":"Structure","u":"/spawn/v0.50/","h":"/spawn/v0.50/#structure","p":8},{"i":25,"t":"This directory contains all the workflow actions for native github integration out of the box. It handles Integration & Unit tests for every code change Docker images saved to ghcr on a new version tag Public cloud or private hosted testnets App binary releases PR title formatting Markdown file valid link reviews","s":".github/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#github","p":8},{"i":27,"t":"App is the main location for all of the application connection logic. decorators/ - Initial logic as new transactions are received. Used to override input data, block requests, or add additional logic before the action begins initial processing. upgrades/ - You have to run an upgrade when you add or remove logic and nodes are already running different logic. This is where you put the upgrade information and state migrations. ante.go - The decorators for the entire network, wired together. app.go - The entire application connected and given access to the cosmos-sdk. The brain of the program. upgrades.go - Registers the upgrades/ folder logic when one is pending processing.","s":"app/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#app","p":8},{"i":29,"t":"The chains/ directory is where the local and public testnet configuration files are placed. Reference the testnets section for more information","s":"chains/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#chains","p":8},{"i":31,"t":"The cmd/ directory is the entry point for the wiring connections and is where the main.go file is located. This is where the application is started and the chain is initialized when you run the binary. By default, simd is the binary name and is saved to your $GOPATH (/home/user/go/bin/).","s":"cmd/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#cmd","p":8},{"i":33,"t":"If you enabled the explorer in the feature selection, this is where the ping.pub explorer files are located. When running a testnet with make sh-testnet or make testnet, you can launch the explorer along side the chain to view activity in real time. Blocks, transactions, uptime, connections, and more are all viewable. Easily launch it with the docker compose up command in the root of the directory.","s":"explorer/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#explorer","p":8},{"i":35,"t":"Interchaintest is a generalized integration test environment for the Interchain and beyond. It supports Cosmos, Ethereum, UTXO (Bitcoin), and other chain types. By default you will see many test like ibc_test.go, ibc_rate_limit_test.go and tokenfactory_test.go after generation. Any features you select are placed here automatically to confirm your network is working as expected. This are run with the github action automatically on every code change or you can run them manually with make local-image && make ictest-*, where the * is the testname (ictest-ibc, ictest-tokenfactory, etc).","s":"interchaintest/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#interchaintest","p":8},{"i":37,"t":"Proto, also called protocol buffers, are a generalized way to define the structure of data. Discussed this more in the Modules sub section.","s":"proto/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#proto","p":8},{"i":39,"t":"Scripts automate some more complex requirements list setting up a fast testnet or generating code on the fly. You should not need to modify anything here until you are more advanced. These are shown in the make help command to abstract away complexity.","s":"scripts/","u":"/spawn/v0.50/","h":"/spawn/v0.50/#scripts","p":8},{"i":41,"t":"A cosmetic file showcasing a format for the network. Fill in the data here once you push to the public so developers can easily see what your network is about. This is required for ICS consumer networks. If you do not use ICS, you can delete this file if you wish.","s":"chain_metadata.json","u":"/spawn/v0.50/","h":"/spawn/v0.50/#chain_metadatajson","p":8},{"i":43,"t":"These files are the format needed to upload to https://cosmos.directory/ (github). Frontends use this data to connect to the network, especially in the local-interchain testnet tool.","s":"chain_registry.json & assets","u":"/spawn/v0.50/","h":"/spawn/v0.50/#chain_registryjson--assets","p":8},{"i":45,"t":"We're all here to build new logic on top. The SDK calls these modules, or extensions, x/ for short. To make this easy spawn has a build in generator for a module. spawn module new --help Usage: spawn module new [name] [flags] Aliases: new, c, create Examples: spawn module new mymodule [--ibc-module] Flags: --ibc-middleware Set the module as an IBC Middleware --ibc-module Set the module as an IBC Module All you need to have is the name you wish to call it, and if you want standard or an IBC module. IBC enables cross network communication of the logic. This is a powerful feature that allows you to build a network of networks. You can try this out with the IBC module demo demo. For now, just create a default module called example spawn module new example 🎉 New Module 'example' generated! 🏅 Commands: - $ make proto-gen # convert proto files into code This created a new x/example module and the proto/ files in the expected structure. genesis.proto contains the data saved and more hardcoded. query.proto is how you allow external actors to grab data from the network and tx.proto is how you allow external actors to send data to the network. Spawn also connects it to the application if you look through your app/app.go. Learn how to make a new module with the Name Service guide.","s":"Modules","u":"/spawn/v0.50/","h":"/spawn/v0.50/#modules","p":8},{"i":47,"t":"This uses the local-interchain format and supports JSON or YAML. By default, 2 IBC network defaults are included. self-ibc and testnet. Run the testnet with make testnet to automatically build, setup, and launch a complex network simply. Self IBC is really only useful if you are building IBC Modules. Follow that guide to see how to use it.","s":"Testnets","u":"/spawn/v0.50/","h":"/spawn/v0.50/#testnets","p":8},{"i":49,"t":"You now need to set the data structure in the keeper to store the wallet to name pair. Keeper's are where the data is stored for future use. x/nameservice/keeper/keeper.go type Keeper struct { ... NameMapping collections.Map[string, string] } ... func NewKeeper() Keeper { ... k := Keeper{ ... NameMapping: collections.NewMap(sb, collections.NewPrefix(1), \"name_mapping\", collections.StringKey, collections.StringValue), } }","s":"Save Storage Structure","u":"/spawn/v0.50/build/name-service-application/","h":"","p":48},{"i":51,"t":"Update the msg_server logic to set the name upon request from a user. x/nameservice/keeper/msg_server.go func (ms msgServer) SetServiceName(ctx context.Context, msg *types.MsgSetServiceName) (*types.MsgSetServiceNameResponse, error) { if err := ms.k.NameMapping.Set(ctx, msg.Sender, msg.Name); err != nil { return nil, err } return &types.MsgSetServiceNameResponse{}, nil } and also for the query_server to retrieve the name. x/nameservice/keeper/query_server.go func (k Querier) ResolveName(goCtx context.Context, req *types.QueryResolveNameRequest) (*types.QueryResolveNameResponse, error) { v, err := k.Keeper.NameMapping.Get(goCtx, req.Wallet) if err != nil { return nil, err } return &types.QueryResolveNameResponse{ Name: v, }, nil }","s":"Application Logic","u":"/spawn/v0.50/build/name-service-application/","h":"/spawn/v0.50/build/name-service-application/#application-logic","p":48},{"i":54,"t":"It seems the nameservice will let you set any name length you want. Add a validation check in SetServiceName to ensure the name is less than 32 characters long. Hint #1 The SetServiceName in the msg_server.go looks like an interesting place to start. It should return an error if the name is too long. Solution If a user attempts to submit a name longer than 32 characters, it will return an error that is not allowed. x/nameservice/keeper/msg_server.go // SetServiceName implements types.MsgServer. func (ms msgServer) SetServiceName(ctx context.Context, msg *types.MsgSetServiceName) (*types.MsgSetServiceNameResponse, error) { if len(msg.Name) > 32 { return nil, fmt.Errorf(\"name cannot be longer than 32 characters\") } if err := ms.k.NameMapping.Set(ctx, msg.Sender, msg.Name); err != nil { return nil, err } return &types.MsgSetServiceNameResponse{}, nil }","s":"Challenge 1: Limit Input","u":"/spawn/v0.50/build/name-service-bonus/","h":"/spawn/v0.50/build/name-service-bonus/#challenge-1-limit-input","p":52},{"i":56,"t":"Currently the nameservice only allows you to resolve a name given a wallet. If someone has a name they should be able to resolve the wallet address. Add a new query to the query_server and autocli client to resolve a wallet address from a name. This challenge is signinicantly harder and will some previous Go programming knowledge with iterators. You can also just copy the solutions. Hint #1 Create a new query.proto for ResolveWallet that takes in a name string Solution #1 proto/nameservice/v1/query.proto // Query provides defines the gRPC querier service. service Query { // Params queries all parameters of the module. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { option (google.api.http).get = \"/nameservice/v1/params\"; } // ResolveName allows a user to resolve the name of an account. rpc ResolveName(QueryResolveNameRequest) returns (QueryResolveNameResponse) { option (google.api.http).get = \"/nameservice/v1/name/{wallet}\"; } // ResolveWallet allows a user to resolve the wallet of a name. rpc ResolveWallet(QueryResolveWalletRequest) returns (QueryResolveWalletResponse) { option (google.api.http).get = \"/nameservice/v1/wallet/{name}\"; } } message QueryResolveWalletRequest { string name = 1; } message QueryResolveWalletResponse { string wallet = 1; } make proto-gen Hint #2 Iterate through the k.Keeper.NameMapping, check the Value(). if it matches the name requested, return that wallet (Key) Solution #2 x/nameservice/keeper/query_server.go // ResolveWallet implements types.QueryServer. func (k Querier) ResolveWallet(goCtx context.Context, req *types.QueryResolveWalletRequest) (*types.QueryResolveWalletResponse, error) { // create a way to iterate over all the name mappings. iter, err := k.Keeper.NameMapping.Iterate(goCtx, nil) if err != nil { return nil, err } defer iter.Close() for ; iter.Valid(); iter.Next() { // get the value (name) v, err := iter.Value() if err != nil { return nil, err } // if current name matches the requested name, // return the wallet address for the name if v == req.Name { walletAddr, err := iter.Key() if err != nil { return nil, err } return &types.QueryResolveWalletResponse{ Wallet: walletAddr, }, nil } } return nil, fmt.Errorf(\"wallet not found for name %s\", req.Name) } This is not the most efficient way to do this. If you would like, create a new WalletMapping collection that maps name->sender when SetServiceName is called. This way you can resolve the wallet from the name in O(1) time (i.e. instant) instead of looping through all possible wallets. Hint #3 Add the AutoCLI method to ResolveWallet with the ProtoField \"name\" to match the .proto file Solution #3 x/nameservice/autocli.go func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { return &autocliv1.ModuleOptions{ Query: &autocliv1.ServiceCommandDescriptor{ Service: modulev1.Query_ServiceDesc.ServiceName, RpcCommandOptions: []*autocliv1.RpcCommandOptions{ { RpcMethod: \"ResolveName\", Use: \"resolve [wallet]\", Short: \"Resolve the name of a wallet address\", PositionalArgs: []*autocliv1.PositionalArgDescriptor{ {ProtoField: \"wallet\"}, }, }, { RpcMethod: \"ResolveWallet\", Use: \"wallet [name]\", Short: \"Resolve the wallet address from a given name\", PositionalArgs: []*autocliv1.PositionalArgDescriptor{ {ProtoField: \"name\"}, }, }, { RpcMethod: \"Params\", Use: \"params\", Short: \"Query the current module parameters\", }, }, }, ... Then make install and re-run the testnet to verify rolld q nameservice wallet returns the expected wallet address.","s":"Challenge 2: Resolve Wallet From Name","u":"/spawn/v0.50/build/name-service-bonus/","h":"/spawn/v0.50/build/name-service-bonus/#challenge-2-resolve-wallet-from-name","p":52},{"i":58,"t":"Synopsis Congrats!! You built your first network already. You are ready to run a local testnet environment to verify it works. Building your application executable Running a local testnet Interacting with the network","s":"Running your Application","u":"/spawn/v0.50/build/name-service-testnet/","h":"","p":57},{"i":60,"t":"Use the sh-testnet command (short for shell testnet) to quickly build your application, generate example wallet accounts, and start the local network on your machine. # Run a quick shell testnet make sh-testnet The chain will begin to create (mint) new blocks. You can see the logs of the network running in the terminal.","s":"Launch The Network","u":"/spawn/v0.50/build/name-service-testnet/","h":"/spawn/v0.50/build/name-service-testnet/#launch-the-network","p":57},{"i":62,"t":"Using the newly built binary (rolld from the --bin flag when the chain was created), you are going to execute the set transaction to your name. In this example, use \"alice\". This links account acc1 address to the desired name in the keeper. Then, resolve this name with the nameservice lookup. $(rolld keys show acc1 -a) is a substitute for the acc1's address. You can also use just roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87 here. rolld tx nameservice set alice --from=acc1 --yes # You can verify this transaction was successful # By querying it's unique ID. rolld q tx 565CE77057ACBF6FB5D174231455E61E65009CD628971937C19201328E0A1FFD","s":"Interact Set Name","u":"/spawn/v0.50/build/name-service-testnet/","h":"/spawn/v0.50/build/name-service-testnet/#interact-set-name","p":57},{"i":64,"t":"Now you are going to get the name of a wallet. A nested command $(rolld keys show acc1 -a) gets the unique address of the acc1 account added when you started the testnet. rolld q nameservice resolve roll1efd63aw40lxf3n4mhf7dzhjkr453axur57cawh --output=json rolld q nameservice resolve $(rolld keys show acc1 -a) --output=json The expected result should be: { \"name\": \"alice\" } note When you are ready to stop the testnet, you can use ctrl + c or killall -9 rolld. Your network is now running and you have successfully set and resolved a name! 🎉","s":"Interaction Get Name","u":"/spawn/v0.50/build/name-service-testnet/","h":"/spawn/v0.50/build/name-service-testnet/#interaction-get-name","p":57},{"i":66,"t":"In this section, you will build on top of the Name Service tutorial to add cross chain functionality. This will allow you to sent a name from another network.","s":"IBC Name Service Module","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"","p":65},{"i":68,"t":"System Setup Install Spawn Build Your Name Service Chain Tutorial","s":"Prerequisites","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#prerequisites","p":65},{"i":70,"t":"You should already have a network, rollchain, with the nameservice module from the nameservice tutorial. If you do not, complete that tutorial now. warning Make sure you do not have the previous testnet still running by stopping it with: killall -9 rolld","s":"Create your chain","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#create-your-chain","p":65},{"i":72,"t":"# if you are not already in the chain directory: cd rollchain # scaffold the base IBC module for The # cross chain name service spawn module new nsibc --ibc-module # compile latest code with matching module name # failure to do this will result in: `panic: reflect: New(nil)` make proto-gen","s":"Scaffold the IBC Module","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#scaffold-the-ibc-module","p":65},{"i":74,"t":"You now use the nameservice module you built previously within this new IBC module. This will allow you to save the name mapping on the name service, making it available for both IBC and native chain interactions. x/nsibc/keeper/keeper.go import ( ... nameservicekeeper \"github.com/rollchains/rollchain/x/nameservice/keeper\" ) type Keeper struct { ... NameServiceKeeper *nameservicekeeper.Keeper } Keeper Setup Image x/nsibc/keeper/keeper.go // NewKeeper creates a new Keeper instance. func NewKeeper( ... nsk *nameservicekeeper.Keeper, ) Keeper { ... k := Keeper{ ... NameServiceKeeper: nsk, } NewKeeper Image","s":"Use the NameService Module","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#use-the-nameservice-module","p":65},{"i":76,"t":"You must now give the IBC module access to nameservice keeper. It needs this reference so that the logic and connections can be shared. This is done in the app/app.go file. Find where the NameService IBC line is and update it to include the &app.NameserviceKeeper, reference. You can find the NameserviceKeeper set just after the NsibcKeeper is set. If you would like to re-order the original NameService keeper, you can do so. app/app.go // Create the nsibc IBC Module Keeper app.NsibcKeeper = nsibckeeper.NewKeeper( appCodec, runtime.NewKVStoreService(keys[nsibctypes.StoreKey]), app.IBCKeeper.ChannelKeeper, app.IBCKeeper.PortKeeper, scopedNsibc, &app.NameserviceKeeper, // This line added here authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) Application NameService Reference Image","s":"Provide NameService to the IBC Module","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#provide-nameservice-to-the-ibc-module","p":65},{"i":78,"t":"Now that the IBC module has access to the nameservice, you can add the logic to set a name received from another chain (called the counterparty). To implement, the OnRecvPacket method has a placeholder for where the logic should run called handleOnRecvLogic. Find the OnRecvPacket in the ibc_module.go file, then find where the handleOnRecvLogic method resides. x/nsibc/ibc_module.go // Find this method in the file func (im ExampleIBCModule) handleOnRecvLogic(ctx context.Context, data types.ExamplePacketData) error { ... return nil } handleOnRecvLogic location Once found, remove the lines within and replace with the following return. x/nsibc/ibc_module.go func (im ExampleIBCModule) handleOnRecvLogic(ctx context.Context, data types.ExamplePacketData) error { if len(data.SomeData) > 32 { return fmt.Errorf(\"name cannot be longer than 32 characters\") } return im.keeper.NameServiceKeeper.NameMapping.Set(ctx, data.Sender, data.SomeData) } This sets the name mapping from the sender to some data (the name) in the original nameservice module. note This is for example to show cross module interaction / extension with IBC. You could just as easily write the NameMapping in the ibc keeper store as well.","s":"Set Name on IBC Packet","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#set-name-on-ibc-packet","p":65},{"i":80,"t":"# build chain binary make install # verify the binary works. if you get a panic, # `make proto-gen`, then re `make install` rolld # build docker image make local-image # run testnet between itself and an IBC relayer # this will take a minute local-ic start self-ibc","s":"Start Testnet","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#start-testnet","p":65},{"i":82,"t":"Pasting the following lines in your terminal will import helper functions to interact with the testnet. The source is publicly available on GitHub to review. It gives you the ability to interact with the testnet easily using special ICT_ commands. # Import the testnet interaction helper functions # for local-interchain curl -s https://raw.githubusercontent.com/strangelove-ventures/interchaintest/main/local-interchain/bash/source.bash > ict_source.bash source ./ict_source.bash API_ADDR=\"http://localhost:8080\" # Waits for the testnet to start ICT_POLL_FOR_START $API_ADDR 50 && echo \"Testnet started\"","s":"Import Testnet Helpers","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#import-testnet-helpers","p":65},{"i":84,"t":"You are ready to connect the two chains with your IBC module protocol. The cosmos/relayer is already running between the 2 networks now. note A Channel is a connection between two chains, like a highway. A port is a specific protocol (or logic) that can connect with itself on another chain. For example; transfer to transfer, nsibc to nsibc, but transfer to nsibc can not be done. The version is just extra information (metadata) about the connection. These values are found in the keys.go file as the module name. By default version is just the module name + \"-1\". Execute the command on the testnet to connect the two chains with the IBC module with the relayer. # This will take a minute. ICT_RELAYER_EXEC $API_ADDR \"localchain-1\" \"rly tx connect localchain-1_localchain-2 --src-port=nsibc --dst-port=nsibc --order=unordered --version=nsibc-1\" # Running the channels command now shows 2 channels, one for `transfer` # and 1 for `nsibc`, marked as channel-1. echo `ICT_RELAYER_CHANNELS $API_ADDR \"localchain-1\"`","s":"Connect Your IBC Modules","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#connect-your-ibc-modules","p":65},{"i":86,"t":"# Set the IBC name from chain 1. # view this command in x/nsibc/client/tx.go rolld tx nsibc example-tx nsibc channel-1 testname --from acc0 --chain-id localchain-1 --yes # View the logs rolld q tx 8A2009667022BE432B60158498C2256AEED0E86E9DFF79BD11CC9EA70DEC4A8A # Verify chain 2 set the name ( # `rolld keys show -a acc0` from chain-1 ICT_QUERY \"http://localhost:8080\" \"localchain-2\" \"nameservice resolve roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87\"","s":"Submit Name Service Name Over IBC","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#submit-name-service-name-over-ibc","p":65},{"i":88,"t":"You just build an IBC module that interacts with your other nameservice module! It allowed you to set your name from a different network entirely and securely with IBC.","s":"Summary","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#summary","p":65},{"i":90,"t":"Scaffolding an IBC module Importing another module Adding business logic for an IBC request Connecting two chains with a custom IBC protocol Sending your first IBC packet from chain A Processing the packet on chain B and verifying it was set","s":"What you Learned","u":"/spawn/v0.50/build/name-service-ibc-module/","h":"/spawn/v0.50/build/name-service-ibc-module/#what-you-learned","p":65},{"i":92,"t":"You just crafted your first blockchain, module, and custom logic with Spawn. You have a fully functioning name service that allows users to set and retrieve their account names.","s":"Conclusion","u":"/spawn/v0.50/build/name-service-summary/","h":"","p":91},{"i":94,"t":"Generating a new chain with your desired characteristics Scaffolding a module Setting the protobuf structure for transactions, queries, and Storage Adding custom business logic to a module's server handlers Configuring the command line client Running a local testnet Interacting with the network","s":"What you Learned","u":"/spawn/v0.50/build/name-service-summary/","h":"/spawn/v0.50/build/name-service-summary/#what-you-learned","p":91},{"i":96,"t":"Extend the NameService to include IBC support with the ibc-module tutorial.","s":"What's Next?","u":"/spawn/v0.50/build/name-service-summary/","h":"/spawn/v0.50/build/name-service-summary/#whats-next","p":91},{"i":98,"t":"Synopsis Building your first Cosmos-SDK blockchain with Spawn. This tutorial focuses on a 'nameservice' where you set your account to a name you choose. Generating a new chain Creating a new module Adding custom logic Run locally Interacting with the network","s":"Overview","u":"/spawn/v0.50/build/name-service/","h":"","p":97},{"i":100,"t":"System Setup Install Spawn","s":"Prerequisites","u":"/spawn/v0.50/build/name-service/","h":"/spawn/v0.50/build/name-service/#prerequisites","p":97},{"i":103,"t":"Let's create a new chain called 'rollchain'. You are going to set defining characteristics such as Which modules to disable from the template if any Proof of Stake consensus Wallet prefix (bech32) Token name (denom) Binary executable (bin) spawn new rollchain --consensus=pos --disable=cosmwasm --bech32=roll --denom=uroll --bin=rolld 🎉 Your new blockchain 'rollchain' is now generated!","s":"Generate a New Chain","u":"/spawn/v0.50/build/name-service/","h":"/spawn/v0.50/build/name-service/#generate-a-new-chain","p":97},{"i":105,"t":"Now it is time to build the nameservice module structure. Move into the 'rollchain' directory and generate the new module with the following commands: # moves into the rollchain directory you just generated cd rollchain # scaffolds your new nameservice module spawn module new nameservice # proto-gen proto files to go # # If you get a /.cache permission error, run: # sudo chmod -R 777 $(pwd)/.cache # sudo chown -R $USER $(pwd)/.cache # # If you get a cannot find module error # go clean -modcache # make proto-gen This creates a new template module with the name nameservice in the x and proto directories. It also automatically connected to your application and is ready for use.","s":"Scaffold the Module","u":"/spawn/v0.50/build/name-service/","h":"/spawn/v0.50/build/name-service/#scaffold-the-module","p":97},{"i":107,"t":"Extend the template module and add how to store and interact with data. Specifically, you need to set and retrieve a name.","s":"Set Data Structure","u":"/spawn/v0.50/build/name-service-structure/","h":"","p":106},{"i":109,"t":"Open the proto/nameservice/v1 directory. Edit tx.proto to add the transaction setter message. proto/nameservice/v1/tx.proto // SetServiceName allows a user to set their accounts name. rpc SetServiceName(MsgSetServiceName) returns (MsgSetServiceNameResponse); } // MsgSetServiceName defines the structure for setting a name. message MsgSetServiceName { option (cosmos.msg.v1.signer) = \"sender\"; string sender = 1 [(cosmos_proto.scalar) = \"cosmos.AddressString\"]; string name = 2; } // MsgSetServiceNameResponse is an empty reply. message MsgSetServiceNameResponse {} Details proto/nameservice/v1/tx.proto file","s":"Set Name","u":"/spawn/v0.50/build/name-service-structure/","h":"/spawn/v0.50/build/name-service-structure/#set-name","p":106},{"i":111,"t":"Find query.proto and add the following proto/nameservice/v1/query.proto // ResolveName allows a user to resolve the name of an account. rpc ResolveName(QueryResolveNameRequest) returns (QueryResolveNameResponse) { option (google.api.http).get = \"/nameservice/v1/name/{wallet}\"; } } // QueryResolveNameRequest grabs the name of a wallet. message QueryResolveNameRequest { string wallet = 1; } // QueryResolveNameResponse grabs the wallet linked to a name. message QueryResolveNameResponse { string name = 1; } Details proto/nameservice/v1/query.proto","s":"Get Name","u":"/spawn/v0.50/build/name-service-structure/","h":"/spawn/v0.50/build/name-service-structure/#get-name","p":106},{"i":113,"t":"These .proto file templates will be converted into Golang source code for you to use. Build the Go source code using the command: make proto-gen Details make proto-gen expected output","s":"Generate Code","u":"/spawn/v0.50/build/name-service-structure/","h":"/spawn/v0.50/build/name-service-structure/#generate-code","p":106},{"i":115,"t":"In this tutorial, we'll create and interact with a new Cosmos-SDK blockchain called \"rollchain\", with the token denomination \"uroll\". This chain has tokenfactory and Proof of Authority, but we'll disable cosmwasm.","s":"IBC Demo","u":"/spawn/v0.50/demo/ibc/","h":"","p":114},{"i":117,"t":"System Setup Install Spawn","s":"Prerequisites","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#prerequisites","p":114},{"i":119,"t":"Create your chain using the spawn command line tool. Change the GITHUB_USERNAME to your github username. If you do not have a github, leaving it as default is fine. Create a Proof of Authority network to focus on the application logic rather than worry about the security model. This is a great starting point for new chains. GITHUB_USERNAME=rollchains # If the `--consensus` or `--disabled` flags are not present, # a selector UI will appear in your terminal to see all options. spawn new rollchain \\ --consensus=proof-of-authority \\ --bech32=roll \\ --denom=uroll \\ --bin=rolld \\ --disabled=cosmwasm,block-explorer \\ --org=${GITHUB_USERNAME} NOTE: spawn creates a ready to use repository complete with git and GitHub CI. It can be quickly pushed to a new repository getting you and your team up and running quickly.","s":"Create your chain","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#create-your-chain","p":114},{"i":121,"t":"The chains/testnet.json file contains the configuration for the testnet. It is a simple JSON file that contains the chain configurations for the testnet. By default it starts 2 networks, configures a relayer, and connects the two chains via IBC. cd rollchain # Starts 2 networks for the IBC testnet at http://127.0.0.1:8080. # - Builds the docker image of your chain # - Launches a testnet with IBC automatically connected and relayed # # Note: you can run a single node, non IBC testnet, with `make sh-testnet`. make testnet","s":"Spin up an IBC testnet","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#spin-up-an-ibc-testnet","p":114},{"i":123,"t":"# list the keys that have been provisioned with funds at launch rolld keys list # send a transaction from one account to another rolld tx bank send acc0 $(rolld keys show acc1 -a) 1337uroll --chain-id=localchain-1 # enter \"y\" to confirm the transaction # then query your balances for proof the transaction executed successfully rolld q bank balances $(rolld keys show acc1 -a)","s":"Send a Transaction","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#send-a-transaction","p":114},{"i":125,"t":"# submit a cross chain transfer from acc0 to the other address rolld tx ibc-transfer transfer transfer channel-0 cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr 7uroll --from=acc0 --chain-id=localchain-1 --yes # Query the other side to confirm it went through sleep 10 # Interact with the other chain without having to install the cosmos binary # - Endpoints found at: GET http://127.0.0.1:8080/info # - make get-localic local-ic interact localcosmos-1 query 'bank balances cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr'","s":"Send an IBC transaction","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#send-an-ibc-transaction","p":114},{"i":127,"t":"# Create a new repository on GitHub from the gh cli gh repo create rollchain --source=. --remote=upstream --push --private You can also push it the old fashioned way with https://github.com/new","s":"(optional) Push to GitHub","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#optional-push-to-github","p":114},{"i":129,"t":"In this tutorial, you configured a new custom chain, launched a testnet for it, tested a cross chain token transfer, and confirmed it was successful. This tutorial demonstrates just how easy it is to create a brand new custom Cosmos-SDK blockchain from scratch with spawn.","s":"Conclusion","u":"/spawn/v0.50/demo/ibc/","h":"/spawn/v0.50/demo/ibc/#conclusion","p":114},{"i":131,"t":"You will build a new chain with TokenFactory, enabling any account to create, transfer, and interact with fractionalized native tokens. Warning Some parts of this tutorial will not have the added context about spawn's inner workings or how commands work. Run through Build Your Application for this context.","s":"Tokenfactory","u":"/spawn/v0.50/demo/tokenfactory/","h":"","p":130},{"i":133,"t":"System Setup Install Spawn","s":"Prerequisites","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#prerequisites","p":130},{"i":135,"t":"Build a new chain that has TokenFactory configured. By default, it is enabled. GITHUB_USERNAME=rollchains spawn new rollchain \\ --consensus=proof-of-stake \\ --bech32=roll \\ --denom=uroll \\ --bin=rolld \\ --disabled=cosmwasm,block-explorer \\ --org=${GITHUB_USERNAME}","s":"Create your chain","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#create-your-chain","p":130},{"i":137,"t":"Note If make sh-testnet does not start due to a port bind error, you can kill your previously running testnet with killall -9 rolld, then try again. # move into the chain directory cd rollchain # - Installs the binary # - Setups the default keys with funds # - Starts the chain in your shell make sh-testnet","s":"Start the testnet","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#start-the-testnet","p":130},{"i":139,"t":"rolld q tokenfactory params params output The denom_creation_fee is a cost the application can set for creating new tokens by default, there is no cost. The denom_creation_gas_consume is the amount of indirect resource cost to consume for creating a new token. It is a more indirect approach to charging and is a better experience overall for developers on a network. params: denom_creation_fee: [] denom_creation_gas_consume: \"100000\"","s":"Confirm tokenfactory is enabled","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#confirm-tokenfactory-is-enabled","p":130},{"i":141,"t":"# Create a denom (native token) # - gas is is amount of compute resources to allocate. rolld tx tokenfactory create-denom mytoken --from=acc0 --chain-id=localchain-1 --yes","s":"Create a token","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#create-a-token","p":130},{"i":143,"t":"# Get our account address for the acc0 wallet / key. # acc0 is roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87 rolld q tokenfactory denoms-from-creator $(rolld keys show acc0 -a) denoms-from-creator output denoms: - factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken The output shows a denom with the named factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken Note Why did it add extra data to the token? Imagine there are 2 people, both named John. If only the name John is used, which John is it talking about? More information must be added to the name to make it unique. This is the same concept, but with tokens. The extra data is added to ensure the token is unique while it can still contain the same base name. With tokenfactory, the creators name is placed in the token. Read more about naming collisions.","s":"Verify the token was created","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#verify-the-token-was-created","p":130},{"i":145,"t":"Clients (websites, frontends, users) may wish to see more information about the token. This is where metadata comes in. You can add a ticker symbol, description, and decimal places to the token. The Interchain uses 6 decimal places as the default standard. This process of expressing fractions of a value in whole numbers is called fixed-point arithmetic and is used for financial precision. This means that 1 token is really 1,000,000 (10^6) of these micro base tokens. If I want to send you 0.5 of a token, I really send you 500,000 of these micro base tokens on the backend. # 'Denom' is short for denomination. DENOM=factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken DESCRIPTION=\"My token description\" rolld tx tokenfactory modify-metadata $DENOM MYTOKEN \"$DESCRIPTION\" 6 --from acc0 --yes","s":"Modify token metadata","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#modify-token-metadata","p":130},{"i":147,"t":"rolld q bank denom-metadata $DENOM bank denom-metadata output metadata: base: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken denom_units: - aliases: - MYTOKEN denom: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken - aliases: - factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken denom: MYTOKEN exponent: 6 description: My token description display: MYTOKEN name: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken symbol: MYTOKEN","s":"Verify the token metadata","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#verify-the-token-metadata","p":130},{"i":149,"t":"The base token structure is created, but no tokens actually exists yet. Mint new tokens to then be able to transfer them between accounts. # Mint 5,000,000 micro mytoken. By default this goes to the token creator. rolld tx tokenfactory mint 5000000$DENOM --from acc0 --yes # Verify token creator balance: roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87 rolld q bank balances $(rolld keys show acc0 -a) bank balances output balances: - amount: \"5000000\" denom: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken - amount: \"900\" denom: test - amount: \"9000000\" denom: uroll pagination: total: \"3\"","s":"Create new tokens to transfer","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#create-new-tokens-to-transfer","p":130},{"i":151,"t":"While you could mint tokens followed by a manual tx bank send transfer, you can also mint-to another account directly. # Mint 1,000,000 to another account rolld tx tokenfactory mint-to $(rolld keys show acc1 -a) 1000000$DENOM --from acc0 --yes rolld q bank balances $(rolld keys show acc1 -a) mint-to output balances: - amount: \"1000000\" denom: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken - amount: \"800\" denom: test - amount: \"10000000\" denom: uroll pagination: total: \"3\" note, you can check for just a specific token balance with rolld q bank balance $(rolld keys show acc0 -a) $DENOM balance: amount: \"5000000\" denom: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken","s":"Create new tokens for another account","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#create-new-tokens-for-another-account","p":130},{"i":153,"t":"Now with tokens minted, either user can transfer them as they please between any accounts. Even ones that do not yet have any tokens. # Send 7 base micro tokens from acc0 to acc1 rolld tx bank send acc0 $(rolld keys show acc1 -a) 7$DENOM --from acc0 --yes # Verify the 7 base tokens sent and has increased to 1000007, or 1.000007 rolld q bank balances $(rolld keys show acc1 -a)","s":"Transfer tokens","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#transfer-tokens","p":130},{"i":155,"t":"If you wish to remove tokens from the system, you can burn them from the admin account. # Burn micro tokens from account rolld tx tokenfactory burn 123$DENOM --from acc0 --yes # Verify the tokens have been reduced rolld q bank balances $(rolld keys show acc0 -a)","s":"Burn tokens","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#burn-tokens","p":130},{"i":157,"t":"In this tutorial, you built a new chain with the TokenFactory feature, launched a testnet for it, and created a new native token. You minted tokens, transferred them between accounts, and burned them. These tokens could be kept internally for some personal or application based accounting, or transferred to other chains via IBC. This is showcased in the IBC Transfer Demo.","s":"Conclusion","u":"/spawn/v0.50/demo/tokenfactory/","h":"/spawn/v0.50/demo/tokenfactory/#conclusion","p":130},{"i":159,"t":"You will build a new chain with CosmWasm, enabling support for smart contracts on a new Cosmos-SDK application. You will download a pre-built contract, upload it, and interact with it to transfer the ownership of some data. If you do not know what an NFT is, you can read about them here: investopedia.com/non-fungible-tokens-nft. Warning Some parts of this tutorial will not have the added context about spawn's inner workings or how commands work. Run through Build Your Application for this context.","s":"Non-fungible Token Demo","u":"/spawn/v0.50/demo/cw-nft/","h":"","p":158},{"i":161,"t":"System Setup Install Spawn Danger Some machines like Windows will not work with running the testnet. This is a limitation of the operating system hardware with wasm and required C language libraries / DLLs. For the best experience, try make testnet or use a Linux machine or a cloud-based linux instance from Hetzner or Digital Ocean for $6 per month.","s":"Prerequisites","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#prerequisites","p":158},{"i":163,"t":"Build a new chain that has CosmWasm configured. GITHUB_USERNAME=rollchains spawn new rollchain \\ --consensus=proof-of-stake \\ --bech32=roll \\ --denom=uroll \\ --bin=rolld \\ --disabled=block-explorer \\ --org=${GITHUB_USERNAME} View UI Selector If you remove the --disabled flag; a more intuitive UI selection approach will be taken. Make sure CosmWasm is selected with the green arrow, then press done.","s":"Create your chain","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#create-your-chain","p":158},{"i":165,"t":"Note If make sh-testnet does not start due to a port bind error, you can kill your previously running testnet with killall -9 rolld, then try again. # move into the chain directory cd rollchain # - Installs the binary # - Setups the default keys with funds # - Starts the chain in your shell make sh-testnet","s":"Start the testnet","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#start-the-testnet","p":158},{"i":167,"t":"rolld q wasm params Expected Output code_upload_access: addresses: [] permission: Everybody instantiate_default_permission: Everybody","s":"Verify CosmWasm is enabled","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#verify-cosmwasm-is-enabled","p":158},{"i":169,"t":"You will use the CW721 contract for your NFT journey. CW721 stands for CosmWasm 721. 721 corresponds to the Ethereum specification for NFTs. Understanding this is out of scope for this tutorial. Just know you can create, transfer, and query data. Download the contract code from the CosmWasm NFTs repository, then upload it to the network with the application binary. # Download the the NFT contract to your machine curl -LO https://github.com/public-awesome/cw-nfts/releases/download/v0.19.0/cw721_base.wasm # Upload the source code to the chain # - gas is is amount of compute resources to allocate. rolld tx wasm store ./cw721_base.wasm --from=acc0 \\ --gas=auto --gas-adjustment=2.0 --yes","s":"Upload the contract to the network","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#upload-the-contract-to-the-network","p":158},{"i":171,"t":"# Code id: \"1\" is available rolld q wasm list-code # See the details (A lot of spam) rolld q tx 4601FBACBDF93E4309D92E968F8B4E7F9177BCB132B65AA363AFDC26FE6B5CB6 Expected Code Info (main) -> $ rolld q wasm list-code code_infos: - code_id: \"1\" creator: roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87 data_hash: E13AA30E0D70EA895B294AD1BC809950E60FE081B322B1657F75B67BE6021B1C instantiate_permission: addresses: [] permission: Everybody pagination: next_key: null total: \"0\"","s":"Verify the code was uploaded","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#verify-the-code-was-uploaded","p":158},{"i":173,"t":"With the source now uploaded, anyone can create a new NFT collection with this base contract code now on the chain. This will be a new contract that only you control. Now, instantiate the contract to create the new NFT collection. Instantiate Format Source You can find the instantiate, execute, and query messages (json) formats in the contract source code. packages/cw721/src/msg.rs loading... View on GitHub Warning Notice the MESSAGE= below has no spaces in the JSON. This is required for the command line to parse it correctly. Failure to do so will result in the error ERR failure when running app err=\"accepts 2 arg(s), received 3\" # Get our account address for the acc0 wallet / key. rolld keys show acc0 -a # roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87 # Create the NFT collection with our account # as the authorized minter / creator for new NFTs. MESSAGE='{\"name\":\"Roll\",\"symbol\":\"ROLL\",\"minter\":\"roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87\"}' # Create the NFT collection rolld tx wasm instantiate 1 $MESSAGE --no-admin --from=acc0 --label=\"my-nft\" \\ --gas=auto --gas-adjustment=2.0 --yes","s":"Create a new NFT collection","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#create-a-new-nft-collection","p":158},{"i":175,"t":"A contract address is where all the collection and information is stored. It never changes and is the unique identifier for interaction. Think of this similar to a website, google.com always brings you to google search. NFT_CONTRACT is always the RollNFTs collection. # View all contract addresses a wallet has created rolld q wasm list-contracts-by-creator roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87 # The contract address for the NFT collection just created NFT_CONTRACT=roll14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjczpjh","s":"Contract address","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#contract-address","p":158},{"i":177,"t":"The acc0 account now must create the first NFT in the collection since it is the minter. Specify the unique ID (1), the owner (acc0), and some data to be associated with this NFT. Set the url of a sunflower image as the metadata for this tutorial. Note The token_uri is a URL that points to the metadata of the NFT. This can be a JSON object or a URL to a JSON object. This URL can be a link to an external service like IPFS, or the raw text directly. The contract does not care, it is up to you to manage the data and build the services around it. Execute Format Source packages/cw721/src/msg.rs loading... View on GitHub MESSAGE='{\"mint\":{\"token_id\":\"1\",\"owner\":\"roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87\",\"token_uri\":\"https://onlinejpgtools.com/images/examples-onlinejpgtools/sunflower.jpg\"}}' rolld tx wasm execute $NFT_CONTRACT $MESSAGE --from=acc0 \\ --gas=auto --gas-adjustment=2.0 --yes","s":"Create an NFT in the collection","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#create-an-nft-in-the-collection","p":158},{"i":179,"t":"There is now an NFT with the ID of 1 owned by roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87. Now query the contract to see the data and verify it is correct. Query Format Source packages/cw721/src/msg.rs loading... View on GitHub packages/cw721/src/msg.rs loading... View on GitHub # Get who is the owner of ID 1 rolld q wasm state smart $NFT_CONTRACT '{\"owner_of\":{\"token_id\":\"1\"}}' # Retrieve the NFT info rolld q wasm state smart $NFT_CONTRACT '{\"nft_info\":{\"token_id\":\"1\"}}'","s":"Grab this NFT data","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#grab-this-nft-data","p":158},{"i":181,"t":"Now move the token from the originally minted account (acc0) to another account (acc1). This is a simple transfer of ownership to move who owns the data. Execute Format Source packages/cw721/src/msg.rs loading... View on GitHub # Recipient account rolld keys show acc1 -a # roll1efd63aw40lxf3n4mhf7dzhjkr453axur57cawh MESSAGE='{\"transfer_nft\":{\"recipient\":\"roll1efd63aw40lxf3n4mhf7dzhjkr453axur57cawh\",\"token_id\":\"1\"}}' rolld tx wasm execute $NFT_CONTRACT $MESSAGE --from=acc0 --gas=auto --gas-adjustment=2.0 --yes # Get who is the owner of 1 # Moved to: roll1efd63aw40lxf3n4mhf7dzhjkr453axur57cawh rolld q wasm state smart $NFT_CONTRACT '{\"owner_of\":{\"token_id\":\"1\"}}'","s":"Transfer the NFT to another account","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#transfer-the-nft-to-another-account","p":158},{"i":183,"t":"In this tutorial, you built a new chain with CosmWasm enabled, launched a testnet for it, and launched an NFT collection! You uploaded a contract, created an NFT, and transferred it to another account. This is the foundation for building a new unique marketplace or game on the Interchain.","s":"Conclusion","u":"/spawn/v0.50/demo/cw-nft/","h":"/spawn/v0.50/demo/cw-nft/#conclusion","p":158},{"i":185,"t":"This section will contain common setup problems and how to resolve them.","s":"Debugging","u":"/spawn/v0.50/install/debugging/","h":"","p":184},{"i":188,"t":"Just add the following lines to ~/.bashrc (or ~/.zshrc if MacOs) and this will persist. Source If you run the above in your terminal, it will apply to the current session but not on new terminal sessions. export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin Then apply it with source ~/.bashrc or source ~/.zshrc","s":"/bin/sh: 1: go: not found","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#binsh-1-go-not-found","p":184},{"i":190,"t":"Your Go install is not properly setup. Follow the install instructions above or install directly from source with go.dev.","s":"build constraints excluded all Go files in /usr/local/go/ ...","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#build-constraints-excluded-all-go-files-in-usrlocalgo-","p":184},{"i":192,"t":"make get-heighliner chmod +x $(which heighliner) If the above does not work, your user or directory permissions may not be setup. Or your ls -la $(go env GOPATH)/bin path is to a bad. If using WSL, try https://superuser.com/questions/1352207/windows-wsl-ubuntu-sees-wrong-permissions-on-files-in-mounted-disk.","s":"make: heighliner: Permission denied","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#make-heighliner-permission-denied","p":184},{"i":195,"t":"Delete your GOMODCACHE directory: go clean -modcache or run the direct command rm -rf $(go env GOMODCACHE).","s":"make: /mnt/c/Program: No such file or directory","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#make-mntcprogram-no-such-file-or-directory","p":184},{"i":198,"t":"Start the docker daemon. Run docker engine or systemctl start docker && systemctl enable docker for Linux.","s":"Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#cannot-connect-to-the-docker-daemon-at-unixvarrundockersock-is-the-docker-daemon-running","p":184},{"i":200,"t":"You don't have permissions to interact with the Docker daemon. Install properly with https://docs.docker.com/get-started/get-docker/ sudo groupadd docker sudo usermod -aG docker $USER newgrp docker reboot # if you still get the error Technically you can also sudo chmod 666 /var/run/docker.sock but this is NOT advised. -->","s":"docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#docker-got-permission-denied-while-trying-to-connect-to-the-docker-daemon-socket-at-unixvarrundockersock","p":184},{"i":203,"t":"This error is due to not having properly make proto-gened the project. View the Application section for the solution.","s":"remote: Repository not found. fatal: reposity not found","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#remote-repository-not-found-fatal-reposity-not-found","p":184},{"i":206,"t":"The make proto-gen command was either not run, or is causing issues. This could be due to your users permissions or the filesystem. By default, the protoc docker image uses your current users id and group. Try switching as a super user (i.e. su -) or fixing your permissions. A very ugly hack is to run chmod a+rwx -R ./rollchain where ./rollchain is the project you generated. This will cause git to change all files, but it does fix it. Unsure of the long term side effects that may come up from this.","s":"Running the binary gives me panic: reflect: New(nil)","u":"/spawn/v0.50/install/debugging/","h":"/spawn/v0.50/install/debugging/#running-the-binary-gives-me-panic-reflect-newnil","p":184},{"i":208,"t":"Synopsis Install the Spawn CLI tool to your local machine","s":"Overview","u":"/spawn/v0.50/install/install-spawn/","h":"","p":207},{"i":210,"t":"Install Spawn from source. # Install from latest source git clone https://github.com/rollchains/spawn.git --depth 1 --branch v0.50.8 # Change to this directory cd spawn # Clear Go modules cache for a fresh install go clean -modcache # Install Spawn make install # Install Local Interchain (testnet runner) make get-localic # Verify installations were successful spawn local-ic # If you get \"command 'spawn' not found\", run the following # Linux / Windows / Some MacOS echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.bashrc source ~/.bashrc # MacOS echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.zshrc source ~/.zshrc # Legacy MacOS Go echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.zshrc source ~/.zshrc # Sometimes it can be good to also clear your cache # especially WSL users go clean -cache","s":"Install Spawn","u":"/spawn/v0.50/install/install-spawn/","h":"/spawn/v0.50/install/install-spawn/#install-spawn","p":207},{"i":213,"t":"System Setup Install Spawn Learn about the different network security methods you can create with spawn and the different pros and cons of each. These are called consensus algorithms and are how the network agrees on what actions get put through, and which are rejected. Danger This topic is a little more advanced due to technical speak. It is condensed to as a high level of an overview as possible. Please contribute if you can make it more accessible to average readers.","s":"Prerequisites","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#prerequisites","p":211},{"i":215,"t":"If you just want to build an application and don't want to focus on tokenomics or game theory, use proof of authority. If a token is part of your product or required to financially reward users with some lock mechanism and long term incentives, use proof of stake. If you have plans for a large amount of value to be secured or don't want to run your own network nodes, use interchain security.","s":"Choose for me (TLDR)","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#choose-for-me-tldr","p":211},{"i":218,"t":"If you do not know which security module best fits for you, use this one. The source code for this feature can be found here. The most popular example of this security model is Circle's USDC issuance network, Noble (twitter).","s":"Default","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#default","p":211},{"i":220,"t":"If you have an application and you want the network to run as efficiently as possible with a trusted set of internal nodes or external trusted 3 parties (validators), use Proof of Authority.","s":"What it does","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#what-it-does","p":211},{"i":222,"t":"To create a new network with proof-of-authority, use the --consensus=proof-of-authority flag. If --consensus is not present, a selector UI will appear in your terminal to see all options. -> $ spawn new mychain Consensus Selector (( enter to toggle )) Done ✔ proof-of-authority proof-of-stake interchain-security spawn new rollchain \\ --consensus=proof-of-authority \\ --disabled=cosmwasm,block-explorer","s":"Create a PoA network","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#create-a-poa-network","p":211},{"i":224,"t":"Benefits​ Fast Transactions: Fewer people need to agree, so it can process transactions very quickly. Less Power Usage: Doesn’t require much electricity, making it more eco-friendly. Easy to Maintain: Only a few trusted people are in charge, making it simpler to run. Stable Performance: Because only a few people make decisions, things tend to run smoothly and predictably. Downsides​ Centralized Control: A small group of people are in charge, which can lead to concerns about too much power in one place. Requires Trust: You have to trust the people in charge to make fair decisions, which can be risky. Less Diversity: Having fewer people in control means less variety in opinions and locations, which might be a problem if those people get compromised. Less Community Involvement: Regular users don’t have much of a role in helping the system, so it feels less like a community effort.","s":"Considerations","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#considerations","p":211},{"i":227,"t":"You can have the value of a network back itself by users risking their own tokens to prove they are trustworthy. This is called Proof of Stake. Believers in an application lock their tokens to earn a small portion of rewards, similar to a bank account. However, if they misbehave by trying to cheat the system or submit bad actions, the network will take a portion of their value (usually 5 - 10%) as a penalty. This security type is useful when you want a more distributed network that can be run by anyone with some holdings in the network. It is a trustless way to secure a network and the most popular security model in the ecosystem currently (Sept 2024).","s":"What it does","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#what-it-does-1","p":211},{"i":229,"t":"To create a new network with proof-of-stake, use the --consensus=proof-of-stake flag. If --consensus is not present, a selector UI will appear in your terminal to see all options. -> $ spawn new mychain Consensus Selector (( enter to toggle )) Done proof-of-authority ✔ proof-of-stake interchain-security spawn new rollchain \\ --consensus=proof-of-stake \\ --disabled=cosmwasm,block-explorer","s":"Create a PoS network","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#create-a-pos-network","p":211},{"i":231,"t":"Benefits​ More People Involved: Anyone can participate if they’re willing to invest, which makes the system feel more balanced and community-driven. Eco-Friendly: Like PoA, PoS doesn’t use much electricity, making it good for the environment. More Fairness: The system allows many people to help make decisions, reducing the chance of one group having too much control. Grows with the Community: More people can get involved as the system grows, making it scalable and inclusive. Downsides​ Slower Decision Making: Because more people are involved, it can take longer to reach a decision due to governance and politics Wealthy Have More Power: The more you invest, the more influence you have, which can lead to rich people having more control. Complex to Get Started: It can be harder for someone new to understand how to participate compared to systems with fewer decision-makers. Risk of Losing Investment: If you make a mistake or act dishonestly, you could lose your money, which adds some financial risk.","s":"Considerations","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#considerations-1","p":211},{"i":234,"t":"Interchain security shares the economic proof of stake security of a larger parent provider with a sub network, called a consumer (since they consume security). This is useful when you want to create a new network that is secure from day one, without having to bootstrap a new set of network operators and validators, and have alignment with the parent. Current networks utilizing this are CosmosHub, Stride, and Lido's Neutron. If you are from ethereum, this is similar to an Actively Validated Services (AVS) on Eigenlayer. The cost of running these networks is relatively low as you just pay a portion of your networks fees. This is a great way to take an application from a testnet to a mainnet with a trusted security model, especially if your application deals with a lot of possible monetary value. To compromise the network, an attacker would have to compromise the more secure parent network, which is a very high bar.","s":"What it does","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#what-it-does-2","p":211},{"i":236,"t":"To create a new network with interchain-security, use the --consensus=interchain-security flag. If --consensus is not present, a selector UI will appear in your terminal to see all options. ::note Note Spawn does not support creating provider networks. ::: -> $ spawn new mychain Consensus Selector (( enter to toggle )) Done proof-of-authority proof-of-stake ✔ interchain-security spawn new rollchain \\ --consensus=interchain-security \\ --disabled=cosmwasm,block-explorer","s":"Create an ICS Consumer network","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#create-an-ics-consumer-network","p":211},{"i":238,"t":"Benefits​ No Need for Consumer Chain to Build Its Own Security: The smaller or newer chain doesn't have to recruit its own set of people to protect it. It automatically benefits from the protection of the parent network, saving time and effort. Easier Node Bootstrapping: Since the parent network provides the security, the consumer chain doesn’t have to build a large number of participants to protect the system from scratch. This makes launching a new chain much faster and easier. Shared Trust: By using the same security as a well-known, established chain, the consumer chain inherits the trust and credibility of the parent network, making it more appealing to users and developers. Aligned Interests: Since the parent network's security also protects the consumer chain, both chains have an interest in maintaining a secure, well-functioning system. This alignment reduces the risk of conflicts between the two. Downsides​ Dependence on Parent Network: The consumer chain becomes dependent on the parent network. If something goes wrong with the parent network’s security or operations, the consumer chain is also affected, even if it is unrelated to the issue. Limited Autonomy: The consumer chain may have less control over its own security decisions, since it’s tied to the security model of the parent network. This could limit flexibility in responding to specific needs or changes. Potential Congestion: If many consumer chains share the same parent network, the shared security system might become congested or stretched thin, leading to slower response times or performance issues. Complexity in Governance: Any changes to the shared security might require coordination between both the parent network and the consumer chain, adding complexity to decision-making and governance. Risk of Centralization: The reliance on a single parent network’s security model might lead to centralization, where a handful of large chains dominate the ecosystem. This reduces the diversity of security models and could concentrate power.","s":"Considerations","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#considerations-2","p":211},{"i":240,"t":"You have now learned about different network security types, how to select different ones, and the pros and cons of each. You can now create a new chain with the security model that best fits your application's needs.","s":"Conclusion","u":"/spawn/v0.50/learn/consensus-security/","h":"/spawn/v0.50/learn/consensus-security/#conclusion","p":211},{"i":242,"t":"Synopsis Setup your development environment with the essentials to get started building the blockchain.","s":"Overview","u":"/spawn/v0.50/install/system-setup/","h":"","p":241},{"i":244,"t":"Before you can install and interact with spawn, you must have the following core tools installed: Go 1.22+ Docker Git If you do not have these components installed, follow the instructions below to install them.","s":"System Requirements","u":"/spawn/v0.50/install/system-setup/","h":"/spawn/v0.50/install/system-setup/#system-requirements","p":241},{"i":246,"t":"# Install WSL in powershell wsl --install Restart-Computer # Setup WSL Ubuntu Image wsl.exe --install Ubuntu-24.04 # Open wsl instance wsl # update and add snap if not already installed sudo apt update && sudo apt install snapd # Install Go (Snap) sudo snap install go --channel=1.23/stable --classic # Install Base sudo apt install make gcc git jq wget # Install github-cli sudo snap install gh # Install docker https://docs.docker.com/desktop/wsl/#turn-on-docker-desktop-wsl-2 # or snap: sudo snap install docker # Fix versioning for interaction of commands sudo chmod 666 /var/run/docker.sock # Setup base git config git config --global user.email \"yourEmail@gmail.com\" git config --global user.name \"Your Name\"","s":"Windows","u":"/spawn/v0.50/install/system-setup/","h":"/spawn/v0.50/install/system-setup/#windows","p":241},{"i":248,"t":"# Base brew install make brew install gcc brew install wget brew install jq # Github CLI - https://github.com/cli/cli brew install gh gh auth login # Golang brew install go # Docker brew install --cask docker open -a Docker # start docker desktop # settings -> General -> Start Docker Desktop when you sign in to your computer # Apply & Restart # Setup base git config git config --global user.email \"yourEmail@gmail.com\" git config --global user.name \"Your Name\"","s":"MacOS","u":"/spawn/v0.50/install/system-setup/","h":"/spawn/v0.50/install/system-setup/#macos","p":241},{"i":250,"t":"# Base sudo apt install make gcc git jq wget # (optional) Github CLI - https://github.com/cli/cli curl -sS https://webi.sh/gh | sh gh auth login # Golang GO_VERSION=1.23.0 wget https://go.dev/dl/go$GO_VERSION.linux-amd64.tar.gz sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go$GO_VERSION.linux-amd64.tar.gz # Docker sudo apt -y install docker.io # Setup base git config git config --global user.email \"yourEmail@gmail.com\" git config --global user.name \"Your Name\"","s":"Linux (Ubuntu)","u":"/spawn/v0.50/install/system-setup/","h":"/spawn/v0.50/install/system-setup/#linux-ubuntu","p":241},{"i":252,"t":"Some tutorials require CosmWasm (Rust smart contracts) setup. This section is option, unless a tutorial is CosmWasm focused. CosmWasm requires Rust. You must have this installed as the contract will be built locally. # Install rust - https://www.rust-lang.org/tools/install curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # or Update if you have it rustup update # Install other dependencies rustup target add wasm32-unknown-unknown cargo install cargo-generate --features vendored-openssl cargo install cargo-run-script","s":"CosmWasm","u":"/spawn/v0.50/install/system-setup/","h":"/spawn/v0.50/install/system-setup/#cosmwasm","p":241},{"i":254,"t":"You will build a new IBC contract with CosmWasm, enabling the same features we just built out in the IBC module. While this is a part 3 of the series, it can be done standalone as it requires a new chain. It is a similar concept to the previous parts 1 and 2, but with a smart contract focus instead of a chain.","s":"IBC Name Service Contract","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"","p":253},{"i":256,"t":"System Setup Install Spawn Rust + CosmWasm","s":"Prerequisites","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#prerequisites","p":253},{"i":258,"t":"Build a new blockchain with CosmWasm enabled. GITHUB_USERNAME=rollchains spawn new cwchain \\ --consensus=proof-of-stake \\ --bech32=roll \\ --denom=uroll \\ --bin=rolld \\ --disabled=block-explorer \\ --org=${GITHUB_USERNAME} # move into the chain directory cd cwchain # download latest dependencies go mod tidy","s":"Setup the Chain","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#setup-the-chain","p":253},{"i":260,"t":"CosmWasm has a template repository that is used to generate new contracts. A minimal contract will be built with the nameservice-contract name provided on a specific commit. cargo generate --git https://github.com/CosmWasm/cw-template.git \\ --name nameservice-contract \\ --force-git-init \\ -d minimal=true --tag a2a169164324aa1b48ab76dd630f75f504e41d99 Open the contract in your code editor now to begin adding the application logic. Info It is useful to install code rust extensions like rust-analyzer and even better toml for an increased editing experience. # open using vscode in the terminal code nameservice-contract/","s":"Build CosmWasm Contract","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#build-cosmwasm-contract","p":253},{"i":262,"t":"This version of the CosmWasm template has some outdated versions. Update these in the Cargo.toml file and add the \"ibc3\" capability (for IBC support). Cargo.toml [dependencies] cosmwasm-schema = \"1.5.7\" cosmwasm-std = { version = \"1.5.7\", features = [ # \"cosmwasm_1_3\", \"ibc3\" ] } Update your local environment with the dependencies. cargo update","s":"Update Contract Dependencies","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#update-contract-dependencies","p":253},{"i":264,"t":"This Rust code defines the structure for a name service in a CosmWasm smart contract. It saves a map of all channels (outside chain connections) to a list of wallet address and their associated names. src/state.rs use std::collections::BTreeMap; use cw_storage_plus::Map; // Pair the wallet address to the name a user provides. pub type WalletMapping = BTreeMap; /// create a new empty wallet mapping for a channel. /// useful if a channel is opened and we have no data yet pub fn new_wallet_mapping() -> WalletMapping { BTreeMap::new() } /// Name Service maps for each channel saved to a storage object pub const NAME_SERVICE: Map = Map::new(\"nameservice\");","s":"Setup State","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#setup-state","p":253},{"i":266,"t":"Now that the state is setup, focus on modeling the users interaction with the contract. Users should be able to set a name. This also requires an input for a \"channel\" since a contract could connect to multiple chains. It could be written in a way that a user could set it to all channels, but for simplicity, we will require a channel to be specified. Just as is set, a user should get the name with the same format: a channel and a wallet address. Then a new message type is added specifically for IBCExecution messages. This is the packet transfered over the network, between chains, and gives the ability to set a name elsewhere on its contract. The contract will call the IBCExecuteMsg when a user runs the ExecuteMsg.SendName function. This indirectly generates the packet and submits it for the user. src/msg.rs use cosmwasm_schema::{cw_serde, QueryResponses}; #[cw_serde] pub struct InstantiateMsg {} #[cw_serde] pub enum ExecuteMsg { SetName { channel: String, name: String }, } #[cw_serde] #[derive(QueryResponses)] pub enum QueryMsg { #[returns(GetNameResponse)] GetName { channel: String, wallet: String }, } #[cw_serde] pub enum IbcExecuteMsg { SetName { wallet: String, name: String }, } #[cw_serde] pub struct GetNameResponse { pub name: String, }","s":"Setup Interactions","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#setup-interactions","p":253},{"i":268,"t":"Here are all the imports used in this. Replace your files top. src/contract.rs #[cfg(not(feature = \"library\"))] use cosmwasm_std::entry_point; use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult}; use crate::error::ContractError; use crate::msg::{ExecuteMsg, IbcExecuteMsg, InstantiateMsg, QueryMsg}; use cosmwasm_std::{to_json_binary, IbcMsg, IbcTimeout, StdError}; Instantiate creates a new version of this contract that you control. Rather than being unimplemented, return a basic response saying it was Ok (successful) and add some extra logging metadata. src/contract.rs #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn instantiate( _deps: DepsMut, _env: Env, _info: MessageInfo, _msg: InstantiateMsg, ) -> Result { Ok(Response::new().add_attribute(\"method\", \"instantiate\")) } The ExecuteMsg::SetName method is allowed to be interacted from anyone. Just like instantiate we return a new Ok response. This time an add_message function is added. This will generate the packet as the user interacts, performing a new action from a previous action. This uses the IbcMsg::SendPacket built in type to create it for the user. Notice the data field includes the IbcExecuteMsg::SetName we defined before. This is transferred to the other version of this contract on another chain and processed. If the packet is not picked up by a relayer service provider within a few minutes, the packet will become void and stop attempting execution on the other chain's contract. src/contract.rs #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn execute( _deps: DepsMut, env: Env, // removes the underscore _ info: MessageInfo, msg: ExecuteMsg, ) -> Result { match msg { ExecuteMsg::SetName { channel, name } => { Ok(Response::new() .add_attribute(\"method\", \"set_name\") .add_attribute(\"channel\", channel.clone()) // outbound IBC message, where packet is then received on other chain .add_message(IbcMsg::SendPacket { channel_id: channel, data: to_json_binary(&IbcExecuteMsg::SetName { name: name, wallet: info.sender.into_string(), })?, // default timeout of two minutes. timeout: IbcTimeout::with_timestamp(env.block.time.plus_seconds(120)), })) } } } The users name is not set, but it is only useful if you can also get said data. Read from the NAME_SERVICE storage Map defined in state.rs. Using may load grabs the data if the channel has a name set. If no channel is found (no users have set a name from this chain), it returns an error to the user requesting. If a channel of pairs is found, it loads them and checks if the wallet address requested is set in it. If it is, return what the wallets name is set to. If the user with this wallet did not set a name, return an error. src/contract.rs #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { match msg { QueryMsg::GetName { channel, wallet } => { crate::state::NAME_SERVICE .may_load(deps.storage, channel.clone()) .and_then(|maybe_wallets| match maybe_wallets { Some(wallets) => match wallets.get(&wallet) { Some(wallet) => Ok(to_json_binary(&crate::msg::GetNameResponse { name: wallet.clone(), })?), None => Err(StdError::generic_err(\"No name set for wallet\")), }, None => Err(StdError::generic_err(\"Channel not found\")), }) } } } The contract will receive a packet and must run logic to process it. This is called the try_set_name method. It updates a given channel to include a new wallet. If the wallet already exists, it will overwrite the name. It then returns the users name back, or an error, for our future IBC logic to handle. src/contract.rs /// called on IBC packet receive in other chain pub fn try_set_name( deps: DepsMut, channel: String, wallet: String, name: String, ) -> Result { crate::state::NAME_SERVICE.update(deps.storage, channel, |wallets| -> StdResult<_> { let mut wallets = wallets.unwrap_or_default(); wallets.insert(wallet, name.clone()); Ok(wallets) })?; Ok(name) }","s":"Contract Logic","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#contract-logic","p":253},{"i":270,"t":"Create a new file, ack.rs, to handle the IBC ACK (acknowledgement) messages. This just returns back to the user if their interaction was a success or an error. touch src/ack.rs src/ack.rs use cosmwasm_schema::cw_serde; use cosmwasm_std::{to_json_binary, Binary}; /// IBC ACK. See: /// https://github.com/cosmos/cosmos-sdk/blob/f999b1ff05a4db4a338a855713864497bedd4396/proto/ibc/core/channel/v1/channel.proto#L141-L147 #[cw_serde] pub enum Ack { Result(Binary), Error(String), } pub fn make_ack_success() -> Binary { let res = Ack::Result(b\"1\".into()); to_json_binary(&res).unwrap() } pub fn make_ack_fail(err: String) -> Binary { let res = Ack::Error(err); to_json_binary(&res).unwrap() } Note Rust has a lib.rs file that is the entry point for the Rust library. All files that are used must be mentioned here to have access to them. Add the ack logic to the lib.rs so the application can use it. src/lib.rs pub mod ack; pub mod contract; ... pub use crate::error::ContractError;","s":"Create Transaction acknowledgement","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#create-transaction-acknowledgement","p":253},{"i":272,"t":"If a relayer or contract try to connect to an unlike protocol, the InvalidVersion error will be returned to the attempted actor. This contract only supports 1 protocol version across networks because it must speak the same \"language\". If you speak english while another person speaks spanish, your interactions are incompatible. Contracts are like this too. They verify their protocol version in a format like \"ics-20\" or \"ns-1\" first to make sure they can communicate. OrderedChannel is a type of flow control for network packets, or interactions. This tutorial uses unordered paths so any packet that times out or fails does not block future packets from going through. If a relayer tries to make this an ordered path, the contract returns this error to stop them from doing so. src/error.rs use cosmwasm_std::StdError; use thiserror::Error; #[derive(Error, Debug)] pub enum ContractError { #[error(\"{0}\")] Std(#[from] StdError), #[error(\"Unauthorized\")] Unauthorized {}, // Add any other custom errors you like here. // Look at https://docs.rs/thiserror/1.0.21/thiserror/ for details. #[error(\"invalid IBC channel version. Got ({actual}), expected ({expected})\")] InvalidVersion { actual: String, expected: String }, #[error(\"only unordered channels are supported\")] OrderedChannel {}, } // There is an IBC specific error that is never returned. #[derive(Error, Debug)] pub enum Never {}","s":"Setup Errors","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#setup-errors","p":253},{"i":274,"t":"Create a new file ibc.rs. Add this to the lib.rs. This is where our core IBC logic will go. touch src/ibc.rs src/lib.rs pub mod ibc; pub mod ack; pub mod contract; mod error; pub mod helpers; pub mod msg; pub mod state; pub use crate::error::ContractError; Place the following in the ibc.rs file. Import all the types needed, set the IBC version to \"ns-1\" to stand for \"nameservice-1\", and add the basic validation logic for the contract. You must ensure contracts that try to talk together are verified to work together. This is that logic. src/ibc.rs #[cfg(not(feature = \"library\"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ from_json, DepsMut, Env, IbcBasicResponse, IbcChannel, IbcChannelCloseMsg, IbcChannelConnectMsg, IbcChannelOpenMsg, IbcChannelOpenResponse, IbcOrder, IbcPacketAckMsg, IbcPacketReceiveMsg, IbcPacketTimeoutMsg, IbcReceiveResponse, }; use crate::{ ack::{make_ack_fail, make_ack_success}, contract::try_set_name, msg::IbcExecuteMsg, state::NAME_SERVICE, ContractError, }; pub const IBC_VERSION: &str = \"ns-1\"; pub fn validate_order_and_version( channel: &IbcChannel, counterparty_version: Option<&str>, ) -> Result<(), ContractError> { // We expect an unordered channel here. Ordered channels have the // property that if a message is lost the entire channel will stop // working until you start it again. if channel.order != IbcOrder::Unordered { return Err(ContractError::OrderedChannel {}); } if channel.version != IBC_VERSION { return Err(ContractError::InvalidVersion { actual: channel.version.to_string(), expected: IBC_VERSION.to_string(), }); } // Make sure that we're talking with a counterparty who speaks the // same \"protocol\" as us. // // For a connection between chain A and chain B being established // by chain A, chain B knows counterparty information during // `OpenTry` and chain A knows counterparty information during // `OpenAck`. We verify it when we have it but when we don't it's // alright. if let Some(counterparty_version) = counterparty_version { if counterparty_version != IBC_VERSION { return Err(ContractError::InvalidVersion { actual: counterparty_version.to_string(), expected: IBC_VERSION.to_string(), }); } } Ok(()) } The contract verifies data on an attempted open of a new connection. Ensure the contracts talk the same protocol language, and that all the validation basic logic is connect. Then when a channel is closed, clear the data from storage for it. It is very rare you would want to close a channel. src/ibc.rs /// Handles the `OpenInit` and `OpenTry` parts of the IBC handshake. #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn ibc_channel_open( _deps: DepsMut, _env: Env, msg: IbcChannelOpenMsg, ) -> Result { validate_order_and_version(msg.channel(), msg.counterparty_version())?; Ok(None) } #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn ibc_channel_close( deps: DepsMut, _env: Env, msg: IbcChannelCloseMsg, ) -> Result { let channel = msg.channel().endpoint.channel_id.clone(); NAME_SERVICE.remove(deps.storage, channel.clone()); Ok(IbcBasicResponse::new() .add_attribute(\"method\", \"ibc_channel_close\") .add_attribute(\"channel\", channel)) } When a successful connection is made, the contract saves a new blank wallet mapping to the channel's unique id. 'channel-0' is the first. All future connections are channel-1, channel-2, etc. This is the first step in the IBC process. The contract is now ready to receive packets once the handler logic is put in place on receive. src/ibc.rs #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn ibc_channel_connect( deps: DepsMut, _env: Env, msg: IbcChannelConnectMsg, ) -> Result { validate_order_and_version(msg.channel(), msg.counterparty_version())?; let channel = msg.channel().endpoint.channel_id.clone(); NAME_SERVICE.save( deps.storage, channel.clone(), &crate::state::new_wallet_mapping(), )?; Ok(IbcBasicResponse::new() .add_attribute(\"method\", \"ibc_channel_connect\") .add_attribute(\"channel_id\", channel)) } ibc_packet_receive handles incoming packets from already connected networks. The packet is forwarded to this contract and processed in do_ibc_packet_receive. It takes the channel and the packet data (the IbcMsg::SetName sent out from the ExecuteMsg earlier), and tries to set the name on a wallet for this channel. If successful, it returns an acknowledgment of success. If not, it returns an acknowledgment of failure. The user will see this in their log event output. src/ibc.rs #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn ibc_packet_receive( deps: DepsMut, _env: Env, msg: IbcPacketReceiveMsg, ) -> Result { // Regardless of if our processing of this packet works we need to // commit an ACK to the chain. As such, we wrap all handling logic // in a septate function and on error write out an error ack. match do_ibc_packet_receive(deps, msg) { Ok(response) => Ok(response), Err(error) => Ok(IbcReceiveResponse::new() .add_attribute(\"method\", \"ibc_packet_receive\") .add_attribute(\"error\", error.to_string()) .set_ack(make_ack_fail(error.to_string()))), } } pub fn do_ibc_packet_receive( deps: DepsMut, msg: IbcPacketReceiveMsg, ) -> Result { // The channel this packet is being relayed along on this chain. let channel = msg.packet.dest.channel_id; let msg: IbcExecuteMsg = from_json(&msg.packet.data)?; match msg { IbcExecuteMsg::SetName { wallet, name } => { let name = try_set_name(deps, channel, wallet, name)?; Ok(IbcReceiveResponse::new() .add_attribute(\"method\", \"execute_increment\") .add_attribute(\"name\", name) .set_ack(make_ack_success())) } } } Sometimes after a failed acknowledgement the contract may want to rollback some data or make note of it for future reference. This contract is simple enough so no rollback or refunds are required. We just return a basic response to the user for both the ack or a timeout. Think of this similarly as a NoOp (no operation). src/ibc.rs #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn ibc_packet_ack( _deps: DepsMut, _env: Env, _ack: IbcPacketAckMsg, ) -> Result { Ok(IbcBasicResponse::new().add_attribute(\"method\", \"ibc_packet_ack\")) } #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn ibc_packet_timeout( _deps: DepsMut, _env: Env, _msg: IbcPacketTimeoutMsg, ) -> Result { Ok(IbcBasicResponse::new().add_attribute(\"method\", \"ibc_packet_timeout\")) }","s":"IBC Specific Logic","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#ibc-specific-logic","p":253},{"i":276,"t":"The contract can now be compiled from its source into the .wasm file. This is the binary executable that will be uploaded to the chain. cargo-run-script optimize","s":"Build Contract From Source","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#build-contract-from-source","p":253},{"i":278,"t":"Make sure you are in the cwchain directory to begin interacting and uploading the contract to the chain. It is time to start the cosmwasm chain and launch a testnet that connects to itself. The self-ibc chain is automatically generated for you on the creation with spawn. It launches 2 of your networks, localchain-1 and localchain-2, and connects them with a relayer operator at startup. # Build docker image, set configs, keys, and install binary # # Error 1 (ignored) codes are okay here if you already have # the keys and configs setup. If so you only have to `make local-image` # in future runs :) make setup-testnet local-ic start self-ibc","s":"Start the chains and connect","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#start-the-chains-and-connect","p":253},{"i":280,"t":"Get the RPC interaction addresses for each network from the local-interchain testnet API. Upload the contract source to both chains using the different RPC addresses. RPC_1=`curl http://127.0.0.1:8080/info | jq -r .logs.chains[0].rpc_address` RPC_2=`curl http://127.0.0.1:8080/info | jq -r .logs.chains[1].rpc_address` echo \"Using RPC_1=$RPC_1 and RPC_2=$RPC_2\" CONTRACT_SOURCE=./nameservice-contract/artifacts/nameservice_contract.wasm rolld tx wasm store $CONTRACT_SOURCE --from=acc0 --gas=auto --gas-adjustment=2.0 --yes --node=$RPC_1 # rolld q wasm list-code --node=$RPC_1 rolld tx wasm store $CONTRACT_SOURCE --from=acc0 --gas=auto --gas-adjustment=2.0 --yes --node=$RPC_2 --chain-id=localchain-2 # rolld q wasm list-code --node=$RPC_2","s":"Store the Contract on both chains","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#store-the-contract-on-both-chains","p":253},{"i":282,"t":"You can now create your contract from the source on each chain. rolld tx wasm instantiate 1 '{}' --no-admin --from=acc0 --label=\"ns-1\" --gas=auto --gas-adjustment=2.0 --yes --node=$RPC_1 rolld tx wasm instantiate 1 '{}' --no-admin --from=acc0 --label=\"ns-1\" --gas=auto --gas-adjustment=2.0 --yes --node=$RPC_2 --chain-id=localchain-2 rolld q wasm list-contracts-by-creator roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87 rolld q wasm list-contracts-by-creator roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87 --node=$RPC_2 NSERVICE_CONTRACT=roll14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjczpjh","s":"Instantiate our Contract on both chains","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#instantiate-our-contract-on-both-chains","p":253},{"i":284,"t":"The relayer must now connect the contracts together and create an IBC connection, link, between them. Use the Local-Interchain helper methods to connect the contracts across the chains. This command will take a second then show a bunch of logs. Error context canceled is fine to see. You will verify they were opened in the next step. # Import the testnet interaction helper functions # for local-interchain curl -s https://raw.githubusercontent.com/strangelove-ventures/interchaintest/main/local-interchain/bash/source.bash > ict_source.bash source ./ict_source.bash API_ADDR=\"http://localhost:8080\" # This will take a moment. ICT_RELAYER_EXEC \"$API_ADDR\" \"localchain-1\" \\ \"rly tx link localchain-1_localchain-2 --src-port wasm.${NSERVICE_CONTRACT} --dst-port=wasm.${NSERVICE_CONTRACT} --order unordered --version ns-1\"","s":"Relayer connect","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#relayer-connect","p":253},{"i":286,"t":"Verify the channels were created. Query either with the application binary of the relayer itself. If you see both a channel-0 and channel-1 in your logs, it was a success. If you only see channel-0 re-run the above relayer exec tx link command. # app binary rolld q ibc channel channels # relayer ICT_RELAYER_EXEC \"$API_ADDR\" \"localchain-1\" \"rly q channels localchain-1\"","s":"Verify channels","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#verify-channels","p":253},{"i":288,"t":"Using the ExecuteMsg::SetName method, set a name. This will be transferred to chain 2 behind the scenes. Flushing the relayer will force it to auto pick up pending IBC packets and transfer them across. Not running this may take up to 30 seconds for the relayer to automatically pick it up. # Set the name from chain 1 MESSAGE='{\"set_name\":{\"channel\":\"channel-1\",\"name\":\"myname\"}}' rolld tx wasm execute $NSERVICE_CONTRACT \"$MESSAGE\" --from=acc0 --gas=auto --gas-adjustment=2.0 --yes # This will take a moment # 'account sequence mismatch' errors are fine. ICT_RELAYER_EXEC \"$API_ADDR\" \"localchain-1\" \"rly tx flush\"","s":"Transaction interaction","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#transaction-interaction","p":253},{"i":290,"t":"After the packet is sent over the network, processed, and acknowledged (something that can be done in less than 30 seconds), you can query the data on chain 2. You can also dump all the contract data out to get HEX and BASE64 encoded data for what the contract state storage looks like. # query the name on chain 2, from chain 1 rolld q wasm state smart $NSERVICE_CONTRACT '{\"get_name\":{\"channel\":\"channel-1\",\"wallet\":\"roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87\"}}' --node=$RPC_2 # dump contract state from the other chain rolld q wasm state all $NSERVICE_CONTRACT --node=$RPC_2","s":"Verify data","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#verify-data","p":253},{"i":292,"t":"You just build an IBC protocol using cosmwasm! It allowed you to set a name on another network entirely and securely with IBC.","s":"Summary","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#summary","p":253},{"i":294,"t":"Scaffolding an CosmWasm contract Adding business logic for an IBC request Implementing IBC in a contract Connecting two CosmWasm contracts with a custom IBC protocol Sending a packet from contract A to contract B","s":"What you Learned","u":"/spawn/v0.50/build/name-service-ibc-contract/","h":"/spawn/v0.50/build/name-service-ibc-contract/#what-you-learned","p":253},{"i":296,"t":"You will build a new chain with CosmWasm, enabling a proof-of-stake validator review system. You will write a contract to collect and manage validator reviews, integrate it with the chain, and update validator data automatically through a Cosmos-SDK endblocker module. There are easy ways to get validators in a cosmwasm smart contract. The goal of this tutorial is to teach how to pass data from the SDK to a contract.","s":"CosmWasm Validator Reviews","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"","p":295},{"i":298,"t":"System Setup Install Spawn Rust + CosmWasm","s":"Prerequisites","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#prerequisites","p":295},{"i":300,"t":"Build a new blockchain with CosmWasm enabled. THen generate a new module from the template for the reviews. GITHUB_USERNAME=rollchains spawn new rollchain \\ --consensus=proof-of-stake \\ --bech32=roll \\ --denom=uroll \\ --bin=rolld \\ --disabled=block-explorer \\ --org=${GITHUB_USERNAME} # move into the chain directory cd rollchain # Generate the Cosmos-SDK reviews module spawn module new reviews # build the proto to code make proto-gen Once the chain is started, continue on to the contract building steps","s":"Setup the Chain","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#setup-the-chain","p":295},{"i":302,"t":"CosmWasm has a template repository that is used to generate new contracts. A minimal contract will be built with the validator-reviews-contract name provided on a specific commit. cargo generate --git https://github.com/CosmWasm/cw-template.git \\ --name validator-reviews-contract \\ -d minimal=true --tag a2a169164324aa1b48ab76dd630f75f504e41d99 A new folder will be created with the contract template. code validator-reviews-contract/","s":"CosmWasm Build Contract","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#cosmwasm-build-contract","p":295},{"i":304,"t":"The contract state and base structure is set in the state.rs file. There are 2 groups of data that must be managed, validators and the reviews for validators. Validators have unique addresses and name stored on the chain. This data will be passed from the Cosmos-SDK to the contract. Reviews will save a user wallets address and their text reviews for a validator. src/state.rs use std::collections::BTreeMap; use cosmwasm_schema::cw_serde; use cw_storage_plus::{Item, Map}; #[cw_serde] pub struct Validator { pub address: String, pub moniker: String, } pub const VALIDATORS: Item> = Item::new(\"validators\"); // user -> text pub type Reviews = BTreeMap; // validator_address -> reviews pub const REVIEWS: Map<&str, Reviews> = Map::new(\"reviews\");","s":"Set State","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#set-state","p":295},{"i":306,"t":"By default contracts get 3 messages, InstantiateMsg, ExecuteMsg, and QueryMsg. Instantiate allows initial contracts setup with a configuration desired. This is not used for us. Keep it empty. Execute is where the main logic of the contract is. Add a WriteReview message to allow users to write reviews. The user must know who they want to write a review for and what it says. Query is for reading data from the contract. Add 2 queries, one to get all validators available and one to get reviews for a specific validator. The SudoMsg is a default type not typically used. Sudo stands for Super User DO where the super user is the chain. Only the chain can submit data to this message type. A SetValidators message is added to allow the chain to update the validators list within the contract. This is the pass through from the Cosmos-SDK to the contract. src/msg.rs use cosmwasm_schema::{cw_serde, QueryResponses}; #[cw_serde] pub struct InstantiateMsg {} #[cw_serde] pub enum ExecuteMsg { WriteReview { val_addr: String, review: String }, } #[cw_serde] #[derive(QueryResponses)] pub enum QueryMsg { #[returns(Vec)] Validators {}, #[returns(crate::state::Reviews)] Reviews { address: String }, } #[cw_serde] pub enum SudoMsg { SetValidators { validators: Vec, }, }","s":"Set Inputs","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#set-inputs","p":295},{"i":308,"t":"For a better experience, a new error is added to the contract. This will be used when a validator is not found in the list of validators. Users should not be allowed to post reviews for non existent validators. src/error.rs use cosmwasm_std::StdError; use thiserror::Error; #[derive(Error, Debug)] pub enum ContractError { #[error(\"{0}\")] Std(#[from] StdError), #[error(\"Unauthorized\")] Unauthorized {}, // Add any other custom errors you like here. // Look at https://docs.rs/thiserror/1.0.21/thiserror/ for details. #[error(\"The validator is not found\")] NoValidatorFound {}, }","s":"Set new error","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#set-new-error","p":295},{"i":310,"t":"The imports required for this next section are provided here. Paste these at the top of the file to get syntax highlighting. src/contract.rs use crate::state::{Reviews, REVIEWS, VALIDATORS}; use cosmwasm_std::to_json_binary; use std::collections::BTreeMap;","s":"Imports","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#imports","p":295},{"i":312,"t":"Even though no extra data is passed through to the setup method, an empty list of validators is saved to storage. This way if we try to get validators from the contract before any have been set by the chain, it returns nothing instead of an error. src/contract.rs #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn instantiate( deps: DepsMut, // removes the underscore _env: Env, _info: MessageInfo, _msg: InstantiateMsg, ) -> Result { VALIDATORS.save(deps.storage, &Vec::new())?; Ok(Response::default()) }","s":"Modify Instantiate Message","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#modify-instantiate-message","p":295},{"i":314,"t":"When the user sends a message, the contract needs to first check if the validator exist. It does this by loading the validators state and looping through all the validators to see if the one the user requested if in the list. If it is not, it returns to the user that the validator is not found. If it is found then the contract loads all reviews a validator has. If there are none, it creates an empty list of reviews since this will be the first one. The user's review is then added to the list and saved back to storage. src/contract.rs #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn execute( deps: DepsMut, // removes the underscore _env: Env, _info: MessageInfo, msg: ExecuteMsg, // removes the underscore ) -> Result { match msg { ExecuteMsg::WriteReview { val_addr, review } => { let active_validators = VALIDATORS.load(deps.storage)?; if active_validators.iter().find(|v| v.address == val_addr).is_none() { return Err(ContractError::NoValidatorFound {}); } // Get current validator reviews if any. If there are none, create a new empty review map. let mut all_revs: Reviews = match REVIEWS.may_load(deps.storage, &val_addr) { Ok(Some(rev)) => rev, _ => BTreeMap::new(), }; // Set this users review for the validator. all_revs.insert(val_addr.clone(), review); // Save the updated reviews REVIEWS.save(deps.storage, &val_addr, &all_revs)?; } } Ok(Response::default()) }","s":"Add Execute Logic","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#add-execute-logic","p":295},{"i":316,"t":"It is only useful to set reviews if you can also get them back. The first query for Validators is just a helper method so users can see who they are allowed to review. The second query is for Reviews and takes a validator address as a parameter. This will return all reviews for that validator. To get reviews for all validators, a user would need to query Validators, then iterate through all the addresses and query Reviews for each one. src/contract.rs #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult { // note: ^^ deps & msg are not underscored ^^ match msg { QueryMsg::Validators {} => { let validators = VALIDATORS.load(deps.storage)?; Ok(to_json_binary(&validators)?) } QueryMsg::Reviews { address } => { let reviews = REVIEWS.load(deps.storage, &address)?; Ok(to_json_binary(&reviews)?) } } }","s":"Add Queries","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#add-queries","p":295},{"i":318,"t":"The chain extended portion of this contract is now added. It is where the validator logic is actually set and saved to storage. As the validator set changes (nodes stop, new nodes come online), the chain will update the contract right away. src/contract.rs // Insert at the bottom of the file #[cfg_attr(not(feature = \"library\"), entry_point)] pub fn sudo(deps: DepsMut, _env: Env, msg: crate::msg::SudoMsg) -> Result { match msg { crate::msg::SudoMsg::SetValidators { validators } => { VALIDATORS.save(deps.storage, &validators)?; Ok(Response::new()) } } }","s":"Add New Sudo Message Type","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#add-new-sudo-message-type","p":295},{"i":320,"t":"Build the contract to get the cosmwasm wasm binary. This converts it from english programming rust text to 0s and 1s that the chain can understand. The optimize script requires docker to be installed and running. Make sure you followed the setup prerequisites at the top of the page and have the docker service or docker desktop installed. # run the build optimizer (from source -> contract wasm binary) cargo run-script optimize The .wasm file is then saved to ./artifacts/validator_reviews_contract.wasm.","s":"Build the Contract","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#build-the-contract","p":295},{"i":322,"t":"The contract is complete but we need to pass the data into the contract from the chain. This is done through the cosmos-sdk reviews module generated earlier. The module will be updated to include the wasm contract and the endblocker will be updated to pass the validator data to the contract.","s":"Modify the Module","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#modify-the-module","p":295},{"i":324,"t":"We must give our code access to other modules on the chain. The wasm module is required to interact with the contract. The staking module is required to get the list of validators. This keeper is the access point for all the specific logic. Add the imports, keeper setup, and new keeper output. x/reviews/keeper.go import ( ... wasmkeeper \"github.com/CosmWasm/wasmd/x/wasm/keeper\" wasmtypes \"github.com/CosmWasm/wasmd/x/wasm/types\" stakingkeeper \"github.com/cosmos/cosmos-sdk/x/staking/keeper\" ) type Keeper struct ... WasmKeeper *wasmkeeper.Keeper ContractKeeper wasmtypes.ContractOpsKeeper StakingKeeper *stakingkeeper.Keeper } func NewKeeper( ... wasmKeeper *wasmkeeper.Keeper, // since wasm may not be created yet. stakingKeeper *stakingkeeper.Keeper, authority string, ) Keeper { ... k := Keeper{ ... WasmKeeper: wasmKeeper, ContractKeeper: wasmkeeper.NewDefaultPermissionKeeper(wasmKeeper), StakingKeeper: stakingKeeper, authority: authority, } }","s":"Setup the Keeper","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#setup-the-keeper","p":295},{"i":326,"t":"Warning Testing wasm requires significantly more setup for the test environment. For now, just add a blank reference here. x/reviews/keeper/keeper_test.go func SetupTest(t *testing.T) *testFixture ... // Setup Keeper. f.k = keeper.NewKeeper(encCfg.Codec, storeService, logger, &wasmkeeper.Keeper{}, f.stakingKeeper, f.govModAddr) }","s":"'Fix' keeper_test","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#fix-keeper_test","p":295},{"i":328,"t":"Similar to the keeper_test issue, CosmWasm does not have support for Cosmos-SDK v2 depinject. This will be updated in the future. For now, set the keeper to nil and provide Staking reference. You do not need to know what this does. Just resolve the error on the line with a copy paste. x/reviews/depinject.go func ProvideModule(in ModuleInputs) ModuleOutputs { ... k := keeper.NewKeeper(in.Cdc, in.StoreService, log.NewLogger(os.Stderr), nil, &in.StakingKeeper, govAddr) }","s":"Dependency Inject (v2)","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#dependency-inject-v2","p":295},{"i":330,"t":"The main application needs the access to the wasm and staking logic as well. Fix the missing imports and add them in like so. app/app.go app.ReviewsKeeper = reviewskeeper.NewKeeper( appCodec, runtime.NewKVStoreService(keys[reviewstypes.StoreKey]), logger, &app.WasmKeeper, app.StakingKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) it is now time to use these modules and write the logic to pass data to the contract from the chain.","s":"Fix app.go references","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#fix-appgo-references","p":295},{"i":332,"t":"The CosmWasm contract requires data in a specific format. You can review this back in the src/state.rs file. Since the chain only is passing validator data over, we need to convert this into Go code manually. The Validator struct is created to match the contract. The CosmWasm contract expects a JSON formatted input. This input is put together with the Formatted method on a list of validators. The chain could have just 1 validator, or several hundred. This method will convert them all into the correct format for the list we are to pass. x/reviews/module.go // Add this below AppModule struct { type Validator struct { Address string `json:\"address\"` Moniker string `json:\"moniker\"` } type Validators []Validator func (vs Validators) Formatted() string { output := \"\" for _, val := range vs { output += fmt.Sprintf(`{\"address\":\"%s\",\"moniker\":\"%s\"},`, val.Address, val.Moniker) } // remove the trailing comma from the last output append. return output[:len(output)-1] }","s":"Module Core Logic","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#module-core-logic","p":295},{"i":334,"t":"To pass data we must first get the data. Using the GetAllValidators method from the staking module, all validators are now accessible for the logic to use. Loop through these validators and only add the ones that are bonded (active) to the list of validators. If they are bonded, they are added to the list. Once all validators have been processed the endBlockSudoMsg gets them into the JSON format required. The format is out of scope but a high level overview SetValidators in the code becomes set_validators, called snake case. The SetValidators type in rust has the element called validators which is an array of Validator objects. This is the validators array in the JSON. Each Validator object has an address and moniker field. These are the address and moniker fields in the JSON, called from the Formatted() method. x/reviews/module.go // Paste this anywhere within the file func (am AppModule) EndBlock(ctx context.Context) error { stakingVals, err := am.keeper.StakingKeeper.GetAllValidators(ctx) if err != nil { return err } validators := Validators{} for _, val := range stakingVals { // if it is not active, skip it if !val.IsBonded() { continue } validators = append(validators, Validator{ Address: val.OperatorAddress, Moniker: val.Description.Moniker, }) } // The first contract created from acc0 addr := \"roll14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjczpjh\" contract := sdk.MustAccAddressFromBech32(addr) // SudoMsg format for the contract input. // example: {\"set_validators\":{\"validators\":[{\"address\":\"ADDRESS\",\"moniker\": \"NAME\"}]}} endBlockSudoMsg := fmt.Sprintf(`{\"set_validators\":{\"validators\":[%s]}}`, validators.Formatted()) fmt.Println(\"EndBlockSudoMessage Format:\", endBlockSudoMsg) // When the network first starts up there is no contract to execute against (until uploaded) // This returns an error but is expected behavior initially. // You can not return errors in the EndBlocker as it is not a transaction. It will halt the network. // // This is why the error is only printed to the logs and not returned. // // A more proper solution would set the contract via a SDK message after it is uploaded. // This is out of scope for this tutorial, but a future challenge for you. res, err := am.keeper.ContractKeeper.Sudo(sdk.UnwrapSDKContext(ctx), contract, []byte(endBlockSudoMsg)) if err != nil { fmt.Println(\"EndBlockSudoResult\", res) fmt.Println(\"EndBlockSudoError\", err) } return nil }","s":"Implement the EndBlocker","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#implement-the-endblocker","p":295},{"i":337,"t":"Begin the CosmWasm testnet with the custom EndBlocker logic. You will see errors every block. This is expected and is explained in the EndBlock code why this is the case. make sh-testnet","s":"Start Testnet","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#start-testnet","p":295},{"i":339,"t":"Make sure you are in the rollchain directory to begin interacting and uploading the contract to the chain. CONTRACT_SOURCE=./validator-reviews-contract/artifacts/validator_reviews_contract.wasm rolld tx wasm store $CONTRACT_SOURCE --from=acc0 --gas=auto --gas-adjustment=2.0 --yes # rolld q wasm list-code","s":"Upload Contract","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#upload-contract","p":295},{"i":341,"t":"rolld tx wasm instantiate 1 '{}' --no-admin --from=acc0 --label=\"reviews\" \\ --gas=auto --gas-adjustment=2.0 --yes rolld q wasm list-contracts-by-creator roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87 REVIEWS_CONTRACT=roll14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjczpjh","s":"Instantiate our Contract","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#instantiate-our-contract","p":295},{"i":343,"t":"rolld q wasm state smart $REVIEWS_CONTRACT '{\"validators\":{}}'","s":"Verify data","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#verify-data","p":295},{"i":345,"t":"MESSAGE='{\"write_review\":{\"val_addr\":\"rollvaloper1hj5fveer5cjtn4wd6wstzugjfdxzl0xpmhf3p6\",\"review\":\"hi reviewing.\"}}' rolld tx wasm execute $REVIEWS_CONTRACT \"$MESSAGE\" --from=acc0 \\ --gas=auto --gas-adjustment=2.0 --yes","s":"Write a review","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#write-a-review","p":295},{"i":347,"t":"rolld q wasm state smart $REVIEWS_CONTRACT '{\"reviews\":{\"address\":\"rollvaloper1hj5fveer5cjtn4wd6wstzugjfdxzl0xpmhf3p6\"}}'","s":"Verify the review","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#verify-the-review","p":295},{"i":349,"t":"MESSAGE='{\"write_review\":{\"val_addr\":\"NotAValidator\",\"review\":\"hi this is a review\"}}' rolld tx wasm execute $REVIEWS_CONTRACT \"$MESSAGE\" --from=acc0 \\ --gas=auto --gas-adjustment=2.0 --yes","s":"Write a review for a non-validator","u":"/spawn/v0.50/demo/cw-validator-reviews/","h":"/spawn/v0.50/demo/cw-validator-reviews/#write-a-review-for-a-non-validator","p":295}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/3",[0,1.627,1,3.368,2,3.548,3,5.385,4,5.087,5,2.122,6,3.992,7,4.839,8,5.087,9,4.275,10,3.647]],["t/5",[0,1.576,3,5.217,10,3.994,11,2.702,12,2.365,13,4.145,14,1.986,15,3.945,16,2.064,17,4.145,18,4.145,19,2.625,20,4.504,21,4.145,22,4.145,23,0.974,24,5.579,25,4.145,26,4.302,27,4.688,28,2.255,29,4.145,30,4.145,31,4.145,32,5.217,33,3.196,34,1.762,35,4.145]],["t/7",[0,1.162,3,3.845,5,2.314,14,2.236,15,3.245,16,2.048,17,5.549,18,4.112,19,2.604,21,4.112,22,4.112,23,0.989,24,5.549,27,3.455,28,2.237,29,4.112,30,4.112,31,4.112,33,3.171,36,1.926,37,1.965,38,2.651,39,5.01,40,3.845,41,3.053,42,2.534,43,2.85,44,3.171,45,2.346,46,5.01,47,4.112,48,5.01]],["t/9",[0,1.061,1,3.785,2,3.212,34,1.596,43,2.602,49,2.176,50,4.574,51,2.787,52,2.259,53,3.754,54,4.574,55,2.69,56,4.574,57,2.196,58,4.574,59,3.016,60,4.08,61,4.574,62,1.598,63,2.132,64,4.08,65,3.754,66,3.754,67,4.08,68,1.292,69,2.091,70,4.08,71,3.016,72,3.154,73,3.754,74,4.574,75,4.574,76,3.316,77,2.253,78,3.016,79,6.353,80,3.871,81,2.602,82,3.754,83,1.952,84,3.754,85,3.316,86,2.69,87,0.903,88,3.754,89,2.091,90,4.574,91,4.574]],["t/11",[92,3.955,93,6.245,94,3.747,95,6.245]],["t/13",[1,2.706,12,2.639,49,2.504,72,3.887,96,5.028,97,5.637,98,5.637,99,3.567,100,5.041,101,3.887,102,5.028,103,5.637,104,5.637,105,5.637,106,4.326,107,4.326,108,5.637,109,5.637,110,5.028,111,4.626,112,5.637,113,5.637,114,5.637,115,5.637,116,5.637,117,3.207,118,4.626,119,5.637,120,4.626,121,5.637,122,5.637]],["t/15",[0,1.084,5,1.95,6,4.2,12,2.189,44,2.959,49,2.209,52,1.663,55,2.75,62,1.622,63,1.885,64,4.17,68,1.321,80,2.849,81,2.66,83,1.996,85,3.39,100,3.225,107,3.589,117,2.66,123,2.577,124,4.676,125,2.189,126,3.39,127,3.837,128,3.837,129,1.728,130,2.75,131,3.837,132,4.676,133,1.996,134,3.837,135,3.589,136,4.676,137,3.39,138,3.225,139,4.17,140,1.953,141,4.676,142,3.837,143,3.93,144,2.75,145,4.676,146,4.17,147,3.837,148,4.676,149,3.589,150,4.676,151,4.676,152,1.762]],["t/17",[0,1.297,1,1.836,14,1.931,15,2.684,34,1.335,47,3.139,49,2.264,52,1.36,62,2.152,63,1.118,68,1.867,69,1.748,77,1.884,81,2.176,83,1.633,87,1.436,117,2.176,135,4.292,153,1.597,154,2.936,155,1.934,156,2.522,157,4.054,158,3.139,159,2.331,160,2.25,161,2.108,162,3.825,163,2.638,164,3.139,165,3.539,166,3.139,167,3.412,168,2.936,169,2.828,170,3.78,171,1.564,172,3.49,173,3.412,174,5.592,175,3.825,176,2.522,177,3.825,178,2.421,179,2.331,180,2.497,181,3.139,182,3.825,183,3.825,184,1.748,185,3.289,186,2.638,187,3.412,188,1.441,189,3.825]],["t/19",[0,1.768,23,0.823,34,1.735,49,1.703,57,2.386,62,1.692,153,2.076,156,5.025,161,2.74,163,3.428,190,3.604,191,3.428,192,3.962,193,3.146,194,5.025,195,3.146,196,3.815,197,3.277,198,4.077,199,3.955,200,1.428,201,4.971,202,4.433,203,4.079,204,4.638,205,1.873,206,2.386,207,3.826,208,3.277,209,3.604,210,2.386,211,2.514]],["t/21",[8,2.86,23,0.909,44,2.496,49,1.351,63,1.153,69,1.803,71,2.601,76,2.86,80,2.404,81,2.244,82,3.237,83,1.684,87,0.779,92,2.05,123,2.174,126,2.86,129,1.457,133,1.684,144,4.339,146,3.518,154,3.027,156,4.436,161,2.174,171,1.613,176,2.601,180,1.761,203,3.237,204,3.944,207,3.253,208,2.601,209,2.86,212,2.05,213,3.518,214,3.619,215,3.945,216,3.027,217,3.237,218,2.404,219,2.72,220,3.945,221,2.404,222,3.619,223,3.518,224,3.518,225,3.027,226,3.237,227,3.059,228,2.113,229,3.945,230,3.945,231,1.613,232,1.547,233,3.945,234,3.945,235,1.893,236,2.72,237,2.244,238,2.601,239,2.404,240,3.237,241,2.72,242,1.847,243,3.518,244,3.945]],["t/23",[6,3.178,77,2.751,87,1.103,133,3.102,163,3.853,219,3.853,237,3.178,241,3.853,245,3.536,246,4.983,247,3.286,248,5.587,249,4.983,250,5.587,251,4.051,252,4.983,253,5.587,254,4.983,255,3.08,256,4.051,257,5.587,258,5.587,259,5.587,260,5.587,261,5.587,262,5.587,263,2.904,264,5.587,265,5.587,266,5.587,267,5.587,268,5.587,269,5.587]],["t/25",[23,0.577,62,1.346,71,3.528,76,5.121,77,2.635,78,3.528,80,3.26,169,2.705,251,3.879,263,2.781,270,2.635,271,3.879,272,5.35,273,3.386,274,5.35,275,4.106,276,5.35,277,2.335,278,3.386,279,3.147,280,2.949,281,5.35,282,3.386,283,4.391,284,4.391,285,4.772,286,4.772,287,5.35,288,2.016,289,5.35,290,5.35,291,5.35,292,2.949,293,5.35,294,2.016,295,2.389,296,3.69,297,2.635]],["t/27",[0,1.01,1,2.089,2,2.201,9,2.652,36,2.358,43,2.476,62,1.095,63,1.272,78,2.87,102,6.882,117,3.491,140,3.525,143,2.652,171,2.508,191,3.002,200,1.763,222,2.755,236,3.002,241,4.232,251,3.156,298,3.341,299,3.156,300,2.945,301,6.136,302,4.709,303,3.156,304,4.353,305,3.341,306,1.707,307,2.87,308,4.353,309,3.341,310,3.002,311,3.002,312,3.341,313,2.56,314,4.353,315,4.353,316,3.882,317,3.341,318,4.353,319,3.572,320,2.755,321,4.353,322,3.572,323,4.353,324,4.353,325,3.882,326,2.329,327,3.882]],["t/29",[81,3.905,87,1.355,89,3.137,195,4.344,222,4.344,242,3.214,270,3.38,284,5.633,288,3.115,294,2.586,328,4.526,329,4.976]],["t/31",[14,1.827,59,4.122,83,2.668,87,1.234,169,3.948,171,2.556,172,3.001,173,5.576,200,1.796,252,5.576,270,3.079,280,3.446,294,2.355,299,4.532,300,3.001,302,4.798,316,5.576,330,5.576,331,6.252,332,6.252,333,6.252]],["t/33",[4,3.912,6,3.07,9,3.288,87,1.065,93,4.428,144,3.173,153,2.253,156,3.558,200,1.55,236,3.721,237,4.518,242,2.527,247,3.173,263,2.805,270,2.657,288,2.992,294,2.033,299,3.912,300,2.59,334,3.07,335,5.396,336,2.224,337,3.415,338,4.328,339,4.428,340,4.428,341,5.396,342,3.415,343,5.396,344,5.396,345,5.396,346,5.396]],["t/35",[1,2.295,23,0.806,63,1.397,76,3.467,77,2.355,78,3.153,80,3.991,87,0.944,89,2.186,126,3.467,133,2.796,144,2.813,156,3.153,172,2.295,200,1.882,211,2.418,218,3.991,221,2.914,227,2.558,228,1.767,254,4.265,277,2.087,278,3.026,279,2.813,328,3.153,336,2.051,347,3.298,348,4.782,349,3.026,350,3.925,351,4.782,352,4.782,353,2.418,354,2.186,355,3.925,356,4.782,357,4.782,358,4.782,359,2.355,360,3.67,361,2.636,362,7.471,363,4.265,364,4.265]],["t/37",[34,2.37,51,4.137,99,4.297,133,2.898,195,4.297,242,3.179,255,3.743,306,2.663,365,3.632,366,6.79,367,4.683,368,4.137,369,6.79,370,6.056]],["t/39",[5,1.801,6,3.388,69,2.723,125,2.789,133,2.542,153,2.487,157,4.318,206,2.859,217,4.888,242,3.546,256,4.318,277,2.6,288,2.244,336,1.865,359,2.933,371,5.956,372,5.812,373,5.312,374,5.956,375,5.312,376,5.956,377,4.888,378,5.312,379,5.956,380,5.956]],["t/41",[0,1.422,4,4.444,63,2.465,100,4.228,125,2.87,158,5.031,284,5.031,292,3.379,294,2.906,306,2.404,354,2.802,359,3.019,381,6.13,382,6.13,383,4.444,384,5.031,385,5.318,386,4.705,387,5.467,388,4.705]],["t/43",[0,1.542,63,1.942,69,3.038,72,4.584,77,3.273,89,3.038,149,5.101,211,3.361,288,2.504,292,3.664,294,2.504,300,3.191,306,2.607,389,3.909,390,6.647,391,5.928]],["t/45",[2,1.418,5,1.336,12,2.559,14,1.597,19,1.458,23,0.728,27,1.934,34,3.129,49,2.454,52,1.943,62,2.01,63,1.97,68,1.543,69,1.282,73,2.302,95,3.625,129,1.036,133,1.885,140,1.845,144,1.649,153,1.171,154,2.152,155,1.418,157,2.033,159,3.777,161,1.546,164,2.302,165,2.795,166,2.302,171,1.146,172,1.346,228,2.87,239,1.709,242,1.313,255,3.012,271,2.033,273,1.775,277,1.224,280,1.546,294,1.664,300,1.346,306,2.143,334,1.595,336,1.711,359,1.381,361,1.546,365,2.923,368,1.709,388,2.152,392,2.501,393,2.033,394,2.302,395,2.302,396,2.152,397,2.152,398,2.805,399,4.417,400,1.934,401,2.152,402,2.152,403,1.649,404,1.775,405,2.152,406,2.805,407,2.805,408,2.805,409,2.302,410,3.625,411,3.94,412,2.302,413,2.501,414,2.033,415,2.302,416,2.302]],["t/47",[0,1.842,34,1.883,44,3.415,52,2.526,63,2.076,89,2.466,92,2.805,152,2.033,154,4.141,172,3.41,200,1.55,211,2.729,218,3.288,228,3.118,288,2.992,292,2.974,336,1.689,338,3.288,349,3.415,354,2.466,372,4.141,417,3.721,418,5.396,419,2.466,420,5.83,421,5.396,422,4.812]],["t/49",[0,1.2,5,1.565,14,1.512,15,2.484,23,1.019,69,2.365,129,1.912,170,2.69,306,2.71,353,2.617,368,3.153,423,5.253,424,4.373,425,4.247,426,5.175,427,3.412,428,5.175,429,3.412,430,6.162,431,5.175,432,2.944,433,4.247,434,3.569,435,5.175,436,5.175,437,5.175,438,5.175,439,5.175]],["t/51",[5,1.281,11,2.266,14,2.046,23,1.009,140,1.769,188,1.596,307,2.793,432,3.424,434,2.921,440,4.236,441,4.236,442,3.778,443,3.778,444,3.778,445,3.778,446,4.364,447,2.793,448,3.778,449,5.368,450,2.569,451,6.066,452,3.778,453,3.778,454,3.778,455,5.77,456,3.855,457,3.778,458,3.251,459,3.778,460,3.778,461,4.236,462,3.778,463,4.236,464,6.019,465,5.368,466,4.236,467,4.236]],["t/54",[5,1.185,12,1.836,14,2.149,23,0.963,36,1.507,40,5.145,83,1.673,94,1.931,161,2.161,188,1.477,205,1.477,295,1.75,328,2.585,414,2.842,432,2.23,442,3.496,443,3.496,444,3.496,445,3.496,446,2.842,447,2.585,448,3.496,449,5.078,450,2.861,451,4.86,452,3.496,453,3.496,454,3.496,455,5.073,456,3.951,468,3.92,469,3.92,470,2.842,471,3.217,472,3.009,473,6.561,474,5.979,475,4.672,476,3.496,477,3.92,478,3.496,479,3.009,480,3.009,481,2.842,482,4.672,483,3.009,484,3.92,485,3.92,486,3.496]],["t/56",[0,0.795,3,1.969,8,1.061,10,2.679,12,1.604,13,1.201,14,2.378,15,3.671,16,0.598,17,1.201,18,1.201,19,1.781,20,1.305,21,1.201,22,1.201,23,1.017,24,2.812,25,2.106,26,3.92,27,2.363,28,2.301,29,2.106,30,2.106,31,2.812,32,2.629,33,2.168,34,0.895,35,2.106,36,0.986,40,1.123,41,1.564,51,2.088,57,0.703,62,0.862,68,0.968,84,3.378,94,1.264,120,1.201,123,0.807,155,1.298,160,2.015,170,1.781,188,0.967,200,0.42,205,1.551,255,1.414,288,0.551,294,0.551,307,1.692,319,2.106,322,1.201,336,0.803,342,0.926,361,0.807,365,0.783,367,1.009,404,0.926,409,1.201,419,1.173,432,1.46,434,1.009,446,1.061,450,0.625,451,4.491,455,4.272,456,3.484,457,1.305,459,1.305,460,2.289,462,1.305,465,2.289,470,1.061,476,3.056,479,3.159,483,1.123,487,1.305,488,1.464,489,1.305,490,1.123,491,0.703,492,1.464,493,1.305,494,4.682,495,1.305,496,0.861,497,1.464,498,2.629,499,1.464,500,1.464,501,3.056,502,1.464,503,1.305,504,1.305,505,1.305,506,1.464,507,2.566,508,1.464,509,1.264,510,1.464,511,1.464,512,1.77,513,2.168,514,1.464,515,1.464,516,1.464,517,2.566,518,1.061,519,1.464,520,1.464,521,1.464,522,1.464,523,1.464,524,1.464,525,2.566,526,2.566,527,1.464,528,1.464,529,0.892,530,1.201,531,1.305,532,1.009,533,1.201,534,1.464,535,1.305,536,1.464,537,1.201,538,1.201,539,1.123,540,1.692,541,0.861,542,1.201,543,1.464,544,2.566,545,0.586,546,1.009,547,0.74,548,0.458,549,0.586]],["t/58",[37,2.476,43,3.592,52,2.245,63,2.295,89,3.591,171,2.581,200,2.257,221,3.847,235,3.031,288,2.96,347,4.354,547,3.193,550,4.846,551,6.314,552,3.592,553,3.714,554,4.354]],["t/60",[0,1.262,15,2.612,16,2.225,23,0.587,27,3.753,52,1.935,62,1.369,63,2.087,68,1.537,83,2.323,85,3.946,87,1.074,89,2.488,133,2.323,153,2.273,159,3.316,171,2.225,200,2.052,236,3.753,238,3.588,288,3.19,310,3.753,336,1.704,337,4.521,354,2.488,555,5.863,556,4.177,557,5.442,558,3.588,559,3.444]],["t/62",[0,1.699,5,1.931,9,3.89,10,2.395,14,2.141,16,1.883,23,0.689,26,2.916,28,2.851,38,2.504,57,2.212,68,1.301,87,0.91,94,3.144,159,2.807,165,2.916,169,2.33,235,2.212,246,4.109,296,3.177,359,2.269,423,2.916,491,2.212,547,2.33,548,2.477,549,1.844,552,2.621,560,4.109,561,5.694,562,4.403,563,3.781,564,4.608,565,2.395,566,4.608,567,4.608,568,2.71,569,4.608,570,2.057,571,3.038,572,4.109,573,2.916,574,3.038,575,4.608]],["t/64",[0,1.069,5,1.393,14,2.141,15,2.212,16,1.883,23,0.854,26,4.637,28,2.057,42,2.33,57,3.065,63,1.346,83,1.966,94,3.144,129,2.359,153,1.924,200,1.324,288,2.406,361,2.54,397,3.536,491,2.212,548,2.601,549,2.556,554,3.177,561,4.109,562,5.053,565,3.319,573,2.916,576,4.608,577,3.781,578,2.157,579,4.109,580,6.385,581,3.536,582,3.177,583,4.608,584,3.536,585,3.536,586,4.109]],["t/66",[12,3.145,14,2.384,19,3.492,36,2.582,52,2.389,63,1.963,87,1.326,195,4.251,393,4.87,400,4.633,587,3.225,588,4.251,589,5.156,590,3.822]],["t/68",[14,2.097,19,3.73,49,2.458,52,2.552,87,1.417,152,2.704,545,2.873,587,3.445,591,3.73]],["t/70",[34,2.203,43,3.592,63,1.845,94,3.869,129,2.333,184,2.886,200,1.814,288,2.379,336,1.977,490,4.846,548,1.977,582,4.354,584,4.846,585,4.846,587,3.771,592,5.182,593,4.578,594,4.163,595,5.182]],["t/72",[14,2.076,19,2.805,23,0.946,34,2.945,43,3.07,49,1.848,62,1.357,87,1.402,101,3.721,184,2.466,212,2.805,228,2.625,255,2.974,270,2.657,277,2.355,336,1.689,400,3.721,404,3.415,513,3.415,581,4.141,596,3.415,597,4.141,598,4.812,599,4.428,600,4.428,601,4.812,602,5.396,603,5.396]],["t/74",[0,1.01,12,2.038,14,1.793,19,2.263,23,1.02,34,2.141,37,1.707,41,2.652,62,1.543,68,1.23,71,2.87,87,0.859,94,2.144,129,1.608,152,1.64,228,2.267,279,3.609,280,2.4,336,1.363,353,2.201,423,5.149,429,2.87,432,2.476,433,5.832,434,3.002,552,2.476,604,3.572,605,3.156,606,3.341,607,3.002,608,6.136,609,2.652,610,6.338,611,4.353,612,6.136,613,3.572,614,6.136]],["t/76",[5,1.921,11,2.447,23,0.851,34,2.217,44,2.895,68,1.292,69,2.091,94,3.883,129,1.69,140,1.91,171,1.87,207,2.602,219,3.154,225,3.51,228,2.697,279,2.69,294,1.723,300,2.196,320,2.895,329,5.291,359,2.253,415,5.213,423,4.619,546,3.154,578,2.142,597,3.51,610,4.08,615,4.606,616,4.02,617,6.353,618,4.574,619,3.51,620,3.754,621,4.574,622,4.574,623,4.08,624,4.574,625,4.574,626,4.574,627,4.574,628,4.08]],["t/78",[4,2.447,5,1.541,14,1.793,23,0.929,34,2.142,36,1.297,37,1.323,41,2.056,42,1.707,87,0.666,92,1.754,94,2.509,129,1.247,138,2.327,140,2.128,143,2.056,159,2.056,200,0.969,228,2.268,294,1.92,299,2.447,303,2.447,306,2.407,320,2.136,365,2.726,383,2.447,394,2.77,400,2.327,423,2.136,424,2.136,430,3.01,432,2.898,446,3.694,450,2.175,455,2.327,456,3.458,473,4.544,474,3.01,482,2.77,483,2.59,486,3.01,529,2.056,533,2.77,541,3.61,565,1.754,590,1.92,605,2.447,615,4.45,616,2.136,620,2.77,629,3.01,630,5.095,631,3.375,632,6.138,633,3.375,634,3.375,635,5.095,636,5.095,637,5.095,638,5.095,639,5.095,640,3.01,641,3.375,642,3.375,643,3.375,644,3.375,645,2.77]],["t/80",[23,0.965,52,2.484,83,2.245,86,3.094,87,1.039,89,3.193,123,2.9,169,3.533,200,1.511,216,4.038,221,3.205,228,2.581,255,2.9,263,2.735,279,4.108,288,1.982,336,2.616,385,3.628,404,3.329,420,4.317,545,2.796,546,3.628,547,2.66,548,1.647,601,4.692,646,3.814,647,3.094]],["t/82",[0,1.109,4,3.467,23,0.908,37,2.93,45,3.067,77,2.355,83,2.796,89,2.186,92,2.486,153,1.997,211,2.418,219,3.298,288,3.172,297,2.355,530,3.925,559,3.026,588,4.145,606,3.67,609,3.991,616,3.026,648,3.67,649,5.027,650,4.782,651,4.265,652,4.782,653,4.782,654,3.467,655,4.265,656,4.265,657,4.265,658,5.842,659,4.265,660,4.782,661,4.782,662,3.467,663,4.782,664,3.67]],["t/84",[14,1.507,23,0.798,34,2.406,38,1.345,42,1.734,43,1.951,63,1.002,86,3.033,87,1.361,96,3.059,99,3.264,123,1.891,129,1.906,140,1.432,153,2.154,159,2.09,172,1.646,200,1.482,205,2.926,207,1.951,216,2.632,222,2.171,228,1.906,235,1.646,282,3.264,288,1.292,294,1.292,300,3.728,326,1.835,419,2.833,512,2.365,529,2.09,554,2.365,565,1.783,590,1.951,597,5.291,646,2.487,647,2.017,662,3.739,664,2.632,665,4.275,666,3.43,667,4.201,668,3.43,669,2.632,670,1.891,671,3.486,672,2.632,673,2.487,674,3.43,675,2.632,676,4.275,677,2.632,678,3.059,679,3.059,680,5.158,681,3.059,682,3.43,683,3.43,684,3.43]],["t/86",[5,1.981,14,1.914,23,0.938,26,3.026,38,2.93,57,2.295,87,1.587,94,2.355,153,1.997,159,2.914,205,3.028,228,1.767,247,3.852,363,4.265,419,2.994,547,2.418,548,2.339,549,1.914,558,3.153,565,2.486,568,2.813,570,2.135,574,3.153,597,5.027,667,2.914,676,4.517,685,4.782,686,3.504,687,4.782,688,4.782,689,4.782]],["t/88",[5,2.053,12,3.179,14,1.984,34,2.866,37,2.663,52,2.414,63,1.984,94,3.344,191,4.683,192,3.529,228,3.035,241,4.683]],["t/90",[5,1.784,34,2.627,87,1.637,99,3.734,101,4.069,117,3.357,130,3.47,140,2.464,168,4.529,228,3.226,239,3.595,300,2.832,307,3.891,547,2.984,553,3.47,578,2.763,590,3.357,609,3.595,665,4.069,690,4.842,691,4.764]],["t/92",[5,1.989,12,3.08,14,2.354,16,2.689,19,3.419,34,2.295,49,2.253,55,3.868,130,3.868,140,2.747,188,2.478,458,5.048,553,3.868,588,4.163,692,6.578,693,6.578]],["t/94",[5,1.768,8,4.238,9,3.562,10,3.039,34,2.04,37,2.293,62,1.47,63,1.708,81,3.326,87,1.154,89,2.672,101,4.032,130,3.438,133,2.495,140,2.441,153,2.441,200,1.679,288,2.203,368,3.562,563,4.798,578,2.737,616,3.7,690,4.798,694,5.214,695,5.846,696,3.7,697,5.846,698,5.846,699,5.214]],["t/96",[34,2.533,44,4.594,94,3.575,228,3.158,349,4.594,587,3.484,700,5.957]],["t/98",[1,2.859,2,3.012,5,1.801,14,1.74,16,2.435,34,2.079,37,2.336,49,2.04,52,2.118,55,3.503,62,1.905,63,1.74,67,5.312,68,1.682,87,1.176,89,2.723,94,2.933,130,3.503,133,2.542,140,2.487,200,1.711,550,4.571,553,3.503,578,2.789,587,2.859,701,5.312]],["t/100",[49,2.607,152,2.867,545,3.046,591,3.955]],["t/103",[5,1.604,14,1.55,15,2.546,23,0.573,34,1.851,49,1.817,55,3.12,62,1.981,68,1.498,87,1.047,129,1.96,133,2.264,169,2.683,178,3.357,180,2.369,184,3.6,187,4.732,194,3.498,198,2.838,210,2.546,235,2.546,243,4.732,365,2.838,367,3.659,491,2.546,560,4.732,694,4.732,702,4.732,703,4.071,704,3.357,705,5.305,706,5.305,707,5.305,708,3.659,709,3.659,710,3.659]],["t/105",[0,0.915,14,1.153,23,0.977,34,2.85,49,1.351,52,1.403,62,1.856,68,1.114,92,2.05,94,3.633,101,2.72,129,1.457,133,2.441,153,1.647,171,1.613,184,3.075,188,1.486,200,1.133,218,2.404,255,4.067,270,3.313,294,1.486,300,1.893,336,1.235,342,2.496,368,2.404,395,3.237,404,3.619,450,2.441,491,2.745,554,2.72,596,2.496,615,2.86,704,2.496,711,3.944,712,3.518,713,2.72,714,4.146,715,2.86,716,4.693,717,3.945,718,5.719,719,3.945,720,3.237,721,3.237]],["t/107",[5,2.098,14,2.028,34,2.422,36,2.667,37,2.721,69,3.172,306,2.721,424,4.392,458,5.326,670,3.825,700,5.695,704,4.392]],["t/109",[5,1.94,9,2.828,12,2.173,14,2.149,16,1.897,23,1.008,36,1.784,40,3.562,127,3.809,160,2.73,170,3.336,188,1.749,205,1.749,245,2.937,270,2.286,294,1.749,367,3.201,368,2.828,413,4.14,419,2.122,456,2.347,498,3.562,509,3.622,533,5.266,722,4.641,723,4.641,724,6.417,725,4.641,726,7.355,727,6.417,728,4.641,729,4.641,730,4.641,731,3.365,732,4.641,733,3.201]],["t/111",[12,2.256,14,2.356,15,3.6,16,1.97,23,1.03,25,3.955,26,3.05,36,1.852,92,2.505,160,2.834,170,3.423,188,1.816,205,2.481,296,3.323,409,3.955,412,5.404,456,2.437,495,5.873,498,3.698,501,4.298,503,4.298,504,6.69,505,4.298,509,3.243,615,3.494,733,3.323,734,6.585]],["t/113",[0,1.799,45,3.633,52,2.201,153,2.585,255,4.672,277,3.386,294,2.332,336,2.429,361,3.412,404,4.91,405,4.751,491,2.971,704,3.918,733,4.269,735,5.08,736,3.641]],["t/115",[1,3.061,2,3.225,37,2.501,55,3.751,62,1.604,68,1.801,87,1.259,180,2.848,181,5.234,184,2.915,198,3.412,199,3.751,227,3.412,231,2.607,365,3.412,587,3.061,703,4.895,737,7.905,738,5.234]],["t/117",[49,2.607,152,2.867,545,3.046,591,3.955]],["t/119",[0,1.326,6,2.244,23,0.964,42,1.995,49,2.305,59,2.601,62,1.692,63,1.153,68,1.9,72,2.72,77,3.313,83,1.684,85,4.146,87,1.129,137,2.86,140,1.647,153,1.647,160,2.32,165,2.496,171,1.613,172,1.893,176,2.601,184,1.803,185,2.32,186,3.944,192,2.05,193,2.496,194,2.601,198,2.11,199,3.363,200,1.133,208,2.601,237,2.244,278,2.496,354,1.803,384,3.237,554,2.72,559,2.496,577,3.237,592,3.237,616,2.496,703,3.027,708,2.72,709,2.72,710,2.72,739,3.945,740,3.945,741,3.945,742,3.237,743,3.945,744,3.518,745,2.86,746,3.027,747,3.027,748,2.601,749,2.86,750,2.86,751,3.945,752,3.945]],["t/121",[23,0.896,42,2.33,52,1.638,63,1.866,81,4.168,83,2.725,87,1.446,172,2.212,184,2.106,200,1.324,218,2.807,228,2.923,263,2.395,271,4.629,279,2.71,288,3.32,294,2.406,300,3.065,311,3.177,336,1.999,337,2.916,338,2.807,417,3.177,419,2.918,596,2.916,647,3.755,665,3.177,753,4.608,754,3.781,755,3.781,756,4.608,757,4.109,758,4.109]],["t/123",[9,4.644,10,2.584,16,2.032,23,0.881,38,1.949,57,3.92,87,0.981,179,4.098,198,2.659,204,3.428,205,1.873,206,3.228,235,2.386,239,4.098,326,2.659,338,3.029,360,3.815,548,2.671,549,1.99,562,4.638,565,3.496,586,4.433,590,2.828,686,2.659,759,4.971,760,4.079,761,4.971,762,3.604,763,4.433,764,4.434]],["t/125",[1,2.278,10,3.387,23,0.906,28,2.119,37,2.556,38,1.861,87,1.469,89,2.979,107,3.643,155,2.4,169,2.4,179,2.892,205,2.455,228,1.754,336,1.486,339,3.895,360,3.643,385,3.273,400,3.273,481,3.441,529,2.892,545,1.9,548,1.486,570,2.119,667,2.892,671,4.051,686,2.539,762,3.441,764,3.129,765,3.643,766,6.517,767,4.746,768,2.539,769,4.746,770,4.746,771,4.233,772,3.441,773,4.746,774,4.233,775,4.746]],["t/127",[7,4.399,23,0.688,45,2.986,51,3.886,62,1.604,68,2.233,77,3.141,184,2.915,186,4.399,286,5.689,384,6.487,776,6.067,777,6.378,778,6.378,779,6.378,780,6.378,781,6.378]],["t/129",[1,2.886,2,3.041,49,2.06,55,3.537,62,1.916,68,1.698,80,3.664,81,3.421,87,1.504,130,4.481,147,4.935,180,2.685,288,2.266,338,3.664,360,4.615,396,4.615,400,4.147,571,3.965,587,3.657,671,3.041,782,6.013,783,6.013]],["t/131",[16,2.435,37,2.336,52,2.693,62,1.498,68,1.682,71,3.927,87,1.176,153,2.487,155,3.012,171,2.435,180,2.66,200,1.711,221,4.614,227,3.186,334,3.388,578,2.789,587,2.859,593,4.318,671,3.012,784,5.312,785,4.318,786,6.215,787,5.312,788,5.312]],["t/133",[49,2.607,152,2.867,545,3.046,591,3.955]],["t/135",[23,1.003,49,2.08,52,2.159,62,1.928,81,3.454,87,1.199,172,2.914,184,2.775,210,2.914,227,3.248,237,3.454,334,3.454,708,4.187,709,4.187,710,4.187,745,4.402,748,4.003,749,4.402,750,4.402]],["t/137",[23,0.908,42,2.705,57,2.568,83,3.015,87,1.395,152,2.016,169,2.705,172,2.568,184,2.445,200,1.537,270,2.635,288,2.98,336,2.212,337,4.47,403,3.147,450,2.283,545,2.142,548,1.675,555,4.391,584,4.106,585,4.106,596,3.386,604,4.391,669,4.106,711,3.69,760,4.391,789,3.69,790,4.772,791,4.772,792,4.391]],["t/139",[5,1.632,23,0.582,32,6.095,62,1.787,63,1.577,68,2.006,100,3.721,142,4.428,171,2.206,172,2.59,180,3.172,227,2.886,242,2.527,386,4.141,548,1.689,549,2.16,736,3.173,793,7.104,794,7.083,795,7.104,796,3.721,797,7.104,798,4.428,799,4.812,800,4.428,801,4.141,802,5.396,803,5.396]],["t/141",[23,0.843,38,2.452,68,2.205,71,4.122,87,1.234,178,4.941,180,2.791,205,2.355,227,3.344,548,1.957,570,2.791,762,4.532,768,3.344,796,4.311,798,5.13,804,3.446,805,4.798,806,5.576,807,4.798]],["t/143",[0,0.957,14,2.495,15,1.98,16,1.686,23,0.745,28,1.842,36,1.585,42,2.086,57,2.835,178,4.767,180,3.363,190,2.991,212,2.144,222,2.611,227,3.159,242,2.766,271,2.991,306,2.316,328,2.72,336,1.292,419,1.886,471,3.385,548,1.849,549,1.651,565,3.07,568,2.426,573,3.738,578,2.766,595,3.385,607,2.845,672,4.533,686,3.691,736,3.474,808,4.549,809,4.533,810,4.125,811,3.166,812,6.899,813,3.679,814,4.073,815,3.679,816,4.125]],["t/145",[0,1.351,8,2.933,23,0.437,27,2.79,36,1.555,38,1.587,59,2.668,73,3.32,117,2.302,161,2.23,172,1.942,178,3.686,180,3.791,181,3.32,188,1.524,205,1.524,211,2.046,212,3.028,222,2.56,227,2.164,239,3.549,242,1.894,328,3.84,354,1.849,365,2.164,375,3.608,388,3.105,391,3.608,422,5.195,512,2.79,548,1.267,570,1.807,673,4.223,686,2.164,784,3.608,807,3.105,817,3.608,818,3.32,819,4.046,820,3.608,821,6.087,822,5.825,823,4.78,824,4.046,825,4.046,826,3.608,827,3.105,828,4.046,829,3.32,830,4.046,831,3.608,832,3.608,833,4.046,834,4.47,835,4.046,836,4.046,837,4.046,838,4.046,839,4.046]],["t/147",[14,1.647,166,5.999,178,5.628,179,4.454,180,2.517,212,2.93,223,5.028,548,1.765,549,2.257,673,5.881,736,3.315,807,6.587,809,6.587,820,5.028,821,6.519,823,4.626,840,5.637,841,5.637]],["t/149",[16,1.83,23,0.675,38,1.756,57,2.149,62,1.126,68,1.264,80,2.728,86,2.633,172,2.149,178,4.566,179,3.813,180,3.671,212,2.327,227,2.395,238,4.757,368,2.728,540,2.952,547,2.264,548,2.259,549,1.792,565,2.327,568,2.633,570,1.999,671,2.264,686,3.348,736,2.633,738,3.674,764,5.151,796,4.976,807,3.436,808,4.126,809,3.436,834,3.436,842,3.436,843,3.436,844,4.477,845,3.993,846,4.477,847,3.993,848,4.477,849,4.477,850,3.674,851,3.674]],["t/151",[16,2.426,23,0.448,38,2.327,42,2.1,57,3.324,80,2.53,92,2.158,126,3.011,178,5.057,179,4.219,180,2.65,227,2.221,238,5.269,239,2.53,470,3.011,540,2.738,548,2.602,549,2.375,562,4.092,565,3.599,570,1.854,590,3.376,670,2.289,671,2.1,686,3.174,736,2.442,738,3.408,764,5.269,796,5.21,809,4.554,832,3.704,847,3.704,850,3.408,851,3.408,852,3.408,853,4.153,854,4.153,855,4.153,856,4.153]],["t/153",[16,2.032,23,0.726,38,1.949,57,3.228,86,2.923,129,1.836,179,4.098,180,3.646,188,1.873,212,3.496,238,3.277,239,4.098,326,2.659,547,2.514,548,2.557,549,1.99,562,5.256,565,3.496,570,2.219,589,3.815,671,2.514,686,4.077,764,3.277,834,3.815,857,4.433,858,3.815,859,6.725,860,4.971,861,4.433,862,4.971,863,4.971]],["t/155",[16,3.023,23,0.798,38,2.251,57,2.755,143,3.497,179,3.497,180,3.653,227,3.07,240,6.715,388,4.405,547,2.902,548,2.562,549,2.298,565,2.983,570,2.563,591,2.983,686,3.956,764,3.784,834,4.405,864,4.405,865,5.74,866,4.71]],["t/157",[16,2.988,62,1.839,68,1.592,71,3.717,86,3.315,87,1.443,95,4.626,134,4.626,144,3.315,158,4.626,171,2.304,180,3.622,212,2.93,227,3.015,228,2.701,238,3.717,240,4.626,288,2.124,338,3.435,552,3.207,587,2.706,671,4.102,755,4.626,867,5.637,868,5.028]],["t/159",[1,2.464,2,2.595,37,2.013,52,2.443,62,1.728,87,1.013,153,2.143,155,2.595,171,2.809,180,2.292,190,3.721,197,3.384,200,1.474,221,4.187,231,2.098,306,2.013,334,2.92,349,3.248,359,2.527,389,3.018,552,2.92,578,2.403,587,2.464,593,3.721,671,2.595,785,3.721,786,5.639,787,4.578,788,4.578,869,3.018,870,2.078,871,4.212,872,5.132,873,4.578,874,4.531,875,5.132,876,5.132]],["t/161",[0,1.241,23,0.577,49,1.833,110,4.772,125,2.505,152,2.016,200,1.537,212,2.781,221,3.26,232,2.098,285,4.772,288,2.661,336,1.675,397,4.106,403,3.147,545,2.142,556,5.421,591,3.672,613,4.391,801,4.106,823,4.391,877,4.772,878,4.772,879,4.772,880,3.879,881,5.35,882,4.391,883,3.386,884,5.35,885,4.391,886,5.797,887,5.35,888,5.35,889,5.35,890,5.35]],["t/163",[23,0.96,49,1.773,52,1.84,62,1.738,81,2.944,87,1.022,142,4.247,143,3.153,156,4.556,165,3.275,176,4.556,184,2.365,202,4.615,203,4.247,207,2.944,208,3.412,210,2.484,231,2.824,237,2.944,242,2.423,247,3.043,336,1.62,594,3.412,703,3.971,708,3.569,709,3.569,710,3.569,745,3.751,748,3.412,750,3.751,891,4.247,892,5.175,893,5.175,894,5.175]],["t/165",[23,0.908,42,2.705,57,2.568,83,3.015,87,1.395,152,2.016,169,2.705,172,2.568,184,2.445,200,1.537,270,2.635,288,2.98,336,2.212,337,4.47,403,3.147,450,2.283,545,2.142,548,1.675,555,4.391,584,4.106,585,4.106,596,3.386,604,4.391,669,4.106,711,3.69,760,4.391,789,3.69,790,4.772,791,4.772,792,4.391]],["t/167",[23,0.741,28,3.065,32,5.268,232,2.692,361,3.784,548,2.149,549,2.748,713,4.734,736,4.037,895,6.864,896,7.374,897,6.864]],["t/169",[0,1.017,10,2.278,23,0.835,38,1.719,45,2.052,63,1.281,68,1.238,87,0.865,106,3.364,169,2.217,171,1.792,186,3.023,197,2.89,231,2.521,232,1.719,273,2.774,277,2.691,306,1.719,350,3.597,389,3.626,424,2.774,548,1.372,556,3.364,570,1.957,587,2.104,654,3.178,670,2.416,671,2.217,768,2.345,796,3.023,798,3.597,804,3.399,805,3.364,806,3.909,870,2.157,871,5.06,874,5.104,898,6.166,899,4.383,900,3.597,901,6.166,902,4.383,903,3.909,904,4.383,905,4.383,906,4.383,907,4.383,908,4.383,909,2.494,910,2.494]],["t/171",[23,0.923,28,2.237,38,1.965,205,2.547,206,3.245,232,2.651,277,3.576,298,3.845,354,2.29,361,2.762,548,2.396,549,3.063,568,2.947,574,3.303,606,3.845,713,3.455,733,3.455,765,3.845,808,3.303,850,4.112,851,4.112,896,4.468,911,4.468,912,5.01,913,5.01,914,3.845,915,5.01,916,5.01,917,5.01,918,5.01,919,5.01,920,5.01,921,5.01]],["t/173",[10,1.754,15,1.62,16,2.083,23,0.89,28,1.507,38,1.323,45,2.874,57,2.446,62,1.72,68,1.931,77,1.662,87,0.666,125,1.58,129,2.268,153,1.409,199,1.985,200,0.969,205,1.272,212,1.754,232,1.323,235,1.62,247,1.985,251,2.447,277,2.224,292,2.809,303,2.447,389,1.985,417,3.514,419,1.543,450,1.44,451,2.447,509,3.023,532,4.716,540,2.225,548,1.595,565,1.754,568,1.985,570,1.507,581,2.59,593,2.447,600,4.181,615,2.447,616,2.136,686,2.726,768,1.805,804,1.86,808,2.225,864,2.59,870,2.068,874,5.089,909,1.92,910,1.92,922,2.59,923,2.327,924,4.716,925,2.59,926,2.327,927,3.01,928,2.77,929,3.375,930,3.375,931,3.375,932,3.375,933,3.375,934,3.01,935,3.375,936,3.375]],["t/175",[15,2.504,23,0.75,28,3.487,37,2.046,68,1.962,206,2.504,222,3.302,232,2.046,247,3.068,278,3.302,424,3.302,532,5.386,548,1.634,549,2.089,568,3.068,573,3.302,808,3.44,817,4.653,870,2.518,874,3.44,937,4.653,938,5.217,939,4.653,940,3.783,941,5.217,942,6.947,943,5.217,944,5.217,945,5.217,946,4.004,947,5.217,948,5.217]],["t/177",[5,1.272,6,2.394,16,1.72,19,3.114,23,0.454,38,1.65,42,2.128,45,1.97,52,1.496,59,2.774,68,1.189,77,2.072,129,1.555,205,1.585,232,1.65,235,2.875,247,2.475,279,2.475,292,2.319,296,2.902,306,2.349,410,3.453,417,4.131,509,2.072,532,2.902,548,1.318,553,2.475,570,1.879,573,2.663,574,2.774,587,2.02,673,4.343,686,3.204,768,2.251,804,2.319,852,3.453,870,1.272,874,4.599,909,2.394,910,2.394,925,3.229,926,2.902,934,3.753,946,3.229,949,3.753,950,3.453,951,3.753,952,7.6,953,4.208,954,4.208,955,4.916,956,4.208,957,4.208,958,3.453,959,4.208,960,3.453,961,4.208,962,4.208,963,4.208]],["t/179",[10,3.533,23,0.734,45,2.365,77,3.347,129,2.511,205,2.561,232,2.666,247,3.998,292,2.784,306,1.981,313,3.998,354,2.308,458,3.876,547,2.554,548,2.128,549,2.721,568,2.97,574,4.482,869,3.998,870,1.527,874,4.482,914,3.876,925,5.217,926,4.688,946,5.217,950,4.145,964,4.504,965,4.504,966,4.504,967,5.05]],["t/181",[16,3.007,23,0.856,38,1.82,45,2.173,57,2.228,77,2.286,129,1.715,180,2.072,205,1.749,232,2.517,235,3.08,238,3.06,247,2.73,292,2.558,306,1.82,313,2.73,509,2.286,548,2.303,549,1.858,562,4.425,565,2.413,570,2.072,579,5.723,590,2.64,620,3.809,671,2.347,686,2.483,711,5.072,754,3.809,768,2.483,804,2.558,869,2.73,873,4.14,909,2.64,910,2.64,925,3.562,926,3.201,946,4.925,950,3.809,964,4.14,966,4.14,968,4.641,969,4.641]],["t/183",[16,2.482,52,2.159,62,1.928,68,1.715,87,1.199,211,3.07,231,2.482,288,2.287,334,3.454,338,4.67,389,3.571,532,4.187,552,3.454,573,3.842,587,2.914,590,3.454,671,3.07,870,1.836,874,5.054,970,6.071,971,6.071,972,5.415]],["t/185",[26,4.702,70,6.627,152,2.799,195,4.702,271,5.387,973,6.627]],["t/188",[33,3.805,36,2.311,45,3.916,62,1.512,92,3.126,200,1.727,559,4.821,616,3.805,974,6.795,975,6.795,976,5.363,977,6.013,978,4.615,979,6.795,980,7.619,981,6.795,982,6.013,983,6.013]],["t/190",[45,3.249,92,3.607,152,2.615,491,3.331,545,3.569,852,5.695,978,5.326,984,5.695,985,6.189,986,6.94]],["t/192",[0,1.343,152,2.182,188,2.182,221,3.529,249,5.166,270,2.852,294,2.182,336,1.814,354,2.648,395,4.754,403,3.407,491,2.78,713,5.13,715,4.199,978,4.445,987,7.439,988,5.792,989,3.529,990,5.166,991,5.166,992,5.166,993,6.105,994,5.792,995,5.166,996,5.166,997,5.792,998,5.792]],["t/195",[153,2.836,200,1.951,270,3.344,387,6.056,491,3.943,720,5.572,721,5.572,989,4.137,999,8.214,1000,6.79,1001,6.056,1002,6.056]],["t/198",[23,0.733,60,6.056,83,3.506,200,1.951,263,4.77,334,3.863,886,5.572,1003,6.056,1004,8.214]],["t/200",[23,0.798,37,2.251,188,2.162,196,4.405,263,4.649,450,2.45,545,2.298,595,4.71,713,3.958,714,5.932,715,4.161,984,4.71,1003,5.119,1005,5.74,1006,5.74,1007,5.74,1008,5.74,1009,5.74,1010,5.74,1011,5.74,1012,5.119,1013,5.119,1014,5.119,1015,5.74]],["t/203",[135,5.326,171,2.837,195,4.392,247,4.081,255,3.825,336,2.173,450,2.962,479,5.326,772,5.031,789,4.786,984,5.695,1016,6.94]],["t/206",[0,1.118,6,2.741,23,0.52,33,3.05,133,2.057,135,3.698,153,2.012,172,2.313,184,3.01,185,2.834,188,2.826,200,1.892,255,2.656,263,2.505,278,3.05,279,2.834,294,1.816,336,1.509,339,3.955,403,2.834,404,3.05,475,3.955,535,4.298,574,3.177,713,4.541,715,3.494,716,3.955,789,3.323,818,3.955,827,5.054,1017,6.585,1018,3.955,1019,4.819,1020,4.819,1021,3.698,1022,4.819,1023,4.298,1024,4.819,1025,3.698,1026,4.819,1027,4.819,1028,4.819,1029,4.819,1030,4.298,1031,4.819]],["t/208",[7,5.064,49,2.516,72,5.064,89,3.357,545,2.94,550,5.636,556,5.636]],["t/210",[23,1.003,34,1.203,45,3.469,49,2.538,89,2.843,92,1.793,149,2.647,153,1.44,185,2.028,188,1.299,200,0.991,205,1.299,211,1.744,270,1.698,278,2.182,288,1.299,336,1.622,385,2.378,491,3.318,529,2.101,545,3.231,547,1.744,571,2.274,596,2.182,599,2.83,664,4.773,712,5.547,720,4.25,721,2.83,878,3.076,886,2.83,974,4.619,975,6.166,976,5.547,981,5.547,989,3.156,990,4.619,993,2.83,1032,3.449,1033,3.449,1034,3.449,1035,3.449,1036,3.449,1037,4.619,1038,3.449,1039,3.449,1040,5.179,1041,3.449,1042,3.449,1043,3.076,1044,3.076]],["t/213",[49,2.354,63,2.008,68,1.45,78,3.384,152,1.934,155,2.595,191,4.739,192,2.668,194,3.384,214,3.248,242,3.218,312,3.939,320,3.248,336,1.607,365,2.745,378,4.578,416,4.212,539,3.939,541,3.018,545,2.055,591,2.668,789,3.539,857,4.578,877,4.578,1012,4.578,1045,4.578,1046,4.578,1047,5.132,1048,4.578,1049,5.132,1050,5.132,1051,5.132,1052,4.212,1053,5.132,1054,4.212,1055,4.578,1056,4.578,1057,5.132,1058,5.132,1059,5.132]],["t/215",[0,1.826,52,1.886,63,1.55,125,2.484,137,3.846,139,4.732,161,4.341,171,2.169,180,2.369,188,1.999,192,3.651,196,5.391,198,3.758,199,3.12,200,1.524,210,2.546,211,2.683,311,3.659,475,4.354,512,3.659,785,3.846,796,3.659,829,4.354,972,4.732,1030,4.732,1060,5.305,1061,5.305,1062,4.732,1063,4.732,1064,5.305,1065,5.305,1066,5.305,1067,4.732]],["t/218",[0,1.45,34,2.182,45,2.927,63,1.827,65,5.13,144,3.677,159,3.809,192,4.058,193,3.956,197,4.122,277,2.728,326,3.344,359,3.079,529,3.809,885,5.13,1068,5.576,1069,6.252,1070,6.252,1071,6.252,1072,6.252,1073,6.252]],["t/220",[0,1.51,5,1.968,63,1.902,120,5.342,161,3.588,171,2.661,198,3.482,199,3.829,200,1.87,295,2.907,311,4.489,410,5.342,539,4.996,540,4.292,868,5.806,1074,6.144,1075,6.51]],["t/222",[0,1.181,23,0.976,49,2.341,62,1.941,63,1.488,68,1.438,160,2.994,163,3.511,165,3.222,176,3.357,184,2.327,192,2.646,194,4.506,198,4.127,199,4.85,204,3.511,207,2.896,208,4.506,209,3.691,210,2.444,211,2.574,237,2.896,354,2.327,559,3.222,746,3.907,747,3.907,748,4.506,749,3.691]],["t/224",[9,3.305,53,3.011,69,1.677,85,2.66,111,3.011,117,2.087,125,2.54,131,4.451,157,2.66,164,3.011,188,1.382,200,1.558,242,1.718,299,2.66,326,1.963,328,2.419,336,2.232,373,3.273,396,2.816,401,4.163,402,4.163,472,5.837,591,1.907,772,2.66,799,5.755,811,6.322,831,3.273,923,3.74,973,3.273,1021,2.816,1025,2.816,1048,3.273,1074,4.952,1076,3.011,1077,4.837,1078,3.011,1079,5.295,1080,3.273,1081,3.273,1082,3.273,1083,3.669,1084,3.669,1085,3.011,1086,4.451,1087,3.669,1088,3.669,1089,3.669,1090,3.669,1091,3.011,1092,3.273,1093,3.273,1094,3.011,1095,3.669,1096,3.273,1097,3.669,1098,3.273,1099,3.669,1100,3.669,1101,3.669,1102,3.273,1103,3.273,1104,3.669,1105,3.669,1106,3.669,1107,3.273]],["t/227",[0,1.053,16,1.856,33,2.874,51,2.767,63,2.415,78,2.994,118,3.727,123,2.503,161,2.503,171,1.856,179,2.767,180,2.822,188,1.711,192,3.779,193,2.874,198,2.429,200,1.304,210,2.18,213,4.05,242,2.126,353,2.296,365,2.429,403,2.671,481,3.292,512,4.359,591,2.36,646,3.292,771,4.05,922,3.485,940,3.292,992,4.05,1062,4.05,1063,4.05,1068,4.05,1093,4.05,1108,3.132,1109,3.727,1110,4.541,1111,4.541,1112,4.541,1113,4.541,1114,5.187,1115,4.541,1116,4.541,1117,4.541,1118,4.541,1119,4.541,1120,4.541,1121,4.541,1122,4.541,1123,4.541]],["t/229",[0,1.181,23,0.976,49,2.341,62,1.941,63,1.488,68,1.438,160,2.994,163,3.511,165,3.222,176,3.357,184,2.327,192,2.646,194,4.506,198,4.127,199,2.994,204,3.511,207,2.896,208,4.506,209,3.691,210,3.958,211,2.574,237,2.896,354,2.327,559,3.222,746,3.907,747,3.907,748,4.506,749,3.691]],["t/231",[0,0.8,12,1.615,13,2.83,36,1.325,62,0.867,83,1.472,106,2.647,123,1.901,157,2.5,242,3.977,326,1.845,336,2.437,347,2.378,355,2.83,372,2.647,401,3.975,402,2.647,482,2.83,489,3.076,591,3.593,764,2.274,772,3.755,789,2.378,811,5.686,829,2.83,866,2.83,922,2.647,923,3.572,1021,2.647,1044,3.076,1076,2.83,1077,3.076,1078,2.83,1079,4.25,1080,3.076,1081,3.076,1082,3.076,1086,5.673,1091,2.83,1094,2.83,1096,3.076,1103,5.547,1107,3.076,1109,4.25,1124,4.619,1125,3.449,1126,3.449,1127,6.219,1128,3.449,1129,3.449,1130,3.449,1131,3.449,1132,5.179,1133,3.449,1134,3.449,1135,3.076,1136,3.449,1137,3.076,1138,3.449,1139,3.449,1140,3.449,1141,3.449,1142,3.449,1143,3.449,1144,5.179,1145,3.449,1146,3.449,1147,3.449,1148,3.449]],["t/234",[0,0.898,5,1.171,19,2.013,33,2.45,51,2.359,62,1.419,63,2.509,68,1.094,107,2.972,123,2.134,149,2.972,161,2.134,171,2.306,192,4.218,193,2.45,198,2.071,200,1.112,210,1.859,211,1.958,225,2.972,242,1.813,288,1.459,295,2.519,326,2.071,340,3.178,350,3.178,365,2.071,370,3.453,386,4.33,496,2.277,512,2.67,539,2.972,744,3.453,772,2.807,794,3.453,880,2.807,911,3.453,940,2.807,1025,2.972,1054,3.178,1074,2.972,1102,5.032,1114,3.178,1149,3.872,1150,3.872,1151,5.937,1152,3.872,1153,3.453,1154,3.453,1155,3.872,1156,3.872,1157,3.872,1158,3.872,1159,3.872,1160,3.872,1161,3.872,1162,3.872,1163,3.872,1164,3.872,1165,3.872,1166,3.872,1167,3.872,1168,3.872,1169,3.872,1170,3.872]],["t/236",[0,1.109,23,0.978,42,3.312,49,2.559,62,1.879,63,1.914,68,1.85,160,2.813,163,3.298,165,3.026,176,3.153,184,2.186,192,4.177,194,4.319,198,3.504,199,2.813,204,3.298,207,2.72,208,4.319,209,3.467,210,2.295,211,3.312,237,2.72,349,3.026,354,2.186,496,2.813,559,3.026,746,3.67,747,3.67,749,3.467,1171,6.551]],["t/238",[0,0.536,5,0.699,52,1.345,53,1.897,62,0.581,63,2.113,69,1.729,86,2.224,87,1.642,88,1.897,100,1.594,111,1.897,118,1.897,125,1.082,147,1.897,188,0.871,192,4.183,193,3.037,218,1.408,225,4.256,242,1.082,278,2.393,280,1.274,311,1.594,336,1.503,338,1.408,342,2.393,355,1.897,372,2.902,386,5.745,402,1.774,472,1.774,478,3.373,496,1.359,518,1.676,578,1.082,588,1.463,591,2.495,607,2.608,645,3.103,665,1.594,670,1.274,757,2.061,811,1.774,814,2.608,826,2.061,845,2.061,858,1.774,866,3.103,879,3.373,880,1.676,923,1.594,996,2.061,1018,3.103,1067,3.373,1074,2.902,1076,3.103,1078,1.897,1079,1.897,1085,1.897,1086,3.103,1091,1.897,1092,3.373,1094,3.103,1098,2.061,1109,3.103,1124,2.061,1135,2.061,1137,3.373,1151,7.034,1153,2.061,1154,3.373,1172,2.311,1173,2.311,1174,2.311,1175,2.311,1176,5.546,1177,3.782,1178,2.311,1179,2.311,1180,2.311,1181,2.311,1182,2.311,1183,2.311,1184,2.311,1185,2.902,1186,3.103,1187,2.061,1188,3.782,1189,2.311,1190,2.311,1191,2.311,1192,2.311,1193,2.311,1194,2.311,1195,2.311,1196,2.311,1197,3.782,1198,2.311,1199,2.311,1200,1.897,1201,2.311,1202,2.311,1203,2.311,1204,2.311,1205,2.311]],["t/240",[62,1.572,63,1.827,65,5.13,68,1.766,69,2.858,87,1.234,129,2.885,156,4.122,191,5.384,192,4.058,193,3.956,214,3.956,326,3.344,353,3.161,416,5.13,885,5.13,1045,5.576,1046,5.576,1206,6.252]],["t/242",[52,2.581,55,4.269,83,3.098,100,5.006,152,2.735,347,5.006,550,5.571,1207,7.259]],["t/244",[37,2.553,49,2.23,72,4.489,92,4.161,185,3.829,263,3.384,309,4.996,491,3.125,545,3.621,928,5.342,985,5.806,1208,5.806,1209,6.51,1210,6.51]],["t/246",[7,2.391,11,2.782,14,1.013,23,0.962,36,1.333,37,1.36,43,1.973,77,1.708,152,1.959,153,1.448,185,4.077,212,2.703,245,2.194,263,3.243,279,2.039,282,2.194,336,1.086,419,1.585,491,2.496,545,3.607,613,2.846,714,5.863,715,2.514,776,2.661,805,2.661,827,2.661,993,6.399,995,4.638,1013,3.093,1014,3.093,1211,3.468,1212,3.093,1213,3.468,1214,3.468,1215,7.798,1216,5.565,1217,3.468,1218,3.468,1219,3.468,1220,2.846,1221,2.661,1222,2.846,1223,3.468,1224,2.846,1225,4.789,1226,4.268,1227,2.846,1228,2.846,1229,2.846]],["t/248",[5,1.281,7,2.921,14,1.238,23,0.991,77,2.086,83,2.569,133,1.808,152,1.596,185,4.118,212,3.129,245,2.681,263,4.186,336,1.326,491,2.033,545,3.445,735,3.476,776,4.619,805,3.251,979,3.778,1212,3.778,1220,3.476,1221,3.251,1222,3.476,1224,4.94,1225,5.373,1226,4.94,1227,3.476,1228,3.476,1229,3.476,1230,8.607,1231,3.778,1232,3.778,1233,3.778,1234,4.236,1235,4.236]],["t/250",[7,3.066,14,1.299,23,0.942,77,2.189,152,1.675,160,2.614,185,4.58,212,3.237,263,2.311,336,1.392,337,2.813,397,3.411,545,2.493,654,3.223,714,5.646,735,3.648,763,3.965,776,3.411,1001,3.965,1002,3.965,1216,5.554,1220,3.648,1221,3.411,1222,5.11,1225,5.516,1226,5.11,1227,3.648,1228,3.648,1229,3.648,1231,3.965,1232,3.965,1233,3.965,1236,4.445,1237,4.445,1238,4.445,1239,4.445,1240,6.227,1241,4.445,1242,4.445,1243,4.445,1244,4.445,1245,4.445,1246,4.445]],["t/252",[11,3.415,23,0.854,36,1.771,89,2.106,125,2.99,133,1.966,144,2.71,152,1.736,160,2.71,195,2.916,200,1.324,231,2.995,255,2.54,256,3.34,337,2.916,545,3.325,552,2.621,587,3.065,654,3.34,701,4.109,869,2.71,870,1.931,1185,3.536,1247,4.637,1248,4.608,1249,4.608,1250,4.608,1251,4.608,1252,4.608,1253,4.608,1254,4.608,1255,6.385,1256,4.608,1257,4.608,1258,6.385,1259,5.455,1260,4.608,1261,4.608]],["t/254",[34,2.003,52,2.041,62,1.86,87,1.46,125,2.687,137,4.161,144,3.376,205,2.162,207,3.265,228,2.732,231,2.346,273,3.632,334,3.265,419,2.624,490,4.405,537,4.71,540,3.784,552,3.265,785,5.362,814,3.958,815,5.119,869,3.376,870,2.236,940,4.161,1262,5.74,1263,5.74]],["t/256",[23,0.792,49,2.516,152,2.767,231,3.002,545,2.94,591,3.817,1247,4.647]],["t/258",[23,1.009,49,1.881,52,1.952,55,3.229,62,1.807,87,1.084,210,2.635,231,2.244,237,3.123,270,2.703,334,3.123,491,2.635,596,3.474,599,4.505,708,3.786,709,3.786,710,3.786,711,3.786,745,3.98,748,3.62,750,3.98,871,4.505,891,4.505,1185,4.213,1264,6.408,1265,4.505,1266,5.49]],["t/260",[0,1.654,14,1.802,23,0.835,62,1.103,94,3.513,127,3.597,129,1.62,133,2.632,140,1.83,167,3.909,171,1.792,185,3.626,186,3.023,231,1.792,245,3.902,277,3.113,283,3.597,310,3.023,394,3.597,496,2.578,545,1.755,552,2.494,559,2.774,578,2.052,670,2.416,704,2.774,800,3.597,801,3.364,858,3.364,861,3.909,870,2.558,914,3.364,1247,3.902,1259,3.023,1267,3.909,1268,3.597,1269,3.909,1270,3.909,1271,3.909,1272,3.909,1273,3.909,1274,3.909,1275,4.383,1276,4.383,1277,4.383,1278,4.383]],["t/262",[11,4.213,23,1.014,36,2.039,89,2.425,144,3.12,228,1.96,231,3.219,282,4.984,294,1.999,347,3.659,349,3.357,704,3.357,1185,5.391,1259,3.659,1279,5.305,1280,7.025,1281,7.025,1282,5.305,1283,5.305,1284,7.025,1285,5.305,1286,5.305]],["t/264",[0,1.6,14,2.201,15,3.312,19,3.07,23,0.96,28,2.637,41,4.204,62,1.038,68,1.165,87,0.814,170,2.144,188,1.554,206,1.98,214,2.611,231,1.686,245,2.611,277,1.8,280,3.256,300,1.98,306,1.618,353,2.086,367,2.845,368,2.514,425,3.385,496,2.426,531,6.153,667,4.59,696,2.611,731,2.991,869,2.426,870,1.247,951,3.679,955,3.385,1247,2.611,1287,4.125,1288,3.385,1289,3.385,1290,4.125,1291,3.691,1292,3.679,1293,2.611,1294,4.125,1295,3.679,1296,3.385,1297,3.679,1298,4.125,1299,4.125]],["t/266",[0,0.717,5,1.977,14,2.18,15,2.792,23,0.969,28,1.381,37,1.213,51,1.885,62,0.778,63,0.904,86,1.819,87,0.941,125,2.232,129,1.143,133,1.32,137,2.243,152,1.165,170,4.04,188,2.811,193,1.958,200,0.889,219,2.133,292,1.705,300,1.485,305,2.374,313,1.819,353,1.564,365,1.655,429,3.144,481,2.243,509,2.348,518,2.243,578,1.448,588,1.958,651,2.759,667,4.545,670,1.705,671,1.564,691,3.017,814,2.133,870,1.977,949,2.759,1291,3.99,1300,3.093,1301,3.093,1302,3.093,1303,3.093,1304,3.093,1305,3.913,1306,3.093,1307,3.093,1308,2.759,1309,2.759,1310,2.759,1311,5.419,1312,2.374,1313,4.218,1314,2.243,1315,4.768,1316,2.759,1317,2.374,1318,3.093,1319,3.093,1320,3.093]],["t/268",[0,1.397,5,1.626,6,0.785,11,0.738,12,0.646,14,2.022,15,3.131,19,0.718,23,1.003,28,0.616,36,0.531,37,0.956,41,0.841,43,0.785,44,1.542,62,0.993,66,1.133,68,0.688,78,1.607,87,0.78,117,1.386,131,1.133,133,0.589,140,1.018,143,0.841,170,1.701,172,0.663,188,2.026,190,1.001,200,0.397,216,1.87,228,1.209,235,1.17,275,1.059,282,1.542,294,0.52,303,2.372,306,1.548,307,1.607,309,1.059,319,1.133,342,0.874,353,0.698,359,0.68,365,1.304,367,1.681,393,1.001,412,1.133,425,1.133,427,0.91,447,2.603,450,1.397,456,2.517,470,1.001,480,1.059,490,1.059,496,0.812,509,0.68,513,2.499,529,1.994,541,1.433,552,0.785,558,0.91,571,0.91,578,0.646,582,0.952,588,0.874,590,0.785,605,1.001,609,0.841,640,1.231,647,0.812,665,0.952,667,3.67,671,0.698,672,1.059,673,1.001,691,3.15,696,0.874,843,1.059,870,1.194,883,2.499,914,1.059,922,1.059,923,0.952,924,2.723,926,1.681,927,1.231,989,2.746,1085,1.133,1108,0.952,1186,1.133,1200,2.685,1291,2.112,1293,2.499,1297,1.231,1305,1.133,1312,1.87,1314,1.001,1317,1.87,1321,3.109,1322,1.231,1323,1.231,1324,1.38,1325,2.372,1326,2.863,1327,2.685,1328,1.38,1329,1.133,1330,1.38,1331,1.231,1332,1.38,1333,1.38,1334,2,1335,1.231,1336,1.38,1337,1.231,1338,1.38,1339,2.174,1340,2.257,1341,2.257,1342,2.174,1343,1.681,1344,1.133,1345,1.133,1346,1.87,1347,1.607,1348,1.38,1349,2.174,1350,1.38,1351,1.38,1352,1.231,1353,1.231,1354,1.38,1355,1.38,1356,1.059,1357,1.059,1358,1.231,1359,1.231,1360,1.38,1361,1.231,1362,2.174,1363,1.38,1364,1.38,1365,1.38,1366,1.38,1367,1.38,1368,2.174,1369,1.38,1370,1.231,1371,1.231,1372,1.231,1373,1.38,1374,1.38,1375,1.38,1376,1.38,1377,1.38,1378,2.437,1379,1.38,1380,1.38,1381,1.38,1382,2.174,1383,1.38,1384,1.38,1385,2.437,1386,1.38,1387,1.38,1388,1.38,1389,1.38,1390,1.231,1391,1.38,1392,1.38,1393,1.38,1394,1.38,1395,1.38]],["t/270",[0,1.768,23,0.984,36,1.418,37,1.447,42,1.866,59,2.433,62,0.928,68,1.042,140,1.541,169,3.274,170,1.918,171,1.509,188,1.391,228,2.013,275,2.833,294,2.439,320,2.336,330,3.292,354,1.687,359,1.818,450,1.575,456,1.866,509,1.818,546,3.757,571,2.433,870,1.116,883,2.336,1108,2.545,1247,3.447,1265,4.47,1291,4.268,1293,3.447,1311,2.833,1313,2.676,1329,3.029,1331,3.292,1396,3.691,1397,6.8,1398,3.029,1399,3.292,1400,5.447,1401,3.292,1402,3.691,1403,3.691,1404,3.691,1405,3.691,1406,3.691,1407,3.292,1408,3.691,1409,5.447,1410,3.691,1411,3.691,1412,4.858,1413,3.691,1414,3.292]],["t/272",[0,1.329,23,0.901,36,1.16,37,1.835,63,1.367,99,3.626,128,3.84,130,1.776,134,2.478,155,1.527,170,2.432,205,1.763,228,1.729,236,2.082,273,1.911,282,3.626,292,1.664,300,1.449,336,1.465,342,1.911,349,2.961,353,1.527,359,1.487,361,3.158,385,2.082,401,2.317,403,2.752,411,2.693,414,2.189,427,1.991,450,2.754,456,2.897,480,2.317,491,1.449,547,1.527,553,1.776,582,2.082,587,1.449,590,1.718,594,1.991,619,2.317,647,2.752,667,2.851,670,1.664,691,3.626,733,2.082,814,2.082,842,3.591,870,1.951,882,2.478,923,2.082,937,4.173,991,4.173,1052,4.702,1291,2.503,1313,3.393,1334,2.478,1347,1.991,1415,3.019,1416,4.679,1417,2.693,1418,3.019,1419,3.019,1420,3.019,1421,2.478,1422,4.679,1423,3.019,1424,3.84,1425,2.693,1426,3.019,1427,2.693,1428,2.693,1429,2.693,1430,4.173,1431,2.693,1432,2.693,1433,2.693,1434,2.693,1435,2.693,1436,3.019,1437,3.019]],["t/274",[0,0.685,5,0.521,14,1.007,15,1.418,23,1.011,36,0.662,41,0.572,42,0.475,43,0.534,62,0.6,63,0.274,68,0.265,69,0.787,83,0.401,86,0.552,87,0.841,88,0.77,92,0.488,93,0.77,94,0.462,99,1.09,117,1.357,123,0.517,125,0.44,129,0.347,138,0.647,140,1.62,161,0.949,168,1.321,188,0.649,196,0.72,197,1.135,205,1.113,221,1.453,222,1.09,228,1.274,241,0.647,245,0.594,273,1.09,275,1.831,280,0.517,282,0.594,294,0.649,295,0.769,300,1.862,303,1.248,306,1.159,312,0.72,313,0.552,317,1.321,328,1.135,329,0.681,336,0.539,353,0.475,354,0.429,359,0.462,361,1.315,364,0.837,377,0.77,383,0.681,392,0.837,403,1.013,419,0.429,427,1.135,447,3.234,450,1.018,456,1.962,471,1.413,480,0.72,491,0.451,509,0.462,513,1.09,547,1.206,553,1.013,554,0.647,558,0.619,571,1.573,572,0.837,573,0.594,574,0.619,581,0.72,582,0.647,588,0.594,589,0.72,594,0.619,600,0.77,607,0.647,609,0.572,619,0.72,629,2.127,647,0.552,649,0.72,667,4.061,691,2.456,696,0.594,699,0.837,702,0.837,736,0.552,754,0.77,765,0.72,785,0.681,792,0.77,813,2.127,814,1.187,842,1.321,870,1.566,880,0.681,882,0.77,883,2.697,900,0.77,939,0.837,989,2.597,1025,0.72,1037,0.837,1043,0.837,1052,0.77,1200,0.77,1208,0.837,1265,3.497,1268,0.77,1291,3.412,1293,2.912,1296,0.77,1305,0.77,1314,0.681,1322,0.837,1323,0.837,1325,2.142,1326,3.336,1329,0.77,1335,1.536,1337,2.127,1339,0.837,1340,2.676,1341,2.676,1342,2.127,1343,2.676,1345,0.77,1347,3.034,1353,0.837,1359,2.635,1361,0.837,1362,1.536,1368,0.837,1397,2.635,1398,1.957,1399,0.837,1407,0.837,1412,0.837,1414,0.837,1421,1.413,1424,0.77,1425,0.837,1438,1.722,1439,3.88,1440,0.939,1441,0.939,1442,0.939,1443,1.722,1444,1.722,1445,1.722,1446,1.722,1447,0.939,1448,0.939,1449,1.722,1450,2.385,1451,1.722,1452,0.939,1453,0.939,1454,0.939,1455,0.939,1456,0.939,1457,0.939,1458,2.385,1459,0.939,1460,0.939,1461,2.385,1462,0.939,1463,0.939,1464,0.939,1465,0.939,1466,0.939,1467,0.939,1468,0.939,1469,1.722,1470,0.939,1471,1.722,1472,1.722,1473,1.722,1474,0.939,1475,0.939,1476,0.939,1477,0.939,1478,1.722,1479,0.939,1480,0.939,1481,0.939,1482,0.939,1483,0.939,1484,1.722,1485,1.722,1486,0.939,1487,1.722,1488,2.954,1489,1.722,1490,0.939,1491,1.722,1492,0.939,1493,0.837,1494,0.939,1495,0.77,1496,1.722,1497,0.939,1498,0.939,1499,0.939,1500,0.939,1501,2.385,1502,0.939,1503,0.939,1504,1.722,1505,0.939,1506,0.837,1507,0.939,1508,1.722,1509,0.939,1510,0.939,1511,0.939,1512,0.939,1513,0.939,1514,1.722,1515,0.939,1516,1.722,1517,0.939,1518,0.939,1519,0.939,1520,0.939,1521,0.939,1522,0.939,1523,0.939,1524,0.939,1525,0.939,1526,1.722,1527,0.939,1528,0.939,1529,0.939,1530,0.939,1531,1.722,1532,0.939,1533,1.722,1534,1.722]],["t/276",[45,3.179,87,1.341,129,2.509,169,3.434,200,1.951,232,2.663,235,3.259,256,4.923,294,2.558,389,3.993,598,6.056,870,2.053,1259,4.683,1535,6.056]],["t/278",[5,1.264,23,0.899,37,1.639,43,2.378,49,1.432,52,1.486,57,2.862,63,1.221,83,2.545,87,1.372,89,2.725,133,1.784,152,2.246,169,2.114,200,1.201,205,2.246,218,2.547,228,2.203,231,1.709,263,2.173,270,2.058,277,1.824,279,3.506,288,2.246,300,2.862,310,2.883,336,2.176,338,3.633,342,2.645,359,2.058,385,2.883,389,2.458,419,2.725,420,4.893,427,2.756,450,1.784,545,1.673,594,2.756,646,3.03,647,2.458,676,4.112,870,1.264,880,3.03,1225,4.576,1264,3.728,1536,4.18,1537,4.18,1538,4.18,1539,4.18]],["t/280",[0,1.363,23,0.81,28,2.625,37,1.607,38,2.305,45,1.919,63,1.198,87,1.161,89,1.873,191,2.826,206,2.822,211,2.073,214,2.594,232,2.945,277,2.566,288,1.544,389,2.41,419,1.873,424,3.72,498,4.512,548,2.351,549,2.353,570,2.625,607,2.826,664,3.145,716,4.825,762,2.971,768,3.145,774,5.243,804,3.241,870,1.239,909,3.344,910,3.344,1221,4.512,1540,4.099,1541,4.099,1542,4.099,1543,4.099,1544,4.099,1545,4.099,1546,4.099,1547,4.099,1548,4.099,1549,5.243,1550,5.243,1551,4.825]],["t/282",[23,0.7,38,2.542,45,2.206,68,1.331,87,1.28,129,1.74,205,3.009,206,3.112,214,2.981,232,3.132,419,2.153,548,2.5,549,2.595,568,3.813,570,2.895,762,3.415,768,3.468,804,3.574,808,4.275,864,4.976,870,2.242,909,3.688,910,3.688,924,4.471,1550,4.201,1551,5.32,1552,6.483,1553,4.711]],["t/284",[0,0.944,23,0.856,37,1.597,38,1.597,45,1.907,68,1.15,86,2.395,87,0.804,89,2.675,123,3.225,129,1.504,153,1.7,205,2.205,211,2.959,228,1.504,245,2.577,282,2.577,288,1.534,296,4.035,300,3.288,317,3.125,354,1.861,419,1.861,450,1.738,530,3.342,541,2.395,547,2.059,558,2.685,565,2.117,588,2.577,609,2.481,619,3.125,647,2.395,649,4.491,654,2.952,655,3.632,656,3.632,657,3.632,658,5.219,659,3.632,662,2.952,669,3.125,675,3.125,676,4.035,677,3.125,678,3.632,679,3.632,681,3.632,742,3.342,786,3.342,870,1.769,1421,3.342,1424,3.342,1495,3.342,1554,3.125,1555,4.072,1556,4.072,1557,3.632,1558,3.632,1559,4.072,1560,4.072]],["t/286",[10,2.625,23,0.734,38,1.981,68,1.426,153,2.109,169,3.437,171,2.064,200,1.451,205,2.895,228,1.866,251,3.661,296,3.483,354,3.107,546,3.483,547,2.554,548,1.581,549,2.721,558,3.33,571,3.33,607,3.483,646,3.661,647,4.519,662,3.661,667,5.501,675,3.876,676,4.688,677,3.876,765,5.217,978,3.876,1561,5.05]],["t/288",[0,1.031,5,1.883,6,4.089,14,1.819,16,1.817,23,0.776,38,2.442,66,5.11,87,1.229,123,3.432,200,1.277,205,2.346,218,2.708,228,1.642,232,1.743,235,2.134,327,3.965,419,2.032,450,1.897,509,2.189,541,2.614,548,1.392,570,1.985,647,3.662,662,3.223,671,3.149,675,3.411,676,3.066,677,3.411,691,2.813,742,3.648,768,2.378,804,2.45,909,2.529,910,2.529,1271,3.965,1349,3.965,1554,3.411,1558,3.965,1562,4.445,1563,4.445,1564,6.227,1565,4.445,1566,3.965,1567,4.445,1568,4.445,1569,3.965,1570,4.445,1571,4.445]],["t/290",[10,3.387,14,1.387,23,0.703,63,1.387,87,1.581,117,2.7,205,1.788,207,2.7,232,2.556,273,3.004,306,2.918,313,4.711,414,3.441,419,2.979,472,3.643,518,3.441,548,2.04,549,2.609,589,3.643,691,3.004,696,3.004,869,2.791,870,2.25,1187,4.233,1398,3.895,1551,5.348,1554,3.643,1566,4.233,1569,5.812,1572,6.517,1573,4.746,1574,4.746,1575,4.746,1576,4.746,1577,4.746]],["t/292",[0,1.592,5,2.076,12,3.214,14,2.006,52,2.441,63,2.006,99,4.344,192,3.568,228,3.055,231,2.806,241,4.734,590,3.905]],["t/294",[99,3.918,101,4.269,130,3.641,140,2.585,168,4.751,228,3.131,231,3.172,239,3.772,300,2.971,307,4.082,483,4.751,578,2.899,665,4.269,690,5.08,691,3.918,870,2.767]],["t/296",[1,2.546,2,3.552,11,2.838,34,1.851,51,3.232,52,1.886,62,1.334,76,3.846,87,1.387,138,3.659,155,2.683,198,2.838,210,2.546,218,3.232,231,2.872,295,3.743,297,3.459,306,2.755,334,3.018,396,4.071,532,3.659,587,2.546,591,2.758,869,3.12,870,2.381,960,4.354,1578,4.071,1579,5.305,1580,5.305,1581,3.357]],["t/298",[23,0.792,49,2.516,152,2.767,231,3.002,545,2.94,591,3.817,1247,4.647]],["t/300",[1,2.212,2,2.33,23,0.984,34,2.557,49,2.187,52,2.605,55,2.71,62,1.99,83,1.966,87,1.26,133,2.725,184,2.918,210,2.212,226,3.781,231,1.883,237,2.621,255,3.519,270,2.269,277,2.011,297,3.608,334,2.621,336,1.443,383,3.34,404,2.916,596,2.916,704,2.916,708,3.177,709,3.177,710,3.177,711,3.177,745,3.34,748,3.038,750,3.34,870,1.393,891,3.781,1495,3.781]],["t/302",[0,1.22,14,2.041,23,0.754,62,1.757,68,1.486,133,2.982,185,3.094,186,3.628,231,2.151,277,2.296,283,4.317,295,3.502,297,3.862,325,4.692,496,3.094,552,2.993,670,2.9,704,4.421,870,2.703,1259,3.628,1267,4.692,1268,4.317,1269,4.692,1270,4.692,1272,4.692,1273,4.692,1274,4.692]],["t/304",[0,1.566,1,1.905,2,2.007,5,1.2,14,1.16,15,1.905,23,0.951,28,3.015,41,2.419,87,0.784,170,3.509,188,2.165,212,2.063,280,2.188,294,1.496,295,3.655,297,4.157,306,2.253,313,2.335,353,2.007,368,2.419,419,1.814,424,2.512,429,2.617,573,2.512,870,1.737,958,4.715,960,3.258,1021,3.046,1288,3.258,1289,3.258,1291,4.379,1292,3.54,1296,4.715,1311,3.046,1370,3.54,1401,3.54,1581,2.512,1582,3.97,1583,3.258,1584,3.97,1585,3.97,1586,3.97,1587,3.97,1588,3.97]],["t/306",[0,1.337,1,1.463,2,1.542,10,2.451,11,1.631,12,2.699,23,0.957,28,1.361,36,1.812,81,1.734,87,1.138,138,3.251,140,1.273,152,1.149,155,1.542,161,1.68,170,2.996,172,2.263,188,2.444,190,2.21,197,2.01,206,1.463,235,1.463,295,3.132,297,3.454,298,2.34,302,2.34,306,1.849,326,2.522,353,2.384,419,1.393,429,2.01,481,2.21,509,3.194,540,2.01,563,2.502,578,1.427,605,2.21,606,2.34,670,1.68,714,2.21,731,2.21,870,2.242,900,2.502,924,2.102,1023,4.205,1291,3.47,1308,2.719,1309,2.719,1310,2.719,1311,4.978,1312,3.618,1313,4.179,1314,3.418,1316,2.719,1317,3.618,1581,1.929,1589,3.049,1590,4.714,1591,4.205,1592,3.049,1593,4.205,1594,2.719,1595,3.049,1596,3.049,1597,3.049]],["t/308",[0,1.753,12,2.291,23,0.945,36,1.881,62,1.231,128,4.016,130,2.878,188,1.844,206,2.349,295,3.623,297,2.41,359,2.41,414,3.548,450,2.84,529,4.054,578,2.291,733,3.375,758,4.364,800,4.016,801,3.756,843,3.756,870,1.48,1291,2.618,1313,3.548,1334,4.016,1347,3.226,1427,4.364,1428,4.364,1429,4.364,1430,4.364,1431,4.364,1432,4.364,1433,4.364,1434,4.364,1435,4.364,1598,4.894,1599,4.894,1600,4.894]],["t/310",[0,1.992,125,2.986,195,4.036,294,2.403,295,2.848,297,3.141,359,3.141,393,4.624,496,3.751,609,3.886,648,4.895,1289,5.234,1321,4.399,1557,5.689,1601,6.378,1602,6.378,1603,6.378,1604,6.378]],["t/312",[5,1.457,23,0.94,51,2.936,87,0.951,143,2.936,152,1.816,155,2.437,206,2.313,280,2.656,295,2.94,306,1.89,309,3.698,403,2.834,450,2.057,456,2.437,537,3.955,541,2.834,672,3.698,696,3.05,731,3.494,858,3.698,870,1.457,883,3.05,924,3.323,989,2.936,1291,2.578,1293,3.05,1312,3.698,1321,3.323,1325,3.494,1326,3.494,1327,3.955,1340,3.323,1341,3.323,1343,3.323,1344,3.955,1345,3.955,1346,3.698,1347,3.177,1356,3.698,1581,3.05,1605,4.819,1606,4.819,1607,4.298,1608,4.819,1609,4.298]],["t/314",[5,0.892,11,1.577,23,1.026,33,1.866,41,1.797,62,0.742,68,1.298,69,1.348,143,2.799,155,1.491,188,2.401,206,2.709,235,1.415,239,1.797,280,2.532,295,3.411,297,4.087,307,1.944,313,1.734,326,2.458,354,1.348,447,3.029,456,2.323,470,2.138,509,1.452,513,2.907,529,2.799,538,2.42,553,2.702,578,1.381,696,1.866,731,3.331,843,2.263,870,1.389,883,1.866,926,3.168,989,1.797,1108,2.034,1291,1.577,1293,1.866,1295,2.63,1314,2.138,1321,2.034,1325,2.138,1326,2.138,1327,2.42,1340,2.034,1341,2.034,1343,2.034,1344,2.42,1346,2.263,1347,1.944,1356,3.526,1357,2.263,1382,4.097,1390,2.63,1594,5.034,1609,2.63,1610,2.949,1611,2.949,1612,2.949,1613,2.63,1614,2.949,1615,2.949,1616,2.949,1617,2.949,1618,4.594,1619,2.949,1620,2.949,1621,2.949,1622,2.949,1623,2.949]],["t/316",[0,0.887,5,1.157,10,3.78,12,1.791,23,1.037,28,3.247,35,3.139,42,1.934,69,1.748,84,3.139,123,2.108,155,1.934,188,2.107,214,2.421,295,3.608,297,4.11,326,2.046,354,1.748,447,4.358,456,1.934,513,2.421,541,2.25,553,2.25,649,2.936,883,2.421,989,2.331,1108,2.638,1291,2.046,1293,2.421,1317,2.936,1321,2.638,1325,4.054,1340,2.638,1341,2.638,1343,2.638,1356,2.936,1371,3.412,1372,3.412,1554,2.936,1613,3.412,1624,3.825,1625,3.825,1626,3.825,1627,3.825,1628,3.825]],["t/318",[5,1.892,11,2.395,23,1.01,62,1.126,82,3.674,87,1.235,129,1.654,140,1.869,217,3.674,224,3.993,278,2.833,280,2.468,294,1.687,295,3.488,311,4.316,447,4.126,513,2.833,578,2.096,582,3.087,696,2.833,700,3.674,818,3.674,842,3.436,870,1.892,883,2.833,989,2.728,1114,3.674,1291,2.395,1293,2.833,1321,3.087,1326,3.246,1340,3.087,1341,3.087,1343,3.087,1346,3.436,1347,2.952,1358,3.993,1607,3.993,1629,4.477,1630,4.477,1631,4.477,1632,4.477,1633,4.477]],["t/320",[19,2.564,23,0.722,45,2.309,52,2.379,87,0.974,92,2.564,106,3.785,125,2.309,152,1.858,169,3.383,200,2.181,231,2.016,232,2.977,256,4.85,263,3.946,280,2.718,294,1.858,322,4.047,336,1.544,393,3.575,405,3.785,545,2.678,594,3.252,870,2.023,958,4.047,1224,4.047,1247,3.121,1259,3.401,1417,4.399,1535,6.77,1634,4.932,1635,4.932,1636,4.932,1637,4.932,1638,4.932]],["t/322",[1,2.886,2,3.041,11,4.075,34,2.659,44,3.805,69,2.749,87,1.187,133,2.566,155,3.041,207,3.421,232,2.358,295,2.685,297,2.961,306,2.988,592,4.935,870,2.659,1506,5.363,1578,4.615,1581,4.821]],["t/324",[23,1.005,34,2.356,36,1.526,37,1.557,59,2.617,62,0.998,68,1.121,87,0.784,125,2.69,140,1.658,152,1.496,170,2.063,199,3.971,206,1.905,210,1.905,219,2.738,232,2.253,277,1.732,295,1.772,320,3.636,353,2.007,423,5.18,429,2.617,432,2.258,433,3.258,434,2.738,609,3.5,670,2.188,736,2.335,870,1.2,1639,3.97,1640,7.852,1641,3.97,1642,3.97,1643,3.97,1644,7.852,1645,3.97,1646,3.97,1647,5.124,1648,5.745,1649,3.97,1650,5.745,1651,3.97]],["t/326",[23,0.929,36,2.186,80,4.48,125,2.663,129,2.101,152,2.77,232,2.231,242,2.663,329,4.124,347,3.923,359,2.801,423,3.6,432,3.236,593,4.124,1493,5.073,1647,5.073,1652,5.688,1653,5.688,1654,5.688,1655,5.688,1656,5.688,1657,5.688,1658,5.688,1659,5.688,1660,5.073,1661,5.688,1662,5.688]],["t/328",[1,2.525,2,2.66,5,1.591,11,2.814,23,0.902,26,3.329,69,2.405,129,1.944,197,3.469,210,2.525,231,2.151,329,3.814,349,3.329,423,3.329,427,3.469,432,2.993,434,3.628,450,2.245,455,4.818,493,4.692,496,3.094,616,3.329,648,4.038,940,3.814,1018,4.317,1663,5.261,1664,5.261,1665,5.261,1666,5.261,1667,5.261,1668,5.261,1669,5.261,1670,5.261,1671,5.261,1672,5.261,1673,5.261,1674,5.261]],["t/330",[0,1.307,23,0.789,34,1.967,36,2.166,69,2.577,87,1.113,129,2.083,138,3.887,140,3.052,171,2.304,210,2.706,232,2.211,298,4.326,306,2.211,320,3.567,342,3.567,415,4.626,609,3.435,623,5.028,628,5.028,645,4.626,827,4.326,870,1.705,1581,3.567,1660,5.028,1675,5.637,1676,5.637,1677,5.637,1678,5.637,1679,5.637,1680,5.637]],["t/332",[23,0.973,28,1.557,36,1.34,68,0.985,69,1.594,87,1.031,125,1.633,126,2.528,143,2.124,170,3.254,205,1.967,206,2.506,231,2.135,277,1.522,292,4.103,294,1.314,295,3.72,297,1.717,305,4.008,306,2.048,312,2.676,317,2.676,353,2.641,361,1.922,405,4.008,417,2.405,429,4.128,432,1.983,456,1.763,491,1.674,513,2.207,518,2.528,541,3.071,542,2.861,670,1.922,736,3.682,870,1.893,928,2.861,965,3.11,1108,2.405,1288,2.861,1357,2.676,1581,3.305,1583,2.861,1681,3.487,1682,3.487,1683,3.11,1684,3.487,1685,3.487,1686,5.222,1687,3.11,1688,3.11,1689,3.487,1690,3.487,1691,3.487,1692,3.487,1693,3.487,1694,3.487,1695,3.487,1696,3.487]],["t/334",[0,0.832,2,1.096,5,0.656,6,1.233,9,1.321,14,0.634,23,1.009,28,2.049,34,0.757,36,0.833,47,1.779,63,1.048,68,0.612,83,0.925,117,1.233,125,1.015,129,0.801,140,0.905,155,1.096,159,1.321,206,1.722,210,1.041,214,1.372,226,1.779,235,1.041,242,1.015,273,2.271,277,0.946,292,3.258,294,0.817,295,3.526,302,1.664,305,1.664,306,1.407,320,1.372,326,1.16,340,2.944,353,1.096,361,1.195,365,2.455,377,1.779,383,1.572,389,2.11,417,3.165,427,1.43,432,1.233,446,1.572,450,2.277,451,4.616,455,3.165,456,2.988,479,1.664,487,1.934,509,1.068,538,1.779,541,2.11,542,1.779,546,2.474,553,2.699,558,1.43,577,1.779,578,1.015,587,1.041,605,1.572,648,1.664,686,1.16,755,1.779,870,1.925,903,3.2,955,2.944,1054,1.779,1055,1.934,1056,1.934,1186,1.779,1247,1.372,1352,3.2,1357,1.664,1578,1.664,1581,1.372,1583,3.767,1591,1.934,1593,3.2,1683,1.934,1687,1.934,1688,1.934,1697,2.168,1698,3.588,1699,4.59,1700,2.168,1701,2.168,1702,1.934,1703,2.168,1704,3.588,1705,2.168,1706,2.168,1707,3.588,1708,2.168,1709,2.168,1710,2.168,1711,2.168,1712,2.168,1713,2.168,1714,2.168,1715,2.168,1716,2.168,1717,2.168,1718,2.168,1719,2.168,1720,2.168,1721,2.168,1722,2.168,1723,2.168,1724,2.168,1725,2.168,1726,2.168,1727,2.168,1728,2.168]],["t/337",[130,3.868,140,2.747,231,2.689,236,4.536,277,2.871,288,3.035,310,4.536,336,2.06,337,4.163,354,3.007,361,3.626,450,2.807,1578,6.183,1702,5.866,1729,6.578]],["t/339",[23,0.637,37,2.314,38,2.314,87,1.165,184,2.697,206,2.832,232,2.952,270,2.906,277,2.575,297,2.906,310,4.069,336,1.848,389,3.47,424,3.734,548,2.357,549,2.362,570,2.635,594,3.891,768,3.156,804,3.253,870,1.784,909,3.357,910,3.357,1549,5.263,1730,5.901,1731,5.901]],["t/341",[23,0.843,38,2.452,205,2.355,206,3.001,232,3.062,548,2.445,549,2.503,568,3.677,570,2.791,768,3.344,804,3.446,808,4.122,864,4.798,870,1.89,909,3.556,910,3.556,924,4.311,1732,6.252,1733,6.252]],["t/343",[232,2.88,295,3.279,313,4.319,548,2.299,549,2.94,869,4.319,1734,5.636]],["t/345",[23,0.733,38,2.663,232,2.663,235,3.259,297,3.344,509,3.344,548,2.126,570,3.032,768,3.632,804,3.743,909,3.863,910,3.863,1734,5.211,1735,6.79]],["t/347",[232,2.88,313,4.319,548,2.299,549,2.94,869,4.319,1734,5.636,1736,7.344]],["t/349",[23,0.733,38,2.663,232,2.663,235,3.259,297,3.344,509,3.344,548,2.126,570,3.032,768,3.632,804,3.743,909,3.863,910,3.863,1734,5.211,1737,6.79]]],"invertedIndex":[["",{"_index":23,"t":{"5":{"position":[[242,1],[420,2],[423,2],[426,1],[510,2],[513,2],[516,2]]},"7":{"position":[[250,1],[425,2],[428,2],[431,1],[433,2],[529,2],[532,2],[535,2]]},"19":{"position":[[356,2],[375,2],[383,1]]},"21":{"position":[[494,2],[513,2],[521,1],[536,1],[556,1],[599,1],[622,1]]},"25":{"position":[[118,1]]},"35":{"position":[[503,2],[518,2],[531,1]]},"45":{"position":[[286,1],[762,2],[797,2],[812,1],[829,1]]},"49":{"position":[[191,1],[193,3],[241,1],[243,3],[271,1],[273,3],[279,2],[290,3],[421,1],[423,1]]},"51":{"position":[[233,1],[242,2],[298,2],[305,1],[323,1],[372,1],[592,1],[601,2],[655,2],[662,1],[680,1],[731,2],[738,1]]},"54":{"position":[[454,2],[628,1],[647,1],[652,1],[721,1],[730,2],[786,2],[793,1],[811,1],[860,1]]},"56":{"position":[[510,2],[576,1],[578,2],[687,1],[718,1],[746,1],[748,2],[888,1],[919,1],[954,1],[956,2],[1102,1],[1133,1],[1168,1],[1170,1],[1206,1],[1220,1],[1225,1],[1262,1],[1278,1],[1283,1],[1477,2],[1659,1],[1661,2],[1726,2],[1777,2],[1784,1],[1802,1],[1827,1],[1855,1],[1857,2],[1888,2],[1911,2],[1918,1],[1936,1],[1938,2],[1985,2],[2032,2],[2044,1],[2062,2],[2083,2],[2090,1],[2108,1],[2172,2],[2179,1],[2181,1],[2248,1],[2734,1],[2913,1],[3091,2],[3094,2],[3097,1],[3280,2],[3283,2],[3286,1],[3370,2],[3373,2],[3376,2],[3379,3]]},"60":{"position":[[167,1]]},"62":{"position":[[482,1],[531,1]]},"64":{"position":[[357,1],[375,1],[439,1],[543,2]]},"72":{"position":[[0,1],[62,1],[101,1],[164,1],[212,1]]},"74":{"position":[[246,1],[248,3],[325,1],[346,1],[348,3],[396,1],[442,2],[502,3],[537,1],[546,1],[548,3],[554,2],[565,3],[593,1]]},"76":{"position":[[439,2],[493,1],[674,2],[756,1]]},"78":{"position":[[384,2],[518,1],[520,3],[535,1],[763,1],[787,1],[792,1],[856,1],[942,1],[1105,1]]},"80":{"position":[[0,1],[34,1],[81,1],[130,1],[168,1],[216,1]]},"82":{"position":[[248,1],[298,1],[438,1],[514,1],[579,2]]},"84":{"position":[[559,1],[561,1],[666,1],[848,1],[920,1]]},"86":{"position":[[0,1],[33,1],[170,1],[262,1],[292,1],[294,1]]},"103":{"position":[[335,2]]},"105":{"position":[[151,1],[220,1],[289,1],[319,1],[321,1],[367,1],[401,1],[437,1],[439,1],[479,1],[500,1]]},"109":{"position":[[124,2],[259,1],[261,2],[350,1],[382,1],[408,1],[435,1],[474,1],[479,1],[481,2],[563,2]]},"111":{"position":[[72,2],[212,1],[243,1],[278,1],[280,1],[282,2],[369,1],[385,1],[390,1],[392,2],[488,1],[502,1],[507,1]]},"119":{"position":[[353,1],[362,1],[379,1],[415,1],[500,1],[533,1],[549,1],[565,1],[579,1],[616,1]]},"121":{"position":[[259,1],[325,1],[367,1],[435,1],[437,1]]},"123":{"position":[[0,1],[80,1],[214,1],[253,1]]},"125":{"position":[[0,1],[208,1],[267,1],[343,1],[398,1]]},"127":{"position":[[0,1]]},"135":{"position":[[126,1],[155,1],[171,1],[187,1],[201,1],[238,1]]},"137":{"position":[[149,1],[194,1],[218,1],[257,1]]},"139":{"position":[[396,2]]},"141":{"position":[[0,1],[32,1]]},"143":{"position":[[0,1],[46,1],[53,1]]},"145":{"position":[[578,1]]},"149":{"position":[[139,1],[273,1]]},"151":{"position":[[119,1]]},"153":{"position":[[134,1],[256,1]]},"155":{"position":[[88,1],[176,1]]},"161":{"position":[[199,1]]},"163":{"position":[[95,1],[124,1],[140,1],[156,1],[170,1],[198,1]]},"165":{"position":[[149,1],[194,1],[218,1],[257,1]]},"167":{"position":[[67,2]]},"169":{"position":[[368,1],[509,1],[547,1],[652,1]]},"171":{"position":[[0,1],[51,1],[188,1],[190,1],[406,2]]},"173":{"position":[[639,1],[685,1],[716,1],[762,1],[807,1],[834,1],[955,1],[1060,1]]},"175":{"position":[[268,1],[402,1]]},"177":{"position":[[856,1]]},"179":{"position":[[280,1],[382,1]]},"181":{"position":[[228,1],[272,1],[515,1],[543,1]]},"198":{"position":[[69,2]]},"200":{"position":[[205,1],[322,1]]},"206":{"position":[[246,1]]},"210":{"position":[[27,1],[133,1],[169,1],[233,1],[262,1],[323,1],[377,1],[437,1],[445,1],[455,1],[514,2],[544,1],[598,2],[626,1],[682,2],[710,1],[762,1]]},"222":{"position":[[189,1],[191,1],[230,2],[249,2],[257,1],[333,1],[366,1]]},"229":{"position":[[181,1],[183,1],[222,2],[241,2],[268,1],[325,1],[354,1]]},"236":{"position":[[253,3],[258,1],[260,1],[299,2],[318,2],[360,1],[402,1],[436,1]]},"246":{"position":[[0,1],[59,1],[115,1],[139,1],[202,2],[228,1],[301,1],[354,1],[396,1],[479,1],[515,1],[596,1]]},"248":{"position":[[0,1],[76,1],[148,1],[173,1],[224,1],[247,1],[259,1],[270,1],[327,1],[335,1],[345,1]]},"250":{"position":[[0,1],[45,1],[126,1],[145,1],[254,2],[318,1],[357,1]]},"252":{"position":[[217,1],[332,1],[337,1],[378,1]]},"256":{"position":[[32,1]]},"258":{"position":[[91,1],[120,1],[136,1],[152,1],[166,1],[194,1],[221,1],[264,1]]},"260":{"position":[[239,1],[269,1],[288,1],[561,1]]},"262":{"position":[[193,1],[216,1],[218,1],[228,1],[248,1],[250,1],[252,1],[277,1],[279,1]]},"264":{"position":[[272,2],[351,1],[379,3],[432,3],[519,1],[535,1],[553,1],[555,3],[671,1]]},"266":{"position":[[906,2],[941,1],[951,1],[983,2],[986,1],[1044,1],[1082,1],[1116,2],[1119,1],[1156,1],[1166,1],[1197,2],[1200,1],[1241,1],[1261,1]]},"268":{"position":[[97,1],[627,1],[744,1],[747,1],[781,1],[842,1],[1564,1],[1634,2],[1698,1],[1701,1],[1735,1],[1747,1],[1769,1],[1785,1],[1787,2],[1790,1],[1891,2],[1993,1],[2061,1],[2110,4],[2115,2],[2221,3],[2225,1],[2227,1],[2229,1],[2801,1],[2881,1],[2901,1],[2913,1],[2933,1],[2951,1],[2953,2],[2956,1],[3072,1],[3088,2],[3118,1],[3133,2],[3183,1],[3207,5],[3218,2],[3275,2],[3283,2],[3335,2],[3338,1],[3340,1],[3342,1],[3665,3],[3796,1],[3799,1],[3826,1],[3896,1],[3911,1],[3929,1],[4010,4],[4024,1]]},"270":{"position":[[263,3],[281,3],[443,1],[476,1],[505,1],[514,1],[524,1],[582,1],[619,1],[628,1],[638,1],[687,1],[939,3]]},"272":{"position":[[891,1],[970,3],[974,2],[1020,2],[1182,1],[1217,2],[1285,3],[1289,1],[1291,2],[1388,2]]},"274":{"position":[[571,1],[866,2],[1002,2],[1033,1],[1136,1],[1139,1],[1167,1],[1169,2],[1235,2],[1302,2],[1356,2],[1379,1],[1422,4],[1427,1],[1448,2],[1463,1],[1506,1],[1580,3],[1584,1],[1586,2],[1653,2],[1679,2],[1682,2],[1748,2],[1809,2],[1872,2],[1938,2],[1984,1],[2007,1],[2033,2],[2048,1],[2091,1],[2170,3],[2174,1],[2176,1],[2185,1],[2491,3],[2583,1],[2687,1],[2690,1],[2738,1],[2821,1],[2846,1],[2951,1],[2954,1],[2996,1],[3010,1],[3216,1],[3583,1],[3692,1],[3695,1],[3737,1],[3823,1],[3955,3],[4073,1],[4579,1],[4686,1],[4689,1],[4739,1],[4741,2],[4808,2],[4875,2],[4976,1],[4991,2],[5019,2],[5186,1],[5188,1],[5261,1],[5264,1],[5308,1],[5310,2],[5387,1],[5440,1],[5482,1],[5507,1],[5522,1],[5524,2],[5527,1],[5538,1],[5718,1],[5720,1],[5722,1],[6080,1],[6181,1],[6184,1],[6226,1],[6298,1],[6323,1],[6432,1],[6435,1],[6477,1],[6553,1]]},"278":{"position":[[389,1],[449,1],[451,1],[511,1],[583,1],[600,2]]},"280":{"position":[[206,1],[282,1],[538,1],[702,1]]},"282":{"position":[[92,4],[215,4]]},"284":{"position":[[335,1],[385,1],[525,1],[601,1],[672,1]]},"286":{"position":[[245,1],[287,1]]},"288":{"position":[[290,1],[483,1],[509,1]]},"290":{"position":[[287,1],[481,1]]},"298":{"position":[[32,1]]},"300":{"position":[[155,1],[184,1],[200,1],[216,1],[230,1],[258,1],[285,1],[330,1],[396,1]]},"302":{"position":[[245,1],[281,1]]},"304":{"position":[[508,1],[552,1],[597,1],[624,2],[633,1],[657,1],[685,2],[707,1],[755,1]]},"306":{"position":[[952,2],[987,1],[1001,1],[1036,2],[1039,1],[1097,1],[1151,3],[1197,1],[1215,2],[1218,1],[1249,1],[1265,1],[1309,2],[1312,1]]},"308":{"position":[[321,1],[400,3],[404,2],[450,2],[574,3],[578,1]]},"312":{"position":[[287,1],[350,2],[429,1],[432,1],[466,1],[537,1]]},"314":{"position":[[563,1],[622,2],[696,2],[722,1],[725,1],[759,1],[771,1],[797,1],[816,1],[818,2],[821,1],[845,1],[926,2],[949,1],[994,4],[999,1],[1001,2],[1118,1],[1168,1],[1184,2],[1194,2],[1214,2],[1217,2],[1304,2],[1383,1],[1385,1],[1411,1]]},"316":{"position":[[479,1],[559,1],[579,1],[581,2],[590,2],[598,1],[624,2],[637,1],[660,2],[663,2],[666,1],[683,1],[750,1],[770,1],[780,1],[782,2],[785,1],[799,1],[870,1],[872,1],[874,1]]},"318":{"position":[[257,2],[316,1],[409,1],[443,1],[455,1],[492,1],[505,1],[507,2],[510,1],[577,1],[579,1],[581,1]]},"320":{"position":[[340,1],[380,1]]},"324":{"position":[[322,1],[324,3],[494,1],[515,3],[628,1],[646,3],[681,2],[774,1],[783,1],[785,3],[791,2],[802,3],[949,1],[951,1]]},"326":{"position":[[197,3],[201,2],[222,1],[330,1]]},"328":{"position":[[359,1],[361,3],[367,2],[471,1]]},"330":{"position":[[155,1],[350,1]]},"332":{"position":[[562,2],[597,1],[621,1],[687,1],[757,1],[766,2],[769,2],[783,2],[795,1],[804,2],[881,1],[883,2],[971,1]]},"334":{"position":[[844,2],[939,1],[958,2],[1014,2],[1021,1],[1034,1],[1047,2],[1074,2],[1095,1],[1097,2],[1148,1],[1159,1],[1172,1],[1268,2],[1271,1],[1273,2],[1318,2],[1396,2],[1434,2],[1476,2],[1580,2],[1721,2],[1814,2],[1875,2],[1976,2],[1979,2],[2050,2],[2053,2],[2142,2],[2226,2],[2328,2],[2335,1],[2414,1],[2427,1]]},"339":{"position":[[281,1]]},"341":{"position":[[28,4],[74,1]]},"345":{"position":[[181,1]]},"349":{"position":[[150,1]]}}}],["0",{"_index":765,"t":{"125":{"position":[[111,1]]},"171":{"position":[[465,3]]},"274":{"position":[[3339,2]]},"286":{"position":[[124,1],[196,1]]}}}],["0.47",{"_index":103,"t":{"13":{"position":[[109,4]]}}}],["0.5",{"_index":835,"t":{"145":{"position":[[493,3]]}}}],["0.50",{"_index":104,"t":{"13":{"position":[[117,4]]}}}],["0s",{"_index":1634,"t":{"320":{"position":[[107,2]]}}}],["1",{"_index":205,"t":{"19":{"position":[[291,1]]},"54":{"position":[[166,2]]},"56":{"position":[[391,2],[474,2],[1222,2],[1280,2]]},"84":{"position":[[563,3],[732,2],[845,2],[926,1],[959,2],[1011,3]]},"86":{"position":[[30,2],[117,1],[162,1],[333,1]]},"109":{"position":[[410,1]]},"111":{"position":[[387,2],[504,2]]},"123":{"position":[[212,1]]},"125":{"position":[[200,1],[449,1]]},"141":{"position":[[164,1]]},"145":{"position":[[408,1]]},"171":{"position":[[11,3],[238,3]]},"173":{"position":[[1009,1]]},"177":{"position":[[111,4]]},"179":{"position":[[35,1],[309,1]]},"181":{"position":[[541,1]]},"210":{"position":[[114,1]]},"254":{"position":[[251,1]]},"272":{"position":[[157,1],[426,2]]},"274":{"position":[[353,2],[382,3],[1039,3],[3391,2]]},"278":{"position":[[315,1],[459,1]]},"282":{"position":[[90,1],[132,2],[213,1],[255,2]]},"284":{"position":[[669,2],[818,2]]},"286":{"position":[[138,1],[338,2],[368,2]]},"288":{"position":[[316,1],[597,2]]},"290":{"position":[[327,1]]},"332":{"position":[[422,1],[968,2]]},"341":{"position":[[26,1]]}}}],["1\",\"name\":\"mynam",{"_index":1568,"t":{"288":{"position":[[359,21]]}}}],["1\",\"wallet\":\"roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87",{"_index":1577,"t":{"290":{"position":[[406,60]]}}}],["1,000,000",{"_index":832,"t":{"145":{"position":[[426,9]]},"151":{"position":[[126,9]]}}}],["1.000007",{"_index":863,"t":{"153":{"position":[[321,8]]}}}],["1.22",{"_index":1209,"t":{"244":{"position":[[101,5]]}}}],["1.5.7",{"_index":1284,"t":{"262":{"position":[[195,7],[230,8]]}}}],["10",{"_index":771,"t":{"125":{"position":[[264,2]]},"227":{"position":[[393,4]]}}}],["100000",{"_index":803,"t":{"139":{"position":[[427,8]]}}}],["1000000",{"_index":854,"t":{"151":{"position":[[328,9]]}}}],["1000000$denom",{"_index":853,"t":{"151":{"position":[[212,13]]}}}],["10000000",{"_index":856,"t":{"151":{"position":[[443,10]]}}}],["1000007",{"_index":862,"t":{"153":{"position":[[309,8]]}}}],["10^6",{"_index":833,"t":{"145":{"position":[[436,6]]}}}],["123$denom",{"_index":865,"t":{"155":{"position":[[148,9]]}}}],["1337urol",{"_index":761,"t":{"123":{"position":[[180,9]]}}}],["15",{"_index":215,"t":{"21":{"position":[[139,2]]}}}],["1_localchain",{"_index":678,"t":{"84":{"position":[[762,12]]},"284":{"position":[[698,12]]}}}],["1s",{"_index":1635,"t":{"320":{"position":[[114,2]]}}}],["2",{"_index":419,"t":{"47":{"position":[[77,1]]},"56":{"position":[[1305,2],[1437,2]]},"84":{"position":[[121,1],[775,1],[889,1]]},"86":{"position":[[277,1],[381,2]]},"109":{"position":[[476,2]]},"121":{"position":[[175,1],[268,1]]},"143":{"position":[[435,1]]},"173":{"position":[[617,1]]},"246":{"position":[[477,1]]},"254":{"position":[[257,2]]},"274":{"position":[[3402,2]]},"278":{"position":[[284,1],[332,2]]},"280":{"position":[[700,1]]},"282":{"position":[[332,1]]},"284":{"position":[[711,1]]},"288":{"position":[[84,1]]},"290":{"position":[[157,2],[313,2]]},"304":{"position":[[77,1]]},"306":{"position":[[425,1]]}}}],["20",{"_index":1420,"t":{"272":{"position":[[415,3]]}}}],["2024",{"_index":1123,"t":{"227":{"position":[[654,6]]}}}],["24.04",{"_index":1214,"t":{"246":{"position":[[109,5]]}}}],["3",{"_index":540,"t":{"56":{"position":[[2540,2],[2644,2]]},"149":{"position":[[596,3]]},"151":{"position":[[486,3]]},"173":{"position":[[636,2]]},"220":{"position":[[143,1]]},"254":{"position":[[134,1]]},"306":{"position":[[25,1]]}}}],["30",{"_index":1566,"t":{"288":{"position":[[234,2]]},"290":{"position":[[112,2]]}}}],["32",{"_index":473,"t":{"54":{"position":[[141,2],[359,2],[649,2],[705,2]]},"78":{"position":[[789,2],[840,2]]}}}],["4601fbacbdf93e4309d92e968f8b4e7f9177bcb132b65aa363afdc26fe6b5cb6",{"_index":913,"t":{"171":{"position":[[96,64]]}}}],["5",{"_index":1117,"t":{"227":{"position":[[389,1]]}}}],["5,000,000",{"_index":844,"t":{"149":{"position":[[146,9]]}}}],["50",{"_index":663,"t":{"82":{"position":[[576,2]]}}}],["500,000",{"_index":836,"t":{"145":{"position":[[527,7]]}}}],["5000000",{"_index":847,"t":{"149":{"position":[[439,9]]},"151":{"position":[[621,9]]}}}],["5000000$denom",{"_index":846,"t":{"149":{"position":[[241,13]]}}}],["565ce77057acbf6fb5d174231455e61e65009cd628971937c19201328e0a1ffd",{"_index":575,"t":{"62":{"position":[[572,64]]}}}],["6",{"_index":823,"t":{"145":{"position":[[215,1],[784,1]]},"147":{"position":[[337,1]]},"161":{"position":[[338,2]]}}}],["666",{"_index":1013,"t":{"200":{"position":[[270,3]]},"246":{"position":[[571,3]]}}}],["7",{"_index":859,"t":{"153":{"position":[[141,1],[269,1]]}}}],["7$denom",{"_index":860,"t":{"153":{"position":[[230,7]]}}}],["721",{"_index":901,"t":{"169":{"position":[[80,4],[85,3]]}}}],["777",{"_index":717,"t":{"105":{"position":[[383,3]]}}}],["7urol",{"_index":767,"t":{"125":{"position":[[159,6]]}}}],["800",{"_index":855,"t":{"151":{"position":[[415,5]]}}}],["8a2009667022be432b60158498c2256aeed0e86e9dff79bd11cc9ea70dec4a8a",{"_index":687,"t":{"86":{"position":[[197,64]]}}}],["9",{"_index":585,"t":{"64":{"position":[[455,1]]},"70":{"position":[[247,1]]},"137":{"position":[[124,1]]},"165":{"position":[[124,1]]}}}],["900",{"_index":848,"t":{"149":{"position":[[526,5]]}}}],["9000000",{"_index":849,"t":{"149":{"position":[[554,9]]}}}],["_",{"_index":1357,"t":{"268":{"position":[[1660,1]]},"314":{"position":[[1192,1]]},"332":{"position":[[776,2]]},"334":{"position":[[1067,2]]}}}],["_ack",{"_index":1532,"t":{"274":{"position":[[6158,5]]}}}],["_dep",{"_index":1342,"t":{"268":{"position":[[675,6],[1608,6]]},"274":{"position":[[2636,6],[6131,6],[6378,6]]}}}],["_env",{"_index":1343,"t":{"268":{"position":[[691,5],[2854,5]]},"274":{"position":[[2652,5],[2915,5],[3654,5],[4649,5],[6147,5],[6394,5]]},"312":{"position":[[376,5]]},"314":{"position":[[648,5]]},"316":{"position":[[532,5]]},"318":{"position":[[371,5]]}}}],["_info",{"_index":1344,"t":{"268":{"position":[[702,6]]},"312":{"position":[[387,6]]},"314":{"position":[[659,6]]}}}],["_msg",{"_index":1345,"t":{"268":{"position":[[722,5]]},"274":{"position":[[6405,5]]},"312":{"position":[[407,5]]}}}],["a+rwx",{"_index":1028,"t":{"206":{"position":[[309,5]]}}}],["a2a169164324aa1b48ab76dd630f75f504e41d99",{"_index":1274,"t":{"260":{"position":[[312,40]]},"302":{"position":[[305,40]]}}}],["abil",{"_index":651,"t":{"82":{"position":[[175,7]]},"266":{"position":[[601,7]]}}}],["abov",{"_index":978,"t":{"188":{"position":[[110,5]]},"190":{"position":[[71,5]]},"192":{"position":[[56,5]]},"286":{"position":[[209,5]]}}}],["abstract",{"_index":380,"t":{"39":{"position":[[227,8]]}}}],["acc0",{"_index":686,"t":{"86":{"position":[[135,4],[316,5]]},"123":{"position":[[148,4]]},"125":{"position":[[37,4]]},"143":{"position":[[34,4],[55,4],[166,4]]},"145":{"position":[[793,4]]},"149":{"position":[[262,4],[389,4]]},"151":{"position":[[233,4],[588,4]]},"153":{"position":[[166,4],[198,4],[245,4]]},"155":{"position":[[165,4],[254,4]]},"173":{"position":[[673,4],[708,4]]},"177":{"position":[[4,4],[126,7]]},"181":{"position":[[54,6]]},"334":{"position":[[1308,4]]}}}],["acc1",{"_index":562,"t":{"62":{"position":[[193,4],[312,4]]},"64":{"position":[[82,4],[122,4],[303,4]]},"123":{"position":[[171,4],[368,4]]},"151":{"position":[[203,4],[284,4]]},"153":{"position":[[174,4],[221,4],[370,4]]},"181":{"position":[[80,7],[264,4]]}}}],["acc1'",{"_index":567,"t":{"62":{"position":[[345,6]]}}}],["access",{"_index":320,"t":{"27":{"position":[[546,6]]},"76":{"position":[[33,6]]},"78":{"position":[[28,6]]},"213":{"position":[[444,10]]},"270":{"position":[[818,6]]},"324":{"position":[[22,6],[200,6]]},"330":{"position":[[31,6]]},"334":{"position":[[123,10]]}}}],["account",{"_index":16,"t":{"5":{"position":[[64,8]]},"7":{"position":[[77,8]]},"56":{"position":[[803,8]]},"60":{"position":[[112,9]]},"62":{"position":[[185,7]]},"64":{"position":[[127,7]]},"92":{"position":[[163,7]]},"98":{"position":[[123,7]]},"109":{"position":[[169,8]]},"111":{"position":[[127,8]]},"123":{"position":[[110,7]]},"131":{"position":[[59,7]]},"143":{"position":[[10,7]]},"149":{"position":[[129,9]]},"151":{"position":[[101,7],[147,7]]},"153":{"position":[[81,9]]},"155":{"position":[[79,8],[113,7]]},"157":{"position":[[174,9],[278,11]]},"173":{"position":[[649,7],[799,7]]},"177":{"position":[[9,7]]},"181":{"position":[[46,7],[72,7],[240,7]]},"183":{"position":[[193,8]]},"227":{"position":[[244,8]]},"288":{"position":[[511,8]]}}}],["achiev",{"_index":105,"t":{"13":{"position":[[128,10]]}}}],["ack",{"_index":1397,"t":{"270":{"position":[[45,3],[271,4],[439,3],[842,3],[916,4]]},"274":{"position":[[141,4],[4821,3],[4932,4],[5978,3]]}}}],["ack.r",{"_index":1396,"t":{"270":{"position":[[19,7]]}}}],["ack::error(err",{"_index":1411,"t":{"270":{"position":[[640,16]]}}}],["ack::result(b\"1\".into",{"_index":1408,"t":{"270":{"position":[[526,25]]}}}],["ack::{make_ack_fail",{"_index":1454,"t":{"274":{"position":[[882,20]]}}}],["acknowledg",{"_index":1398,"t":{"270":{"position":[[49,17]]},"274":{"position":[[4419,14],[4468,14],[5749,15]]},"290":{"position":[[58,12]]}}}],["act",{"_index":1146,"t":{"231":{"position":[[935,3]]}}}],["action",{"_index":78,"t":{"9":{"position":[[344,7]]},"25":{"position":[[41,7]]},"27":{"position":[[212,6]]},"35":{"position":[[410,6]]},"213":{"position":[[222,7]]},"227":{"position":[[324,8]]},"268":{"position":[[1081,6],[1104,7]]}}}],["activ",{"_index":340,"t":{"33":{"position":[[227,8]]},"234":{"position":[[477,8]]},"334":{"position":[[224,8],[1113,7]]}}}],["active_valid",{"_index":1612,"t":{"314":{"position":[[827,17]]}}}],["active_validators.iter().find(|v",{"_index":1614,"t":{"314":{"position":[[882,33]]}}}],["actor",{"_index":411,"t":{"45":{"position":[[1041,6],[1117,6]]},"272":{"position":[[122,6]]}}}],["actual",{"_index":842,"t":{"149":{"position":[[51,8]]},"272":{"position":[[1130,11],[1184,7]]},"274":{"position":[[1508,7],[2093,7]]},"318":{"position":[[93,8]]}}}],["ad",{"_index":578,"t":{"64":{"position":[[135,5]]},"76":{"position":[[687,5]]},"90":{"position":[[51,6]]},"94":{"position":[[148,6]]},"98":{"position":[[198,6]]},"131":{"position":[[190,5]]},"143":{"position":[[550,5],[648,5]]},"159":{"position":[[385,5]]},"238":{"position":[[1741,6]]},"260":{"position":[[404,6]]},"266":{"position":[[477,5]]},"268":{"position":[[1004,6]]},"294":{"position":[[33,6]]},"306":{"position":[[716,5]]},"308":{"position":[[40,5]]},"314":{"position":[[479,5]]},"318":{"position":[[51,6]]},"334":{"position":[[289,5]]}}}],["add",{"_index":36,"t":{"7":{"position":[[5,3]]},"27":{"position":[[180,3],[294,3]]},"54":{"position":[[68,3]]},"56":{"position":[[149,3],[2543,3]]},"66":{"position":[[71,3]]},"78":{"position":[[63,3]]},"107":{"position":[[31,3]]},"109":{"position":[[58,3]]},"111":{"position":[[21,3]]},"143":{"position":[[388,3]]},"145":{"position":[[128,3]]},"188":{"position":[[5,3]]},"231":{"position":[[985,4]]},"246":{"position":[[152,3]]},"252":{"position":[[421,3]]},"262":{"position":[[106,3]]},"268":{"position":[[555,3]]},"270":{"position":[[834,3]]},"272":{"position":[[977,3]]},"274":{"position":[[26,3],[390,3]]},"306":{"position":[[244,3],[421,3]]},"308":{"position":[[407,3]]},"324":{"position":[[241,3]]},"326":{"position":[[95,3]]},"330":{"position":[[105,3]]},"332":{"position":[[565,3]]},"334":{"position":[[195,3]]}}}],["add_attribute(\"channel",{"_index":1361,"t":{"268":{"position":[[1848,25]]},"274":{"position":[[3180,25]]}}}],["add_attribute(\"channel_id",{"_index":1500,"t":{"274":{"position":[[4034,28]]}}}],["add_attribute(\"error",{"_index":1517,"t":{"274":{"position":[[5098,23]]}}}],["add_attribute(\"method",{"_index":1359,"t":{"268":{"position":[[1811,24]]},"274":{"position":[[3134,24],[3986,24],[5051,24],[5613,24]]}}}],["add_attribute(\"nam",{"_index":1524,"t":{"274":{"position":[[5659,22]]}}}],["add_messag",{"_index":1350,"t":{"268":{"position":[[980,11]]}}}],["add_message(ibcmsg::sendpacket",{"_index":1364,"t":{"268":{"position":[[1961,31]]}}}],["addit",{"_index":308,"t":{"27":{"position":[[184,10]]}}}],["addr",{"_index":1713,"t":{"334":{"position":[[1313,4]]}}}],["address",{"_index":28,"t":{"5":{"position":[[332,9]]},"7":{"position":[[339,9]]},"56":{"position":[[140,8],[224,7],[2006,7],[3003,9],[3176,7],[3496,8]]},"62":{"position":[[198,7],[352,8]]},"64":{"position":[[107,7]]},"125":{"position":[[55,7]]},"143":{"position":[[18,7]]},"167":{"position":[[56,10]]},"171":{"position":[[395,10]]},"173":{"position":[[657,7]]},"175":{"position":[[11,7],[288,9],[417,7]]},"264":{"position":[[165,7],[291,7]]},"266":{"position":[[441,8]]},"268":{"position":[[2614,7]]},"280":{"position":[[24,9],[156,10]]},"304":{"position":[[182,9],[317,7],[514,8]]},"306":{"position":[[1199,8]]},"316":{"position":[[222,7],[398,9],[772,7],[828,11]]},"332":{"position":[[623,7]]},"334":{"position":[[707,7],[748,7],[1204,8]]}}}],["adjustment=2.0",{"_index":910,"t":{"169":{"position":[[671,14]]},"173":{"position":[[1079,14]]},"177":{"position":[[875,14]]},"181":{"position":[[494,14]]},"280":{"position":[[503,14],[643,14]]},"282":{"position":[[152,14],[275,14]]},"288":{"position":[[462,14]]},"339":{"position":[[260,14]]},"341":{"position":[[93,14]]},"345":{"position":[[200,14]]},"349":{"position":[[169,14]]}}}],["admin",{"_index":864,"t":{"155":{"position":[[73,5]]},"173":{"position":[[1025,5]]},"282":{"position":[[102,5],[225,5]]},"341":{"position":[[38,5]]}}}],["advanc",{"_index":378,"t":{"39":{"position":[[173,9]]},"213":{"position":[[306,8]]}}}],["advis",{"_index":1015,"t":{"200":{"position":[[311,8]]}}}],["affect",{"_index":1189,"t":{"238":{"position":[[1121,9]]}}}],["ag",{"_index":1009,"t":{"200":{"position":[[168,2]]}}}],["again",{"_index":792,"t":{"137":{"position":[[142,6]]},"165":{"position":[[142,6]]},"274":{"position":[[1332,6]]}}}],["against",{"_index":1720,"t":{"334":{"position":[[1789,7]]}}}],["agre",{"_index":1048,"t":{"213":{"position":[[207,6]]},"224":{"position":[[50,6]]}}}],["algorithm",{"_index":1047,"t":{"213":{"position":[[172,10]]}}}],["alias",{"_index":166,"t":{"17":{"position":[[350,8]]},"45":{"position":[[226,8]]},"147":{"position":[[153,8],[241,8]]}}}],["alic",{"_index":561,"t":{"62":{"position":[[165,8],[458,5]]},"64":{"position":[[367,7]]}}}],["align",{"_index":1154,"t":{"234":{"position":[[327,9]]},"238":{"position":[[689,7],[862,9]]}}}],["all_rev",{"_index":1618,"t":{"314":{"position":[[1100,9],[1370,12]]}}}],["all_revs.insert(val_addr.clon",{"_index":1622,"t":{"314":{"position":[[1261,33]]}}}],["alloc",{"_index":806,"t":{"141":{"position":[[77,9]]},"169":{"position":[[592,9]]}}}],["allow",{"_index":12,"t":{"5":{"position":[[22,5]]},"13":{"position":[[69,8]]},"15":{"position":[[314,6]]},"45":{"position":[[589,6],[1026,5],[1102,5]]},"54":{"position":[[410,8]]},"56":{"position":[[31,6],[763,6],[973,6]]},"66":{"position":[[112,5]]},"74":{"position":[[94,5]]},"88":{"position":[[83,7]]},"92":{"position":[[124,6]]},"109":{"position":[[142,6]]},"111":{"position":[[87,6]]},"231":{"position":[[269,6]]},"268":{"position":[[878,7]]},"292":{"position":[[50,7]]},"306":{"position":[[91,6],[273,5],[725,5]]},"308":{"position":[[158,7]]},"316":{"position":[[149,7]]}}}],["along",{"_index":93,"t":{"11":{"position":[[7,5]]},"33":{"position":[[198,5]]},"274":{"position":[[5354,5]]}}}],["alreadi",{"_index":43,"t":{"7":{"position":[[450,7]]},"9":{"position":[[300,7]]},"27":{"position":[[328,7]]},"58":{"position":[[49,8]]},"70":{"position":[[11,7]]},"72":{"position":[[17,7]]},"84":{"position":[[93,7]]},"246":{"position":[[168,7]]},"268":{"position":[[3519,7]]},"274":{"position":[[4124,7]]},"278":{"position":[[498,7]]}}}],["alright",{"_index":1475,"t":{"274":{"position":[[1941,8]]}}}],["alway",{"_index":942,"t":{"175":{"position":[[184,6],[236,6]]}}}],["am.keeper.contractkeeper.sudo(sdk.unwrapsdkcontext(ctx",{"_index":1725,"t":{"334":{"position":[[2229,56]]}}}],["am.keeper.stakingkeeper.getallvalidators(ctx",{"_index":1708,"t":{"334":{"position":[[961,45]]}}}],["amd64.tar.gz",{"_index":1240,"t":{"250":{"position":[[215,12],[305,12]]}}}],["amount",{"_index":796,"t":{"139":{"position":[[191,6]]},"141":{"position":[[46,6]]},"149":{"position":[[431,7],[518,7],[546,7]]},"151":{"position":[[320,7],[407,7],[435,7],[613,7]]},"169":{"position":[[561,6]]},"215":{"position":[[295,6]]}}}],["analyz",{"_index":1276,"t":{"260":{"position":[[494,8]]}}}],["and_then(|maybe_wallet",{"_index":1376,"t":{"268":{"position":[[3026,25]]}}}],["anil",{"_index":121,"t":{"13":{"position":[[363,4]]}}}],["anoth",{"_index":590,"t":{"66":{"position":[[142,7]]},"78":{"position":[[105,7]]},"84":{"position":[[277,7]]},"90":{"position":[[36,7]]},"123":{"position":[[121,7]]},"151":{"position":[[93,7],[139,7]]},"181":{"position":[[64,7]]},"183":{"position":[[185,7]]},"268":{"position":[[1324,7]]},"272":{"position":[[262,7]]},"292":{"position":[[79,7]]}}}],["ante.go",{"_index":315,"t":{"27":{"position":[[429,7]]}}}],["anyon",{"_index":922,"t":{"173":{"position":[[30,6]]},"227":{"position":[[501,6]]},"231":{"position":[[32,6]]},"268":{"position":[[908,7]]}}}],["anyth",{"_index":376,"t":{"39":{"position":[[140,8]]}}}],["anywher",{"_index":1705,"t":{"334":{"position":[[858,8]]}}}],["api",{"_index":1540,"t":{"280":{"position":[[85,4]]}}}],["api_addr",{"_index":662,"t":{"82":{"position":[[566,9]]},"84":{"position":[[710,9],[989,9]]},"284":{"position":[[645,11]]},"286":{"position":[[314,11]]},"288":{"position":[[573,11]]}}}],["api_addr=\"http://localhost:8080",{"_index":659,"t":{"82":{"position":[[481,32]]},"284":{"position":[[568,32]]}}}],["app",{"_index":251,"t":{"23":{"position":[[107,4]]},"25":{"position":[[242,3]]},"27":{"position":[[0,3]]},"173":{"position":[[600,3]]},"286":{"position":[[247,3]]}}}],["app.go",{"_index":318,"t":{"27":{"position":[[494,6]]}}}],["app.ibckeeper.channelkeep",{"_index":625,"t":{"76":{"position":[[582,28]]}}}],["app.ibckeeper.portkeep",{"_index":626,"t":{"76":{"position":[[611,25]]}}}],["app.nameservicekeep",{"_index":617,"t":{"76":{"position":[[241,23],[650,23]]}}}],["app.nsibckeep",{"_index":621,"t":{"76":{"position":[[477,15]]}}}],["app.reviewskeep",{"_index":1676,"t":{"330":{"position":[[137,17]]}}}],["app.stakingkeep",{"_index":1680,"t":{"330":{"position":[[273,18]]}}}],["app.wasmkeep",{"_index":1679,"t":{"330":{"position":[[256,16]]}}}],["app/app.go",{"_index":415,"t":{"45":{"position":[[1220,11]]},"76":{"position":[[156,10],[428,10]]},"330":{"position":[[126,10]]}}}],["appcodec",{"_index":623,"t":{"76":{"position":[[518,9]]},"330":{"position":[[182,9]]}}}],["appeal",{"_index":1182,"t":{"238":{"position":[[654,9]]}}}],["appear",{"_index":747,"t":{"119":{"position":[[436,6]]},"222":{"position":[[144,6]]},"229":{"position":[[136,6]]},"236":{"position":[[146,6]]}}}],["append",{"_index":1695,"t":{"332":{"position":[[933,7]]}}}],["append(valid",{"_index":1710,"t":{"334":{"position":[[1174,18]]}}}],["appli",{"_index":979,"t":{"188":{"position":[[142,5],[275,5]]},"248":{"position":[[329,5]]}}}],["applic",{"_index":171,"t":{"17":{"position":[[415,11]]},"21":{"position":[[63,12]]},"27":{"position":[[40,11],[514,11]]},"31":{"position":[[125,11]]},"45":{"position":[[1183,11]]},"58":{"position":[[141,11]]},"60":{"position":[[75,12]]},"76":{"position":[[758,11]]},"105":{"position":[[650,11]]},"119":{"position":[[217,11]]},"131":{"position":[[278,11]]},"139":{"position":[[79,11]]},"157":{"position":[[260,11]]},"159":{"position":[[99,12],[473,11]]},"169":{"position":[[348,11]]},"203":{"position":[[80,11]]},"215":{"position":[[29,11]]},"220":{"position":[[15,11]]},"227":{"position":[[160,11]]},"234":{"position":[[659,11],[749,11]]},"260":{"position":[[415,11]]},"270":{"position":[[873,11]]},"286":{"position":[[56,11]]},"330":{"position":[[9,11]]}}}],["application'",{"_index":1206,"t":{"240":{"position":[[197,13]]}}}],["appmodul",{"_index":542,"t":{"56":{"position":[[2681,10]]},"332":{"position":[[580,9]]},"334":{"position":[[892,10]]}}}],["approach",{"_index":142,"t":{"15":{"position":[[305,8]]},"139":{"position":[[283,8]]},"163":{"position":[[307,8]]}}}],["apt",{"_index":1216,"t":{"246":{"position":[[191,3],[210,3],[321,3]]},"250":{"position":[[12,3],[332,3]]}}}],["arg(",{"_index":933,"t":{"173":{"position":[[619,7]]}}}],["arithmet",{"_index":828,"t":{"145":{"position":[[344,10]]}}}],["around",{"_index":961,"t":{"177":{"position":[[538,6]]}}}],["array",{"_index":1704,"t":{"334":{"position":[[608,5],[659,5]]}}}],["arrow",{"_index":202,"t":{"19":{"position":[[207,5]]},"163":{"position":[[377,6]]}}}],["artifacts/validator_reviews_contract.wasm",{"_index":1638,"t":{"320":{"position":[[462,44]]}}}],["ash",{"_index":112,"t":{"13":{"position":[[232,4]]}}}],["associ",{"_index":951,"t":{"177":{"position":[[154,10]]},"264":{"position":[[183,10]]}}}],["assur",{"_index":220,"t":{"21":{"position":[[266,9]]}}}],["attack",{"_index":1169,"t":{"234":{"position":[[836,8]]}}}],["attempt",{"_index":480,"t":{"54":{"position":[[321,8]]},"268":{"position":[[1473,10]]},"272":{"position":[[112,9]]},"274":{"position":[[2220,9]]}}}],["auth",{"_index":1232,"t":{"248":{"position":[[137,4]]},"250":{"position":[[134,4]]}}}],["author",{"_index":199,"t":{"19":{"position":[[128,10],[394,9]]},"115":{"position":[[175,10]]},"119":{"position":[[183,9],[523,9]]},"173":{"position":[[816,10]]},"215":{"position":[[108,10]]},"220":{"position":[[180,10]]},"222":{"position":[[38,10],[78,9],[268,9],[356,9]]},"229":{"position":[[258,9]]},"236":{"position":[[335,9]]},"324":{"position":[[756,9],[927,10],[938,10]]}}}],["authtypes.newmoduleaddress(govtypes.modulename).str",{"_index":628,"t":{"76":{"position":[[698,57]]},"330":{"position":[[292,57]]}}}],["auto",{"_index":1565,"t":{"288":{"position":[[143,4]]}}}],["autocli",{"_index":3,"t":{"3":{"position":[[22,8]]},"5":{"position":[[11,7],[519,7]]},"7":{"position":[[538,7]]},"56":{"position":[[189,7],[2551,7]]}}}],["autocliopt",{"_index":543,"t":{"56":{"position":[[2692,16]]}}}],["autocliv1.moduleopt",{"_index":544,"t":{"56":{"position":[[2709,24],[2743,25]]}}}],["autocliv1.positionalargdescriptor",{"_index":30,"t":{"5":{"position":[[358,37]]},"7":{"position":[[365,37]]},"56":{"position":[[3029,37],[3220,37]]}}}],["autocliv1.rpccommandopt",{"_index":22,"t":{"5":{"position":[[210,31]]},"7":{"position":[[218,31]]},"56":{"position":[[2881,31]]}}}],["autocliv1.servicecommanddescriptor",{"_index":18,"t":{"5":{"position":[[105,36]]},"7":{"position":[[115,36]]},"56":{"position":[[2776,36]]}}}],["autom",{"_index":371,"t":{"39":{"position":[[8,8]]}}}],["automat",{"_index":218,"t":{"21":{"position":[[207,13]]},"35":{"position":[[319,13],[417,13]]},"47":{"position":[[173,13]]},"105":{"position":[[618,13]]},"121":{"position":[[399,13]]},"238":{"position":[[155,13]]},"278":{"position":[[212,13]]},"288":{"position":[[264,13]]},"296":{"position":[[215,13]]}}}],["autonomi",{"_index":1191,"t":{"238":{"position":[[1177,9]]}}}],["av",{"_index":1160,"t":{"234":{"position":[[505,5]]}}}],["avail",{"_index":606,"t":{"74":{"position":[[160,9]]},"82":{"position":[[127,9]]},"171":{"position":[[18,9]]},"306":{"position":[[462,9]]}}}],["averag",{"_index":1058,"t":{"213":{"position":[[458,7]]}}}],["away",{"_index":217,"t":{"21":{"position":[[198,5]]},"39":{"position":[[236,4]]},"318":{"position":[[235,5]]}}}],["awesome/cw",{"_index":906,"t":{"169":{"position":[[451,10]]}}}],["b",{"_index":168,"t":{"17":{"position":[[396,2]]},"90":{"position":[[215,1]]},"274":{"position":[[1728,1],[1769,1]]},"294":{"position":[[211,1]]}}}],["back",{"_index":1108,"t":{"227":{"position":[[36,4]]},"268":{"position":[[3594,5]]},"270":{"position":[[95,4]]},"314":{"position":[[507,4]]},"316":{"position":[[58,5]]},"332":{"position":[[78,4]]}}}],["backend",{"_index":837,"t":{"145":{"position":[[569,8]]}}}],["bad",{"_index":992,"t":{"192":{"position":[[179,4]]},"227":{"position":[[320,3]]}}}],["balanc",{"_index":764,"t":{"123":{"position":[[271,8],[341,8]]},"125":{"position":[[463,8]]},"149":{"position":[[296,8],[362,8],[403,8],[419,9]]},"151":{"position":[[257,8],[308,9],[536,7],[562,7],[604,8]]},"153":{"position":[[343,8]]},"155":{"position":[[227,8]]},"231":{"position":[[118,8]]}}}],["bank",{"_index":179,"t":{"17":{"position":[[506,4]]},"123":{"position":[[138,4],[336,4]]},"125":{"position":[[457,5]]},"147":{"position":[[8,4],[35,4]]},"149":{"position":[[357,4],[398,4]]},"151":{"position":[[52,4],[252,4],[557,4]]},"153":{"position":[[188,4],[338,4]]},"155":{"position":[[222,4]]},"227":{"position":[[239,4]]}}}],["bar",{"_index":1170,"t":{"234":{"position":[[923,4]]}}}],["base",{"_index":212,"t":{"21":{"position":[[58,4]]},"72":{"position":[[77,4]]},"143":{"position":[[720,4]]},"145":{"position":[[458,4],[550,4]]},"147":{"position":[[72,5]]},"149":{"position":[[4,4]]},"153":{"position":[[143,4],[271,4]]},"157":{"position":[[272,5]]},"161":{"position":[[283,5]]},"173":{"position":[[79,4]]},"246":{"position":[[311,4],[604,4]]},"248":{"position":[[2,4],[353,4]]},"250":{"position":[[2,4],[365,4]]},"304":{"position":[[23,4]]}}}],["base64",{"_index":1574,"t":{"290":{"position":[[219,6]]}}}],["bashrc",{"_index":974,"t":{"188":{"position":[[32,9],[296,9]]},"210":{"position":[[517,9],[534,9]]}}}],["basic",{"_index":1337,"t":{"268":{"position":[[506,5]]},"274":{"position":[[398,5],[2338,5],[5938,5]]}}}],["be",{"_index":1335,"t":{"268":{"position":[[476,5]]},"274":{"position":[[1730,5],[5340,5]]}}}],["bech32",{"_index":705,"t":{"103":{"position":[[188,8]]}}}],["bech32=rol",{"_index":708,"t":{"103":{"position":[[297,11]]},"119":{"position":[[537,11]]},"135":{"position":[[159,11]]},"163":{"position":[[128,11]]},"258":{"position":[[124,11]]},"300":{"position":[[188,11]]}}}],["becom",{"_index":1186,"t":{"238":{"position":[[979,7],[1505,6]]},"268":{"position":[[1452,6]]},"334":{"position":[[488,7]]}}}],["befor",{"_index":309,"t":{"27":{"position":[[201,6]]},"244":{"position":[[0,6]]},"268":{"position":[[1255,7]]},"312":{"position":[[169,6]]}}}],["begin",{"_index":310,"t":{"27":{"position":[[219,6]]},"60":{"position":[[226,5]]},"260":{"position":[[398,5]]},"278":{"position":[[46,5]]},"337":{"position":[[0,5]]},"339":{"position":[[48,5]]}}}],["behavior",{"_index":1721,"t":{"334":{"position":[[1855,8]]}}}],["behind",{"_index":1562,"t":{"288":{"position":[[86,6]]}}}],["believ",{"_index":1112,"t":{"227":{"position":[[144,9]]}}}],["below",{"_index":928,"t":{"173":{"position":[[439,5]]},"244":{"position":[[189,5]]},"332":{"position":[[574,5]]}}}],["benefit",{"_index":1076,"t":{"224":{"position":[[0,9]]},"231":{"position":[[0,9]]},"238":{"position":[[0,9],[169,8]]}}}],["best",{"_index":885,"t":{"161":{"position":[[215,4]]},"218":{"position":[[41,4]]},"240":{"position":[[182,4]]}}}],["better",{"_index":800,"t":{"139":{"position":[[313,6]]},"260":{"position":[[512,6]]},"308":{"position":[[6,6]]}}}],["between",{"_index":86,"t":{"9":{"position":[[436,7]]},"80":{"position":[[182,7]]},"84":{"position":[[109,7],[168,7]]},"149":{"position":[[121,7]]},"153":{"position":[[69,7]]},"157":{"position":[[166,7]]},"238":{"position":[[902,7],[1685,7]]},"266":{"position":[[571,7]]},"274":{"position":[[1702,7]]},"284":{"position":[[88,7]]}}}],["beyond",{"_index":348,"t":{"35":{"position":[[84,7]]}}}],["bin",{"_index":560,"t":{"62":{"position":[[47,3]]},"103":{"position":[[234,5]]}}}],["bin=rolld",{"_index":710,"t":{"103":{"position":[[325,9]]},"119":{"position":[[569,9]]},"135":{"position":[[191,9]]},"163":{"position":[[160,9]]},"258":{"position":[[156,9]]},"300":{"position":[[220,9]]}}}],["binari",{"_index":169,"t":{"17":{"position":[[401,6],[427,6]]},"25":{"position":[[246,6]]},"31":{"position":[[194,7],[226,6]]},"62":{"position":[[22,6]]},"80":{"position":[[14,6],[47,6]]},"103":{"position":[[216,6]]},"125":{"position":[[336,6]]},"137":{"position":[[211,6]]},"165":{"position":[[211,6]]},"169":{"position":[[360,7]]},"270":{"position":[[254,8],[507,6],[621,6]]},"276":{"position":[[82,6]]},"278":{"position":[[442,6]]},"286":{"position":[[68,6],[251,6]]},"320":{"position":[[44,7],[396,7]]}}}],["bind",{"_index":790,"t":{"137":{"position":[[53,4]]},"165":{"position":[[53,4]]}}}],["bitcoin",{"_index":352,"t":{"35":{"position":[[127,10]]}}}],["blank",{"_index":1493,"t":{"274":{"position":[[3281,5]]},"326":{"position":[[101,5]]}}}],["block",{"_index":236,"t":{"21":{"position":[[624,5]]},"27":{"position":[[161,5]]},"33":{"position":[[250,7]]},"60":{"position":[[253,7]]},"272":{"position":[[631,5]]},"337":{"position":[[87,6]]}}}],["blockchain",{"_index":55,"t":{"9":{"position":[[67,11]]},"15":{"position":[[17,10]]},"92":{"position":[[28,11]]},"98":{"position":[[40,10]]},"103":{"position":[[347,10]]},"115":{"position":[[66,10]]},"129":{"position":[[237,10]]},"242":{"position":[[92,11]]},"258":{"position":[[12,10]]},"300":{"position":[[12,10]]}}}],["bond",{"_index":1698,"t":{"334":{"position":[[217,6],[272,7]]}}}],["bootstrap",{"_index":1153,"t":{"234":{"position":[[261,9]]},"238":{"position":[[257,14]]}}}],["both",{"_index":607,"t":{"74":{"position":[[174,4]]},"143":{"position":[[445,4]]},"238":{"position":[[778,4],[1693,4]]},"274":{"position":[[5969,4]]},"280":{"position":[[120,4]]},"286":{"position":[[109,4]]}}}],["bottom",{"_index":224,"t":{"21":{"position":[[349,6]]},"318":{"position":[[274,6]]}}}],["box",{"_index":274,"t":{"25":{"position":[[90,4]]}}}],["brain",{"_index":321,"t":{"27":{"position":[[576,5]]}}}],["branch",{"_index":1035,"t":{"210":{"position":[[118,6]]}}}],["brand",{"_index":783,"t":{"129":{"position":[[209,5]]}}}],["brew",{"_index":1230,"t":{"248":{"position":[[7,4],[25,4],[42,4],[60,4],[118,4],[157,4],[182,4]]}}}],["bring",{"_index":943,"t":{"175":{"position":[[191,6]]}}}],["btreemap::new",{"_index":1295,"t":{"264":{"position":[[537,15]]},"314":{"position":[[1197,16]]}}}],["btreemap + + + + +Search the documentation + + + + + + + + + + + \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..08266791 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ +https://rollchains.github.io/spawn/search/weekly0.5https://rollchains.github.io/spawn/main/weekly0.5https://rollchains.github.io/spawn/v0.50/weekly0.5https://rollchains.github.io/spawn/v0.50/build/name-service-application/weekly0.5https://rollchains.github.io/spawn/v0.50/build/name-service-bonus/weekly0.5https://rollchains.github.io/spawn/v0.50/build/name-service-client/weekly0.5https://rollchains.github.io/spawn/v0.50/build/name-service-ibc-contract/weekly0.5https://rollchains.github.io/spawn/v0.50/build/name-service-ibc-module/weekly0.5https://rollchains.github.io/spawn/v0.50/build/name-service-structure/weekly0.5https://rollchains.github.io/spawn/v0.50/build/name-service-summary/weekly0.5https://rollchains.github.io/spawn/v0.50/build/name-service-testnet/weekly0.5https://rollchains.github.io/spawn/v0.50/build/name-service/weekly0.5https://rollchains.github.io/spawn/v0.50/demo/cw-nft/weekly0.5https://rollchains.github.io/spawn/v0.50/demo/cw-validator-reviews/weekly0.5https://rollchains.github.io/spawn/v0.50/demo/ibc/weekly0.5https://rollchains.github.io/spawn/v0.50/demo/tokenfactory/weekly0.5https://rollchains.github.io/spawn/v0.50/install/debugging/weekly0.5https://rollchains.github.io/spawn/v0.50/install/install-spawn/weekly0.5https://rollchains.github.io/spawn/v0.50/install/system-setup/weekly0.5https://rollchains.github.io/spawn/v0.50/learn/consensus-security/weekly0.5 \ No newline at end of file diff --git a/spawn/index.html b/spawn/index.html new file mode 100644 index 00000000..06342a9a --- /dev/null +++ b/spawn/index.html @@ -0,0 +1,11 @@ + + + + + + + + + \ No newline at end of file diff --git a/v0.50/build/name-service-application/index.html b/v0.50/build/name-service-application/index.html new file mode 100644 index 00000000..cc8e4b68 --- /dev/null +++ b/v0.50/build/name-service-application/index.html @@ -0,0 +1,30 @@ + + + + + +Name Service | Spawn + + + + + + + +
Version: v0.50.x

Save Storage Structure

+

You now need to set the data structure in the keeper to store the wallet to name pair. Keeper's are where the data is stored for future use.

+
x/nameservice/keeper/keeper.go

type Keeper struct {
...
NameMapping collections.Map[string, string]
}

...

func NewKeeper() Keeper {
...

k := Keeper{
...
NameMapping: collections.NewMap(sb, collections.NewPrefix(1), "name_mapping", collections.StringKey, collections.StringValue),
}

}
+

keeper NewKeeper NameMapping

+
+

Application Logic

+

Update the msg_server logic to set the name upon request from a user.

+
x/nameservice/keeper/msg_server.go
func (ms msgServer) SetServiceName(ctx context.Context, msg *types.MsgSetServiceName) (*types.MsgSetServiceNameResponse, error) {
if err := ms.k.NameMapping.Set(ctx, msg.Sender, msg.Name); err != nil {
return nil, err
}

return &types.MsgSetServiceNameResponse{}, nil
}
+

and also for the query_server to retrieve the name.

+
x/nameservice/keeper/query_server.go
func (k Querier) ResolveName(goCtx context.Context, req *types.QueryResolveNameRequest) (*types.QueryResolveNameResponse, error) {
v, err := k.Keeper.NameMapping.Get(goCtx, req.Wallet)
if err != nil {
return nil, err
}

return &types.QueryResolveNameResponse{
Name: v,
}, nil
}
+
+ + + \ No newline at end of file diff --git a/v0.50/build/name-service-bonus/index.html b/v0.50/build/name-service-bonus/index.html new file mode 100644 index 00000000..8f26d061 --- /dev/null +++ b/v0.50/build/name-service-bonus/index.html @@ -0,0 +1,35 @@ + + + + + +Name Service | Spawn + + + + + + + +
Version: v0.50.x

Extra Challenges

+

Challenge 1: Limit Input

+

It seems the nameservice will let you set any name length you want. Add a validation check in SetServiceName to ensure the name is less than 32 characters long.

+
Hint #1

The SetServiceName in the msg_server.go looks like an interesting place to start. It should return an error if the name is too long.

+
Solution

If a user attempts to submit a name longer than 32 characters, it will return an error that is not allowed.

x/nameservice/keeper/msg_server.go
// SetServiceName implements types.MsgServer.
func (ms msgServer) SetServiceName(ctx context.Context, msg *types.MsgSetServiceName) (*types.MsgSetServiceNameResponse, error) {
if len(msg.Name) > 32 {
return nil, fmt.Errorf("name cannot be longer than 32 characters")
}

if err := ms.k.NameMapping.Set(ctx, msg.Sender, msg.Name); err != nil {
return nil, err
}

return &types.MsgSetServiceNameResponse{}, nil
}
+

Challenge 2: Resolve Wallet From Name

+

Currently the nameservice only allows you to resolve a name given a wallet. If someone has a name they should be able to resolve the wallet address. Add a new query to the query_server and autocli client to resolve a wallet address from a name.

+
+

This challenge is signinicantly harder and will some previous Go programming knowledge with iterators. You can also just copy the solutions.

+
+
Hint #1

Create a new query.proto for ResolveWallet that takes in a name string

+
Solution #1
proto/nameservice/v1/query.proto
// Query provides defines the gRPC querier service.
service Query {
// Params queries all parameters of the module.
rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {
option (google.api.http).get = "/nameservice/v1/params";
}

// ResolveName allows a user to resolve the name of an account.
rpc ResolveName(QueryResolveNameRequest) returns (QueryResolveNameResponse) {
option (google.api.http).get = "/nameservice/v1/name/{wallet}";
}

// ResolveWallet allows a user to resolve the wallet of a name.
rpc ResolveWallet(QueryResolveWalletRequest) returns (QueryResolveWalletResponse) {
option (google.api.http).get = "/nameservice/v1/wallet/{name}";
}
}

message QueryResolveWalletRequest {
string name = 1;
}

message QueryResolveWalletResponse {
string wallet = 1;
}
make proto-gen
+
Hint #2

Iterate through the k.Keeper.NameMapping, check the Value(). if it matches the name requested, return that wallet (Key)

+
Solution #2
x/nameservice/keeper/query_server.go
// ResolveWallet implements types.QueryServer.
func (k Querier) ResolveWallet(goCtx context.Context, req *types.QueryResolveWalletRequest) (*types.QueryResolveWalletResponse, error) {
// create a way to iterate over all the name mappings.
iter, err := k.Keeper.NameMapping.Iterate(goCtx, nil)
if err != nil {
return nil, err
}
defer iter.Close()

for ; iter.Valid(); iter.Next() {
// get the value (name)
v, err := iter.Value()
if err != nil {
return nil, err
}

// if current name matches the requested name,
// return the wallet address for the name
if v == req.Name {
walletAddr, err := iter.Key()
if err != nil {
return nil, err
}

return &types.QueryResolveWalletResponse{
Wallet: walletAddr,
}, nil
}
}

return nil, fmt.Errorf("wallet not found for name %s", req.Name)
}


This is not the most efficient way to do this. If you would like, create a new WalletMapping collection that maps name->sender when SetServiceName is called. This way you can resolve the wallet from the name in O(1) time (i.e. instant) instead of looping through all possible wallets.

+
Hint #3

Add the AutoCLI method to ResolveWallet with the ProtoField "name" to match the .proto file

+
Solution #3
x/nameservice/autocli.go
func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions {
return &autocliv1.ModuleOptions{
Query: &autocliv1.ServiceCommandDescriptor{
Service: modulev1.Query_ServiceDesc.ServiceName,
RpcCommandOptions: []*autocliv1.RpcCommandOptions{
{
RpcMethod: "ResolveName",
Use: "resolve [wallet]",
Short: "Resolve the name of a wallet address",
PositionalArgs: []*autocliv1.PositionalArgDescriptor{
{ProtoField: "wallet"},
},
},
{
RpcMethod: "ResolveWallet",
Use: "wallet [name]",
Short: "Resolve the wallet address from a given name",
PositionalArgs: []*autocliv1.PositionalArgDescriptor{
{ProtoField: "name"},
},
},
{
RpcMethod: "Params",
Use: "params",
Short: "Query the current module parameters",
},
},
},
...

Then make install and re-run the testnet to verify rolld q nameservice wallet <name> returns the expected wallet address.

+ + + \ No newline at end of file diff --git a/v0.50/build/name-service-client/index.html b/v0.50/build/name-service-client/index.html new file mode 100644 index 00000000..6ad92a78 --- /dev/null +++ b/v0.50/build/name-service-client/index.html @@ -0,0 +1,29 @@ + + + + + +Name Service | Spawn + + + + + + + +
Version: v0.50.x

Command Line Client

+

Using the Cosmos-SDKs AutoCLI, you will easily set up the CLI client for transactions and queries.

+

Query

+

Update the autocli to allow someone to get the name of a wallet account.

+
x/nameservice/autocli.go
		Query: &autocliv1.ServiceCommandDescriptor{
Service: modulev1.Query_ServiceDesc.ServiceName,
RpcCommandOptions: []*autocliv1.RpcCommandOptions{
{
RpcMethod: "ResolveName",
Use: "resolve [wallet]",
Short: "Resolve the name of a wallet address",
PositionalArgs: []*autocliv1.PositionalArgDescriptor{
{ProtoField: "wallet"},
},
},
{
RpcMethod: "Params",
Use: "params",
Short: "Query the current module parameters",
},
},
},
+
AutoCLI Query

AutoCLI Query

+

Transaction

+

Also add interaction in x/nameservice/autocli.go to set the name of a wallet account.

+
x/nameservice/autocli.go
		Tx: &autocliv1.ServiceCommandDescriptor{
Service: modulev1.Msg_ServiceDesc.ServiceName,
RpcCommandOptions: []*autocliv1.RpcCommandOptions{
{
RpcMethod: "SetServiceName",
Use: "set [name]",
Short: "Set the mapping to your wallet address",
PositionalArgs: []*autocliv1.PositionalArgDescriptor{
{ProtoField: "name"},
},
},
{
// NOTE: this is already included in the current source
RpcMethod: "UpdateParams",
Skip: false,
},
},
},
+
AutoCLI Tx

AutoCLI Tx

+ + + \ No newline at end of file diff --git a/v0.50/build/name-service-ibc-contract/index.html b/v0.50/build/name-service-ibc-contract/index.html new file mode 100644 index 00000000..6a56610f --- /dev/null +++ b/v0.50/build/name-service-ibc-contract/index.html @@ -0,0 +1,121 @@ + + + + + +IBC NameService Contract | Spawn + + + + + + + +
Version: v0.50.x

IBC Name Service Contract

+

You will build a new IBC contract with CosmWasm, enabling the same features we just built out in the IBC module. While this is a part 3 of the series, it can be done standalone as it requires a new chain. It is a similar concept to the previous parts 1 and 2, but with a smart contract focus instead of a chain.

+

Prerequisites

+ +

Setup the Chain

+

Build a new blockchain with CosmWasm enabled.

+
GITHUB_USERNAME=rollchains

spawn new cwchain \
--consensus=proof-of-stake \
--bech32=roll \
--denom=uroll \
--bin=rolld \
--disabled=block-explorer \
--org=${GITHUB_USERNAME}

# move into the chain directory
cd cwchain

# download latest dependencies
go mod tidy
+

Build CosmWasm Contract

+

CosmWasm has a template repository that is used to generate new contracts. A minimal contract will be built with the nameservice-contract name provided on a specific commit.

+
cargo generate --git https://github.com/CosmWasm/cw-template.git \
--name nameservice-contract \
--force-git-init \
-d minimal=true --tag a2a169164324aa1b48ab76dd630f75f504e41d99
+

Open the contract in your code editor now to begin adding the application logic.

+
Info

It is useful to install code rust extensions like rust-analyzer and even better toml for an increased editing experience.

+
# open using vscode in the terminal
code nameservice-contract/
+

Update Contract Dependencies

+

This version of the CosmWasm template has some outdated versions. Update these in the Cargo.toml file and add the "ibc3" capability (for IBC support).

+
Cargo.toml
[dependencies]
cosmwasm-schema = "1.5.7"
cosmwasm-std = { version = "1.5.7", features = [
# "cosmwasm_1_3",
"ibc3"
] }
+

Update your local environment with the dependencies.

+
cargo update
+

Setup State

+

This Rust code defines the structure for a name service in a CosmWasm smart contract. It saves a map of all channels (outside chain connections) to a list of wallet address and their associated names.

+
src/state.rs
use std::collections::BTreeMap;

use cw_storage_plus::Map;

// Pair the wallet address to the name a user provides.
pub type WalletMapping = BTreeMap<String, String>;

/// create a new empty wallet mapping for a channel.
/// useful if a channel is opened and we have no data yet
pub fn new_wallet_mapping() -> WalletMapping {
BTreeMap::new()
}

/// Name Service maps for each channel saved to a storage object
pub const NAME_SERVICE: Map<String, WalletMapping> = Map::new("nameservice");
+

Setup Interactions

+

Now that the state is setup, focus on modeling the users interaction with the contract. Users should be able to set a name. This also requires an input for a "channel" since a contract could connect to multiple chains. It could be written in a way that a user could set it to all channels, but for simplicity, we will require a channel to be specified. Just as is set, a user should get the name with the same format: a channel and a wallet address. Then a new message type is added specifically for IBCExecution messages. This is the packet transfered over the network, between chains, and gives the ability to set a name elsewhere on its contract.

+

The contract will call the IBCExecuteMsg when a user runs the ExecuteMsg.SendName function. This indirectly generates the packet and submits it for the user.

+
src/msg.rs
use cosmwasm_schema::{cw_serde, QueryResponses};

#[cw_serde]
pub struct InstantiateMsg {}

#[cw_serde]
pub enum ExecuteMsg {
SetName { channel: String, name: String },
}

#[cw_serde]
#[derive(QueryResponses)]
pub enum QueryMsg {
#[returns(GetNameResponse)]
GetName { channel: String, wallet: String },
}

#[cw_serde]
pub enum IbcExecuteMsg {
SetName { wallet: String, name: String },
}

#[cw_serde]
pub struct GetNameResponse {
pub name: String,
}
+

Contract Logic

+

Here are all the imports used in this. Replace your files top.

+
src/contract.rs
#[cfg(not(feature = "library"))]
use cosmwasm_std::entry_point;
use cosmwasm_std::{Binary, Deps, DepsMut, Env, MessageInfo, Response, StdResult};

use crate::error::ContractError;
use crate::msg::{ExecuteMsg, IbcExecuteMsg, InstantiateMsg, QueryMsg};

use cosmwasm_std::{to_json_binary, IbcMsg, IbcTimeout, StdError};
+

Instantiate creates a new version of this contract that you control. Rather than being unimplemented, return a basic response saying it was Ok (successful) and add some extra logging metadata.

+
src/contract.rs
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn instantiate(
_deps: DepsMut,
_env: Env,
_info: MessageInfo,
_msg: InstantiateMsg,
) -> Result<Response, ContractError> {
Ok(Response::new().add_attribute("method", "instantiate"))
}
+

The ExecuteMsg::SetName method is allowed to be interacted from anyone. Just like instantiate we return a new Ok response. This time an add_message function is added. This will generate the packet as the user interacts, performing a new action from a previous action. This uses the IbcMsg::SendPacket built in type to create it for the user. Notice the data field includes the IbcExecuteMsg::SetName we defined before. This is transferred to the other version of this contract on another chain and processed.

+

If the packet is not picked up by a relayer service provider within a few minutes, the packet will become void and stop attempting execution on the other chain's contract.

+
src/contract.rs
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn execute(
_deps: DepsMut,
env: Env, // removes the underscore _
info: MessageInfo,
msg: ExecuteMsg,
) -> Result<Response, ContractError> {
match msg {
ExecuteMsg::SetName { channel, name } => {
Ok(Response::new()
.add_attribute("method", "set_name")
.add_attribute("channel", channel.clone())
// outbound IBC message, where packet is then received on other chain
.add_message(IbcMsg::SendPacket {
channel_id: channel,
data: to_json_binary(&IbcExecuteMsg::SetName {
name: name,
wallet: info.sender.into_string(),
})?,
// default timeout of two minutes.
timeout: IbcTimeout::with_timestamp(env.block.time.plus_seconds(120)),
}))
}
}
}
+

The users name is not set, but it is only useful if you can also get said data. Read from the NAME_SERVICE storage Map defined in state.rs. Using may load grabs the data if the channel has a name set. If no channel is found (no users have set a name from this chain), it returns an error to the user requesting. If a channel of pairs is found, it loads them and checks if the wallet address requested is set in it. If it is, return what the wallets name is set to. If the user with this wallet did not set a name, return an error.

+
src/contract.rs
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
match msg {
QueryMsg::GetName { channel, wallet } => {
crate::state::NAME_SERVICE
.may_load(deps.storage, channel.clone())
.and_then(|maybe_wallets| match maybe_wallets {
Some(wallets) => match wallets.get(&wallet) {
Some(wallet) => Ok(to_json_binary(&crate::msg::GetNameResponse {
name: wallet.clone(),
})?),
None => Err(StdError::generic_err("No name set for wallet")),
},
None => Err(StdError::generic_err("Channel not found")),
})
}
}
}
+

The contract will receive a packet and must run logic to process it. This is called the try_set_name method. It updates a given channel to include a new wallet. If the wallet already exists, it will overwrite the name. It then returns the users name back, or an error, for our future IBC logic to handle.

+
src/contract.rs
/// called on IBC packet receive in other chain
pub fn try_set_name(
deps: DepsMut,
channel: String,
wallet: String,
name: String,
) -> Result<String, StdError> {
crate::state::NAME_SERVICE.update(deps.storage, channel, |wallets| -> StdResult<_> {
let mut wallets = wallets.unwrap_or_default();
wallets.insert(wallet, name.clone());
Ok(wallets)
})?;
Ok(name)
}
+

Create Transaction acknowledgement

+

Create a new file, ack.rs, to handle the IBC ACK (acknowledgement) messages. This just returns back to the user if their interaction was a success or an error.

+
touch src/ack.rs
+
src/ack.rs
use cosmwasm_schema::cw_serde;
use cosmwasm_std::{to_json_binary, Binary};

/// IBC ACK. See:
/// https://github.com/cosmos/cosmos-sdk/blob/f999b1ff05a4db4a338a855713864497bedd4396/proto/ibc/core/channel/v1/channel.proto#L141-L147
#[cw_serde]
pub enum Ack {
Result(Binary),
Error(String),
}

pub fn make_ack_success() -> Binary {
let res = Ack::Result(b"1".into());
to_json_binary(&res).unwrap()
}

pub fn make_ack_fail(err: String) -> Binary {
let res = Ack::Error(err);
to_json_binary(&res).unwrap()
}
+
Note

Rust has a lib.rs file that is the entry point for the Rust library. All files that are used must be mentioned here to have access to them.

+

Add the ack logic to the lib.rs so the application can use it.

+
src/lib.rs
pub mod ack;
pub mod contract;
...

pub use crate::error::ContractError;
+

Setup Errors

+

If a relayer or contract try to connect to an unlike protocol, the InvalidVersion error will be returned to the attempted actor. This contract only supports 1 protocol version across networks because it must speak the same "language". If you speak english while another person speaks spanish, your interactions are incompatible. Contracts are like this too. They verify their protocol version in a format like "ics-20" or "ns-1" first to make sure they can communicate.

+

OrderedChannel is a type of flow control for network packets, or interactions. This tutorial uses unordered paths so any packet that times out or fails does not block future packets from going through. If a relayer tries to make this an ordered path, the contract returns this error to stop them from doing so.

+
src/error.rs
use cosmwasm_std::StdError;
use thiserror::Error;

#[derive(Error, Debug)]
pub enum ContractError {
#[error("{0}")]
Std(#[from] StdError),

#[error("Unauthorized")]
Unauthorized {},
// Add any other custom errors you like here.
// Look at https://docs.rs/thiserror/1.0.21/thiserror/ for details.

#[error("invalid IBC channel version. Got ({actual}), expected ({expected})")]
InvalidVersion { actual: String, expected: String },

#[error("only unordered channels are supported")]
OrderedChannel {},
}

// There is an IBC specific error that is never returned.
#[derive(Error, Debug)]
pub enum Never {}
+

IBC Specific Logic

+

Create a new file ibc.rs. Add this to the lib.rs. This is where our core IBC logic will go.

+
touch src/ibc.rs
+
src/lib.rs
pub mod ibc;
pub mod ack;
pub mod contract;
mod error;
pub mod helpers;
pub mod msg;
pub mod state;

pub use crate::error::ContractError;
+

Place the following in the ibc.rs file. Import all the types needed, set the IBC version to "ns-1" to stand for "nameservice-1", and add the basic validation logic for the contract. You must ensure contracts that try to talk together are verified to work together. This is that logic.

+
src/ibc.rs
#[cfg(not(feature = "library"))]
use cosmwasm_std::entry_point;
use cosmwasm_std::{
from_json, DepsMut, Env, IbcBasicResponse, IbcChannel, IbcChannelCloseMsg,
IbcChannelConnectMsg, IbcChannelOpenMsg, IbcChannelOpenResponse, IbcOrder, IbcPacketAckMsg,
IbcPacketReceiveMsg, IbcPacketTimeoutMsg, IbcReceiveResponse,
};

use crate::{
ack::{make_ack_fail, make_ack_success},
contract::try_set_name,
msg::IbcExecuteMsg,
state::NAME_SERVICE,
ContractError,
};

pub const IBC_VERSION: &str = "ns-1";

pub fn validate_order_and_version(
channel: &IbcChannel,
counterparty_version: Option<&str>,
) -> Result<(), ContractError> {
// We expect an unordered channel here. Ordered channels have the
// property that if a message is lost the entire channel will stop
// working until you start it again.
if channel.order != IbcOrder::Unordered {
return Err(ContractError::OrderedChannel {});
}

if channel.version != IBC_VERSION {
return Err(ContractError::InvalidVersion {
actual: channel.version.to_string(),
expected: IBC_VERSION.to_string(),
});
}

// Make sure that we're talking with a counterparty who speaks the
// same "protocol" as us.
//
// For a connection between chain A and chain B being established
// by chain A, chain B knows counterparty information during
// `OpenTry` and chain A knows counterparty information during
// `OpenAck`. We verify it when we have it but when we don't it's
// alright.
if let Some(counterparty_version) = counterparty_version {
if counterparty_version != IBC_VERSION {
return Err(ContractError::InvalidVersion {
actual: counterparty_version.to_string(),
expected: IBC_VERSION.to_string(),
});
}
}

Ok(())
}
+

The contract verifies data on an attempted open of a new connection. Ensure the contracts talk the same protocol language, and that all the validation basic logic is connect. Then when a channel is closed, clear the data from storage for it. It is very rare you would want to close a channel.

+
src/ibc.rs
/// Handles the `OpenInit` and `OpenTry` parts of the IBC handshake.
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn ibc_channel_open(
_deps: DepsMut,
_env: Env,
msg: IbcChannelOpenMsg,
) -> Result<IbcChannelOpenResponse, ContractError> {
validate_order_and_version(msg.channel(), msg.counterparty_version())?;
Ok(None)
}

#[cfg_attr(not(feature = "library"), entry_point)]
pub fn ibc_channel_close(
deps: DepsMut,
_env: Env,
msg: IbcChannelCloseMsg,
) -> Result<IbcBasicResponse, ContractError> {
let channel = msg.channel().endpoint.channel_id.clone();
NAME_SERVICE.remove(deps.storage, channel.clone());
Ok(IbcBasicResponse::new()
.add_attribute("method", "ibc_channel_close")
.add_attribute("channel", channel))
}
+

When a successful connection is made, the contract saves a new blank wallet mapping to the channel's unique id. 'channel-0' is the first. All future connections are channel-1, channel-2, etc. This is the first step in the IBC process. The contract is now ready to receive packets once the handler logic is put in place on receive.

+
src/ibc.rs
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn ibc_channel_connect(
deps: DepsMut,
_env: Env,
msg: IbcChannelConnectMsg,
) -> Result<IbcBasicResponse, ContractError> {
validate_order_and_version(msg.channel(), msg.counterparty_version())?;

let channel = msg.channel().endpoint.channel_id.clone();
NAME_SERVICE.save(
deps.storage, channel.clone(), &crate::state::new_wallet_mapping(),
)?;

Ok(IbcBasicResponse::new()
.add_attribute("method", "ibc_channel_connect")
.add_attribute("channel_id", channel))
}
+

ibc_packet_receive handles incoming packets from already connected networks. The packet is forwarded to this contract and processed in do_ibc_packet_receive. It takes the channel and the packet data (the IbcMsg::SetName sent out from the ExecuteMsg earlier), and tries to set the name on a wallet for this channel. If successful, it returns an acknowledgment of success. If not, it returns an acknowledgment of failure. The user will see this in their log event output.

+
src/ibc.rs
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn ibc_packet_receive(
deps: DepsMut,
_env: Env,
msg: IbcPacketReceiveMsg,
) -> Result<IbcReceiveResponse, crate::error::Never> {
// Regardless of if our processing of this packet works we need to
// commit an ACK to the chain. As such, we wrap all handling logic
// in a septate function and on error write out an error ack.
match do_ibc_packet_receive(deps, msg) {
Ok(response) => Ok(response),
Err(error) => Ok(IbcReceiveResponse::new()
.add_attribute("method", "ibc_packet_receive")
.add_attribute("error", error.to_string())
.set_ack(make_ack_fail(error.to_string()))),
}
}

pub fn do_ibc_packet_receive(
deps: DepsMut,
msg: IbcPacketReceiveMsg,
) -> Result<IbcReceiveResponse, ContractError> {
// The channel this packet is being relayed along on this chain.
let channel = msg.packet.dest.channel_id;
let msg: IbcExecuteMsg = from_json(&msg.packet.data)?;

match msg {
IbcExecuteMsg::SetName { wallet, name } => {
let name = try_set_name(deps, channel, wallet, name)?;

Ok(IbcReceiveResponse::new()
.add_attribute("method", "execute_increment")
.add_attribute("name", name)
.set_ack(make_ack_success()))
}
}
}
+

Sometimes after a failed acknowledgement the contract may want to rollback some data or make note of it for future reference. This contract is simple enough so no rollback or refunds are required. We just return a basic response to the user for both the ack or a timeout. Think of this similarly as a NoOp (no operation).

+
src/ibc.rs
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn ibc_packet_ack(
_deps: DepsMut,
_env: Env,
_ack: IbcPacketAckMsg,
) -> Result<IbcBasicResponse, ContractError> {
Ok(IbcBasicResponse::new().add_attribute("method", "ibc_packet_ack"))
}

#[cfg_attr(not(feature = "library"), entry_point)]
pub fn ibc_packet_timeout(
_deps: DepsMut,
_env: Env,
_msg: IbcPacketTimeoutMsg,
) -> Result<IbcBasicResponse, ContractError> {
Ok(IbcBasicResponse::new().add_attribute("method", "ibc_packet_timeout"))
}
+

Build Contract From Source

+

The contract can now be compiled from its source into the .wasm file. This is the binary executable that will be uploaded to the chain.

+
cargo-run-script optimize
+
+

Start the chains and connect

+

Make sure you are in the cwchain directory to begin interacting and uploading the contract to the chain. It is time to start the cosmwasm chain and launch a testnet that connects to itself. The self-ibc chain is automatically generated for you on the creation with spawn. It launches 2 of your networks, localchain-1 and localchain-2, and connects them with a relayer operator at startup.

+
# Build docker image, set configs, keys, and install binary
#
# Error 1 (ignored) codes are okay here if you already have
# the keys and configs setup. If so you only have to `make local-image`
# in future runs :)
make setup-testnet

local-ic start self-ibc
+

Store the Contract on both chains

+

Get the RPC interaction addresses for each network from the local-interchain testnet API. Upload the contract source to both chains using the different RPC addresses.

+
RPC_1=`curl http://127.0.0.1:8080/info | jq -r .logs.chains[0].rpc_address`
RPC_2=`curl http://127.0.0.1:8080/info | jq -r .logs.chains[1].rpc_address`
echo "Using RPC_1=$RPC_1 and RPC_2=$RPC_2"

CONTRACT_SOURCE=./nameservice-contract/artifacts/nameservice_contract.wasm
rolld tx wasm store $CONTRACT_SOURCE --from=acc0 --gas=auto --gas-adjustment=2.0 --yes --node=$RPC_1
# rolld q wasm list-code --node=$RPC_1

rolld tx wasm store $CONTRACT_SOURCE --from=acc0 --gas=auto --gas-adjustment=2.0 --yes --node=$RPC_2 --chain-id=localchain-2
# rolld q wasm list-code --node=$RPC_2
+

Instantiate our Contract on both chains

+

You can now create your contract from the source on each chain.

+
rolld tx wasm instantiate 1 '{}' --no-admin --from=acc0 --label="ns-1" --gas=auto --gas-adjustment=2.0 --yes --node=$RPC_1
rolld tx wasm instantiate 1 '{}' --no-admin --from=acc0 --label="ns-1" --gas=auto --gas-adjustment=2.0 --yes --node=$RPC_2 --chain-id=localchain-2

rolld q wasm list-contracts-by-creator roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87
rolld q wasm list-contracts-by-creator roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87 --node=$RPC_2

NSERVICE_CONTRACT=roll14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjczpjh
+

Relayer connect

+

The relayer must now connect the contracts together and create an IBC connection, link, between them. Use the Local-Interchain helper methods to connect the contracts across the chains. This command will take a second then show a bunch of logs. Error context canceled is fine to see. You will verify they were opened in the next step.

+
# Import the testnet interaction helper functions
# for local-interchain
curl -s https://raw.githubusercontent.com/strangelove-ventures/interchaintest/main/local-interchain/bash/source.bash > ict_source.bash
source ./ict_source.bash

API_ADDR="http://localhost:8080"

# This will take a moment.
ICT_RELAYER_EXEC "$API_ADDR" "localchain-1" \
"rly tx link localchain-1_localchain-2 --src-port wasm.${NSERVICE_CONTRACT} --dst-port=wasm.${NSERVICE_CONTRACT} --order unordered --version ns-1"
+

Verify channels

+

Verify the channels were created. Query either with the application binary of the relayer itself. If you see both a channel-0 and channel-1 in your logs, it was a success. If you only see channel-0 re-run the above relayer exec tx link command.

+
# app binary
rolld q ibc channel channels

# relayer
ICT_RELAYER_EXEC "$API_ADDR" "localchain-1" "rly q channels localchain-1"
+

Transaction interaction

+

Using the ExecuteMsg::SetName method, set a name. This will be transferred to chain 2 behind the scenes. Flushing the relayer will force it to auto pick up pending IBC packets and transfer them across. Not running this may take up to 30 seconds for the relayer to automatically pick it up.

+
# Set the name from chain 1
MESSAGE='{"set_name":{"channel":"channel-1","name":"myname"}}'
rolld tx wasm execute $NSERVICE_CONTRACT "$MESSAGE" --from=acc0 --gas=auto --gas-adjustment=2.0 --yes

# This will take a moment
# 'account sequence mismatch' errors are fine.
ICT_RELAYER_EXEC "$API_ADDR" "localchain-1" "rly tx flush"
+
+

Verify data

+

After the packet is sent over the network, processed, and acknowledged (something that can be done in less than 30 seconds), you can query the data on chain 2. You can also dump all the contract data out to get HEX and BASE64 encoded data for what the contract state storage looks like.

+
# query the name on chain 2, from chain 1
rolld q wasm state smart $NSERVICE_CONTRACT '{"get_name":{"channel":"channel-1","wallet":"roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87"}}' --node=$RPC_2

# dump contract state from the other chain
rolld q wasm state all $NSERVICE_CONTRACT --node=$RPC_2
+

Summary

+

You just build an IBC protocol using cosmwasm! It allowed you to set a name on another network entirely and securely with IBC.

+

What you Learned

+
    +
  • Scaffolding an CosmWasm contract
  • +
  • Adding business logic for an IBC request
  • +
  • Implementing IBC in a contract
  • +
  • Connecting two CosmWasm contracts with a custom IBC protocol
  • +
  • Sending a packet from contract A to contract B
  • +
+ + + \ No newline at end of file diff --git a/v0.50/build/name-service-ibc-module/index.html b/v0.50/build/name-service-ibc-module/index.html new file mode 100644 index 00000000..349659c3 --- /dev/null +++ b/v0.50/build/name-service-ibc-module/index.html @@ -0,0 +1,77 @@ + + + + + +IBC NameService Module | Spawn + + + + + + + +
Version: v0.50.x

IBC Name Service Module

+

In this section, you will build on top of the Name Service tutorial to add cross chain functionality. This will allow you to sent a name from another network.

+

Prerequisites

+ +

Create your chain

+

You should already have a network, rollchain, with the nameservice module from the nameservice tutorial. If you do not, complete that tutorial now.

+
warning

Make sure you do not have the previous testnet still running by stopping it with: killall -9 rolld

+

Scaffold the IBC Module

+
# if you are not already in the chain directory:
cd rollchain

# scaffold the base IBC module for The
# cross chain name service
spawn module new nsibc --ibc-module

# compile latest code with matching module name
# failure to do this will result in: `panic: reflect: New(nil)`
make proto-gen
+

Use the NameService Module

+

You now use the nameservice module you built previously within this new IBC module. This will allow you to save the name mapping on the name service, making it available for both IBC and native chain interactions.

+
x/nsibc/keeper/keeper.go
import (
...
nameservicekeeper "github.com/rollchains/rollchain/x/nameservice/keeper"
)

type Keeper struct {
...
NameServiceKeeper *nameservicekeeper.Keeper
}
+
Keeper Setup Image

View

+
x/nsibc/keeper/keeper.go
// NewKeeper creates a new Keeper instance.
func NewKeeper(
...
nsk *nameservicekeeper.Keeper,
) Keeper {
...

k := Keeper{
...
NameServiceKeeper: nsk,
}
+
NewKeeper Image

View

+

Provide NameService to the IBC Module

+

You must now give the IBC module access to nameservice keeper. It needs this reference so that the logic and connections can be shared. This is done in the app/app.go file. Find where the NameService IBC line is and update it to include the &app.NameserviceKeeper, reference.

+

You can find the NameserviceKeeper set just after the NsibcKeeper is set. If you would like to re-order the original NameService keeper, you can do so.

+
app/app.go
	// Create the nsibc IBC Module Keeper
app.NsibcKeeper = nsibckeeper.NewKeeper(
appCodec,
runtime.NewKVStoreService(keys[nsibctypes.StoreKey]),
app.IBCKeeper.ChannelKeeper,
app.IBCKeeper.PortKeeper,
scopedNsibc,
&app.NameserviceKeeper, // This line added here
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
+
Application NameService Reference Image

View

+

Set Name on IBC Packet

+

Now that the IBC module has access to the nameservice, you can add the logic to set a name received from another chain (called the counterparty). To implement, the OnRecvPacket method has a placeholder for where the logic should run called handleOnRecvLogic. Find the OnRecvPacket in the ibc_module.go file, then find where the handleOnRecvLogic method resides.

+
x/nsibc/ibc_module.go
// Find this method in the file
func (im ExampleIBCModule) handleOnRecvLogic(ctx context.Context, data types.ExamplePacketData) error {
...
return nil
}
+
handleOnRecvLogic location

View

+

Once found, remove the lines within and replace with the following return.

+
x/nsibc/ibc_module.go
func (im ExampleIBCModule) handleOnRecvLogic(ctx context.Context, data types.ExamplePacketData) error {
if len(data.SomeData) > 32 {
return fmt.Errorf("name cannot be longer than 32 characters")
}
return im.keeper.NameServiceKeeper.NameMapping.Set(ctx, data.Sender, data.SomeData)
}
+

This sets the name mapping from the sender to some data (the name) in the original nameservice module.

+
note

This is for example to show cross module interaction / extension with IBC. +You could just as easily write the NameMapping in the ibc keeper store as well.

+

Start Testnet

+
# build chain binary
make install

# verify the binary works. if you get a panic,
# `make proto-gen`, then re `make install`
rolld

# build docker image
make local-image

# run testnet between itself and an IBC relayer
# this will take a minute
local-ic start self-ibc
+

Import Testnet Helpers

+

Pasting the following lines in your terminal will import helper functions to interact with the testnet. +The source is publicly available on GitHub to review. It gives you the ability to interact with the testnet easily using special ICT_ commands.

+
# Import the testnet interaction helper functions
# for local-interchain
curl -s https://raw.githubusercontent.com/strangelove-ventures/interchaintest/main/local-interchain/bash/source.bash > ict_source.bash
source ./ict_source.bash

API_ADDR="http://localhost:8080"

# Waits for the testnet to start
ICT_POLL_FOR_START $API_ADDR 50 && echo "Testnet started"
+

Connect Your IBC Modules

+

You are ready to connect the two chains with your IBC module protocol. The cosmos/relayer is already running between the 2 networks now.

+
note

A Channel is a connection between two chains, like a highway. A port is a specific protocol (or logic) that can connect with itself on another chain. +For example; transfer to transfer, nsibc to nsibc, but transfer to nsibc can not be done. The version is just extra information (metadata) about the connection.

These values are found in the keys.go file as the module name. By default version is just the module name + "-1".

+

Execute the command on the testnet to connect the two chains with the IBC module with the relayer.

+
# This will take a minute.
ICT_RELAYER_EXEC $API_ADDR "localchain-1" "rly tx connect localchain-1_localchain-2 --src-port=nsibc --dst-port=nsibc --order=unordered --version=nsibc-1"

# Running the channels command now shows 2 channels, one for `transfer`
# and 1 for `nsibc`, marked as channel-1.
echo `ICT_RELAYER_CHANNELS $API_ADDR "localchain-1"`
+

Submit Name Service Name Over IBC

+
# Set the IBC name from chain 1.
# view this command in x/nsibc/client/tx.go
rolld tx nsibc example-tx nsibc channel-1 testname --from acc0 --chain-id localchain-1 --yes

# View the logs
rolld q tx 8A2009667022BE432B60158498C2256AEED0E86E9DFF79BD11CC9EA70DEC4A8A

# Verify chain 2 set the name (
# `rolld keys show -a acc0` from chain-1
ICT_QUERY "http://localhost:8080" "localchain-2" "nameservice resolve roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87"
+

Summary

+

You just build an IBC module that interacts with your other nameservice module! It allowed you to set your name from a different network entirely and securely with IBC.

+

What you Learned

+
    +
  • Scaffolding an IBC module
  • +
  • Importing another module
  • +
  • Adding business logic for an IBC request
  • +
  • Connecting two chains with a custom IBC protocol
  • +
  • Sending your first IBC packet from chain A
  • +
  • Processing the packet on chain B and verifying it was set
  • +
+ + + \ No newline at end of file diff --git a/v0.50/build/name-service-structure/index.html b/v0.50/build/name-service-structure/index.html new file mode 100644 index 00000000..f192af6e --- /dev/null +++ b/v0.50/build/name-service-structure/index.html @@ -0,0 +1,36 @@ + + + + + +Name Service | Spawn + + + + + + + +
Version: v0.50.x

Set Data Structure

+

Extend the template module and add how to store and interact with data. Specifically, you need to set and retrieve a name.

+

Set Name

+

Open the proto/nameservice/v1 directory. Edit tx.proto to add the transaction setter message.

+
proto/nameservice/v1/tx.proto

// SetServiceName allows a user to set their accounts name.
rpc SetServiceName(MsgSetServiceName) returns (MsgSetServiceNameResponse);
}

// MsgSetServiceName defines the structure for setting a name.
message MsgSetServiceName {
option (cosmos.msg.v1.signer) = "sender";

string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];

string name = 2;
}

// MsgSetServiceNameResponse is an empty reply.
message MsgSetServiceNameResponse {}
+
Details

proto/nameservice/v1/tx.proto file +proto/nameservice/v1/tx.proto file

+

Get Name

+

Find query.proto and add the following

+
proto/nameservice/v1/query.proto

// ResolveName allows a user to resolve the name of an account.
rpc ResolveName(QueryResolveNameRequest) returns (QueryResolveNameResponse) {
option (google.api.http).get = "/nameservice/v1/name/{wallet}";
}
}

// QueryResolveNameRequest grabs the name of a wallet.
message QueryResolveNameRequest {
string wallet = 1;
}

// QueryResolveNameResponse grabs the wallet linked to a name.
message QueryResolveNameResponse {
string name = 1;
}
+
Details

proto/nameservice/v1/query.proto +proto/nameservice/v1/query.proto file

+

Generate Code

+

These .proto file templates will be converted into Golang source code for you to use. Build the Go source code using the command:

+
make proto-gen
+
Details

make proto-gen expected output +make proto-gen

+ + + \ No newline at end of file diff --git a/v0.50/build/name-service-summary/index.html b/v0.50/build/name-service-summary/index.html new file mode 100644 index 00000000..a41a08df --- /dev/null +++ b/v0.50/build/name-service-summary/index.html @@ -0,0 +1,33 @@ + + + + + +Name Service | Spawn + + + + + + + +
Version: v0.50.x

Conclusion

+

You just crafted your first blockchain, module, and custom logic with Spawn. You have a fully functioning name service that allows users to set and retrieve their account names.

+

What you Learned

+
    +
  • Generating a new chain with your desired characteristics
  • +
  • Scaffolding a module
  • +
  • Setting the protobuf structure for transactions, queries, and Storage
  • +
  • Adding custom business logic to a module's server handlers
  • +
  • Configuring the command line client
  • +
  • Running a local testnet
  • +
  • Interacting with the network
  • +
+

What's Next?

+

Extend the NameService to include IBC support with the ibc-module tutorial.

+ + + \ No newline at end of file diff --git a/v0.50/build/name-service-testnet/index.html b/v0.50/build/name-service-testnet/index.html new file mode 100644 index 00000000..21565f10 --- /dev/null +++ b/v0.50/build/name-service-testnet/index.html @@ -0,0 +1,40 @@ + + + + + +Name Service | Spawn + + + + + + + +
Version: v0.50.x

Running your Application

+
Synopsis

Congrats!! You built your first network already. You are ready to run a local testnet environment to verify it works.

    +
  • Building your application executable
  • +
  • Running a local testnet
  • +
  • Interacting with the network
  • +
+

Launch The Network

+

Use the sh-testnet command (short for shell testnet) to quickly build your application, generate example wallet accounts, and start the local network on your machine.

+
# Run a quick shell testnet
make sh-testnet
+

The chain will begin to create (mint) new blocks. You can see the logs of the network running in the terminal.

+

Interact Set Name

+

Using the newly built binary (rolld from the --bin flag when the chain was created), you are going to execute the set transaction to your name. In this example, use "alice". This links account acc1 address to the desired name in the keeper.

+

Then, resolve this name with the nameservice lookup. $(rolld keys show acc1 -a) is a substitute for the acc1's address. You can also use just roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87 here.

+
rolld tx nameservice set alice --from=acc1 --yes

# You can verify this transaction was successful
# By querying it's unique ID.
rolld q tx 565CE77057ACBF6FB5D174231455E61E65009CD628971937C19201328E0A1FFD
+

Interaction Get Name

+

Now you are going to get the name of a wallet. A nested command $(rolld keys show acc1 -a) gets the unique address of the acc1 account added when you started the testnet.

+
rolld q nameservice resolve roll1efd63aw40lxf3n4mhf7dzhjkr453axur57cawh --output=json

rolld q nameservice resolve $(rolld keys show acc1 -a) --output=json
+

The expected result should be:

+
{
"name": "alice"
}
+
note

When you are ready to stop the testnet, you can use ctrl + c or killall -9 rolld.

+

Your network is now running and you have successfully set and resolved a name! 🎉

+ + + \ No newline at end of file diff --git a/v0.50/build/name-service/index.html b/v0.50/build/name-service/index.html new file mode 100644 index 00000000..6df40054 --- /dev/null +++ b/v0.50/build/name-service/index.html @@ -0,0 +1,50 @@ + + + + + +Name Service | Spawn + + + + + + + +
Version: v0.50.x

Overview

+
Synopsis

Building your first Cosmos-SDK blockchain with Spawn. This tutorial focuses on a 'nameservice' where you set your account to a name you choose.

    +
  • Generating a new chain
  • +
  • Creating a new module
  • +
  • Adding custom logic
  • +
  • Run locally
  • +
  • Interacting with the network
  • +
+

Prerequisites

+ +

Video Walkthrough

+ +

Generate a New Chain

+

Let's create a new chain called 'rollchain'. You are going to set defining characteristics such as

+
    +
  • Which modules to disable from the template if any
  • +
  • Proof of Stake consensus
  • +
  • Wallet prefix (bech32)
  • +
  • Token name (denom)
  • +
  • Binary executable (bin)
  • +
+
spawn new rollchain --consensus=pos --disable=cosmwasm --bech32=roll --denom=uroll --bin=rolld
+

🎉 Your new blockchain 'rollchain' is now generated!

+

Scaffold the Module

+

Now it is time to build the nameservice module structure.

+

Move into the 'rollchain' directory and generate the new module with the following commands:

+
# moves into the rollchain directory you just generated
cd rollchain

# scaffolds your new nameservice module
spawn module new nameservice

# proto-gen proto files to go
#
# If you get a /.cache permission error, run:
# sudo chmod -R 777 $(pwd)/.cache
# sudo chown -R $USER $(pwd)/.cache
#
# If you get a cannot find module error
# go clean -modcache
#

make proto-gen
+

This creates a new template module with the name nameservice in the x and proto directories. It also automatically connected to your application and is ready for use.

+ + + \ No newline at end of file diff --git a/v0.50/demo/cw-nft/index.html b/v0.50/demo/cw-nft/index.html new file mode 100644 index 00000000..0e1561ef --- /dev/null +++ b/v0.50/demo/cw-nft/index.html @@ -0,0 +1,70 @@ + + + + + +CW NFTs | Spawn + + + + + + + +
Version: v0.50.x

Non-fungible Token Demo

+

You will build a new chain with CosmWasm, enabling support for smart contracts on a new Cosmos-SDK application. You will download a pre-built contract, upload it, and interact with it to transfer the ownership of some data.

+

If you do not know what an NFT is, you can read about them here: investopedia.com/non-fungible-tokens-nft.

+
Warning

Some parts of this tutorial will not have the added context about spawn's inner workings or how commands work. Run through Build Your Application for this context.

+

Prerequisites

+ +
Danger

Some machines like Windows will not work with running the testnet. This is a limitation of the operating system hardware with wasm and required C language libraries / DLLs.

For the best experience, try make testnet or use a Linux machine or a cloud-based linux instance from Hetzner or Digital Ocean for $6 per month.

+

Create your chain

+

Build a new chain that has CosmWasm configured.

+
GITHUB_USERNAME=rollchains

spawn new rollchain \
--consensus=proof-of-stake \
--bech32=roll \
--denom=uroll \
--bin=rolld \
--disabled=block-explorer \
--org=${GITHUB_USERNAME}
+
View UI Selector

If you remove the --disabled flag; a more intuitive UI selection approach will be taken. Make sure CosmWasm is selected with the green arrow, then press done.

Image

+

Start the testnet

+
Note

If make sh-testnet does not start due to a port bind error, you can kill your previously running testnet with killall -9 rolld, then try again.

+
# move into the chain directory
cd rollchain

# - Installs the binary
# - Setups the default keys with funds
# - Starts the chain in your shell
make sh-testnet
+

Verify CosmWasm is enabled

+
rolld q wasm params
+
Expected Output
code_upload_access:
addresses: []
permission: Everybody
instantiate_default_permission: Everybody
+

Upload the contract to the network

+

You will use the CW721 contract for your NFT journey. CW721 stands for CosmWasm 721. 721 corresponds to the Ethereum specification for NFTs. Understanding this is out of scope for this tutorial. Just know you can create, transfer, and query data.

+

Download the contract code from the CosmWasm NFTs repository, then upload it to the network with the application binary.

+
# Download the the NFT contract to your machine
curl -LO https://github.com/public-awesome/cw-nfts/releases/download/v0.19.0/cw721_base.wasm

# Upload the source code to the chain
# - gas is is amount of compute resources to allocate.
rolld tx wasm store ./cw721_base.wasm --from=acc0 \
--gas=auto --gas-adjustment=2.0 --yes
+

Verify the code was uploaded

+
# Code id: "1" is available
rolld q wasm list-code

# See the details (A lot of spam)
rolld q tx 4601FBACBDF93E4309D92E968F8B4E7F9177BCB132B65AA363AFDC26FE6B5CB6
+
Expected Code Info
(main) -> $ rolld q wasm list-code
code_infos:
- code_id: "1"
creator: roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87
data_hash: E13AA30E0D70EA895B294AD1BC809950E60FE081B322B1657F75B67BE6021B1C
instantiate_permission:
addresses: []
permission: Everybody
pagination:
next_key: null
total: "0"
+

Create a new NFT collection

+

With the source now uploaded, anyone can create a new NFT collection with this base contract code now on the chain. This will be a new contract that only you control. Now, instantiate the contract to create the new NFT collection.

+
Instantiate Format Source

You can find the instantiate, execute, and query messages (json) formats in the contract source code.

packages/cw721/src/msg.rs
loading...
+
Warning

Notice the MESSAGE= below has no spaces in the JSON. This is required for the command line to parse it correctly. Failure to do so will result in the error

ERR failure when running app err="accepts 2 arg(s), received 3"

+
# Get our account address for the acc0 wallet / key.
rolld keys show acc0 -a # roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87

# Create the NFT collection with our account
# as the authorized minter / creator for new NFTs.
MESSAGE='{"name":"Roll","symbol":"ROLL","minter":"roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87"}'

# Create the NFT collection
rolld tx wasm instantiate 1 $MESSAGE --no-admin --from=acc0 --label="my-nft" \
--gas=auto --gas-adjustment=2.0 --yes
+

Contract address

+

A contract address is where all the collection and information is stored. It never changes and is the unique identifier for interaction. Think of this similar to a website, google.com always brings you to google search. NFT_CONTRACT is always the RollNFTs collection.

+
# View all contract addresses a wallet has created
rolld q wasm list-contracts-by-creator roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87

# The contract address for the NFT collection just created
NFT_CONTRACT=roll14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjczpjh
+

Create an NFT in the collection

+

The acc0 account now must create the first NFT in the collection since it is the minter. Specify the unique ID (1), the owner (acc0), and some data to be associated with this NFT. Set the url of a sunflower image as the metadata for this tutorial.

+
Note

The token_uri is a URL that points to the metadata of the NFT. This can be a JSON object or a URL to a JSON object. +This URL can be a link to an external service like IPFS, or the raw text directly. The contract does not care, it is up to you to manage the data and build the services around it.

+
Execute Format Source
packages/cw721/src/msg.rs
loading...
+
MESSAGE='{"mint":{"token_id":"1","owner":"roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87","token_uri":"https://onlinejpgtools.com/images/examples-onlinejpgtools/sunflower.jpg"}}'

rolld tx wasm execute $NFT_CONTRACT $MESSAGE --from=acc0 \
--gas=auto --gas-adjustment=2.0 --yes
+

Grab this NFT data

+

There is now an NFT with the ID of 1 owned by roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87. Now query the contract to see the data and verify it is correct.

+
Query Format Source
packages/cw721/src/msg.rs
loading...
packages/cw721/src/msg.rs
loading...
+
# Get who is the owner of ID 1
rolld q wasm state smart $NFT_CONTRACT '{"owner_of":{"token_id":"1"}}'

# Retrieve the NFT info
rolld q wasm state smart $NFT_CONTRACT '{"nft_info":{"token_id":"1"}}'
+

Transfer the NFT to another account

+

Now move the token from the originally minted account (acc0) to another account (acc1). This is a simple transfer of ownership to move who owns the data.

+
Execute Format Source
packages/cw721/src/msg.rs
loading...
+
# Recipient account
rolld keys show acc1 -a # roll1efd63aw40lxf3n4mhf7dzhjkr453axur57cawh

MESSAGE='{"transfer_nft":{"recipient":"roll1efd63aw40lxf3n4mhf7dzhjkr453axur57cawh","token_id":"1"}}'
rolld tx wasm execute $NFT_CONTRACT $MESSAGE --from=acc0 --gas=auto --gas-adjustment=2.0 --yes

# Get who is the owner of 1
# Moved to: roll1efd63aw40lxf3n4mhf7dzhjkr453axur57cawh
rolld q wasm state smart $NFT_CONTRACT '{"owner_of":{"token_id":"1"}}'
+

Conclusion

+

In this tutorial, you built a new chain with CosmWasm enabled, launched a testnet for it, and launched an NFT collection! You uploaded a contract, created an NFT, and transferred it to another account. This is the foundation for building a new unique marketplace or game on the Interchain.

+ + + \ No newline at end of file diff --git a/v0.50/demo/cw-validator-reviews/index.html b/v0.50/demo/cw-validator-reviews/index.html new file mode 100644 index 00000000..5dcd1143 --- /dev/null +++ b/v0.50/demo/cw-validator-reviews/index.html @@ -0,0 +1,121 @@ + + + + + +CW Validator Reviews | Spawn + + + + + + + +
Version: v0.50.x

CosmWasm Validator Reviews

+

You will build a new chain with CosmWasm, enabling a proof-of-stake validator review system. You will write a contract to collect and manage validator reviews, integrate it with the chain, and update validator data automatically through a Cosmos-SDK endblocker module.

+

There are easy ways to get validators in a cosmwasm smart contract. The goal of this tutorial is to teach how to pass data from the SDK to a contract.

+

Prerequisites

+ +

Setup the Chain

+

Build a new blockchain with CosmWasm enabled. THen generate a new module from the template for the reviews.

+
GITHUB_USERNAME=rollchains

spawn new rollchain \
--consensus=proof-of-stake \
--bech32=roll \
--denom=uroll \
--bin=rolld \
--disabled=block-explorer \
--org=${GITHUB_USERNAME}


# move into the chain directory
cd rollchain

# Generate the Cosmos-SDK reviews module
spawn module new reviews

# build the proto to code
make proto-gen
+

Once the chain is started, continue on to the contract building steps

+

CosmWasm Build Contract

+

CosmWasm has a template repository that is used to generate new contracts. A minimal contract will be built with the validator-reviews-contract name provided on a specific commit.

+
cargo generate --git https://github.com/CosmWasm/cw-template.git \
--name validator-reviews-contract \
-d minimal=true --tag a2a169164324aa1b48ab76dd630f75f504e41d99
+

A new folder will be created with the contract template.

+
code validator-reviews-contract/
+

Set State

+

The contract state and base structure is set in the state.rs file. There are 2 groups of data that must be managed, validators and the reviews for validators.

+
    +
  • Validators have unique addresses and name stored on the chain. This data will be passed from the Cosmos-SDK to the contract.
  • +
  • Reviews will save a user wallets address and their text reviews for a validator.
  • +
+
src/state.rs
use std::collections::BTreeMap;

use cosmwasm_schema::cw_serde;
use cw_storage_plus::{Item, Map};

#[cw_serde]
pub struct Validator {
pub address: String,
pub moniker: String,
}
pub const VALIDATORS: Item<Vec<Validator>> = Item::new("validators");

// user -> text
pub type Reviews = BTreeMap<String, String>;

// validator_address -> reviews
pub const REVIEWS: Map<&str, Reviews> = Map::new("reviews");
+

Set Inputs

+

By default contracts get 3 messages, InstantiateMsg, ExecuteMsg, and QueryMsg.

+
    +
  • Instantiate allows initial contracts setup with a configuration desired. This is not used for us. Keep it empty.
  • +
  • Execute is where the main logic of the contract is. Add a WriteReview message to allow users to write reviews. The user must know who they want to write a review for and what it says.
  • +
  • Query is for reading data from the contract. Add 2 queries, one to get all validators available and one to get reviews for a specific validator.
  • +
+

The SudoMsg is a default type not typically used. Sudo stands for Super User DO where the super user is the chain. Only the chain can submit data to this message type. A SetValidators message is added to allow the chain to update the validators list within the contract. This is the pass through from the Cosmos-SDK to the contract.

+
src/msg.rs
use cosmwasm_schema::{cw_serde, QueryResponses};

#[cw_serde]
pub struct InstantiateMsg {}

#[cw_serde]
pub enum ExecuteMsg {
WriteReview { val_addr: String, review: String },
}

#[cw_serde]
#[derive(QueryResponses)]
pub enum QueryMsg {
#[returns(Vec<crate::state::Validator>)]
Validators {},

#[returns(crate::state::Reviews)]
Reviews { address: String },
}

#[cw_serde]
pub enum SudoMsg {
SetValidators {
validators: Vec<crate::state::Validator>,
},
}
+

Set new error

+

For a better experience, a new error is added to the contract. This will be used when a validator is not found in the list of validators. Users should not be allowed to post reviews for non existent validators.

+
src/error.rs
use cosmwasm_std::StdError;
use thiserror::Error;

#[derive(Error, Debug)]
pub enum ContractError {
#[error("{0}")]
Std(#[from] StdError),

#[error("Unauthorized")]
Unauthorized {},

// Add any other custom errors you like here.
// Look at https://docs.rs/thiserror/1.0.21/thiserror/ for details.
#[error("The validator is not found")]
NoValidatorFound {},
}
+

Imports

+

The imports required for this next section are provided here. Paste these at the top of the file to get syntax highlighting.

+
src/contract.rs
use crate::state::{Reviews, REVIEWS, VALIDATORS};
use cosmwasm_std::to_json_binary;
use std::collections::BTreeMap;
+

Modify Instantiate Message

+

Even though no extra data is passed through to the setup method, an empty list of validators is saved to storage. This way if we try to get validators from the contract before any have been set by the chain, it returns nothing instead of an error.

+
src/contract.rs
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn instantiate(
deps: DepsMut, // removes the underscore
_env: Env,
_info: MessageInfo,
_msg: InstantiateMsg,
) -> Result<Response, ContractError> {
VALIDATORS.save(deps.storage, &Vec::new())?;
Ok(Response::default())
}
+

Add Execute Logic

+

When the user sends a message, the contract needs to first check if the validator exist. It does this by loading the validators state and looping through all the validators to see if the one the user requested if in the list. If it is not, it returns to the user that the validator is not found. If it is found then the contract loads all reviews a validator has. If there are none, it creates an empty list of reviews since this will be the first one. The user's review is then added to the list and saved back to storage.

+
src/contract.rs
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn execute(
deps: DepsMut, // removes the underscore
_env: Env,
_info: MessageInfo,
msg: ExecuteMsg, // removes the underscore
) -> Result<Response, ContractError> {
match msg {
ExecuteMsg::WriteReview { val_addr, review } => {
let active_validators = VALIDATORS.load(deps.storage)?;
if active_validators.iter().find(|v| v.address == val_addr).is_none() {
return Err(ContractError::NoValidatorFound {});
}

// Get current validator reviews if any. If there are none, create a new empty review map.
let mut all_revs: Reviews = match REVIEWS.may_load(deps.storage, &val_addr) {
Ok(Some(rev)) => rev,
_ => BTreeMap::new(),
};

// Set this users review for the validator.
all_revs.insert(val_addr.clone(), review);

// Save the updated reviews
REVIEWS.save(deps.storage, &val_addr, &all_revs)?;
}
}

Ok(Response::default())
}
+

Add Queries

+

It is only useful to set reviews if you can also get them back. The first query for Validators is just a helper method so users can see who they are allowed to review. The second query is for Reviews and takes a validator address as a parameter. This will return all reviews for that validator.

+

To get reviews for all validators, a user would need to query Validators, then iterate through all the addresses and query Reviews for each one.

+
src/contract.rs
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> StdResult<Binary> {
// note: ^^ deps & msg are not underscored ^^
match msg {
QueryMsg::Validators {} => {
let validators = VALIDATORS.load(deps.storage)?;
Ok(to_json_binary(&validators)?)
}
QueryMsg::Reviews { address } => {
let reviews = REVIEWS.load(deps.storage, &address)?;
Ok(to_json_binary(&reviews)?)
}
}
}
+

Add New Sudo Message Type

+

The chain extended portion of this contract is now added. It is where the validator logic is actually set and saved to storage. As the validator set changes (nodes stop, new nodes come online), the chain will update the contract right away.

+
src/contract.rs
// Insert at the bottom of the file
#[cfg_attr(not(feature = "library"), entry_point)]
pub fn sudo(deps: DepsMut, _env: Env, msg: crate::msg::SudoMsg) -> Result<Response, ContractError> {
match msg {
crate::msg::SudoMsg::SetValidators { validators } => {
VALIDATORS.save(deps.storage, &validators)?;
Ok(Response::new())
}
}
}
+

Build the Contract

+

Build the contract to get the cosmwasm wasm binary. This converts it from english programming rust text to 0s and 1s that the chain can understand. The optimize script requires docker to be installed and running. Make sure you followed the setup prerequisites at the top of the page and have the docker service or docker desktop installed.

+
# run the build optimizer (from source -> contract wasm binary)
cargo run-script optimize
+

The .wasm file is then saved to ./artifacts/validator_reviews_contract.wasm.

+

Modify the Module

+

The contract is complete but we need to pass the data into the contract from the chain. This is done through the cosmos-sdk reviews module generated earlier. The module will be updated to include the wasm contract and the endblocker will be updated to pass the validator data to the contract.

+

Setup the Keeper

+

We must give our code access to other modules on the chain. The wasm module is required to interact with the contract. The staking module is required to get the list of validators. This keeper is the access point for all the specific logic.

+

Add the imports, keeper setup, and new keeper output.

+
x/reviews/keeper.go
import (
...

wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper"
wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types"
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
)

type Keeper struct
...

WasmKeeper *wasmkeeper.Keeper
ContractKeeper wasmtypes.ContractOpsKeeper
StakingKeeper *stakingkeeper.Keeper
}

func NewKeeper(
...
wasmKeeper *wasmkeeper.Keeper, // since wasm may not be created yet.
stakingKeeper *stakingkeeper.Keeper,
authority string,
) Keeper {
...

k := Keeper{
...

WasmKeeper: wasmKeeper,
ContractKeeper: wasmkeeper.NewDefaultPermissionKeeper(wasmKeeper),
StakingKeeper: stakingKeeper,

authority: authority,
}
}
+

'Fix' keeper_test

+
Warning

Testing wasm requires significantly more setup for the test environment. For now, just add a blank reference here.

+
x/reviews/keeper/keeper_test.go
func SetupTest(t *testing.T) *testFixture
...

// Setup Keeper.
f.k = keeper.NewKeeper(encCfg.Codec, storeService, logger, &wasmkeeper.Keeper{}, f.stakingKeeper, f.govModAddr)
}
+

Dependency Inject (v2)

+

Similar to the keeper_test issue, CosmWasm does not have support for Cosmos-SDK v2 depinject. This will be updated in the future. For now, set the keeper to nil and provide Staking reference. You do not need to know what this does. Just resolve the error on the line with a copy paste.

+
x/reviews/depinject.go
func ProvideModule(in ModuleInputs) ModuleOutputs {
...

k := keeper.NewKeeper(in.Cdc, in.StoreService, log.NewLogger(os.Stderr), nil, &in.StakingKeeper, govAddr)
}
+

Fix app.go references

+

The main application needs the access to the wasm and staking logic as well. Fix the missing imports and add them in like so.

+
app/app.go
	app.ReviewsKeeper = reviewskeeper.NewKeeper(
appCodec,
runtime.NewKVStoreService(keys[reviewstypes.StoreKey]),
logger,
&app.WasmKeeper,
app.StakingKeeper,
authtypes.NewModuleAddress(govtypes.ModuleName).String(),
)
+

it is now time to use these modules and write the logic to pass data to the contract from the chain.

+

Module Core Logic

+

The CosmWasm contract requires data in a specific format. You can review this back in the src/state.rs file. Since the chain only is passing validator data over, we need to convert this into Go code manually. The Validator struct is created to match the contract. The CosmWasm contract expects a JSON formatted input. This input is put together with the Formatted method on a list of validators. The chain could have just 1 validator, or several hundred. This method will convert them all into the correct format for the list we are to pass.

+
x/reviews/module.go
// Add this below AppModule struct {

type Validator struct {
Address string `json:"address"`
Moniker string `json:"moniker"`
}

type Validators []Validator

func (vs Validators) Formatted() string {
output := ""
for _, val := range vs {
output += fmt.Sprintf(`{"address":"%s","moniker":"%s"},`, val.Address, val.Moniker)
}

// remove the trailing comma from the last output append.
return output[:len(output)-1]
}
+

Implement the EndBlocker

+

To pass data we must first get the data. Using the GetAllValidators method from the staking module, all validators are now accessible for the logic to use. Loop through these validators and only add the ones that are bonded (active) to the list of validators. If they are bonded, they are added to the list.

+

Once all validators have been processed the endBlockSudoMsg gets them into the JSON format required. The format is out of scope but a high level overview

+
    +
  • SetValidators in the code becomes set_validators, called snake case.
  • +
  • The SetValidators type in rust has the element called validators which is an array of Validator objects. This is the validators array in the JSON.
  • +
  • Each Validator object has an address and moniker field. These are the address and moniker fields in the JSON, called from the Formatted() method.
  • +
+
x/reviews/module.go
// Paste this anywhere within the file
func (am AppModule) EndBlock(ctx context.Context) error {
stakingVals, err := am.keeper.StakingKeeper.GetAllValidators(ctx)
if err != nil {
return err
}

validators := Validators{}
for _, val := range stakingVals {
// if it is not active, skip it
if !val.IsBonded() {
continue
}

validators = append(validators, Validator{
Address: val.OperatorAddress,
Moniker: val.Description.Moniker,
})
}

// The first contract created from acc0
addr := "roll14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjczpjh"
contract := sdk.MustAccAddressFromBech32(addr)

// SudoMsg format for the contract input.
// example: {"set_validators":{"validators":[{"address":"ADDRESS","moniker": "NAME"}]}}
endBlockSudoMsg := fmt.Sprintf(`{"set_validators":{"validators":[%s]}}`, validators.Formatted())
fmt.Println("EndBlockSudoMessage Format:", endBlockSudoMsg)

// When the network first starts up there is no contract to execute against (until uploaded)
// This returns an error but is expected behavior initially.
// You can not return errors in the EndBlocker as it is not a transaction. It will halt the network.
//
// This is why the error is only printed to the logs and not returned.
//
// A more proper solution would set the contract via a SDK message after it is uploaded.
// This is out of scope for this tutorial, but a future challenge for you.
res, err := am.keeper.ContractKeeper.Sudo(sdk.UnwrapSDKContext(ctx), contract, []byte(endBlockSudoMsg))
if err != nil {
fmt.Println("EndBlockSudoResult", res)
fmt.Println("EndBlockSudoError", err)
}

return nil
}
+

Test Deployment

+

Start Testnet

+

Begin the CosmWasm testnet with the custom EndBlocker logic. You will see errors every block. This is expected and is explained in the EndBlock code why this is the case.

+
make sh-testnet
+

Upload Contract

+

Make sure you are in the rollchain directory to begin interacting and uploading the contract to the chain.

+
CONTRACT_SOURCE=./validator-reviews-contract/artifacts/validator_reviews_contract.wasm
rolld tx wasm store $CONTRACT_SOURCE --from=acc0 --gas=auto --gas-adjustment=2.0 --yes
# rolld q wasm list-code
+

Instantiate our Contract

+
rolld tx wasm instantiate 1 '{}' --no-admin --from=acc0 --label="reviews" \
--gas=auto --gas-adjustment=2.0 --yes

rolld q wasm list-contracts-by-creator roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87

REVIEWS_CONTRACT=roll14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjczpjh
+

Verify data

+
rolld q wasm state smart $REVIEWS_CONTRACT '{"validators":{}}'
+

Write a review

+
MESSAGE='{"write_review":{"val_addr":"rollvaloper1hj5fveer5cjtn4wd6wstzugjfdxzl0xpmhf3p6","review":"hi reviewing."}}'
rolld tx wasm execute $REVIEWS_CONTRACT "$MESSAGE" --from=acc0 \
--gas=auto --gas-adjustment=2.0 --yes
+

Verify the review

+
rolld q wasm state smart $REVIEWS_CONTRACT '{"reviews":{"address":"rollvaloper1hj5fveer5cjtn4wd6wstzugjfdxzl0xpmhf3p6"}}'
+

Write a review for a non-validator

+
MESSAGE='{"write_review":{"val_addr":"NotAValidator","review":"hi this is a review"}}'

rolld tx wasm execute $REVIEWS_CONTRACT "$MESSAGE" --from=acc0 \
--gas=auto --gas-adjustment=2.0 --yes
+ + + \ No newline at end of file diff --git a/v0.50/demo/ibc/index.html b/v0.50/demo/ibc/index.html new file mode 100644 index 00000000..38da6e24 --- /dev/null +++ b/v0.50/demo/ibc/index.html @@ -0,0 +1,48 @@ + + + + + +IBC Transfers | Spawn + + + + + + + +
Version: v0.50.x

IBC Demo

+

In this tutorial, we'll create and interact with a new Cosmos-SDK blockchain called "rollchain", with the token denomination "uroll". This chain has tokenfactory and Proof of Authority, but we'll disable cosmwasm.

+

Prerequisites

+ +

Create your chain

+

Create your chain using the spawn command line tool. Change the GITHUB_USERNAME to your github username. +If you do not have a github, leaving it as default is fine.

+

Create a Proof of Authority network to focus on the application logic rather than worry about the security model. This is a great starting point for new chains.

+
GITHUB_USERNAME=rollchains

# If the `--consensus` or `--disabled` flags are not present,
# a selector UI will appear in your terminal to see all options.
spawn new rollchain \
--consensus=proof-of-authority \
--bech32=roll \
--denom=uroll \
--bin=rolld \
--disabled=cosmwasm,block-explorer \
--org=${GITHUB_USERNAME}
+
+

NOTE: spawn creates a ready to use repository complete with git and GitHub CI. It can be quickly pushed to a new repository getting you and your team up and running quickly.

+
+

Spin up an IBC testnet

+

The chains/testnet.json file contains the configuration for the testnet. It is a simple JSON file that contains the chain configurations for the testnet. By default it starts 2 networks, configures a relayer, and connects the two chains via IBC.

+
cd rollchain

# Starts 2 networks for the IBC testnet at http://127.0.0.1:8080.
# - Builds the docker image of your chain
# - Launches a testnet with IBC automatically connected and relayed
#
# Note: you can run a single node, non IBC testnet, with `make sh-testnet`.
make testnet
+

Send a Transaction

+
# list the keys that have been provisioned with funds at launch
rolld keys list

# send a transaction from one account to another
rolld tx bank send acc0 $(rolld keys show acc1 -a) 1337uroll --chain-id=localchain-1

# enter "y" to confirm the transaction
# then query your balances for proof the transaction executed successfully
rolld q bank balances $(rolld keys show acc1 -a)
+

Send an IBC transaction

+
# submit a cross chain transfer from acc0 to the other address
rolld tx ibc-transfer transfer transfer channel-0 cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr 7uroll --from=acc0 --chain-id=localchain-1 --yes

# Query the other side to confirm it went through
sleep 10

# Interact with the other chain without having to install the cosmos binary
# - Endpoints found at: GET http://127.0.0.1:8080/info
# - make get-localic
local-ic interact localcosmos-1 query 'bank balances cosmos1hj5fveer5cjtn4wd6wstzugjfdxzl0xpxvjjvr'
+

(optional) Push to GitHub

+
# Create a new repository on GitHub from the gh cli
gh repo create rollchain --source=. --remote=upstream --push --private
+
+

You can also push it the old fashioned way with https://github.com/new

+
+

Conclusion

+

In this tutorial, you configured a new custom chain, launched a testnet for it, tested a cross chain token transfer, and confirmed it was successful. This tutorial demonstrates just how easy it is to create a brand new custom Cosmos-SDK blockchain from scratch with spawn.

+ + + \ No newline at end of file diff --git a/v0.50/demo/tokenfactory/index.html b/v0.50/demo/tokenfactory/index.html new file mode 100644 index 00000000..010dc99e --- /dev/null +++ b/v0.50/demo/tokenfactory/index.html @@ -0,0 +1,67 @@ + + + + + +Token Factory | Spawn + + + + + + + +
Version: v0.50.x

Tokenfactory

+

You will build a new chain with TokenFactory, enabling any account to create, transfer, and interact with fractionalized native tokens.

+
Warning

Some parts of this tutorial will not have the added context about spawn's inner workings or how commands work. Run through Build Your Application for this context.

+

Prerequisites

+ +

Create your chain

+

Build a new chain that has TokenFactory configured. By default, it is enabled.

+
GITHUB_USERNAME=rollchains

spawn new rollchain \
--consensus=proof-of-stake \
--bech32=roll \
--denom=uroll \
--bin=rolld \
--disabled=cosmwasm,block-explorer \
--org=${GITHUB_USERNAME}
+

Start the testnet

+
Note

If make sh-testnet does not start due to a port bind error, you can kill your previously running testnet with killall -9 rolld, then try again.

+
# move into the chain directory
cd rollchain

# - Installs the binary
# - Setups the default keys with funds
# - Starts the chain in your shell
make sh-testnet
+

Confirm tokenfactory is enabled

+
rolld q tokenfactory params
+
params output

The denom_creation_fee is a cost the application can set for creating new tokens by default, there is no cost.

The denom_creation_gas_consume is the amount of indirect resource cost to consume for creating a new token. +It is a more indirect approach to charging and is a better experience overall for developers on a network.

params:
denom_creation_fee: []
denom_creation_gas_consume: "100000"
+

Create a token

+
# Create a denom (native token)
# - gas is is amount of compute resources to allocate.
rolld tx tokenfactory create-denom mytoken --from=acc0 --chain-id=localchain-1 --yes
+

Verify the token was created

+
# Get our account address for the acc0 wallet / key.
# acc0 is roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87
rolld q tokenfactory denoms-from-creator $(rolld keys show acc0 -a)
+
denoms-from-creator output
denoms:
- factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken
+

The output shows a denom with the named factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken

+
Note

Why did it add extra data to the token?

Imagine there are 2 people, both named John. If only the name John is used, which John is it talking about? More information must be added to the name to make it unique. This is the same concept, but with tokens. The extra data is added to ensure the token is unique while it can still contain the same base name. With tokenfactory, the creators name is placed in the token. Read more about naming collisions.

+

Modify token metadata

+

Clients (websites, frontends, users) may wish to see more information about the token. This is where metadata comes in. You can add a ticker symbol, description, and decimal places to the token.

+

The Interchain uses 6 decimal places as the default standard. This process of expressing fractions of a value in whole numbers is called fixed-point arithmetic and is used for financial precision. This means that 1 token is really 1,000,000 (10^6) of these micro base tokens. If I want to send you 0.5 of a token, I really send you 500,000 of these micro base tokens on the backend.

+
# 'Denom' is short for denomination.
DENOM=factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken
DESCRIPTION="My token description"

rolld tx tokenfactory modify-metadata $DENOM MYTOKEN "$DESCRIPTION" 6 --from acc0 --yes
+

Verify the token metadata

+
rolld q bank denom-metadata $DENOM
+
bank denom-metadata output
metadata:
base: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken
denom_units:
- aliases:
- MYTOKEN
denom: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken
- aliases:
- factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken
denom: MYTOKEN
exponent: 6
description: My token description
display: MYTOKEN
name: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken
symbol: MYTOKEN
+

Create new tokens to transfer

+

The base token structure is created, but no tokens actually exists yet. Mint new tokens to then be able to transfer them between accounts.

+
# Mint 5,000,000 micro mytoken. By default this goes to the token creator.
rolld tx tokenfactory mint 5000000$DENOM --from acc0 --yes

# Verify token creator balance: roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87
rolld q bank balances $(rolld keys show acc0 -a)
+
bank balances output
balances:
- amount: "5000000"
denom: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken
- amount: "900"
denom: test
- amount: "9000000"
denom: uroll
pagination:
total: "3"
+

Create new tokens for another account

+

While you could mint tokens followed by a manual tx bank send transfer, you can also mint-to another account directly.

+
# Mint 1,000,000 to another account
rolld tx tokenfactory mint-to $(rolld keys show acc1 -a) 1000000$DENOM --from acc0 --yes

rolld q bank balances $(rolld keys show acc1 -a)
+
mint-to output
balances:
- amount: "1000000"
denom: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken
- amount: "800"
denom: test
- amount: "10000000"
denom: uroll
pagination:
total: "3"

note, you can check for just a specific token balance with

rolld q bank balance $(rolld keys show acc0 -a) $DENOM
balance:
amount: "5000000"
denom: factory/roll1hj5fveer5cjtn4wd6wstzugjfdxzl0xpg2te87/mytoken
+

Transfer tokens

+

Now with tokens minted, either user can transfer them as they please between any accounts. Even ones that do not yet have any tokens.

+
# Send 7 base micro tokens from acc0 to acc1
rolld tx bank send acc0 $(rolld keys show acc1 -a) 7$DENOM --from acc0 --yes

# Verify the 7 base tokens sent and has increased to 1000007, or 1.000007
rolld q bank balances $(rolld keys show acc1 -a)
+

Burn tokens

+

If you wish to remove tokens from the system, you can burn them from the admin account.

+
# Burn micro tokens from account
rolld tx tokenfactory burn 123$DENOM --from acc0 --yes

# Verify the tokens have been reduced
rolld q bank balances $(rolld keys show acc0 -a)
+

Conclusion

+

In this tutorial, you built a new chain with the TokenFactory feature, launched a testnet for it, and created a new native token. You minted tokens, transferred them between accounts, and burned them. These tokens could be kept internally for some personal or application based accounting, or transferred to other chains via IBC. This is showcased in the IBC Transfer Demo.

+ + + \ No newline at end of file diff --git a/v0.50/index.html b/v0.50/index.html new file mode 100644 index 00000000..5dde4988 --- /dev/null +++ b/v0.50/index.html @@ -0,0 +1,104 @@ + + + + + +Meet Spawn | Spawn + + + + + + + +
Version: v0.50.x

Meet Spawn

Spawn is the easiest way to build, maintain and scale a Cosmos SDK blockchain. Spawn solves all the key pain points engineers face when building new Cosmos-SDK networks.

+
    +
  • Tailor-fit: Pick and choose modules to create a network for your needs.
  • +
  • Commonality: Use native Cosmos tools and standards you're already familiar with.
  • +
  • Integrations: Github actions and end-to-end testing are configured right from the start.
  • +
  • Iteration: Quickly test between your new chain and established networks like the local Cosmos-Hub devnet.
  • +
+

NameService Demo

+

Follow Along with the NameService demo

+ +

Testimonials

+
+

"Spawn is a marked transformation in CosmosSDK protocol development, allowing scaffolding and upgrading from 0.47 to 0.50 to be achievable and understandable. Without the tool, this would have been a dedicated multi-month effort" - Ash, Burnt.com

+
+
+

"Spawn has truly streamlined the developer onboarding process into the Cosmos ecosystem, seamless and efficient." - Anil VitWit

+
+
+

Spawn Overview

+

Setting up a new blockchain used to take at least a week, requiring manual edits, debugging, and configuring tests. Now, with Spawn, you can create a custom network in just a few clicks. It generates a personalized network tailored to your project, letting you focus on writing product logic. The modular approach allows you to include or remove features, so you can start building quickly without the hassle of setting up everything from scratch. Spawn simplifies the process, especially for new developers, by removing guesswork and speeding up the setup.

+

New Development

+

Get started building using the new-chain command. Spawn will guide you through the process of selecting the modules you need and configuring your new chain. Using --help will showcase examples and other options you may want to consider for your new network.

+
spawn new mychain --help
+
Create a new project

Usage:
spawn new-chain [project-name] [flags]

Aliases:
new-chain, new, init, create

Flags:
-b, --binary string Application binary name (default "simd")
--bypass-prompt Bypass UI prompter
--denom string Bank token denomination (default "token")
--org string Github organization name (default "rollchains")
--skip-git No git repository created
--wallet-prefix string Users wallet namespace (default "cosmos")
+

Security Selection

+

You can read about different security models in the Consensus Security section. If you don't know which to select, use proof of authority.

+
spawn new mychain
+

After running the new command, navigate with your arrow keys and press 'enter' to select the module you want to use. You can only use 1 from this consensus list. Then select done.

+
Consensus Selector (( enter to toggle ))
Done
✔ proof-of-authority
proof-of-stake
interchain-security
+

Feature Selection

+

You now select which features you want to include in your base application. Usually you would have to do these manually, each taking about 15 minutes to integrate. With spawn, you select them right away. It automatically configures them and give you testing for the assurance it works.

+

An information guide will be displayed for each feature at the bottom of the UI, sharing information about what the feature does. Select the following then press 'enter' on done to continue.

+
Feature Selector (( enter to toggle ))
Done
✔ tokenfactory
✔ ibc-packetforward
✔ ibc-ratelimit
cosmwasm
wasm-light-client
✔ optimistic-execution
✔ block-explorer
tokenfactory: Native token minting, sending, and burning on the chain
+

Just like that, an entire network is generated. Everything you need to get started and more! Let's dive in.

+

Structure

+

Opening up this newly generated mychain/ gives you a general view into the entire layout.

+
ls -laG
.github/
app/
chains/
cmd/
contrib/
explorer/
interchaintest/
proto/
scripts/

.gitignore
.goreleaser.yaml
chain_metadata.json
chain_registry_assets.json
chain_registry.json
chains.yaml
docker-compose.yml
Dockerfile
go.mod
go.sum
Makefile
README.md
+

.github/

+

This directory contains all the workflow actions for native github integration out of the box. It handles

+
    +
  • Integration & Unit tests for every code change
  • +
  • Docker images saved to ghcr on a new version tag
  • +
  • Public cloud or private hosted testnets
  • +
  • App binary releases
  • +
  • PR title formatting
  • +
  • Markdown file valid link reviews
  • +
+

app/

+

App is the main location for all of the application connection logic.

+
    +
  • decorators/ - Initial logic as new transactions are received. Used to override input data, block requests, or add additional logic before the action begins initial processing.
  • +
  • upgrades/ - You have to run an upgrade when you add or remove logic and nodes are already running different logic. This is where you put the upgrade information and state migrations.
  • +
  • ante.go - The decorators for the entire network, wired together.
  • +
  • app.go - The entire application connected and given access to the cosmos-sdk. The brain of the program.
  • +
  • upgrades.go - Registers the upgrades/ folder logic when one is pending processing.
  • +
+

chains/

+

The chains/ directory is where the local and public testnet configuration files are placed. Reference the testnets section for more information

+

cmd/

+

The cmd/ directory is the entry point for the wiring connections and is where the main.go file is located. This is where the application is started and the chain is initialized when you run the binary. By default, simd is the binary name and is saved to your $GOPATH (/home/user/go/bin/).

+

explorer/

+

If you enabled the explorer in the feature selection, this is where the ping.pub explorer files are located. When running a testnet with make sh-testnet or make testnet, you can launch the explorer along side the chain to view activity in real time. Blocks, transactions, uptime, connections, and more are all viewable. Easily launch it with the docker compose up command in the root of the directory.

+

interchaintest/

+

Interchaintest is a generalized integration test environment for the Interchain and beyond. It supports Cosmos, Ethereum, UTXO (Bitcoin), and other chain types. By default you will see many test like ibc_test.go, ibc_rate_limit_test.go and tokenfactory_test.go after generation. Any features you select are placed here automatically to confirm your network is working as expected. This are run with the github action automatically on every code change or you can run them manually with make local-image && make ictest-*, where the * is the testname (ictest-ibc, ictest-tokenfactory, etc).

+

proto/

+

Proto, also called protocol buffers, are a generalized way to define the structure of data. Discussed this more in the Modules sub section.

+

scripts/

+

Scripts automate some more complex requirements list setting up a fast testnet or generating code on the fly. You should not need to modify anything here until you are more advanced. These are shown in the make help command to abstract away complexity.

+

chain_metadata.json

+

A cosmetic file showcasing a format for the network. Fill in the data here once you push to the public so developers can easily see what your network is about. This is required for ICS consumer networks. If you do not use ICS, you can delete this file if you wish.

+

chain_registry.json & assets

+

These files are the format needed to upload to https://cosmos.directory/ (github). Frontends use this data to connect to the network, especially in the local-interchain testnet tool.

+

Modules

+

We're all here to build new logic on top. The SDK calls these modules, or extensions, x/ for short. To make this easy spawn has a build in generator for a module.

+
spawn module new --help
+
Usage:
spawn module new [name] [flags]

Aliases:
new, c, create

Examples:
spawn module new mymodule [--ibc-module]

Flags:
--ibc-middleware Set the module as an IBC Middleware
--ibc-module Set the module as an IBC Module
+

All you need to have is the name you wish to call it, and if you want standard or an IBC module. IBC enables cross network communication of the logic. This is a powerful feature that allows you to build a network of networks. You can try this out with the IBC module demo demo.

+

For now, just create a default module called example

+
spawn module new example
+
🎉 New Module 'example' generated!
🏅 Commands:
- $ make proto-gen # convert proto files into code
+

This created a new x/example module and the proto/ files in the expected structure. genesis.proto contains the data saved and more hardcoded. query.proto is how you allow external actors to grab data from the network and tx.proto is how you allow external actors to send data to the network. Spawn also connects it to the application if you look through your app/app.go.

+

Learn how to make a new module with the Name Service guide.

+

Testnets

+

This uses the local-interchain format and supports JSON or YAML. By default, 2 IBC network defaults are included. self-ibc and testnet. Run the testnet with make testnet to automatically build, setup, and launch a complex network simply.

+

Self IBC is really only useful if you are building IBC Modules. Follow that guide to see how to use it.

+ + + \ No newline at end of file diff --git a/v0.50/install/debugging/index.html b/v0.50/install/debugging/index.html new file mode 100644 index 00000000..0303f3e1 --- /dev/null +++ b/v0.50/install/debugging/index.html @@ -0,0 +1,56 @@ + + + + + +Debugging | Spawn + + + + + + + +
Version: v0.50.x

Debugging

This section will contain common setup problems and how to resolve them.

+

Golang

+

/bin/sh: 1: go: not found

+

Just add the following lines to ~/.bashrc (or ~/.zshrc if MacOs) and this will persist. Source +If you run the above in your terminal, it will apply to the current session but not on new terminal sessions.

+
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
+

Then apply it with source ~/.bashrc or source ~/.zshrc

+

build constraints excluded all Go files in /usr/local/go/ ...

+

Your Go install is not properly setup. Follow the install instructions above or install directly from source with go.dev.

+

make: heighliner: Permission denied

+
make get-heighliner
chmod +x $(which heighliner)
+

If the above does not work, your user or directory permissions may not be setup. Or your ls -la $(go env GOPATH)/bin path is to a bad.

+

If using WSL, try https://superuser.com/questions/1352207/windows-wsl-ubuntu-sees-wrong-permissions-on-files-in-mounted-disk.

+
+

Windows / WSL

+

make: /mnt/c/Program: No such file or directory

+

Delete your GOMODCACHE directory: go clean -modcache or run the direct command rm -rf $(go env GOMODCACHE).

+
+

Docker

+

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.

+

Start the docker daemon. Run docker engine or systemctl start docker && systemctl enable docker for Linux.

+

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

+

You don't have permissions to interact with the Docker daemon.

+
    +
  1. +

    Install properly with https://docs.docker.com/get-started/get-docker/

    +
  2. +
  3. +
+
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

reboot # if you still get the error
+

Technically you can also sudo chmod 666 /var/run/docker.sock but this is NOT advised. -->

+

Generation

+

remote: Repository not found. fatal: reposity not found

+

This error is due to not having properly make proto-gened the project. View the Application section for the solution.

+

Application

+

Running the binary gives me panic: reflect: New(nil)

+

The make proto-gen command was either not run, or is causing issues. This could be due to your users permissions or the filesystem. By default, the protoc docker image uses your current users id and group. Try switching as a super user (i.e. su -) or fixing your permissions. A very ugly hack is to run chmod a+rwx -R ./rollchain where ./rollchain is the project you generated. This will cause git to change all files, but it does fix it. Unsure of the long term side effects that may come up from this.

+ + + \ No newline at end of file diff --git a/v0.50/install/install-spawn/index.html b/v0.50/install/install-spawn/index.html new file mode 100644 index 00000000..bf93c378 --- /dev/null +++ b/v0.50/install/install-spawn/index.html @@ -0,0 +1,24 @@ + + + + + +Install Spawn | Spawn + + + + + + + +
Version: v0.50.x

Overview

+
Synopsis

Install the Spawn CLI tool to your local machine

+

Install Spawn

+

Install Spawn from source.

+
# Install from latest source
git clone https://github.com/rollchains/spawn.git --depth 1 --branch v0.50.8

# Change to this directory
cd spawn

# Clear Go modules cache for a fresh install
go clean -modcache

# Install Spawn
make install

# Install Local Interchain (testnet runner)
make get-localic

# Verify installations were successful
spawn

local-ic

# If you get "command 'spawn' not found", run the following
# Linux / Windows / Some MacOS
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.bashrc
source ~/.bashrc

# MacOS
echo 'export PATH=$PATH:$(go env GOPATH)/bin' >> ~/.zshrc
source ~/.zshrc

# Legacy MacOS Go
echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.zshrc
source ~/.zshrc

# Sometimes it can be good to also clear your cache
# especially WSL users
go clean -cache
+ + + \ No newline at end of file diff --git a/v0.50/install/system-setup/index.html b/v0.50/install/system-setup/index.html new file mode 100644 index 00000000..3b6f7e8c --- /dev/null +++ b/v0.50/install/system-setup/index.html @@ -0,0 +1,39 @@ + + + + + +Setup Development Environment | Spawn + + + + + + + +
Version: v0.50.x

Overview

+
Synopsis

Setup your development environment with the essentials to get started building the blockchain.

+

System Requirements

+

Before you can install and interact with spawn, you must have the following core tools installed:

+ +

If you do not have these components installed, follow the instructions below to install them.

+

Windows

+
# Install WSL in powershell
wsl --install
Restart-Computer

# Setup WSL Ubuntu Image
wsl.exe --install Ubuntu-24.04

# Open wsl instance
wsl

# update and add snap if not already installed
sudo apt update && sudo apt install snapd

# Install Go (Snap)
sudo snap install go --channel=1.23/stable --classic

# Install Base
sudo apt install make gcc git jq wget

# Install github-cli
sudo snap install gh

# Install docker
https://docs.docker.com/desktop/wsl/#turn-on-docker-desktop-wsl-2
# or snap:
sudo snap install docker

# Fix versioning for interaction of commands
sudo chmod 666 /var/run/docker.sock

# Setup base git config
git config --global user.email "yourEmail@gmail.com"
git config --global user.name "Your Name"
+

MacOS

+
# Base
brew install make
brew install gcc
brew install wget
brew install jq

# Github CLI - https://github.com/cli/cli
brew install gh
gh auth login

# Golang
brew install go

# Docker
brew install --cask docker
open -a Docker # start docker desktop
# settings -> General -> Start Docker Desktop when you sign in to your computer
# Apply & Restart

# Setup base git config
git config --global user.email "yourEmail@gmail.com"
git config --global user.name "Your Name"
+

Linux (Ubuntu)

+
# Base
sudo apt install make gcc git jq wget

# (optional) Github CLI - https://github.com/cli/cli
curl -sS https://webi.sh/gh | sh
gh auth login

# Golang
GO_VERSION=1.23.0
wget https://go.dev/dl/go$GO_VERSION.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go$GO_VERSION.linux-amd64.tar.gz

# Docker
sudo apt -y install docker.io

# Setup base git config
git config --global user.email "yourEmail@gmail.com"
git config --global user.name "Your Name"
+

CosmWasm

+

Some tutorials require CosmWasm (Rust smart contracts) setup. This section is option, unless a tutorial is CosmWasm focused. +CosmWasm requires Rust. You must have this installed as the contract will be built locally.

+
# Install rust - https://www.rust-lang.org/tools/install
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# or Update if you have it
rustup update

# Install other dependencies
rustup target add wasm32-unknown-unknown

cargo install cargo-generate --features vendored-openssl
cargo install cargo-run-script
+ + + \ No newline at end of file diff --git a/v0.50/learn/consensus-security/index.html b/v0.50/learn/consensus-security/index.html new file mode 100644 index 00000000..e15dd0d1 --- /dev/null +++ b/v0.50/learn/consensus-security/index.html @@ -0,0 +1,105 @@ + + + + + +Network Security | Spawn + + + + + + + +
Version: v0.50.x

Network Security Types

+

Prerequisites

+ +

Learn about the different network security methods you can create with spawn and the different pros and cons of each. These are called consensus algorithms and are how the network agrees on what actions get put through, and which are rejected.

+
Danger

This topic is a little more advanced due to technical speak. It is condensed to as a high level of an overview as possible. Please contribute if you can make it more accessible to average readers.

+

Choose for me (TLDR)

+

If you just want to build an application and don't want to focus on tokenomics or game theory, use proof of authority. If a token is part of your product or required to financially reward users with some lock mechanism and long term incentives, use proof of stake. If you have plans for a large amount of value to be secured or don't want to run your own network nodes, use interchain security.

+

Proof of Authority (PoA)

+

Default

+

If you do not know which security module best fits for you, use this one. The source code for this feature can be found here. The most popular example of this security model is Circle's USDC issuance network, Noble (twitter).

+

What it does

+

If you have an application and you want the network to run as efficiently as possible with a trusted set of internal nodes or external trusted 3 parties (validators), use Proof of Authority.

+

Create a PoA network

+

To create a new network with proof-of-authority, use the --consensus=proof-of-authority flag. If --consensus is not present, a selector UI will appear in your terminal to see all options.

+
-> $ spawn new mychain
Consensus Selector (( enter to toggle ))
Done
✔ proof-of-authority
proof-of-stake
interchain-security
+
spawn new rollchain \
--consensus=proof-of-authority \
--disabled=cosmwasm,block-explorer
+

Considerations

+

Benefits

+
    +
  • Fast Transactions: Fewer people need to agree, so it can process transactions very quickly.
  • +
  • Less Power Usage: Doesn’t require much electricity, making it more eco-friendly.
  • +
  • Easy to Maintain: Only a few trusted people are in charge, making it simpler to run.
  • +
  • Stable Performance: Because only a few people make decisions, things tend to run smoothly and predictably.
  • +
+

Downsides

+
    +
  • Centralized Control: A small group of people are in charge, which can lead to concerns about too much power in one place.
  • +
  • Requires Trust: You have to trust the people in charge to make fair decisions, which can be risky.
  • +
  • Less Diversity: Having fewer people in control means less variety in opinions and locations, which might be a problem if those people get compromised.
  • +
  • Less Community Involvement: Regular users don’t have much of a role in helping the system, so it feels less like a community effort.
  • +
+

Proof of Stake (PoS)

+

What it does

+

You can have the value of a network back itself by users risking their own tokens to prove they are trustworthy. This is called Proof of Stake. Believers in an application lock their tokens to earn a small portion of rewards, similar to a bank account. However, if they misbehave by trying to cheat the system or submit bad actions, the network will take a portion of their value (usually 5 - 10%) as a penalty.

+

This security type is useful when you want a more distributed network that can be run by anyone with some holdings in the network. It is a trustless way to secure a network and the most popular security model in the ecosystem currently (Sept 2024).

+

Create a PoS network

+

To create a new network with proof-of-stake, use the --consensus=proof-of-stake flag. If --consensus is not present, a selector UI will appear in your terminal to see all options.

+
-> $ spawn new mychain
Consensus Selector (( enter to toggle ))
Done
proof-of-authority
✔ proof-of-stake
interchain-security
+
spawn new rollchain \
--consensus=proof-of-stake \
--disabled=cosmwasm,block-explorer
+

Considerations

+

Benefits

+
    +
  • More People Involved: Anyone can participate if they’re willing to invest, which makes the system feel more balanced and community-driven.
  • +
  • Eco-Friendly: Like PoA, PoS doesn’t use much electricity, making it good for the environment.
  • +
  • More Fairness: The system allows many people to help make decisions, reducing the chance of one group having too much control.
  • +
  • Grows with the Community: More people can get involved as the system grows, making it scalable and inclusive.
  • +
+

Downsides

+
    +
  • Slower Decision Making: Because more people are involved, it can take longer to reach a decision due to governance and politics
  • +
  • Wealthy Have More Power: The more you invest, the more influence you have, which can lead to rich people having more control.
  • +
  • Complex to Get Started: It can be harder for someone new to understand how to participate compared to systems with fewer decision-makers.
  • +
  • Risk of Losing Investment: If you make a mistake or act dishonestly, you could lose your money, which adds some financial risk.
  • +
+

Interchain Security (ICS)

+

What it does

+

Interchain security shares the economic proof of stake security of a larger parent provider with a sub network, called a consumer (since they consume security). This is useful when you want to create a new network that is secure from day one, without having to bootstrap a new set of network operators and validators, and have alignment with the parent. Current networks utilizing this are CosmosHub, Stride, and Lido's Neutron. If you are from ethereum, this is similar to an Actively Validated Services (AVS) on Eigenlayer.

+

The cost of running these networks is relatively low as you just pay a portion of your networks fees. This is a great way to take an application from a testnet to a mainnet with a trusted security model, especially if your application deals with a lot of possible monetary value. To compromise the network, an attacker would have to compromise the more secure parent network, which is a very high bar.

+

Create an ICS Consumer network

+

To create a new network with interchain-security, use the --consensus=interchain-security flag. If --consensus is not present, a selector UI will appear in your terminal to see all options.

+

::note Note +Spawn does not support creating provider networks. +:::

+
-> $ spawn new mychain
Consensus Selector (( enter to toggle ))
Done
proof-of-authority
proof-of-stake
✔ interchain-security
+
spawn new rollchain \
--consensus=interchain-security \
--disabled=cosmwasm,block-explorer
+

Considerations

+

Benefits

+
    +
  • No Need for Consumer Chain to Build Its Own Security: The smaller or newer chain doesn't have to recruit its own set of people to protect it. It automatically benefits from the protection of the parent network, saving time and effort.
  • +
  • Easier Node Bootstrapping: Since the parent network provides the security, the consumer chain doesn’t have to build a large number of participants to protect the system from scratch. This makes launching a new chain much faster and easier.
  • +
  • Shared Trust: By using the same security as a well-known, established chain, the consumer chain inherits the trust and credibility of the parent network, making it more appealing to users and developers.
  • +
  • Aligned Interests: Since the parent network's security also protects the consumer chain, both chains have an interest in maintaining a secure, well-functioning system. This alignment reduces the risk of conflicts between the two.
  • +
+

Downsides

+
    +
  • Dependence on Parent Network: The consumer chain becomes dependent on the parent network. If something goes wrong with the parent network’s security or operations, the consumer chain is also affected, even if it is unrelated to the issue.
  • +
  • Limited Autonomy: The consumer chain may have less control over its own security decisions, since it’s tied to the security model of the parent network. This could limit flexibility in responding to specific needs or changes.
  • +
  • Potential Congestion: If many consumer chains share the same parent network, the shared security system might become congested or stretched thin, leading to slower response times or performance issues.
  • +
  • Complexity in Governance: Any changes to the shared security might require coordination between both the parent network and the consumer chain, adding complexity to decision-making and governance.
  • +
  • Risk of Centralization: The reliance on a single parent network’s security model might lead to centralization, where a handful of large chains dominate the ecosystem. This reduces the diversity of security models and could concentrate power.
  • +
+

Conclusion

+

You have now learned about different network security types, how to select different ones, and the pros and cons of each. You can now create a new chain with the security model that best fits your application's needs.

+ + + \ No newline at end of file